OS X 如何使用 OpenGL 上下文创建窗口

use*_*331 5 c opengl macos

不使用多平台库,例如 GLUT 或 SDL。

在 C 中(没有 Objective-C),如何创建一个带有可以绘制的有效 OpenGL 上下文的窗口?

我希望能够从命令行编译它,所以请不要使用 XCode 拖放内容!

use*_*414 3

正确理解您的问题的假设很少:

\n\n
    \n
  1. 有一个API,您的应用程序作为一个整体正在开发中,例如Cocoa API。假设这就是您要求 \xe2\x80\x9c 的意思,最好使用 Cocoa\xe2\x80\x9d。

  2. \n
  3. 基本的 OpenGL 绘图例程都是纯 C 语言,无论是用 GLUT、Cocoa 还是其他方式封装。

  4. \n
  5. \xe2\x80\x99s 在 Cocoa API 中没有 \xe2\x80\x9cCreating a window with OpenGL context\xe2\x80\x9d 这样的方法,AFAIK。你首先必须创建一个窗口,无论是通过编程方式还是使用界面生成器。

  6. \n
\n\n

您可以使用 Interface Builder(在 Xcode 中)来设置应显示 OpenGL 绘图的窗口。以下不是工作代码,它\xe2\x80\x99只是一个最简单的案例演练。然后您必须声明一个接口,例如:

\n\n
@interface myOpenGLView :NSOpenGLView\n{\n@public\n//declare public members\n@private\n//declare private members\n}\n//declare properties and methods\n- (void) drawRect: (NSRect) bounds;\n@end\n\nmyOpenGLView *myView;\n
Run Code Online (Sandbox Code Playgroud)\n\n

它是 NSOpenGLView 的子类。通常,这是写入单独的类 .m 和 .h 文件中,而不是写入 AppDelegate 中。

\n\n

将 OpenGLView 从对象面板拖入窗口后,请确保在 Xcode 右窗格(实用工具区域)中将其声明为自定义类myOpenGLView。到目前为止,我无法想象没有 Objective-C 就能摆脱困境。然而,在方法体内,您仍然处理传统风格的 OpenGL-C。

\n\n
-(void) drawRect: (NSRect) bounds\n{   \nglEnable(GL_BLEND);\nglBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);    \nglClearColor(0, 0, 0, 0);\nglClear(GL_COLOR_BUFFER_BIT);\ndrawSomething();\nglFlush();    \n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

更新绘图的方法不应显式绘制,而应调用以下方法:

\n\n
[self.myView setNeedsDisplay: YES];\n
Run Code Online (Sandbox Code Playgroud)\n\n

当然,还有更多内容,具体取决于您所追求的复杂性。有一些简单的示例可能有助于您在 OS X 中开始学习 OpenGL,例如:\n https://developer.apple.com/library/mac/documentation/GraphicsImaging/Conceptual/OpenGL-MacProgGuide/opengl_drawing/opengl_drawing .html

\n\n

或者这样:\n不使用 Interface Builder 创建 OpenGL 视图

\n\n

甚至是这个:\n https://www.youtube.com/watch?v=7ModmPsxhug

\n\n

但是在 Cocoa 中创建 OpenGL 视图并没有什么快速或敏捷的地方。这需要一点学习耐心,这是有回报的。我希望这能有所帮助。

\n