繁体   English   中英

适用于OS X和Linux的OpenGL标头

[英]OpenGL headers for OS X & Linux

我想在我的opengl程序(C ++)中同时拥有OS X和linux的包含,如果另一个不可用,如何设置我的程序使用一个? 这是我目前正在做的事情:

 if(!FileExists(OpenGL/gl.h))
    #include <GL/glut.h> //linux lib
else {
    #include <OpenGL/gl.h> //OS x libs
    #include <OpenGL/glu.h>
    #include <GLUT/glut.h>
}

这是我使用的:

#ifdef __APPLE__
#include <OpenGL/gl.h>
#include <OpenGL/glu.h>
#include <GLUT/glut.h>
#else
#ifdef _WIN32
  #include <windows.h>
#endif
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>
#endif

mac的所有编译器(好吧,我猜那是gcc,也许是clang)应该定义__APPLE__ 我抛出_WIN32 ,因为windows.h平台上的gl.h必须包含在windows.h中。

如果您有许多需要OpenGL的文件,可以将它放在自己的包含文件(例如gl_includes.h)中

-matt

或者,将特定于平台的标头放入自己的文件中:

Linux的\\ platform.h

#include <GL/gl.h>
#include <GL/glu.h>

OSX \\ platform.h

#include <OpenGL/gl.h> //OS x libs
#include <OpenGL/glu.h>
#include <GLUT/glut.h>

的win32 \\ platform.h

#include <windows.h>
#include <GL/gl.h>
#include <GL/glu.h>

并包含在代码中:

#include "platform.h"

然后让您的构建系统根据目标平台指定正确的搜索路径。

#ifdef __APPLE__
#include <OpenGL/gl.h> //OS x libs
#include <OpenGL/glu.h>
#include <GLUT/glut.h>
#else
#include <GL/glut.h>
#endif

我们用于OSX,Unix,Linux,Android和iOS的内容

#if defined(_WIN32) || defined(_WIN64)
#  include <gl/glew.h>
#  include <GL/gl.h>
#  include <GL/glu.h>
#elif __APPLE__
#  include "TargetConditionals.h"
#  if (TARGET_OS_IPHONE && TARGET_IPHONE_SIMULATOR) || TARGET_OS_IPHONE
#    include <OpenGLES/ES2/gl.h>
#    include <OpenGLES/ES2/glext.h>
#  else
#    include <OpenGL/gl.h>
#    include <OpenGL/glu.h>
#    include <OpenGL/glext.h>
#  endif
#elif defined(__ANDROID__) || defined(ANDROID)
#  include <GLES2/gl2.h>
#  include <GLES2/gl2ext.h>
#elif defined(__linux__) || defined(__unix__) || defined(__posix__)
#  include <GL/gl.h>
#  include <GL/glu.h>
#  include <GL/glext.h>
#else
#  error platform not supported.
#endif

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM