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).
Istnieje mapowanie 1-1 pomiędzy wersją OpenGL a maksymalnie obsługiwaną wersją GLSL –
Tak, ale mogę znaleźć tylko obsługiwaną wersję GLSL dla każdej wersji OpenGL. Nie mogłem znaleźć tej samej korespondencji dla GLSL ES. –
@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". –