3

编辑:这个问题已在评论中间接回答(使用 GLUT 来避免需要任何一个),但由于它没有作为答案发布,尽管我的问题已解决,但我不能“接受”它。

我有一个用 C++ 编写的跨平台 OpenGL 应用程序,它(在 Mac OS X 上)使用 Carbon 来创建窗口和消息泵(想想……NeHe 第 1 课)。最近使用 C++11 特性对我的代码进行的更改使其与 XCode 捆绑的 GCC 不兼容。

我所有使用 MacPorts、HomeBrew 等系统的尝试都因不同的原因而失败(主要是因为我需要编译 32 位以支持 Carbon)。我最初想问是否有人有更好的解决方案来在 Mac OS X 10.8 中安装更新的 G++。

这似乎是一个短视的解决方案(在某些时候,我需要升级到 Cocoa 和 64 位)所以我的问题已经演变为询问让我现有的(非常大的)应用程序利用 Cocoa 来完成这项任务的最简单方法是什么而不是碳?

我在自己单独的.cpp/.h 文件中拥有所有“碳代码”,该文件只有两个功能,一个用于创建 OpenGL 窗口,另一个是使用 ReceiveNextEvent 的消息泵。


编辑: 为了更清楚,我正在寻找最好的方法来设计(或多或少)替代我现有的 Carbon 窗口创建和消息泵功能,但在 Cocoa 中。我知道作为一个不同的 API,使用不同的语言概念,简单的一对一命令替换是不够的。我现有的代码有一个适用于 Mac 的源代码文件,该文件有两个函数,它们执行我调用的核心任务(使用 Carbon),InitWindow 和 DoEvents。它们分别创建窗口,并循环处理未决事件。我的目标是用使用 Cocoa 的源代码文件替换这个源代码文件,公开相同的功能,因此对我的核心代码几乎没有修改。

实现我的目标的最佳方式是什么?我不熟悉 Cocoa,Obj-C 对我来说是陌生的。

4

1 回答 1

0

使用 Cocoa 64 位绝对是个好主意。如果您也想让您的用户满意,我建议您使用一些本机 UI。

最简单的方法是在其中创建NSWindow一个NSOpenGLView。您可以在 Interface Builder 或代码中执行此操作。最好通过使用 Xcode 的模板(文件 > 新项目 > Cocoa 应用程序)创建一个新的 Cocoa 应用程序来做到这一点。默认情况下,这会给你一个窗口。您可以在 Interface Builder 中打开它并添加一个NSOpenGLView。您可以使视图成为 的自定义子类NSOpenGLView,并将您的事件处理添加到其中。NSResponder有关Cocoa 如何调度事件的更多信息,请参阅文档。

于 2012-09-14T05:17:21.687 回答