2017-01-04 7 views
0

私は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にコピーする必要がありますか?

はいことが可能である私は、代替的ににTEXTURE0TEXTURE1を描画しようとしたが、それは別のからスワップするglActiveTextureとして機能せず、そのコールバックの内部

答えて

0

機能しません。レンダーテクスチャ(RTT)を使用する

FBOをテクスチャとして作成することができます.2つのFBOを作成する必要があります。あなたはRTTテクスチャを持ったら 右後

glGenFramebuffers(1, &fbo[object_id]); 
glBindFramebuffer(GL_FRAMEBUFFER, fbo[object_id]); 

glGenRenderbuffers(1, &rboColor[object_id]); 
glBindRenderbuffer(GL_RENDERBUFFER, rboColor[object_id]); 

下のRTTを作る例は、各フレームバッファ

https://github.com/sunglab/StarEngine/blob/master/renderer/StarFBO.cppをレンダリングすることにより、あなたはこれらを更新することができ、

glGenTextures(1, &texture[texture_id].texture_id); 
glBindTexture(GL_TEXTURE_2D, texture[texture_id].texture_id); 

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, texture_width, texture_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture[texture_id].texture_id, 0); 

以下のコード次のテクスチャを作ります

void StarFBO :: createFBO(...)

https://github.com/sunglab/StarEngine/blob/master/renderer/StarTexture.cpp

無効StarTexture :: createTEXTURE_RTT(...)

関連する問題