Кіріспе

OpenGL көлеңкелеу тілі (GLSL) – C бағдарламалау тіліне негізделген синтаксисі бар жоғары деңгейдегі көлеңкелеу тілі. OpenGL ARB (OpenGL Architecture Review Board) оны құрастырушыларға ARB ассемблері немесе аппараттық ерекше тілдерді пайдаланбастан, графикалық құбыржолды тікелей басқару мүмкіндігін беру үшін жасады.

Нұсқалар

GLSL нұсқалары OpenGL API-нің нақты нұсқаларымен бірге дамыды. OpenGL 3.3 және одан жоғары нұсқаларында ғана GLSL және OpenGL негізгі және кіші нұсқа нөмірлері сәйкес келеді. GLSL және OpenGL үшін осы нұсқалар келесі кестеде байланысты:

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

OpenGL ES және WebGL OpenGL ES Shading Language (қысқартылған: GLSL ES немесе ESSL) қолданады.

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

Екі тіл бір-бірімен байланысты, бірақ тікелей үйлесімді емес. Оларды 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) қолдау көрсетіледі.