openGL es 2.0 と GLSL シェーダーを使用してオフスクリーン レンダリングを使用したい
FBO をセットアップしたところ、2 つの問題を除けば動作しているようです
1) プログラムは約 30 fps で進みますが、突然 20 fps に落ちてから再び 30 fps に戻り、数秒後に再び 20 fps に落ちてから 30 fps に戻ります... (続きが続きます)このランダムな一時停止/遅延の原因がわかりません
2) アプリケーションを閉じると、しばらく応答しません。言い換えれば、クリーンアップするデータや遅延があるようです...そのため、プログラムを閉じると、数秒後まで閉じられません。
私は何か間違ったことをしていますか?とにかく私はこれらを修正できますか?
これが私のコードです:
私の初期化機能:
glGenFramebuffers(1,&frameBuf);
glGenRenderbuffers(1,&renderBuf);
glBindRenderbuffer(GL_RENDERBUFFER,renderBuf);
glRenderbufferStorage(GL_RENDERBUFFER,GL_RGBA4,640,480);
glBindRenderbuffer(GL_RENDERBUFFER,0);
glBindFramebuffer(GL_FRAMEBUFFER,frameBuf);
glFramebufferRenderbuffer(GL_FRAMEBUFFER,GL_COLOR_ATTACHMENT0,GL_RENDERBUFFER,renderBuf);
GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
if(status != GL_FRAMEBUFFER_COMPLETE)
printf("GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT\n");
else
printf("COMPLETE\n");
glBindFramebuffer(GL_FRAMEBUFFER,0);
私の描画機能:
glBindFramebuffer(GL_FRAMEBUFFER, frameBuf);
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
GLfloat vertices1[] = {
-1.0,-1.0,-1.0, 1.0,-1.0,-1.0, -1.0,1.0,-1.0,
1.0, 1.0,-1.0, -1.0,1.0,-1.0, 1.0,-1.0,-1.0
};
glVertexAttribPointer(vertexAttr1, 3, GL_FLOAT, GL_FALSE, 0, vertices1);
glEnableVertexAttribArray(vertexAttr1);
GLfloat texCoord[] = {
0.0f,0.0f, 1.0f,0.0f, 0.0f,1.0f,
1.0f,1.0f, 0.0f,1.0f, 1.0f,0.0f
};
glVertexAttribPointer(texCoordAttr1, 2, GL_FLOAT, GL_FALSE, 0, texCoord);
glEnableVertexAttribArray(texCoordAttr1);
glDrawArrays(GL_TRIANGLES, 0, 6);
glBindFramebuffer(GL_FRAMEBUFFER, 0);