我正在尝试编写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只是交换缓冲区或者什么都不做,如果应用程序是单缓冲的,那么为什么这不起作用?