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

时间:2013-02-28 13:29:44

标签: opengl

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

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

我打算将glGet与GL_RED_BITS,GL_GREEN_BITS和GL_BLUE_BITS一起使用。但这些都被弃用了。如何使用至少在OpenGL 3上可用的功能来实现这一目标?

1 个答案:

答案 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的值。
  •