Я генерирую текстуру, подобную этой:
GLuint id;
glGenTextures(1, &id);
glBindTexture(GL_TEXTURE_2D, id);
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);
glTexImage2D(
GL_TEXTURE_2D, 0,
GL_RGBA16,
//GL_RGBA16F_ARB, //< Won't work
256, 256, 0, GL_RGBA, GL_FLOAT, NULL
);
glBindTexture(GL_TEXTURE_2D, 0);
Я прикрепляю его к объекту кадрового буфера (FBO) для рендеринга в. Все это работает как очарование, когда я устанавливаю внутренний формат GL_RGBA16
. Однако мне нужен более высокий динамический диапазон, и я подумал, что GL_RGBA16F_ARB
может помочь.
К сожалению, если я заменю GL_RGBA16
на GL_RGBA16F_ARB
в приведенном выше коде, текстура перестает работать. Я ничего не пытаюсь рендерить на FBO / текстуры, и когда я использую текстуру, она содержит случайный мусор. (Как оказалось, много фиолетового) Это было бы не так печально, если бы я получил сообщение об ошибке, намекающее на то, что может быть не так, но, похоже, я не могу его найти. Другими словами, glGetError()
возвращает 0
после glTexImage2D
-коллока, а glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT)
возвращает GL_FRAMEBUFFER_COMPLETE_EXT
, когда я прикрепил текстуру
Я не связывался с glClampColorARB(...)
... пока:)
- Я забыл проверить ошибки в месте / пути, о котором я не думал?
- Требует ли
GL_RGBA16F_ARB
-текстура какой-либо специальной обработки, которую я не давал?
- Есть что-нибудь еще, что может быть не так?
Я в тупике, так как все работает с GL_RGBA16
...: (
РЕДАКТИРОВАТЬ: При использовании GL_RGBA16F_ARB
первый кадр, который я пытаюсь отобразить на экране, не делает это. Сдается мне, что я должен получить сообщение об ошибке где-то ..?
EDIT: Изучив пример рабочего кода ShadowIce, я обнаружил, что проблемы исчезли, если я изменил буфер глубины на моем FBO и дал glRenderBufferStorageEXT(...)
GL_DEPTH_COMPONENT24
в качестве его второй параметр, а не GL_DEPTH_COMPONENT16
. Я не знаю, , почему это работает, но, видимо, это работает.
Кроме того, код ShadowIce ломается, как мой, если я делаю там противоположную подстановку.