为什么我得到GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT?

时间:2012-03-15 02:24:31

标签: android opengl-es render-to-texture

我正在为Android开发游戏,但我的目标设备有点慢。 在这些装置中,颜色以不同的方式显示,在某些情况下,红色是非常不透明的。 作为解决方案,我根据设备制作了一个着色器opengl正确的颜色。我从SD加载纹理,然后我做一个渲染到纹理应用着色器,最后我删除没有效果的纹理。 每个纹理加载一次完成。 问题是,在某些时候我的代码渲染到纹理开始失败。

glActiveTexture(GL_TEXTURE0);
glGenTextures(1, &fbo_texture);
glBindTexture(GL_TEXTURE_2D, fbo_texture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
glBindTexture(GL_TEXTURE_2D, 0);
glGenFramebuffers(1, &fbo);
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, fbo_texture, 0);
// Disable depth buffer
glDisable(GL_DEPTH_TEST);
glDepthMask(GL_FALSE);

GLint status;
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, fbo_texture, 0);
if ((status = glCheckFramebufferStatus(GL_FRAMEBUFFER)) != GL_FRAMEBUFFER_COMPLETE) {

这样可以正常工作,但在某一点开始失败后总是返回GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT。

我不知道,因为它开始失败。

更新:现在我只使用一个FBO来加载所有纹理,但是我在Android设备上遇到了一个新错误:

eglLockWindowSurface: failed to map the memory for fd=80 offs=2428928
waitForCondition(LockCondition) time out(identity=14,status=0) CPU may be pegged, trying again

0 个答案:

没有答案