2016-04-28 15 views
0

を反転し、フレームバッファを使用しGPUImageFilterGroupなぜ分からないのですがGPUImageFilterGroup.javaonDraw方法です。フィルタを描画するときに後にも位置に

// GPUImageFilterGroup.java 
public void onDraw(final int textureId, final FloatBuffer cubeBuffer, 
        final FloatBuffer textureBuffer) { 
    runPendingOnDrawTasks(); 
    if (!isInitialized() || mFrameBuffers == null || mFrameBufferTextures == null) { 
     return; 
    } 
    if (mMergedFilters != null) { 
     int size = mMergedFilters.size(); 
     int previousTexture = textureId; 
     for (int i = 0; i < size; i++) { 
      GPUImageFilter filter = mMergedFilters.get(i); 
      boolean isNotLast = i < size - 1; 
      if (isNotLast) { 
       GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, mFrameBuffers[i]); 
       GLES20.glClearColor(1, 0, 0, 0); 
      } 

      if (i == 0) { 
       filter.onDraw(previousTexture, cubeBuffer, textureBuffer); 
      } else if (i == size - 1) { 
       filter.onDraw(previousTexture, mGLCubeBuffer, (size % 2 == 0) ? mGLTextureFlipBuffer : mGLTextureBuffer); 
      } else { 
       filter.onDraw(previousTexture, mGLCubeBuffer, mGLTextureBuffer); 
      } 

      if (isNotLast) { 
       GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, 0); 
       previousTexture = mFrameBufferTextures[i]; 
      } 
     } 
    } 
} 

mGLTextureBufferテクスチャの格納位置。

public static final float TEXTURE_NO_ROTATION[] = { 
     0.0f, 1.0f, 
     1.0f, 1.0f, 
     0.0f, 0.0f, 
     1.0f, 0.0f, 
}; 

mGLTextureFlipBufferは、垂直方向にmGLTextureBufferの逆さまです。

偶数フィルタ奇数フィルタ次のように異なるバッファを使用していますか?

else if (i == size - 1) 
    filter.onDraw(previousTexture, mGLCubeBuffer, (size % 2 == 0) ? mGLTextureFlipBuffer : mGLTextureBuffer); 

答えて

0

あなたがGPUImage.setupCamera()を呼び出すときは、flipHorizontalflipVerticalを通過します。したがって、偶数(または奇数)のフィルタを適用すると、テクスチャは偶数(または奇数)回反転されます。あなたがこれを好きではない場合は、私がそうであるように、これを変更します。

if (i == size - 1) {// the last filter 
     filter.onDraw(previousTexture, mGLCubeBuffer, textureBuffer); 
    } else { 
    //normalTextureBuffer is the not-clipped version of textureBuffer 
     filter.onDraw(previousTexture, mGLCubeBuffer, normalTextureBuffer); 
    } 

を上記のコードを使用して、あなたがのために、グループにので4つのフィルタを一つのフィルタを追加するたびに90度回転されたテクスチャを取得します360度回転(入力テクスチャと同じ回転)のテクスチャ。 mGLCubeBufferおよびtextureBufferは、90度異なる異なる回転を有する。
これは役立ちます。

関連する問題