2014-12-10 10 views
12

Rozwijając na laptopie z kartą graficzną Intel, podczas kompilowania shaderów wierzchołków, mam to:Get obsługiwane wersje GLSL

0:1(10): error: GLSL 3.30 is not supported. Supported versions are: 1.10, 1.20, 1.30, 1.00 ES, and 3.00 ES 

ok, więc dostosować shader używać wersji 300 ES. Tymczasem chcę sprawdzić co GLSL aktualne wersje obsługuje kierowca/karty, więc to wykorzystać:

glGetString (GL_SHADING_LANGUAGE_VERSION) 

które, ku mojemu przerażeniu, zwraca tylko „1,30”.

Jak mogę uzyskać pełną listę? Lub nawet jeśli nie jest to pełna lista, w jaki sposób mogę uzyskać standardowe wersje obsługiwane GL i wersje obsługiwane GLES?

+0

Istnieje mapowanie 1-1 pomiędzy wersją OpenGL a maksymalnie obsługiwaną wersją GLSL –

+0

Tak, ale mogę znaleźć tylko obsługiwaną wersję GLSL dla każdej wersji OpenGL. Nie mogłem znaleźć tej samej korespondencji dla GLSL ES. –

+2

@RhiakathFlanders: 1,00 ES odpowiada OpenGL ES 2.0 i 3,00 ES odpowiada OpenGL ES 3.0. Po wydaniu ES 3.0, przeszedł on ten sam proces zmiany numeracji, co pulpit GL w wersji 3.3 (_e.g._ GLSL 1.50 -> GL 3.2, ale zaczynając od GL 3.3, GLSL 3.30 -> GL 3.3). Są w stanie zsynchronizować się z wersją GL we wszystkich nowoczesnych implementacjach GLSL (desktop i ES). W rzeczywistości GL ES 3.1 został wydany w czerwcu i zgodnie z wersją GLSL ES wprowadzono "3.10 es". –

Odpowiedz

17

W stacjonarnym GL, odwzorowanie pomiędzy wersją GL i wersji GLSL jest następujący:

GL version      GLSL version 
2.0       1.10 
2.1       1.20 
3.0       1.30 
3.1       1.40 
3.2       1.50 
3.3       3.30 
4.0       4.00 
4.1       4.10 
4.2       4.20 
4.3       4.30 
4.4       4.40 
4.5       4.50 
... 

Więc zaczynając GL 3.3, numery wersji są „zsynchronizowane”, aby ułatwić życie. Zauważ też, że nie ma wyraźnej wersji 1.00. To było dostępne, gdy shadery zostały opracowane jako rozszerzenie GL 1.x. Jednak to nigdy nie było główną cechą OpenGL, więc wersja zaczyna się od 1.10 tutaj (co jest również domyślne, jeśli nie masz dyrektywy #version w swoim cieniu). Jeśli poprosisz o numer #version 100, otrzymasz GLSL 1.00 ES.

Należy pamiętać, że oprócz uzupełnienia w celu obsługi wymienionych wersji GLSL, implementacje GL są również wymagane w celu obsługi starszych wersji. Na przykład, w OpenGL 4.5 core profile specification dodaje stwierdzono (Kopalnia nacisk):

OpenGL 4.5 implementacje są gwarantowane do wspierania wersji 4.50 z z OpenGL Shading Language. Wszystkie odniesienia do sekcji tej specyfikacji odnoszą się do tej wersji. Najnowszą obsługiwaną wersję języka cieniowania można odpytać w sposób opisany w sekcji 22.2. Profil podstawowy OpenGL 4.5 gwarantuje również obsługę wszystkich poprzednich wersji języka cieniowania OpenGL z powrotem do wersji 1.40. W niektórych implementacjach profil podstawowy może również obsługiwać wcześniejsze wersje języka cieniowania i może obsługiwać wersje profilów kompatybilności języka cieniowania dla wersji 1.40 i wcześniejszych. W takim przypadku błędy będą generowane podczas używania funkcji językowych, takich jak wbudowane profile zgodności, a nie obsługiwane przez interfejs API podstawowego profilu.

dla OpenGL ES, stosuje się podobne rzeczy:

GLES version     GLSL version 
2.0       1.00 ES 
3.0       3.00 ES 
3.1       3.10 ES 

z GLES 3.1 spec stwierdzające

OpenGL ES 3.1 implementacje są gwarantowane do wspierania wersji 3.10, 3,00 i 1,00 z OpenGL ES Cieniowanie języka.

Teraz możesz chcieć wiedzieć, które wersje GLSL ES możesz użyć na pulpicie GL. Tak więc, dla nowoczesnego GL, jest to całkiem proste. Zacytować GL 4.5 spec ponownie:

Implementacje OpenGL 4.5 gwarantują obsługę wersji 1.00, 3.00 i 3.10 języka cieniowania OpenGL ES.

Wsparcie dla funkcji, które są specyficzne dla GLES w stacjonarnym GL (jak wariantach Es GLSL) są zazwyczaj obsługiwane przez "zgodność" rozszerzeniach:

Teraz twoja implementacja może zapewnić tylko GL 3.0 i nadal obsługiwać rozszerzenia kompatybilności ES.

Od wersji GL 4.3 można po prostu przetestować listę wszystkie z obsługiwanych wersji GLSL przez glGetStringi(GL_SHADING_LANGUAGE_VERSION,...). W wersjach wcześniejszych należy sprawdzić numer wersji GL i ciągi rozszerzeń, aby dowiedzieć się, które wersje mają być obsługiwane (ale implementacja może nadal obsługiwać więcej).

+1

Tak więc, muszę "założyć", które wersje GLSL są dostępne, w oparciu o tę tabelę, chociaż może być dostępna wersja nieco nowsza ... (Jak wprowadzić nową linię w tym komentarzu ???) Tak więc, jeśli Jestem na GL> = 4,3, jest łatwy sposób, ale poza tym, będę musiał kodować tabelę? Argh! –