在设备上的OpenGL ES 2.0中获取GL_FRAMEBUFFER_UNSUPPORTED

时间:2011-10-20 23:12:39

标签: opengl-es-2.0

我正在为渲染到纹理设置创建一个帧缓冲对象。它在iPhone模拟器上完美运行,但在设备上glCheckFramebufferStatus(GL_FRAMEBUFFER)函数在FBO创建结束时返回GL_FRAMEBUFFER_UNSUPPORTED。 我正在使用iOS 5在iPhone 3GS上进行测试。

以下是代码:

GLenum errNo;  
GLsizei width = 320;
GLsizei height = 480;
GLuint textureHandle;
GLuint fboHandle;

glGetError();

glGenTextures(1, &textureHandle);
glBindTexture(GL_TEXTURE_2D, textureHandle);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA,GL_HALF_FLOAT_OES, NULL);               

glGenFramebuffers(1, &fboHandle);
glBindFramebuffer(GL_FRAMEBUFFER,fboHandle);    
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, textureHandle, 0);


errNo = glCheckFramebufferStatus(GL_FRAMEBUFFER);
if(GL_FRAMEBUFFER_COMPLETE != errNo){
    printf("Unable to create FBO. errNo: %x\n",errNo);
}

我很无能为力。我该如何调试这个问题?

1 个答案:

答案 0 :(得分:2)

找到解决方案。 iPhone不支持GL_HALF_FLOAT。我使用了GL_UNSIGNED_BYTE,现在可以使用了。

不起作用:

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA,GL_HALF_FLOAT_OES, NULL);               

<强>使用:

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA,GL_UNSIGNED_BYTE, NULL);