Pracuję nad silnikiem gry i bardzo się rozwinęłam. Ponieważ silnik musi działać również na Macu, nadal używam OpenGL 3.2 i GLSL 1.2 :-(. Używam GLEW, który, jak sądziłem, rozwiązałby dla mnie problemy z rozszerzeniamiRozszerzenia OpenGL, jak z nich korzystać poprawnie w C i glsl
EDYCJA: Tymczasem część pytania jest odpowiedział - czytaj dalej na następnej EDIT:
zawsze byłem w stanie dokonać shadery pracować na obu Windows i Mac, czasami muszę dodać linię w kodzie GLSL jak #extension GL_EXT_gpu_shader4: enable, aby go działa na komputerze Mac, wydaje się więc, że moja wersja systemu Windows ostrzeże Cię podczas kompilowania tego samego modułu cieniującego, ale zadziała,
Ale od tego czasu Zacząłem używać shaderów geometrii, mój koszmar się zaczął. Z jakiegoś powodu Mac spodziewa się, że będę używał #extension GL_EXT_gpu_shader4: włącz, podczas gdy Windows oczekuje, że będę używał #extension GL_EXT_geometry_shader4: enable. To sprawia, że tworzenie wirtualnego modułu cieniującego jest mniej oczywiste.
także, i to jeszcze bardziej irytujące: wersja systemu Windows chce mnie do używania: glTransformFeedbackVaryings i myślę, że GLEW stałaby się dostępna dla mac ale tam wyraźnie trzeba użyć glTransformFeedbackVaryingsEXT, które nie będą pracować w wersji Windows. Muszę #ifdef dla APPLE użyć tego, co jest potrzebne. Ten sam problem z glBeginTransformFeedback i glBeginTransformFeedbackEXT.
Ale zarówno przyjąć glProgramParameteriEXT, tam nie trzeba distiction ...
Rozumiem, że to tylko ze sprzężeniem zwrotnym przekształcenia że mam problem, ale ... co to wszystko o?
Pomyślałem, że rozumiem, jak działają rozszerzenia OpenGL, ale zaczynam tracić to zrozumienie.
Dochodzi do punktu, w którym myślę, że kiedy uruchomię kod na innym systemie Windows lub innym systemie Mac lub innym systemie Linux, będę miał nowe problemy, ponieważ istnieją różne karty graficzne lub coś takiego.
Czy ktoś może mi pomóc to zrozumieć? Czytałem podręcznik OpenGL o rozszerzeniach, więc brakuje mi czegoś oczywistego. Jak mogę się upewnić, że mój kod będzie zawsze działał?
EDIT: Usuwając GLEW całkowicie od wersji Mac i pełne wykorzystanie własnego OpenGL 3.2 wdrożenie systemu Mac za wszystkie namings są normalne i mogę całkowicie usunąć #extension GL_EXT_gpu_shader4: enable z mojego shaderów. Jedyna rzecz, która mnie martwi, to to, że dla shaderów geometrii potrzebuję funkcji, która nie wydaje się istnieć, ale nie wydaje się istnieć, ale robi to. Z jakiegoś powodu ta funkcja działa również w systemie Windows. Czemu? Czy mogę mieć pewność, że będzie działać na wszystkich systemach/sprzęcie?
Jabłko zwykle jest nieco z tyłu, więc może po prostu chcesz sprawdzić oficjalną obsługiwaną wersję. [this] (http://stackoverflow.com/questions/15101939/glsl-vertex-shader-crashes-computer) został opublikowany tuż przed twoim pytaniem. –
Hm, nie sądzę, że post pomaga mi. Pracuję na OSX Lion 10.7.5 i jest to karta graficzna AMD. Ale jeśli dobrze cię rozumiem, problemy są związane ze złym wdrożeniem Apple'a? W jaki sposób wszystkie te gry w pary są przenoszone i działają? – scippie
Dlaczego nie używasz Core OpenGL 3.2 dostępnego na MacOSX. –