OpenGL像素格式属性(NSOpenGLPixelFormatAttibutes)解释?

时间:2010-05-06 15:16:29

标签: cocoa macos opengl nsopenglview pixelformat

我不是OpenGL的新手,但不是专家。许多教程教授如何绘制,3D,2D,投影,正交等,但如何设置视图? (Cocoa中的NSOpenGLView,Macs)。

例如我有这个:

- (id) initWithFrame: (NSRect) frame
{
    GLuint attribs[] = { //PF: PixelAttibutes
            NSOpenGLPFANoRecovery,
            NSOpenGLPFAWindow,
            NSOpenGLPFAAccelerated,
            NSOpenGLPFADoubleBuffer,
            NSOpenGLPFAColorSize, 24,
            NSOpenGLPFAAlphaSize, 8,
            NSOpenGLPFADepthSize, 24,
            NSOpenGLPFAStencilSize, 8,
            NSOpenGLPFAAccumSize, 0,
            0
        };
    NSOpenGLPixelFormat* fmt = [[NSOpenGLPixelFormat alloc] initWithAttributes: (NSOpenGLPixelFormatAttribute*) attribs];
return self = [super initWithFrame:frame pixelFormat: [fmt autorelease]];
}

我不太了解它们的用法,特别是在组合时。

例如:

如果我希望我的视图能够全屏显示,我应该只编写NSOpenGLPFAFullScreen吗?或两者? (我的意思是并不总是全屏)

关于Double Buffer,这究竟是什么? (下图:Apple的定义)

  

如果存在,则此属性指示   只有双缓冲像素   格式被考虑。除此以外,   只有单缓冲像素格式   考虑

关于颜色:如果NSOpenGLPFAColorSize为24且NSOpenGLPFAColorSize为8则表示alpha和RGB组件的处理方式不同?如果我将前者设置为32而后者设置为0会发生什么?

等等,一般来说,我如何学习从头开始设置视图?

提前致谢。

伊格纳西奥。

1 个答案:

答案 0 :(得分:2)

关于颜色,我不完全确定它的区别。

关于双缓冲:假设你的帧速率很慢,3fps。如果需要三分之一秒才能在屏幕上绘制所有内容,您将在绘制时看到它们。例如,如果使用画家的算法绘制它,您将首先看到背景多边形,然后您会看到更接近的东西。此外,最后绘制的东西只会在它被清除以绘制下一帧之前立即开启。

双缓冲将所有内容呈现为屏幕外图像,然后将整个渲染图像放在屏幕上。所以在你渲染整个东西之前你不会看到任何动作,但你也不会看到一个不完整的框架。

更多信息,http://en.wikipedia.org/wiki/Multiple_buffering#Double_buffering_in_computer_graphics