Я пытаюсь понять, как включить профиль sRGB для буферов кадров по умолчанию на Android. Android SDK не знает, как это сделать на практике. Например, здесь парень утверждает, что достаточно установить внутренний формат текстуры в sRGB. Но он явно ошибается, потому что я попробовал это, и это ничего не меняет.
Khronos предоставляет это расширение как часть EGL. попытался добавить эти флаги в конфиги поверхности:
final int EGL_GL_COLORSPACE_KHR = 0x309D;
final int EGL_GL_COLORSPACE_SRGB_KHR = 0x3089;
int attribs[] = {
EGL10.EGL_LEVEL, 0,
EGL10.EGL_RENDERABLE_TYPE,EGLExt.EGL_OPENGL_ES3_BIT_KHR,
EGL10.EGL_COLOR_BUFFER_TYPE, EGL10.EGL_RGB_BUFFER,
EGL10.EGL_RED_SIZE, 8,
EGL10.EGL_GREEN_SIZE, 8,
EGL10.EGL_BLUE_SIZE, 8,
EGL10.EGL_DEPTH_SIZE, maxDepth,
EGL10.EGL_SAMPLE_BUFFERS, 1,
EGL10.EGL_SAMPLES, 4,
EGL_GL_COLORSPACE_KHR ,EGL_GL_COLORSPACE_SRGB_KHR //<--
EGL10.EGL_NONE
};
Но в этом случае устройства, на которых я тестирую (Google NEXUS 6), приводят к сбою приложения. Запустив средство просмотра расширений OpenGL, я вижу, что устройство не поддерживает
EGL_KHR_gl_colorspace
расширение.
На самом деле я нашел здесь и в других онлайн-демонстрациях эта настройка действительно используется. Кроме того, iOS позволяет настроить FBO по умолчанию на sRGB с флагом:
kEAGLЦветФорматSGBA8
Есть ли другой способ включить sRGB на устройстве Android, кроме этого расширения? (Конечно, другой альтернативой является корректировка гаммы в шейдере, но это именно то, чего я не хочу делать)