我正在申请中实施sRGB空间。
根据我的阅读here,here,here和here我应该在整个管道的线性RGB(LRGB)空间中操作,我不必关心关于任何伽玛校正,因为我启用GL_FRAMEBUFFER_SRGB
并且图像为GL_SRGB8
或GL_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_LEFT
和GL_BACK_RIGHT
。
所以我的问题是:
我正确地假设我正在写GL_BACK_LEFT
,因为我的绘制缓冲区返回GL_BACK
如何检查立体渲染是否打开/关闭?当然,因为我甚至不知道如何打开它,我认为它是关闭的。但是我只是通过启用GL_BACK / FRONT_LEFT / RIGHT缓冲区或其他东西来做什么?
我可以在默认帧缓冲区的默认绘制缓冲区上打开SRGB空间吗?
答案 0 :(得分:0)
我在opengl论坛上得到了一个答案,我认为如果我把这个问题留在这里对任何人都有用