Ответ 1
ОК, ответ. Получил это, чтобы работать на Android 2.2 с OpenGL ES 2:
// Create a frame buffer
glGenFramebuffers( 1, &(frame_buffer ) );
// Generate a texture to hold the colour buffer
glGenTextures(1, &(colour_texture) );
glBindTexture(GL_TEXTURE_2D, colour_texture);
// Width and height do not have to be a power of two
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);
// Probably just paranoia
glBindTexture(GL_TEXTURE_2D, 0);
// Create a texture to hold the depth buffer
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);
// Associate the textures with the FBO.
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
GL_TEXTURE_2D, colour_texture, 0);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT,
GL_TEXTURE_2D, depth_texture, 0);
// Check FBO status.
GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
if ( status == GL_FRAMEBUFFER_COMPLETE )
{
// Success
}
Довольно тривиально, следуйте руководству OpenGL ES2 и делайте все в правильном порядке.
Пробовал это с помощью OpenGL ES 1.1, добавив OES к требуемым вызовам функций и _OES для констант, поскольку объекты буфера фрейма являются расширением. Любая попытка прикрепить текстуру глубины к буму кадра приводит к созданию объекта незавершенного фрейма кадра.
Итак, в тот момент я пришел к выводу, что это не работает с OpenGL ES 1.1 на Android, но он явно работает с ES 2.2.
Если у кого-то есть решение для ES 1.1, было бы интересно увидеть его.