如何找出我的OpenGL的颜色缓冲区可以代表多少种颜色? [英] How to find out how many colors my OpenGL can represent on it's color buffer?

查看:332
本文介绍了如何找出我的OpenGL的颜色缓冲区可以代表多少种颜色?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am needing to know how many different colors I can use in my OpenGL application.

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

My situation: I am going to read back the drew pixels using glReadPixels but the color will have an integer meaning instead of color. So I need to know how much information I can represent.

我打算将<​​c0>与GL_RED_BITS,GL_GREEN_BITS和GL_BLUE_BITS一起使用.但是这些已被弃用.如何使用至少在OpenGL 3上可用的功能来实现此目标?

I was going to use glGet with GL_RED_BITS,GL_GREEN_BITS and GL_BLUE_BITS. But these are deprecated. How can I achieve this using a function that is available at least at OpenGL 3?

推荐答案

好的,我已经找到了想要的东西.我对 glGetFramebufferAttachmentParameteriv 的评论是正确的,这里有一些参考:

Okey, I've found what I was looking for. My comment about glGetFramebufferAttachmentParameteriv was correct, and here's some reference:

glGetFramebufferAttachmentParameteriv —检索有关的信息 绑定的帧缓冲区对象的附件

glGetFramebufferAttachmentParameteriv — retrieve information about attachments of a bound framebuffer object

到目前为止一切都很好.

So far so good.

如果默认帧缓冲区绑定到目标,则附件必须是 GL_FRONT_LEFT,GL_FRONT_RIGHT,GL_BACK_LEFT或GL_BACK_RIGHT中的一种, 识别颜色缓冲区.

If the default framebuffer is bound to target then attachment must be one of GL_FRONT_LEFT, GL_FRONT_RIGHT, GL_BACK_LEFT, or GL_BACK_RIGHT, identifying a color buffer.

是的,我们可以将其用作屏幕缓冲区!现在是您感兴趣的部分:

So yup, we can use it for screen buffer! And now the part that interests you:

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
  • 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,深度或 指定附件的模具组件.如果零,则返回零 附件中不存在请求的组件.

params will contain the number of bits in the corresponding red, green, blue, alpha, depth, or stencil component of the specified attachment. Zero is returned if the requested component is not present in attachment.

哦,我想target可能只是GL_FRAMEBUFFER.

您请求一个示例来总结所有内容,所以...

You requested an example to sum it all up, so...

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您可以获得:

And here are possible INVALID_ENUMS you can get:

    如果目标不是接受的目标之一,则生成
  • GL_INVALID_ENUM 令牌.
  • 如果pname无效,则生成
  • GL_INVALID_ENUM 值GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE.
  • GL_INVALID_ENUM is generated if target is not one of the accepted tokens.
  • GL_INVALID_ENUM is generated if pname is not valid for the value of GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE.

这篇关于如何找出我的OpenGL的颜色缓冲区可以代表多少种颜色?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆