Заголовки OpenGL для OS X и Linux
Я хотел бы иметь как включенные для OS X, так и linux в моей программе opengl (С++), как я могу настроить свою программу на использование, если другой недоступен? Вот что я сейчас делаю:
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>
}
Ответы
Ответ 1
Вот что я использую:
#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. Кажется.
Вы можете поместить это в свой собственный файл include (скажем gl_includes.h), если у вас много файлов, для которых требуется OpenGL
Матф
Ответ 2
В качестве альтернативы поместите определенные заголовки платформы в свои собственные файлы:
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"
а затем пусть ваша система сборки задает правильный путь поиска на основе целевой платформы.
Ответ 3
#ifdef __APPLE__
#include <OpenGL/gl.h> //OS x libs
#include <OpenGL/glu.h>
#include <GLUT/glut.h>
#else
#include <GL/glut.h>
#endif
Ответ 4
Что мы используем для 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