0

我想知道是否有任何 if 语法可用于在 mac 和 windows 上运行 opengl c++ 代码。更具体地说,我可以在代码的开头放置一个 if 条件来确定代码是在 mac(通常是 xcode)还是在 windows(通常是 visual c++)上运行,并相应地包含头文件。

4

3 回答 3

6

您可以使用预处理器#ifdef

#ifdef __APPLE__
#ifdef TARGET_OS_MAC

  #include <osx.h>

#endif
#elif defined(_WIN32) || defined(_WIN64)

  #include <win.h>

#endif
于 2012-08-12T06:43:10.823 回答
1

您需要抽象系统接口以使用合适的接口。这可以在构建时检测到,或者您可以为 Windows 构建准备好 MSVC 项目,并在 OS X 上准备好 Xcode/Makefile 项目。

在 Win32 上,我相信您知道使用 Win32 API 仍然很重要。在 OS X 上,Carbon 即将不受支持,因此您的最小窗口系统将必须使用 Objective C 来实现。幸运的是,这并不是很困难,一旦您拥有它,您的主应用程序就可以毫无顾虑地执行。

对于原型设计,使用为此设计的框架可能更明智,例如 SDL/GLUT/Qt 等。对于生产,您将获得更好的性能和控制,并专门针对每个目标平台。

于 2012-08-12T06:47:23.330 回答
1

如果您在 C/C++ 中使用标准头文件,那么您只需要使用 glut 来初始化 OpenGL 窗口并从用户那里获取键盘/鼠标事件。GLUt 将为您抽象操作系统层。

这是 GLUT for mac 的链接(入门)

http://developer.apple.com/library/mac/#samplecode/glut/Introduction/Intro.html

在上一个链接中你会发现(OS Independent)

这是 GLUT 下载链接:

http://www.opengl.org/resources/libraries/glut/glut_downloads.php

您只需要两个单独的项目文件 myProject.xcode 和 myProject.vcproj 所有其他文件都应该共享。

注意: 应该避免使用计时器和所有其他与操作系统相关的东西,而应该使用 GLUT 给定的功能。

在为 windows/Linux/mac 构建时,您必须链接到适当的 GLUT。

于 2012-08-12T08:51:49.487 回答