我需要知道我可以在OpenGL应用程序中使用多少种不同的颜色。
我的情况:我将使用glReadPixels读回绘制的像素,但颜色将具有整数含义而不是颜色。所以我需要知道我可以代表多少信息。
我打算将glGet
与GL_RED_BITS,GL_GREEN_BITS和GL_BLUE_BITS一起使用。但这些都被弃用了。如何使用至少在OpenGL 3上可用的功能来实现这一目标?
答案 0 :(得分:7)
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
:
- 如果target不是接受的目标之一,则会生成GL_INVALID_ENUM 令牌。
- 如果pname对于无效,则生成GL_INVALID_ENUM GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE的值。