2つのFBOと2つのテクスチャが必要です。
シーンを最初のFBO(fbo1)にレンダリングし、テクスチャ(texture1)をシェーダーに送信し、シーンを2番目のFBO(fbo2)にレンダリングします。その後、2番目のテクスチャ(texture2)をシェーダーに送信し、メインFBO(シーンを表示するため)または最初のFBO(別のパスを作成するため)でシーンをレンダリングします。
例 :
1)FBO1でシーンをレンダリングします2)シェーダーにテクスチャ1を送信します3)FBO2で変更されたテクスチャ1をレンダリングします4)シェーダーにテクスチャ2を送信します5)FBO1でテクスチャ2モディファイヤをレンダリングします6)シェーダーにテクスチャ1を送信します、など..。
これは、私が説明しようとしていることを説明するための私のプロジェクトの1つの小さなコードです(ぼかしを入れるため)。
//render the scene to the fbo1
glBindFramebuffer(GL_FRAMEBUFFER, f1);
glClearColor(0.2f, 0.2f, 0.2f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
[self drawWithShader:_programRTT];
//apply horizontal blur the result go in the fbo2
glBindFramebuffer(GL_FRAMEBUFFER, f2);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, t1);
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
[self drawWithShader:_programBH];
//apply vertical blur the result go in the fbo1
glBindFramebuffer(GL_FRAMEBUFFER, f1);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, t2);
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
[self drawWithShader:_programBV];
//return to the main fbo and display result on screen
[view bindDrawable];
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, t1);
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
[self drawWithShader:_program];