11
votes

Les en-têtes OpenGL pour OSX et Linux

J'aimerais avoir à la fois l'inclut pour OS X ainsi que Linux dans mon programme OpenGL (C ++) Comment puis-je définir mon programme pour utiliser un si l'autre n'est pas disponible? Voici ce que je fais actuellement: xxx


0 commentaires

4 Réponses :


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

0 commentaires

31
votes

Voici ce que j'utilise:

#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


4 commentaires

Je préfère le formulaire # si défini au lieu de #Ifdef Beacuse Vous pouvez ensuite utiliser #elif défini et avoir un seul #endif < / code> plutôt que #else , #ifdef avec plusieurs #endif


En général, cela sonne comme une meilleure idée. Bien sûr, ici, le #Ifdef _win32 est effectivement plié dans la branche de la première pomme du premier #Ifdef, donc je ne suis pas sûr qu'elle réduirait les #endifs. Mais il peut être plus clair si j'ai fait 3 branches distinctes pour Mac / Win / * Nix, et utilisée #IF définie, comme vous le suggérez.


Jerry - Oups - J'ai copié ceci de mon propre projet sans glutte. Modifier le temps.


Je pensais que vous n'aviez qu'à inclure de la glutte et les deux autres seraient inclus par la glutte?



12
votes

Alternativement, placez les en-têtes spécifiques à la plate-forme dans leurs propres fichiers:

linux \ plateforme.h p> xxx pré>

osx \ plate-forme.h p>

#include "platform.h"


1 commentaires

@Steve M IFDEFS ne sont pas terribles. Pour une base de code qui tente d'être portable, c'est la meilleure chose à utiliser pour vous assurer de ne pas avoir à vous soucier des configurations de projet. La bibliothèque sera automatiquement configurée lors de la compilation. IFDEFS sont une godet pour les codesbases essayant d'être portable.



2
votes

Ce que nous utilisons pour OSX, UNIX, Linux, Android et 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


0 commentaires