Android OpenGL ES glCheckFramebufferStatus返回0

Android OpenGL ES glCheckFramebufferStatus返回0,android,opengl-es,Android,Opengl Es,我正在用本地代码编写Android OepnGL程序 下面的代码是通过jni(普通调用)调用的,而不是在任何曲面视图中 调用glCheckFramebufferStatus()时,状态始终为0 GLuint textureA; glEnable(GL_TEXTURE_2D); glGenTextures(1, &textureA); glBindTexture(GL_TEXTURE_2D, textureA); glTexParameteri(GL_TEXTURE_2D, GL_TEXT

我正在用本地代码编写Android OepnGL程序

下面的代码是通过jni(普通调用)调用的,而不是在任何曲面视图中

调用glCheckFramebufferStatus()时,状态始终为0

GLuint textureA;
glEnable(GL_TEXTURE_2D);
glGenTextures(1, &textureA);
glBindTexture(GL_TEXTURE_2D, textureA);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 256, 256, 0, GL_RGBA,
        GL_UNSIGNED_BYTE, NULL);

GLuint fboA;
glGenFramebuffers(1, &fboA);
glBindFramebuffer(GL_FRAMEBUFFER, fboA);

glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
        textureA, 0);

GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
if (status == GL_FRAMEBUFFER_COMPLETE) {
    LOGH("Single FBO setup successfully.");
} else {
    LOGH("Problem in setup FBO texture: %d .", status);
}
glBindFramebuffer(GL_FRAMEBUFFER, 0);

实际上,这个问题不是因为fbo操作,而是与opengl上下文有关

我在Android中使用opengl es,我需要通过EGL库配置opengl上下文


因此,我需要正确准备上下文,以便创建fbo。

在导致
glCheckFramebufferStatus(…)
?@AndonM.Coleman的数十个API调用中的任何一个调用之前/之后,您是否探测过OpenGL错误状态?嗨,我检查了glGetError(),没有错误。如果我正确阅读规范,OpenGL ES 2.0中只有两种保证颜色可渲染格式具有alpha通道,
GL_RGBA4
GL_RGB5_A1
。如果您有一个完全死机的实现,那么在调用
glTexImage2D(…)
时,您可能会尝试使用
GL\u RGBA4
GL\u UNSIGNED\u SHORT\u 4\u 4\u 4\u 4
作为数据类型,而不是
GL\u UNSIGNED\u BYTE
。如果这是问题的原因,它应该给出一个更详细的错误信息,但是规范再次指出,它返回0的唯一原因是存在错误(
GL\u INVALID\u ENUM
)。此外,OpenGL ES 2.0没有固定的函数管道。您对glEnable(GL_TEXTURE_2D)的调用应该会产生错误,因此如果您确实有
GL_NO_error
,那么有些事情确实很奇怪;现在唯一有意义的是,您实际上正在OpenGL ES 1.0/1.1上运行。。。我假设您使用的是OpenGL ES 2.0,因为您对
glBindFramebuffer(…)
的调用没有以OES作为后缀。请在问题正文和扩展字符串中包含OpenGL ES版本。