我想知道是否有任何 if 语法可用于在 mac 和 windows 上运行 opengl c++ 代码。更具体地说,我可以在代码的开头放置一个 if 条件来确定代码是在 mac(通常是 xcode)还是在 windows(通常是 visual c++)上运行,并相应地包含头文件。
3 回答
您可以使用预处理器#ifdef
。
#ifdef __APPLE__
#ifdef TARGET_OS_MAC
#include <osx.h>
#endif
#elif defined(_WIN32) || defined(_WIN64)
#include <win.h>
#endif
您需要抽象系统接口以使用合适的接口。这可以在构建时检测到,或者您可以为 Windows 构建准备好 MSVC 项目,并在 OS X 上准备好 Xcode/Makefile 项目。
在 Win32 上,我相信您知道使用 Win32 API 仍然很重要。在 OS X 上,Carbon 即将不受支持,因此您的最小窗口系统将必须使用 Objective C 来实现。幸运的是,这并不是很困难,一旦您拥有它,您的主应用程序就可以毫无顾虑地执行。
对于原型设计,使用为此设计的框架可能更明智,例如 SDL/GLUT/Qt 等。对于生产,您将获得更好的性能和控制,并专门针对每个目标平台。
如果您在 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。