【问题标题】:Is there a simple way for opening one (or many) opengl window in mac OS X with C++?有没有一种简单的方法可以在 Mac OS X 中使用 C++ 打开一个(或多个)opengl 窗口?
【发布时间】:2011-06-04 09:01:15
【问题描述】:

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

编辑:该死,Glut 使用 glutMainLoop() 接管了应用程序的控制权,我希望对循环有更多的控制权。
将尝试使用 freeglut,虽然我找不到 OSX 二进制文件,而且我在尝试编译别人的代码时总是很倒霉。

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

【问题讨论】:

  • 不要讨厌我最喜欢的语言!试着远离 C++ 一周,只用一整周的 Objective-C 编写代码,那一周的前一周将是你最后一次使用 C++。
  • 哈哈谢谢,我可以。但是这个项目我想保持它的可移植性,老实说,当我尝试学习 ObjC 时,它的语法真的让我很头疼。
  • 你为什么要避免使用Objective-C?这并不是说你的项目中有 3% 是 Objective-C,而另外 97% 的 C/C++ 会杀死你。
  • 好吧,你可能是对的,但这个问题与 ObjC 无关。编写特定于 OSX 的代码意味着我将不得不在移植到 Windows 时编写糟糕的代码。使用为我处理 OpenGL 窗口的可移植库会很棒。
  • 为了记录,那是我过去的谈话,我对Objective C有了更多的了解,我现在真的很喜欢它。 :D

标签: c++ xcode macos opengl


【解决方案1】:

如果您不想使用objective-c,您将不得不使用已弃用的碳库、X11 或其他库(如GLUT)来创建窗口。如果考虑到可移植性,要么选择 GLUT,要么您需要为每个要支持的平台编写自己的窗口管理代码。

如果你不走 GLUT 路线,你需要为每个操作系统编写窗口管理代码,所以我强烈建议你硬着头皮用 Objective-C++ 编写窗口管理。您真正需要知道的唯一一件事是,无论使用哪种语言,指针始终是指针,因此只需将 Objective-c id 存储为 void* 并将它们转换回 id,它实际上很容易工作。

【讨论】:

    【解决方案2】:

    我猜NeHe tutorials 可以帮忙;

    【讨论】:

    • 是的,在我的 windows 时代就在附近,要重新访问。
    【解决方案3】:

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

    编辑:由于您在使用 glutMainLoop() 时遇到问题,因此您可能尝试做的事情超出了 GLUT 的设计目的——它主要用于 hack、一次性项目和 opengl 演示。而且freeglut不会在mac上编译OOB,至少这是我的经验。

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

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

    【讨论】:

    • 你的意思是 C 的包装器?我对普通 C 没问题。
    【解决方案4】:

    这个问题已经问了 3 年多了,但仍然很新鲜。我最近刚刚经历了类似的计划学校课程的练习,并试图找出在 Mac/Windows/Linux/mobile 上使用 OpenGL 项目的最佳可移植库是什么。也许我的笔记会帮助某人做出决定。我只提到了我考虑过的 main 选项。

    更高级别的 API,用于窗口管理和附加功能,例如精灵、字体、声音、事件处理等:

    • SFMLgithub repo:nice&tidy,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:我只是为了完整性而提到它。它不管理窗口,但有助于管理 OpenGL 上下文,您可以将它与例如 GLWF 或 SDL 一起使用。

    其他:

    • Freeglut:GLUT 的开源延续。适用于小型演示项目。我自己没有使用过它,但是看到了很好的文档和演示代码。正在积极开发中。
    • GLUT:旧款,已停产。网络上的旧版演示和代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-11
      • 2011-02-16
      • 2011-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多