NSOpenGLPFAColorSize对NSOpenGLPixelFormat的意义

时间:2013-03-13 23:22:45

标签: objective-c macos cocoa opengl

我不清楚在创建NSOpenGLPixelFormat时为NSOpenGLPFAColorSize设置的值。从文档中可以看出:

  

值是非负缓冲区大小规范。最喜欢与指定大小最匹配的颜色缓冲区。如果未指定,OpenGL会选择与屏幕匹配的颜色大小。

但这是否意味着每像素的位数?或每个组件的位数?例如,如果它被设置为24并被解释为每像素位数那么这意味着每个RGBA颜色每个组件将具有6位,对于整个RGBA像素,总共24位。 / p>

但是,如果它被解释为每个组件的比特那么这将意味着每个红色,绿色,蓝色和alpha分量的24位,以制作96位RGBA像素。

我倾向于认为它意味着每个组件的比特,因为我在示例代码中设置的值范围为8,16,24,32 ,除了24个之外的所有内容当被解释为每个组件的位数时感觉。虽然有一些确定的答案会很好。

注意:编辑以反映OpenGL中的像素是RGBA而不是RGB。

1 个答案:

答案 0 :(得分:2)

在进一步搜索文档后,我发现了NSOpenGLPFAColorFloat属性,根据documentation

  

布尔属性。如果存在,则此属性指示仅考虑能够使用存储浮点像素的缓冲区的渲染器。这应该伴随着64的NSOpenGLPFAColorSize(对于半浮点像素组件)或128(对于全浮点像素组件)。请注意,并非所有硬件都支持浮点颜色缓冲区,因此返回的像素格式可能为NULL。

有了这些附加信息,它必须意味着每像素位数

我也进行了一些实验,将NSOpenGLPFAColorSize设置为8,16,24和8中的每一个。 32然后检查我得到了什么。在每种情况下,我都返回了一个像素格式,NSOpenGLPFAColorSize设置为32 - 表示每个RGBA像素32位。只是传递NSOpenGLPFAColorFloat没有为颜色大小设置任何内容就足以获得每像素64位的像素格式。