好的,某种程度上回答了问题。我在 Android 2.2 上使用 OpenGL ES 2 让它正常运行:
glGenFramebuffers( 1, &(frame_buffer ) );
glGenTextures(1, &(colour_texture) );
glBindTexture(GL_TEXTURE_2D, colour_texture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA,
pixelWidth, pixelHeight,
0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
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_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glBindTexture(GL_TEXTURE_2D, 0);
glGenTextures(1, &(depth_texture) );
glBindTexture(GL_TEXTURE_2D, depth_texture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT,
pixelWidth, pixelHeight,
0, GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT, NULL);
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_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glBindTexture(GL_TEXTURE_2D, 0);
glBindFramebuffer(GL_FRAMEBUFFER, frame_buffer);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
GL_TEXTURE_2D, colour_texture, 0);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT,
GL_TEXTURE_2D, depth_texture, 0);
GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
if ( status == GL_FRAMEBUFFER_COMPLETE )
{
}
非常简单,遵循OpenGL ES2手册并按正确顺序执行所有操作。
我尝试在OpenGL ES 1.1中这样做,添加了OES到必要的函数调用和常量后缀_OES,因为帧缓冲对象是一个扩展。任何尝试将深度纹理附加到帧缓冲区都会导致不完整的帧缓冲对象。
因此,目前我的结论是,在Android上,这无法使用OpenGL ES 1.1实现,但在ES 2.2上显然可以实现。
如果有人对ES 1.1有解决方案,那么看到它是很有趣的。