我需要知道我可以在我的 OpenGL 应用程序中使用多少种不同的颜色。
我的情况:我将使用 glReadPixels 读回绘制的像素,但颜色将具有整数含义而不是颜色。所以我需要知道我能代表多少信息。
我打算glGet
与 GL_RED_BITS、GL_GREEN_BITS 和 GL_BLUE_BITS 一起使用。但这些已被弃用。如何使用至少在 OpenGL 3 上可用的功能来实现这一点?
我需要知道我可以在我的 OpenGL 应用程序中使用多少种不同的颜色。
我的情况:我将使用 glReadPixels 读回绘制的像素,但颜色将具有整数含义而不是颜色。所以我需要知道我能代表多少信息。
我打算glGet
与 GL_RED_BITS、GL_GREEN_BITS 和 GL_BLUE_BITS 一起使用。但这些已被弃用。如何使用至少在 OpenGL 3 上可用的功能来实现这一点?
好的,我找到了我要找的东西。我的评论glGetFramebufferAttachmentParameteriv
是正确的,这里有一些参考:
glGetFramebufferAttachmentParameteriv — 检索有关绑定帧缓冲区对象的附件信息
到现在为止还挺好。
如果默认帧缓冲区绑定到目标,则附件必须是 GL_FRONT_LEFT、GL_FRONT_RIGHT、GL_BACK_LEFT 或 GL_BACK_RIGHT 之一,标识颜色缓冲区。
所以是的,我们可以将它用于屏幕缓冲区!现在是您感兴趣的部分:
pname
可以是:
GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE
GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE
GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE
GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE
GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE
params
将包含指定附件的相应红色、绿色、蓝色、alpha、深度或模板组件中的位数。如果请求的组件不在附件中,则返回零。
哦,target
可以GL_FRAMEBUFFER
,我想。
编辑:你要求一个例子来总结这一切,所以......
glBindFramebuffer(GL_FRAMEBUFFER, 0);
GLint ret;
glGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_FRONT_LEFT, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, &ret);
if (ret == GL_NONE)
exit(1); // something is really bad there or FRONT_LEFT isn't your default buffer. Check it!
glGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_FRONT_LEFT, GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE, &ret);
您可能INVALID_ENUMS
会得到:
- 如果目标不是接受的令牌之一,则会生成 GL_INVALID_ENUM。
- 如果 pname 对于 GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 的值无效,则会生成 GL_INVALID_ENUM。