Получение GL_FRAMEBUFFER_UNSUPPORTED в OpenGL ES 2.0 на устройстве

Я создаю объект буфера кадра для настройки Render to Texture. Он отлично работает на симуляторе iPhone, но на устройстве функция glCheckFramebufferStatus(GL_FRAMEBUFFER) возвращает GL_FRAMEBUFFER_UNSUPPORTED в конце создания FBO. Я тестирую его на iPhone 3GS с iOS 5.

Вот код:

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);
}

Я не знаю. Как мне отладить эту проблему?


person kal21    schedule 20.10.2011    source источник
comment
Вы где-то проверяете ошибки GL? (используя glGetError() ).   -  person Dr. Snoopy    schedule 21.10.2011
comment
Если вы имеете в виду оператор glGetError() в моем коде, он просто очищает любую предыдущую ошибку №.   -  person kal21    schedule 22.10.2011
comment
Я просто не вижу никаких проблем с кодом, я перепроверил все API из книги. Я также уменьшил размер текстуры до 32x48, чтобы увидеть, не проблема ли это с памятью, но все равно выдает ту же ошибку.   -  person kal21    schedule 22.10.2011
comment
GL_HALF_FLOAT_OES работает с пикселями яркости: ‹br/› glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, m_width, m_height, 0, GL_LUMINANCE, GL_HALF_FLOAT_OES, (GLubyte *)[d bytes]);   -  person Sean Doyle    schedule 01.02.2012
comment
@SeanDoyle Это работает на iPhone 3GS?   -  person kal21    schedule 02.02.2012
comment
@kal21 - Возможно. Он работает на iPod touch 3-го поколения. Но у меня нет 3GS для тестирования.   -  person Sean Doyle    schedule 02.02.2012


Ответы (1)


Решение найдено. GL_HALF_FLOAT не поддерживается на iPhone. Вместо этого я использовал 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);              
person kal21    schedule 21.10.2011