Pet*_*isu 18 opengl macos cocoa
使用NSOpenGLView时,有几个类似的OpenGL操作:
glFlush()
[[self openGLContext] flushBuffer]
glFinish()
什么时候应该使用它们?
在示例应用程序中,Apple使用glFlush()
,然后使用[[self openGLContext] flushBuffer]
.他们为什么要同时使用这两种?
如果我使用双缓冲的Cocoa NSOpenGLView,那么正确的方法是什么?
小心![[self openGLContext] flushBuffer]
不仅仅是一个Objective-C包装器gFlush()
.此功能(- (void)flushBuffer
在Apple文档中)仅在您以像素格式设置双缓冲区时才有效
NSOpenGLPixelFormatAttribute attributes [] =
{
NSOpenGLPFADoubleBuffer,
// other presets like
// NSOpenGLPFAOpenGLProfile, NSOpenGLProfileVersion3_2Core,
// NSOpenGLPFADepthSize, 32,
0
};
NSOpenGLPixelFormat *pixelFormat = [[NSOpenGLPixelFormat alloc]
initWithAttributes:attributes];
Run Code Online (Sandbox Code Playgroud)
否则你必须使用glFlush();
我花了很长时间才看到NSOpenGLContext类参考中的基本行.
你看过这个吗?它解释了何时使用 glFlush() 和 glFinish()。两者都是控制命令执行和同步的 OpenGL 函数。通常,您在进行多线程渲染时会希望使用这些函数,否则就没有任何需要。
glSwapAPPLE() 和 aglSwapBuffers() 是 Apple 提供的扩展,用于将后台缓冲区的内容显示到屏幕上(在 Windows 上为 wglSwapBuffers())。您应该使用其中之一,但不能同时使用两者,因为它们实际上做同样的事情。我会坚持使用 AGL 方法,因为它类似于 WGL、EGL 等。
[[self openGLContext] flushBuffer]
从表面上看,它可能是 glFlush() 的客观 C 包装器。我无法想象它还能做任何其他事情。
归档时间: |
|
查看次数: |
5126 次 |
最近记录: |