私はOpen GL ES
でAndroidでいくつかの実験をしようとしています。2つのテクスチャを持つOpenGLシェーダ
私は、2つのテクスチャを指す2つの一様な変数を持つシェーダを作成しようとしています。
:texturenames = new int[2];
GLES20.glGenTextures(2, texturenames, 0);
// Bind texture to texturename
GLES20.glActiveTexture(GLES20.GL_TEXTURE0);
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, texturenames[0]);
GLES20.glActiveTexture(GLES20.GL_TEXTURE1);
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, texturenames[1]);
は次に、このようなシェーダのパラメータとして渡されます:彼らは、次のようにJavaの世界で作成している現在のフレームと、フレーム上に描かれたテクスチャを含むその他を含む一つ
前
int location = GLES20.glGetUniformLocation (ShaderTools.program, "currentTexture");
GLES20.glUniform1i (location, 0);
location = GLES20.glGetUniformLocation (ShaderTools.program, "prevFrameTexture");
GLES20.glUniform1i (location, 1);
これは、フラグメントシェーダの内容である:
precision mediump float;
varying vec2 v_TexCoordinate;
uniform sampler2D currentTexture;
uniform sampler2D prevFrameTexture;
main() {
gl_FragColor = (texture2D(currentTexture, v_TexCoordinate) +
texture2D(prevFrameTexture, v_TexCoordinate))/2;
}
私が達成したいのは、現在のフレームと前のフレームの平均の結果である一種のぼかし効果を作成することです。
prevFrameTexture
をシェーダコードに直接更新することは可能ですか?私はこれを行う方法を見つけませんでした。
代わりに...どのようにこの問題に取り組むべきですか?
currentTexture
の内容をJavaの世界でprevFrameTexture
にコピーする必要がありますか?
はいことが可能である私は、代替的ににTEXTURE0
とTEXTURE1
を描画しようとしたが、それは別のからスワップするglActiveTexture
として機能せず、そのコールバックの内部