编辑:这个问题已在评论中间接回答(使用GLUT以避免需要),但因为它没有作为答案发布,我不能“接受”它,尽管我的问题已经解决。
我有一个用C ++编写的跨平台OpenGL应用程序(在Mac OS X上)使用Carbon来创建窗口和消息泵(Think ... NeHe Lesson 1)。最近对使用C ++ 11功能的代码进行的更改使其与XCode捆绑的GCC不兼容。
我尝试使用MacPorts,HomeBrew等系统的所有尝试都因为不同的原因而失败(主要是因为我需要为Carbon支持编译32位)。我原本打算问一下是否有人有更好的解决方案在Mac OS X 10.8中安装更新的G ++。
这似乎是一个短视的解决方案(在某些时候,我需要升级到Cocoa和64位)所以我的问题已经演变为询问什么是最简单的方法让我现有的(非常大的)应用程序利用Cocoa这个任务而不是碳?
我将所有“Carbon Code”放在它自己独立的.cpp / .h文件中,该文件只有两个函数,一个用于创建OpenGL窗口,另一个是使用ReceiveNextEvent的消息泵。
修改 为了更清楚,我正在寻找最好的方法来设计(或多或少)替换我现有的Carbon窗口创建和消息泵功能,但在Cocoa中。我理解,使用不同的语言概念作为一个不同的API,简单的一对一命令替换是不够的。我现有的代码有一个Mac的源代码文件,它有两个函数来执行我调用的核心任务(使用Carbon),InitWindow和DoEvents。它们创建窗口,并分别循环处理挂起的事件。我的目标是用一个使用Cocoa的源代码替换这个源代码文件,暴露相同的函数,以便几乎不修改我的核心代码。
实现目标的最佳方法是什么?我对Cocoa不熟悉,Obj-C对我来说很陌生。
答案 0 :(得分:0)
64位的Cocoa肯定听起来像个好主意。如果您想让用户满意,我建议您使用一些原生UI。
最简单的方法是创建一个NSWindow
,其中包含NSOpenGLView
。您可以在Interface Builder中或在代码中执行此操作。最好通过使用Xcode的模板(File> New Project> Cocoa App)创建一个新的Cocoa应用程序来实现。默认情况下,这会给你一个窗口。您可以在Interface Builder中打开它并向其添加NSOpenGLView
。您可以将视图设为NSOpenGLView
的自定义子类,并将事件处理添加到其中。有关Cocoa如何调度事件的更多信息,请参阅NSResponder
的文档。