Кіріспе
OpenGL көлеңкелеу тілі (GLSL) – C бағдарламалау тіліне негізделген синтаксисі бар жоғары деңгейдегі көлеңкелеу тілі. OpenGL ARB (OpenGL Architecture Review Board) оны құрастырушыларға ARB ассемблері немесе аппараттық ерекше тілдерді пайдаланбастан, графикалық құбыржолды тікелей басқару мүмкіндігін беру үшін жасады.
OpenGL Shading Language (GLSL) is a high level shading language with a syntax based on the C programming language. It was created by the OpenGL ARB (OpenGL Architecture Review Board) to give developers more direct control of the graphics pipeline without having to use ARB assembly language or hardware specific languages.
Нұсқалар
GLSL нұсқалары OpenGL API-нің нақты нұсқаларымен бірге дамыды. OpenGL 3.3 және одан жоғары нұсқаларында ғана GLSL және OpenGL негізгі және кіші нұсқа нөмірлері сәйкес келеді. GLSL және OpenGL үшін осы нұсқалар келесі кестеде байланысты:
GLSL Version OpenGL Version Date Shader Preprocessor 1.10.59 2.0 30 April 2004 #version 110 1.20.8 2.1 07 September 2006 #version 120 1.30.10 3.0 22 November 2009 #version 130 1.40.08 3.1 22 November 2009 #version 140 1.50.11 3.2 04 December 2009 #version 150 3.30.6 3.3 11 March 2010 #version 330 4.00.9 4.0 24 July 2010 #version 400 4.10.6 4.1 24 July 2010 #version 410 4.20.11 4.2 12 December 2011 #version 420 4.30.8 4.3 7 February 2013 #version 430 4.40.9 4.4 16 June 2014 #version 440 4.50.7 4.5 09 May 2017 #version 450 4.60.5 4.6 14 June 2018 #version 460
OpenGL ES and WebGL use OpenGL ES Shading Language (abbreviated: GLSL ES or ESSL). GLSL ES version OpenGL ES version WebGL version Based on GLSL version Date Shader Preprocessor 1.00.17 2.0 1.0 1.20 12 May 2009 #version 100 3.00.6 3.0 2.0 3.30 29 January 2016 #version 300 es3.10.53.1GLSL ES 3.0029 January 2016#version 310 es3.20.63.2GLSL ES 3.1010 July 2019#version 320 es
The two languages are related but not directly compatible. They can be interconverted through SPIRV Cross.
GLSL нұсқасы OpenGL нұсқасы Күндізгі шейдер алдын ала процессор 1.10.59 2.0 30 сәуір 2004 #version 110 1.20.8 2.1 07 қыркүйек 2006 #version 120 1.30.10 3.0 22 қараша 2009 #version 130 1.40.08 3.1 22 қараша 2009 #version 140 1.50.11 3.2 04 желтоқсан 2009 #version 150 3.30.6 3.3 11 наурыз 2010 #version 330 4.00.9 4.0 24 шілде 2010 #version 400 4.10.6 4.1 24 шілде 2010 #version 410 4.20.11 4.2 12 желтоқсан 2011 #version 420 4.30.8 4.3 7 ақпан 2013 #version 430 4.40.9 4.4 16 маусым 2014 #version 440 4.50.7 09 мамыр 2017 #version 450 4.60.5 4.6 14 маусым 2018 #version 460
GLSL Version OpenGL Version Date Shader Preprocessor 1.10.59 2.0 30 April 2004 #version 110 1.20.8 2.1 07 September 2006 #version 120 1.30.10 3.0 22 November 2009 #version 130 1.40.08 3.1 22 November 2009 #version 140 1.50.11 3.2 04 December 2009 #version 150 3.30.6 3.3 11 March 2010 #version 330 4.00.9 4.0 24 July 2010 #version 400 4.10.6 4.1 24 July 2010 #version 410 4.20.11 4.2 12 December 2011 #version 420 4.30.8 4.3 7 February 2013 #version 430 4.40.9 4.4 16 June 2014 #version 440 4.50.7 4.5 09 May 2017 #version 450 4.60.5 4.6 14 June 2018 #version 460
OpenGL ES and WebGL use OpenGL ES Shading Language (abbreviated: GLSL ES or ESSL). GLSL ES version OpenGL ES version WebGL version Based on GLSL version Date Shader Preprocessor 1.00.17 2.0 1.0 1.20 12 May 2009 #version 100 3.00.6 3.0 2.0 3.30 29 January 2016 #version 300 es3.10.53.1GLSL ES 3.0029 January 2016#version 310 es3.20.63.2GLSL ES 3.1010 July 2019#version 320 es
The two languages are related but not directly compatible. They can be interconverted through SPIRV Cross.
OpenGL ES және WebGL OpenGL ES Shading Language (қысқартылған: GLSL ES немесе ESSL) қолданады.
GLSL Version OpenGL Version Date Shader Preprocessor 1.10.59 2.0 30 April 2004 #version 110 1.20.8 2.1 07 September 2006 #version 120 1.30.10 3.0 22 November 2009 #version 130 1.40.08 3.1 22 November 2009 #version 140 1.50.11 3.2 04 December 2009 #version 150 3.30.6 3.3 11 March 2010 #version 330 4.00.9 4.0 24 July 2010 #version 400 4.10.6 4.1 24 July 2010 #version 410 4.20.11 4.2 12 December 2011 #version 420 4.30.8 4.3 7 February 2013 #version 430 4.40.9 4.4 16 June 2014 #version 440 4.50.7 4.5 09 May 2017 #version 450 4.60.5 4.6 14 June 2018 #version 460
OpenGL ES and WebGL use OpenGL ES Shading Language (abbreviated: GLSL ES or ESSL). GLSL ES version OpenGL ES version WebGL version Based on GLSL version Date Shader Preprocessor 1.00.17 2.0 1.0 1.20 12 May 2009 #version 100 3.00.6 3.0 2.0 3.30 29 January 2016 #version 300 es3.10.53.1GLSL ES 3.0029 January 2016#version 310 es3.20.63.2GLSL ES 3.1010 July 2019#version 320 es
The two languages are related but not directly compatible. They can be interconverted through SPIRV Cross.
GLSL ES нұсқасы OpenGL ES нұсқасы WebGL нұсқасы GLSL нұсқасына негізделген Күн Шейдер алдын ала процессор 1.00.17 2.0 1.0 1.20 12 мамыр 2009 #version 100 3.00.6 3.0 2.0 3.30 29 қаңтар 2016 #version 300 es3.10.5 3.1 GLSL ES 3.00 29 қаңтар 2016 #version 310 es3.20.6 3.2 GLSL ES 3.10 10 шілде 2019 #version 320 es
GLSL Version OpenGL Version Date Shader Preprocessor 1.10.59 2.0 30 April 2004 #version 110 1.20.8 2.1 07 September 2006 #version 120 1.30.10 3.0 22 November 2009 #version 130 1.40.08 3.1 22 November 2009 #version 140 1.50.11 3.2 04 December 2009 #version 150 3.30.6 3.3 11 March 2010 #version 330 4.00.9 4.0 24 July 2010 #version 400 4.10.6 4.1 24 July 2010 #version 410 4.20.11 4.2 12 December 2011 #version 420 4.30.8 4.3 7 February 2013 #version 430 4.40.9 4.4 16 June 2014 #version 440 4.50.7 4.5 09 May 2017 #version 450 4.60.5 4.6 14 June 2018 #version 460
OpenGL ES and WebGL use OpenGL ES Shading Language (abbreviated: GLSL ES or ESSL). GLSL ES version OpenGL ES version WebGL version Based on GLSL version Date Shader Preprocessor 1.00.17 2.0 1.0 1.20 12 May 2009 #version 100 3.00.6 3.0 2.0 3.30 29 January 2016 #version 300 es3.10.53.1GLSL ES 3.0029 January 2016#version 310 es3.20.63.2GLSL ES 3.1010 July 2019#version 320 es
The two languages are related but not directly compatible. They can be interconverted through SPIRV Cross.
Екі тіл бір-бірімен байланысты, бірақ тікелей үйлесімді емес. Оларды SPIRV Cross арқылы өзара түрлендіруге болады.
GLSL Version OpenGL Version Date Shader Preprocessor 1.10.59 2.0 30 April 2004 #version 110 1.20.8 2.1 07 September 2006 #version 120 1.30.10 3.0 22 November 2009 #version 130 1.40.08 3.1 22 November 2009 #version 140 1.50.11 3.2 04 December 2009 #version 150 3.30.6 3.3 11 March 2010 #version 330 4.00.9 4.0 24 July 2010 #version 400 4.10.6 4.1 24 July 2010 #version 410 4.20.11 4.2 12 December 2011 #version 420 4.30.8 4.3 7 February 2013 #version 430 4.40.9 4.4 16 June 2014 #version 440 4.50.7 4.5 09 May 2017 #version 450 4.60.5 4.6 14 June 2018 #version 460
OpenGL ES and WebGL use OpenGL ES Shading Language (abbreviated: GLSL ES or ESSL). GLSL ES version OpenGL ES version WebGL version Based on GLSL version Date Shader Preprocessor 1.00.17 2.0 1.0 1.20 12 May 2009 #version 100 3.00.6 3.0 2.0 3.30 29 January 2016 #version 300 es3.10.53.1GLSL ES 3.0029 January 2016#version 310 es3.20.63.2GLSL ES 3.1010 July 2019#version 320 es
The two languages are related but not directly compatible. They can be interconverted through SPIRV Cross.
Операторлар
GLSL C және C++ тілдеріндегі операторлармен бірдей операторларды қамтиды, тек көрсеткіштерден басқа. Биттік операторлар 1.30 нұсқасында қосылды.
Функциялар мен басқару құрылымдары
C бағдарламалау тіліне ұқсас, GLSL циклдарды және тармақтануды қолдайды, мысалы: if else, for, switch және т.б. Рекурсияға тыйым салынады және компиляция кезінде тексеріледі. Пайдаланушы анықтаған функциялар қолдау көрсетіледі және кіріктірілген функциялар ұсынылады. Графикалық карта өндірушісі кіріктірілген функцияларды аппараттық деңгейде оңтайландыруы мүмкін. Осы функциялардың көпшілігі C бағдарламалау тілінің математикалық кітапханасындағы функцияларға ұқсас, ал қалғандары графикалық бағдарламалауға тән. Көптеген кіріктірілген функциялар мен операторлар скалярлармен де, векторлармен де (4 элементке дейін) жұмыс істей алады, бір немесе екі операнд үшін. Графикалық мақсаттар үшін жиі қолданылатын және ұсынылатын кіріктірілген функциялар: , , , , , , , , , және вектор және басқа функциялар, мысалы , , , және т.б. ұсынылады, бірақ олардың барлығы векторлық шамалармен де жұмыс істей алады, яғни GLSL функцияның жүктелуін қолдайды (кіріктірілген функциялар мен операторлар үшін де, пайдаланушы анықтаған функциялар үшін де), сондықтан бірдей атаумен бірнеше функция анықтамалары болуы мүмкін, олардың әртүрлі санындағы параметрлері немесе параметрлердің түрлері болуы мүмкін. Олардың әрқайсысының жеке қайтарым типі болуы мүмкін.
Алдын ала өңдеуші
GLSL C препроцессордың (CPP) бір бөлігін анықтайды және OpenGL нұсқаларын және кеңейтімдерін көрсетуге арналған өзінің ерекше директиваларымен біріктіріледі. CPP-ден алынып тасталған бөліктер – файл атауларымен және кеңейтімдермен байланысты бөліктер (мысалы, `#include`). Nvidia драйверлері Windows және Linux жүйелерінде, сондай-ақ Linux, FreeBSD және Android жүйелеріндегі барлық Mesa 20.0.0 драйверлерінде іске асырылған `#include` кеңейтімі бастапқы кодта пайдалануға мүмкіндік береді, бұл көптеген шейдерлер арасында кодты және анықтамаларды қосымша қолмен алдын ала өңдеусіз оңай бөлісуге мүмкіндік береді. GLSL-ді Vulkan-мен пайдалану үшін ұқсас `#include` және `#extension` кеңейтімдері де бар және олар анықтамалық SPIR-V компиляторында (aka glslangValidator) қолдау көрсетіледі.
The extension (implemented for example in Nvidia drivers on Windows and Linux, and all Mesa 20.0.0 drivers on Linux, FreeBSD and Android) implements ability to use in source code, allowing easier sharing of code and definitions between many shaders without extra manual pre processing. Similar extension and exist for using GLSL with Vulkan, and are supported in reference SPIR V compiler ( aka glslangValidator).