我想使用 openGL es 2.0 和 GLSL 着色器使用屏幕外渲染
我设置了 FBO,它似乎工作除了有两个问题
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);