OpenGL заголовки для OS X и Linux - PullRequest
       0

OpenGL заголовки для OS X и Linux

11 голосов
/ 11 октября 2010

Я бы хотел, чтобы в моей программе 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>
}

Ответы [ 4 ]

30 голосов
/ 11 октября 2010

Вот что я использую:

#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, кажется.

Вы можете поместить это в отдельный включаемый файл (скажем, gl_include.h), если у вас много файлов, для которых требуется OpenGL

Матф

12 голосов
/ 11 октября 2010

В качестве альтернативы, поместите специфичные для платформы заголовки в свои собственные файлы:

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"

, а затем позвольте вашей системе сборки указать правильный путь поиска на основе целевой платформы.

5 голосов
/ 11 октября 2010
#ifdef __APPLE__
#include <OpenGL/gl.h> //OS x libs
#include <OpenGL/glu.h>
#include <GLUT/glut.h>
#else
#include <GL/glut.h>
#endif
0 голосов
/ 28 августа 2017

Что мы используем для 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...