2014-12-18 9 views
1

Я занимаюсь внедрением пространства sRGB в своем приложении.Проверьте кодировку цвета в буфере рисования буфера по умолчанию для SRGB

Из того, что я прочитал here, here, here и here я должен работать в линейном RGB (LRGB) пространство для всего трубопровода, и я не должен заботиться о каких-либо гамма-коррекции, так как OpenGL будет заботиться о нем для меня дано I включите GL_FRAMEBUFFER_SRGB​ и изображение будет GL_SRGB8 или GL_SRGB8_ALPHA8.

Итак, моя идея - быть уверенным, что я ввожу входные данные в пространстве LRGB, а затем создаю свою последнюю текстуру (делая глубину пилинга) на фреймбуфере по умолчанию, который позаботится о переносе моих цветов в пространство SRGB, чтобы я увидел их на LRGB на моем мониторе.

Хорошо, теперь я хочу проверить буфер рисования по умолчанию для фреймбуфера по умолчанию.

 int[] drawBuffer = new int[1]; 

     gl3.glGetIntegerv(GL3.GL_DRAW_BUFFER, drawBuffer, 0); 

     System.out.println("draw buffer " + (drawBuffer[0] == GL3.GL_BACK ? "BACK " : drawBuffer[0])); 

это подтверждает мой Жеребьевка буфер GL_BACK, теперь я хочу, чтобы проверить кодировку цвета

 int[] framebufferAttachmentParameter = new int[1]; 

     gl3.glGetFramebufferAttachmentParameteriv(GL3.GL_DRAW_FRAMEBUFFER, GL3.GL_BACK, 
       GL3.GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING, framebufferAttachmentParameter, 0); 

но glGetFramebufferAttachmentParameteriv терпит неудачу:

glGetError() возвращал следующие коды ошибок после того, вызов для glGetFramebufferAttachmentParameteriv (0x8CA9, 0x405, 0x8210, < [I>, 0x0): GL_INVALID_ENUM (1280 0x500)

Чтение here они говорят

Если фреймбуфера по умолчанию обязан предназначаться то привязанность должна быть одна из GL_FRONT_LEFT, GL_FRONT_RIGHT, GL_BACK_LEFT или GL_BACK_RIGHT

Но мой код сказать мой дро буфер GL_BACK. Чтение here говорят, что GL_BACK - это просто псевдоним, который указывает как GL_BACK_LEFT, так и GL_BACK_RIGHT, если я делаю стереотическую визуализацию.

Так что мои вопросы:

  • я прав при условии, что я пишу GL_BACK_LEFT данной мой Жеребьевка буфер возвращает GL_BACK

  • как я могу проверить, если stereotic рендеринга вкл/выкл? Конечно, поскольку я даже не знаю, как включить его, я предполагаю, что он выключен. Но что-то я делаю, просто добавляя буфер GL_BACK/FRONT_LEFT/RIGHT или что-то еще?

  • Могу ли я включить пространство SRGB в буфере рисования по умолчанию для стандартного фреймбуфера?

ответ