检查SRGB的默认帧缓冲区绘制缓冲区中的颜色编码

时间:2014-12-18 09:55:26

标签: draw default framebuffer opengl-3 srgb

我正在申请中实施sRGB空间。

根据我的阅读herehereherehere我应该在整个管道的线性RGB(LRGB)空间中操作,我不必关心关于任何伽玛校正,因为我启用GL_FRAMEBUFFER_SRGB​并且图像为GL_SRGB8GL_SRGB8_ALPHA8,OpenGL将为我照顾它。

所以我的想法是确保我在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_LEFTGL_BACK_RIGHT

所以我的问题是:

  • 我正确地假设我正在写GL_BACK_LEFT,因为我的绘制缓冲区返回GL_BACK

  • 如何检查立体渲染是否打开/关闭?当然,因为我甚至不知道如何打开它,我认为它是关闭的。但是我只是通过启用GL_BACK / FRONT_LEFT / RIGHT缓冲区或其他东西来做什么?

  • 我可以在默认帧缓冲区的默认绘制缓冲区上打开SRGB空间吗?

1 个答案:

答案 0 :(得分:0)

我在opengl论坛上得到了一个答案,我认为如果我把这个问题留在这里对任何人都有用

https://www.opengl.org/discussion_boards/showthread.php/185198-Check-color-encoding-in-the-default-framebuffer-draw-buffer-for-SRGB?p=1263059#post1263059