如何从Cocoa中“脱离”并在C / C ++中开发Mac OpenGL应用程序?

时间:2012-05-22 01:07:32

标签: c++ xcode macos opengl glut

我希望开始使用C或C ++进行一些3D编程。我遇到的问题是,我可以找到的唯一可用于Mac OS的教程使用目标C和Cocoa框架。我想要或多或少地获得与Windows用户相同的环境。

如果我尝试使用文本编辑器和g ++编译器,我会丢失标题,但是,如果我尝试使用Xcode,我不得不与Cocoa搏斗,这对我来说是令人沮丧的。我没有看到任何理由为什么预先安装在Mac上的OpenGL / GLUT会迫使我使用Xcode,但似乎没有它就得不到头文件。

如何通过所有Apple'开发人员友好'界面来编写一些具有完全跨平台可移植性的老式代码?

3 个答案:

答案 0 :(得分:5)

如果您想使用OSX / Cocoa的最新优势,Objective-C的某些部分是不可避免的。将现有应用程序移植到MacOS的最简单方法如下:

  1. 在Objective-C中编写“bare bones”nibless应用程序。它只是一个AppDelegate类和main()函数中的一个小设置
  2. 在您在AppDelegate的didFinishLaunching事件处理程序中创建的窗口中添加自定义NSGLView后代
  3. 在NSGLView初始化
  4. 中设置CVDisplayLink并渲染回调
  5. 在CVDisplayLink的回调中使用现有的OpenGL渲染代码
  6. 现在有趣的部分:从哪里获得所有这些?

    令人惊讶的是,一个好的nibless应用程序示例是OSX的QEMU端口的UI(是的,模拟器)。 Apple的官方GLEssenstialPractices演示还显示了设置OpenGL渲染管道所需的所有信息。其余的一切都取决于你。

    系统级OSX编程的详细和现代介绍可以在Mark Dalrymple的“高级Mac OS X编程”一书中找到。它解释了很多东西,在阅读了所有这些之后,我已经理解了操作系统中的大多数设计决策(如果从性能角度考虑,它确实让你接受所有“非标准”的东西)。

    要通过“nibless”编程,我建议您阅读像这样的博客文章http://blog.kleymeyer.com/2008/05/creating-cocoa-applications-programatically-ie-nib-less/谷歌搜索有很多帮助。

    相同的技巧适用于CocoaTouch / iOS,并且在SO上有很多问题的答案,例如Cocoa touch/Xcode - generating NIB-less graphics context

答案 1 :(得分:2)

如果要创建跨平台应用程序,可以使用命令行工具模板创建项目。 接下来,导入OpenGL和GLUT框架。这将使您获得一个带有所需OpenGL和GLUT标题的“空白”C ++项目。

Lighthouse 3D为您提供有关便携性以及如何启动第一个项目的一些提示。 http://www.lighthouse3d.com/tutorials/glut-tutorial/initialization/

答案 2 :(得分:-1)

我创建了一个软件层(名为cocoglut),允许将基本或必要的GLUT调用转换为COCOA。该库允许创建/销毁窗口并从C / C ++应用程序注册回调,只需使用GLUT调用,无需nib文件或XCode项目文件(并且可以从命令行编译)。此选项使用完整的视网膜显示分辨率。来源位于GitHub