首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >glFlush() vs [[self openGLContext] flushBuffer] vs glFinish vs glSwapAPPLE vs aglSwapBuffers

glFlush() vs [[self openGLContext] flushBuffer] vs glFinish vs glSwapAPPLE vs aglSwapBuffers
EN

Stack Overflow用户
提问于 2011-08-11 22:07:56
回答 3查看 5.4K关注 0票数 18

在使用NSOpenGLView时,有几个类似的OpenGL操作:

  • glFlush()
  • [[self openGLContext] flushBuffer]
  • glFinish()
  • glSwapAPPLE
  • aglSwapBuffers

这些都应该在什么时候使用?

在一个示例应用程序中,苹果先使用glFlush(),然后使用[[self openGLContext] flushBuffer]。为什么他们同时使用这两种方法呢?

如果我使用的是双缓冲的Cocoa NSOpenGLView,那么正确的方法是什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-08-15 13:22:49

你看过this吗?它解释了何时使用glFlush()和glFinish()。两者都是控制命令执行和同步的OpenGL函数。通常,在进行多线程渲染时,您会希望使用这些函数,否则应该没有任何需要。

glSwapAPPLE()和aglSwapBuffers()是苹果提供的扩展,用于将后台缓冲区的内容显示到屏幕上(在Windows上是wglSwapBuffers())。你应该使用其中任何一个,但不能两个都使用,因为它们实际上做的是同一件事。我会坚持使用AGL方法,因为它类似于WGL、EGL等。

从外观上看,[[self openGLContext] flushBuffer]可能是glFlush()的一个目标C包装器。我无法想象它还能做别的什么。

票数 2
EN

Stack Overflow用户

发布于 2012-11-30 03:27:38

要小心![[self openGLContext] flushBuffer]不仅仅是gFlush()的Objective-C包装器。此函数(Apple Documentation中的- (void)flushBuffer)仅在以下像素格式中设置双缓冲区时才起作用

代码语言:javascript
运行
复制
NSOpenGLPixelFormatAttribute attributes [] =
    {
        NSOpenGLPFADoubleBuffer,
        // other presets like
        // NSOpenGLPFAOpenGLProfile, NSOpenGLProfileVersion3_2Core,
        // NSOpenGLPFADepthSize, 32,
        0
    };

    NSOpenGLPixelFormat *pixelFormat = [[NSOpenGLPixelFormat alloc] 
                                            initWithAttributes:attributes];

否则你必须使用glFlush();,我花了很长时间才在NSOpenGLContext Class Reference中看到了关键的一行。

票数 9
EN

Stack Overflow用户

发布于 2012-07-13 23:00:43

正确的方法是直接调用[[self openGLContext] flushBuffer]

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7027346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档