我需要知道我可以在OpenGL应用程序中使用多少种不同的颜色.
我的情况:我将使用glReadPixels读回绘制的像素,但颜色将具有整数含义而不是颜色.所以我需要知道我可以代表多少信息.
我将使用glGetGL_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_SIZEGL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZEGL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZEGL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZEGL_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.
| 归档时间: |
|
| 查看次数: |
475 次 |
| 最近记录: |