#opengl-es-2.0
#opengl-es-2.0
Вопрос:
Я создаю объект буфера кадра для настройки рендеринга в текстуру. Он отлично работает на симуляторе 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, amp;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, amp;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: %xn",errNo);
}
Я невежественен. Как мне отладить эту проблему?
Комментарии:
1. Вы где-то проверяете ошибки GL? (с помощью glGetError() ).
2. Если вы ссылаетесь на оператор glGetError() в моем коде, он просто предназначен для устранения любой предыдущей ошибки no.
3. Я просто не вижу никаких проблем с кодом, я дважды проверил все API из книги. Я также уменьшил размер текстуры до 32×48, просто чтобы посмотреть, не проблема ли это с памятью, но она по-прежнему выдает ту же ошибку.
4. GL_HALF_FLOAT_OES работает с пикселями яркости: <br/> glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, m_width, m_height, 0, GL_LUMINANCE, GL_HALF_FLOAT_OES, (глубокий байт *)[d байт]);
5. @SeanDoyle Работает ли это на iPhone 3GS?
Ответ №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);