c++ - 我如何从 Cocoa 中获取 'break away' 并在 C/C++ 中开发 Mac OpenGL 应用程序?

标签 c++ xcode macos opengl glut

我希望开始使用 C 或 C++ 进行一些 3D 编程。我遇到的问题是,似乎我能找到的唯一适用于 Mac OS 的教程使用 objective-c 和 Cocoa 框架。我想获得与 Windows 用户或多或少相同的环境。

如果我尝试使用文本编辑器和 g++ 编译器,我会丢失 header ,但是,如果我尝试使用 Xcode,我将不得不与 Cocoa 打交道,这让我很沮丧。我真的不明白为什么 Mac 上预装的 OpenGL/GLUT 会强制我使用 Xcode,但似乎没有它我就无法获取头文件。

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

最佳答案

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

  1. 用 Objective-C 编写“基本”nibless 应用程序。它只会是一个 AppDelegate 类和 main() 函数中的一些设置
  2. 在您在 AppDelegate 的 didFinishLaunching 事件处理程序中创建的窗口中添加自定义 NSGLView 后代
  3. 在 NSGLView 初始化中设置 CVDisplayLink 和渲染回调
  4. 在 CVDisplayLink 的回调中使用您现有的 OpenGL 渲染代码

现在是有趣的部分:从哪里获得所有这些?

令人惊讶的是,一个很好的 nibless 应用程序示例是 OSX 的 QEMU 端口(是的,模拟器)的 UI。此外,Apple 的官方 GLEssenstialPractices 演示显示了设置 OpenGL 渲染管道所需的所有信息。剩下的就看你了。

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

要完成“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

关于c++ - 我如何从 Cocoa 中获取 'break away' 并在 C/C++ 中开发 Mac OpenGL 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10694594/

相关文章:

ios - Xcode降级错误

ios - Xcode:创建新项目时出现 pod install 错误

Git 在切换分支时不删除文件

iphone - 将VNC Mac应用程序的Chicken移植到iPhone应用程序中的问题

c++ - 我可以将 `extern template` 放入头文件中吗?

c++ - 在 Makefile 中解决依赖关系的常用方法是什么?

c++ - 指向指针的多个指针

ios - 如何检查键盘是否显示?

C++ - 自定义矩阵结构

xcode - 录音语义问题