2014-11-19 8 views
2

Я работаю над проектом Android OpenGL ES 3.0 с использованием Java. Мне нужно реализовать гамма-коррекцию, и где-то я прочитал, что текстуры sRGB будут поддерживаться в OpenGL ES 3.0. Поэтому я хотел называть glEnable (GL_FRAMEBUFFER_SRGB) перед рендерингом в фреймбуфер по умолчанию.sRGB Framebuffer on OpenGL ES 3.0

Однако, когда я пытаюсь вызвать

GLES30.glEnable(GLES30.GL_FRAMEBUFFER_SRGB) 

оказывается, нет GLES30.GL_FRAMEBUFFER_SRGB, но есть некоторые константы для SRGB текстурных форматов, таких как GLES30.GL_SRGB.

Итак, мой вопрос: возможно ли, чтобы OpenGL ES 3.0 выполняла гамма-коррекцию для меня? Если да, то как?

В противном случае, я думаю, мне придется вручную гамма-коррекцию.

ответ

5

Я понимаю, что этот вопрос 2 месяца, но так как он пришел в Google, я думаю, я бы разместить ответ для будущих Googlers :)

GL_FRAMEBUFFER_SRGB, кажется, доступны только на OpenGL рабочего стола, и через расширения на OpenGLES 2.0. Но через эксперименты (я сейчас работаю над этим вопросом) я понял, что на OpenGLES 3.x всякий раз, когда текстура, лежащая в основе буфера кадра, имеет формат sRGB, цвета корректно (и автоматически) преобразуются в sRGB при записи в буфер кадра , Таким образом, вам не нужно использовать GL_FRAMEBUFFER_SRGB для включения преобразования sRGB при рендеринге в текстуру sRGB.

Теперь, если вы пишете непосредственно в задний буфер, у вас могут быть опции для включения записи sRGB, но это будет контролироваться со стороны приложения (например, в Windows это флаг, который вы указываете при создании своего контекста через wgl, если Я не ошибаюсь) К сожалению, я не могу подтвердить это, поскольку в рамках, над которыми я работаю, у меня нет доступа к этой части.

+0

Так вы можете проверить это правильно? –