NSOpenglContext flushBuffer在3.2应用程序中不起作用

时间:2013-05-11 19:52:50

标签: objective-c cocoa opengl

我正在尝试编写OSX OpenGL应用程序,但在使用3.2配置文件时尝试交换缓冲区时遇到了麻烦。 我使用initWithFrame中的以下代码“更改”到3.2配置文件:

self = [super initWithFrame:frame];
if (self) {
    NSOpenGLPixelFormat *pixelFormat = [[[NSOpenGLPixelFormat alloc]
                                        initWithAttributes:(NSOpenGLPixelFormatAttribute[])
                                        {
                                            NSOpenGLPFAWindow,
                                            NSOpenGLPFADoubleBuffer,
                                            NSOpenGLPFADepthSize, 32,
                                            NSOpenGLPFAOpenGLProfile,NSOpenGLProfileVersion3_2Core,
                                            nil
                                        }]autorelease];
    NSOpenGLContext *context=[[[NSOpenGLContext alloc]initWithFormat:pixelFormat shareContext:nil]autorelease];
    [self setPixelFormat:pixelFormat];
    [self setOpenGLContext:context];
}

return self;

然后我在drawRect(你必须在cocoa NSView子类中进行绘图的方法)中执行以下操作:

//drawRect rendering code
glClearColor(1, 0, 0, 1);
glClear(GL_COLOR_BUFFER_BIT);

[[self openGLContext]flushBuffer];

但我只得到一个空白的屏幕。如果我没有指定3.2配置文件或我使用glSwapAPPLE()而不是flushBuffer它工作正常,但我想知道为什么这段代码不起作用。如果我理解正确的话,flushBuffer只是交换缓冲区或者什么都不做,如果应用程序是单缓冲的,那么为什么这不起作用?

0 个答案:

没有答案