在使用NSOpenGLView时,有几个类似的OpenGL操作:
glFlush()
[[self openGLContext] flushBuffer]
glFinish()
这些都应该在什么时候使用?
在一个示例应用程序中,苹果先使用glFlush()
,然后使用[[self openGLContext] flushBuffer]
。为什么他们同时使用这两种方法呢?
如果我使用的是双缓冲的Cocoa NSOpenGLView,那么正确的方法是什么?
发布于 2011-08-15 13:22:49
你看过this吗?它解释了何时使用glFlush()和glFinish()。两者都是控制命令执行和同步的OpenGL函数。通常,在进行多线程渲染时,您会希望使用这些函数,否则应该没有任何需要。
glSwapAPPLE()和aglSwapBuffers()是苹果提供的扩展,用于将后台缓冲区的内容显示到屏幕上(在Windows上是wglSwapBuffers())。你应该使用其中任何一个,但不能两个都使用,因为它们实际上做的是同一件事。我会坚持使用AGL方法,因为它类似于WGL、EGL等。
从外观上看,[[self openGLContext] flushBuffer]
可能是glFlush()的一个目标C包装器。我无法想象它还能做别的什么。
发布于 2012-11-30 03:27:38
要小心![[self openGLContext] flushBuffer]
不仅仅是gFlush()
的Objective-C包装器。此函数(Apple Documentation中的- (void)flushBuffer
)仅在以下像素格式中设置双缓冲区时才起作用
NSOpenGLPixelFormatAttribute attributes [] =
{
NSOpenGLPFADoubleBuffer,
// other presets like
// NSOpenGLPFAOpenGLProfile, NSOpenGLProfileVersion3_2Core,
// NSOpenGLPFADepthSize, 32,
0
};
NSOpenGLPixelFormat *pixelFormat = [[NSOpenGLPixelFormat alloc]
initWithAttributes:attributes];
否则你必须使用glFlush();
,我花了很长时间才在NSOpenGLContext Class Reference中看到了关键的一行。
发布于 2012-07-13 23:00:43
正确的方法是直接调用[[self openGLContext] flushBuffer]
。
https://stackoverflow.com/questions/7027346
复制相似问题