【发布时间】:2012-09-07 05:21:04
【问题描述】:
编辑:这个问题已在 cmets 中间接回答(使用 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 的最简单方法是什么为了这个任务而不是 Carbon?
我在自己单独的 .cpp/.h 文件中拥有所有“碳代码”,该文件只有两个功能,一个是创建 OpenGL 窗口,另一个是使用 ReceiveNextEvent 的消息泵。
编辑: 更清楚地说,我正在寻找最好的方法来设计(或多或少)替代我现有的 Carbon 窗口创建和消息泵功能,但在 Cocoa 中。我知道作为一个不同的 API,使用不同的语言概念,简单的一对一命令替换是不够的。我现有的代码有一个适用于 Mac 的源代码文件,该文件有两个函数,它们执行我调用的核心任务(使用 Carbon),InitWindow 和 DoEvents。它们分别创建窗口,并循环处理未决事件。我的目标是用使用 Cocoa 的源代码文件替换这个源代码文件,公开相同的功能,因此我的核心代码几乎没有修改。
实现我的目标的最佳方式是什么?我不熟悉 Cocoa,Obj-C 对我来说是陌生的。
【问题讨论】:
-
不要使用碳。无论如何,它已经过时且已被弃用。您可以使用本机 NSOpenGLView,也可以使用 SDL,但您必须使用 NSOpenGLView 完成我的工作,因为您必须自己实现很多东西。
-
我只需要一个简单的“插入”替换我在 Cocoa 中的 Carbon 代码。 SDL 对于我需要的东西来说太过分了。
-
不幸的是,将项目从碳替换为可可并非易事,因为可可不是碳替代品。
-
这应该不是一项不可逾越的任务,因为我只使用了几个 Carbon 命令,而且我的需求很少。本质上是 Carbon 中的“CreateNewWindow”、“ReceiveNextEvent”(以及与这两者交互所需的任何其他 API)。如果我正在创建一个 GUI 应用程序,或者有更多这些非常简单的需求,我可以理解这是一项艰巨的任务,但这应该是相当简单的。我只是不熟悉 Cocoa 和 Obj-C 界面,所以不确定如何进行这项手术。
-
您是否考虑过通过 GLUT 而不是使用纯 C++ 来实现它?听起来比通过学习Objective-C使用可可更有效的方法
标签: c++ macos cocoa opengl macos-carbon