OpenGL intestazioni per OS X & Linux

Mi piacerebbe avere sia la comprende per OS X e linux nel mio programma opengl (C++) come posso impostare il mio programma per l’utilizzo di uno se l’altro non è disponibile? Ecco quello che sto facendo attualmente:

 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>
}
InformationsquelleAutor Drew | 2010-10-11

 

4 Replies
  1. 30

    Qui è quello che io uso:

    #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

    Tutti i compilatori per il mac (beh,credo che il gcc, e forse clang) è necessario definire __APPLE__. Butto la _WIN32 sin windows.h deve essere incluso prima di gl.h su piattaforme windows, sembra.

    Si può mettere nel proprio file di inclusione (dire gl_includes.h) se si dispone di molti file che hanno bisogno di OpenGL

    -matt

    • Io preferisco il #if defined invece di #ifdef perchè è quindi possibile utilizzare #elif defined e hanno un unico #endif piuttosto che #else,#ifdef con più #endif
    • +1 per il non tra glut.h ovunque ci sia!
    • In generale, che la fa sembrare un’idea migliore. Naturalmente, qui, il #ifdef _WIN32 in realtà è piegato in non-apple ramo del primo #ifdef, quindi non sono sicuro di ciò consentirebbe di ridurre la #endifs. Ma potrebbe essere più chiara, se ho fatto 3 rami separati per mac/win/*nix, e usato #se definito, come suggerisci tu.
    • Jerry – oops – ho copiato questo dal mio, non glut progetto. Modificare il tempo.
    • Ho pensato che solo dovuto includere GLUT e gli altri due potrebbero essere inclusi mediante GLUT?
  2. 12

    In alternativa, mettere la piattaforma intestazioni specifiche nelle proprie file:

    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>

    e includere nel codice:

    #include "platform.h"

    e poi lasciate che il vostro sistema di generazione di specificare il corretto percorso di ricerca basato sulla piattaforma di destinazione.

    • M ifdefs non sono terribili. Per una codebase cercando di essere portatile, che è la cosa migliore che puoi utilizzare per assicurarsi che non hai bisogno di preoccuparsi di configurazioni di progetto. La biblioteca verrà automaticamente configurato in caso di compilazione. ifdefs sono una manna dal cielo per le basi di codice cercando di essere portatile.
  3. 5
    #ifdef __APPLE__
    #include <OpenGL/gl.h> //OS x libs
    #include <OpenGL/glu.h>
    #include <GLUT/glut.h>
    #else
    #include <GL/glut.h>
    #endif
  4. 0

    Che si usano per OSX, Unix, Linux, Android e 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

Lascia un commento