如何找出我的OpenGL在其色彩缓冲区上可以表示的颜色数量?

And*_*uel 3 opengl

我需要知道我可以在OpenGL应用程序中使用多少种不同的颜色.

我的情况:我将使用glReadPixels读回绘制的像素,但颜色将具有整数含义而不是颜色.所以我需要知道我可以代表多少信息.

我将使用glGetGL_RED_BITS,GL_GREEN_BITS和GL_BLUE_BITS.但这些都被弃用了.如何使用至少在OpenGL 3上可用的功能来实现这一目标?

Bar*_*icz 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);
Run Code Online (Sandbox Code Playgroud)

这里有可能的INVALID_ENUMS,你可以得到:

  • 如果target不是可接受的标记之一,则生成GL_INVALID_ENUM.
  • 如果pname对GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE的值无效,则生成GL_INVALID_ENUM.