używam OpenGL 3.2 i GLUT na OSX, i kompiluję w wierszu poleceń w następujący sposób:
gcc test.c -framework OpenGL -framework GLUT
u góry mojego pliku źródłowego ręcznie dołączam dwa nagłówki:
#include <OpenGL/OpenGL.h>
#include <GLUT/GLUT.h>
jak dotąd wszystko było w porządku i eleganckie. ale dzisiaj zauważyłem, że użycie GL_PRIMITIVE_RESTART daje mi niezadeklarowany błąd identyfikatora ...
czy są inne nagłówki, które muszę dołączyć, czy też inne frameworki? czy też Apple po prostu nie obsługuje GL_PRIMITIVE_RESTART w implementacji OpenGL 3.2?
Odpowiedzi:
1 dla odpowiedzi № 1Nie dołączasz bezpośrednio żadnego z nagłówków OpenGL. <OpenGL/OpenGL.h>
może brzmieć jak nagłówek OpenGL, ale tak naprawdę zawiera definicje CGL.
Otrzymujesz pośrednio nagłówek OpenGL, ponieważ <GLUT/GLUT.h>
obejmuje <OpenGL/gl.h>
. Niestety jest to plik nagłówkowy wcześniejszy niż GL3, dlatego nie masz definicji poziomu GL3.
Żądany nagłówek to <OpenGL/gl3.h>
. Możesz dołączyć go sam, ale najprawdopodobniej zobaczysz pewne ostrzeżenia, ponieważ <GLUT/glut.h>
nadal będzie zawierał stary nagłówek i wskaże możliwe konflikty. Najlepsze, co znalazłem, to użycie sekwencji włączania takiej jak ta:
#include <OpenGL/gl3.h>
#define __gl_h_
#include <GLUT/glut.h>
The #define
odpowiada osłonie nagłówka w <OpenGL/gl.h>
i zapobiega włączeniu go.
Apple wycofuje GLUT. Musisz wyłączyć dodatkowe ostrzeżenia w OS X 10.9, aby nie narzekać na używanie GLUT. Nie obsługuje także tworzenia nowszych kontekstów niż GL 3.2.