有没有一种简单的方法可以在Mac OS X中使用C ++打开一个(或多个)opengl窗口?

时间:2011-01-06 00:03:41

标签: c++ xcode macos opengl

是的,我讨厌Objective-c,而且我的项目是可移植的,所以我想用C ++编写尽可能多的代码,理想的是100%。
所以我有一个使用Xcode制作的常规C ++项目,并且想要打开一些OpenGL窗口。

编辑:该死的,Glut用glutMainLoop()接管应用程序的控制权,我希望能更好地控制循环。
尝试freeglut,虽然我找不到OSX二进制文件,但我总是试图编译其他人的代码。

更新
我再次尝试链接到SDL 1.3,这次我可以让它工作!俞灏!
我一直想使用SDL,但是必须使用多个窗口,这是版本1.3的一个功能,正在开发中,我永远无法让它工作。
由于它可以移植到数以万计的操作系统,并且处理2D图形以及OpenGL,我将继续使用它。谢谢大家!

4 个答案:

答案 0 :(得分:3)

如果您不想使用objective-c,则必须使用已弃用的碳库X11或其他库(如GLUT)来创建窗口。如果可移植性是一个问题,请选择GLUT路由,或者您需要为要支持的每个平台编写自己的窗口管理代码。

如果你没有进入GLUT路线,你需要在每个操作系统之前编写窗口管理代码,因此我强烈建议你咬紧牙关并用objective-c ++编写窗口管理。你真正需要知道的唯一事情就是指针总是一个指针,无论它处于哪种语言,所以只需将objective-c id存储为void *并将它们转换回id,它实际上非常容易。

答案 1 :(得分:2)

我猜NeHe tutorials可以提供帮助;

答案 2 :(得分:2)

GLUT可以很好地满足你的目的,虽然你可能希望有一个很好的C ++包装器。我最终破解了自己,虽然GLUT对包装不友好,但它是可行的。

编辑:由于你有一个关于glutMainLoop()的问题,你可能会尝试做更多的事情而不是GLUT - 它主要用于黑客,一次性项目和opengl演示。并且freeglut不会在mac上编译OOB,至少这是我的经验。

对于便携式,功能更全面的应用程序,Qt可能是您的最佳选择。否则,设计C ++以实现可移植性,并在每个平台上使用瘦GUI层。如果在每个平台上运行某些东西是最重要的,请选择前者。如果每个平台上最佳用户体验最重要,请选择后者。您可能会发现“瘦”并不是所涉及内容的最具描述性的术语。

我发现这个演示对于使一个简单的Cocoa / OpenGL窗口工作很有用,即使代码中有许多荒谬的错误:http://developer.apple.com/library/mac/#samplecode/CocoaGL/Introduction/Intro.html

答案 3 :(得分:1)

这个问题已在3年前提出过,但仍然很新鲜。我最近刚刚进行了类似的计划学校课程练习,并试图找出在Mac / Windows / Linux /移动设备上使用OpenGL项目的最佳便携式库。也许我的笔记会帮助某人做出决定。我只提到了我考虑过的主要选项。

更高级别的API ,用于窗口管理以及其他好东西,如精灵,字体,声音,事件处理等:

  • SFMLgithub repo:很好的和整洁的,C ++,面向对象的库,本地与OpenGL集成。在MacOS,Win和Linux上开箱即用的管理Windows和OpenGL 3.3上下文的可移植性。 2.2分支(github)中提供的移动支持。
  • SDL2:支持所有主流平台,包括移动平台。 OpenGL上下文需要在某种程度上手动管理,因此使用GLEW非常方便(见下文)。比SFML低一点。

低级API ,主要用于窗口和OpenGL上下文管理:

  • GLWF:这几乎是现代OpenGL的GLUT替代品。相当低级别,但可移植:Win,OSX,Lin。积极发展。
  • GLEW:我只是因为完整性而提到它。它不管理Windows,但有助于管理OpenGL上下文,例如,您可以将它与GLWF或SDL一起使用。

其他:

  • Freeglut:GLUT的开源继续。适用于小型演示项目。我自己没有使用它,但看到了很好的文档和演示代码。积极发展。
  • GLUT:旧的,停止了。网络上的遗留演示和代码。