OpenGL soyalash tili - OpenGL Shading Language

Video O'yinlar autsorsing ko'rsatish hisob-kitoblarini GPU ustida OpenGL real vaqtda. Shaderlar yozilgan OpenGL soyalash tili va tuzilgan. Tuzilgan dasturlar GPUda bajariladi.

OpenGL soyalash tili (GLSL) a yuqori darajadagi soya tili ga asoslangan sintaksis bilan C dasturlash tili. U tomonidan yaratilgan OpenGL ARB (OpenGL Architecture Review Board) ishlab chiquvchilarga to'g'ridan-to'g'ri boshqarish huquqini berish grafik quvur liniyasi ishlatmasdan ARB yig'ilish tili yoki apparatga xos tillar.

Fon

Grafik kartalaridagi yutuqlar bilan, yangi xususiyatlar qo'shilib, ulardagi quvur liniyasida moslashuvchanlikni oshirishga imkon berdi tepalik va parcha Daraja. Ushbu darajadagi dasturlash fragment va vertex yordamida amalga oshiriladi shaderlar.

Dastlab, ushbu funktsiyaga shaderlarni yozish orqali erishildi ARB yig'ilish tili - murakkab va noaniq vazifa. The OpenGL ARB dasturlash uchun intuitiv usulni ta'minlash uchun OpenGL Shading Tilini yaratdi grafik ishlov berish birligi OpenGL-ni butun tarixi davomida boshqargan ochiq standartlar ustunligini saqlab qolishda.

Dastlab OpenGL 1.4 kengaytmasi sifatida taqdim etilgan GLSL 2004 yilda OpenGL ARB tomonidan rasmiy ravishda OpenGL 2.0 yadrosiga kiritilgan. Bu OpenGL-ga yaratilganidan beri birinchi yirik reviziya edi OpenGL 1992 yilda 1,0.

GLSL-dan foydalanishning ba'zi afzalliklari quyidagilardir:

  • O'zaro faoliyat platforma bir nechta operatsion tizimlarda, shu jumladan Linux, macOS va Windows.
  • OpenGL Shading Language-ni qo'llab-quvvatlaydigan har qanday apparat sotuvchisi grafik kartasida ishlatilishi mumkin bo'lgan shaderlarni yozish qobiliyati.
  • Har bir apparat sotuvchisi o'z haydovchisida GLSL kompilyatorini o'z ichiga oladi va shu bilan har bir sotuvchiga o'ziga xos grafik karta arxitekturasi uchun optimallashtirilgan kod yaratishga imkon beradi.

Versiyalar

GLSL versiyalari OpenGL API-ning ma'lum versiyalari bilan bir qatorda rivojlandi. Faqatgina OpenGL 3.3 va undan yuqori versiyalarida GLSL va OpenGL katta va kichik versiyalarining raqamlari mos keladi. GLSL va OpenGL uchun ushbu versiyalar quyidagi jadval bilan bog'liq:

GLSL versiyasiOpenGL versiyasiSanaShader protsessori
1.10.59[1]2.02004 yil 30 aprel# versiya 110
1.20.8[2]2.107 sentyabr 2006 yil# versiya 120
1.30.10[3]3.02009 yil 22-noyabr# versiya 130
1.40.08[4]3.12009 yil 22-noyabr# versiya 140
1.50.11[5]3.204 dekabr 2009 yil# versiya 150
3.30.6[6]3.32010 yil 11 mart# versiya 330
4.00.9[7]4.024 iyul 2010 yil# versiya 400
4.10.6[8]4.124 iyul 2010 yil# versiya 410
4.20.11[9]4.22011 yil 12-dekabr# versiya 420
4.30.8[10]4.32013 yil 7-fevral# versiya 430
4.40.9[11]4.416 iyun 2014 yil# versiya 440
4.50.7[12]4.509 may 2017 yil# versiya 450
4.60.5[13]4.614 iyun 2018 yil# versiya 460

OpenGL ES va WebGL foydalanish OpenGL ES soyalash tili (qisqartirilgan: GLSL ES yoki ESSL).

GLSL ES versiyasiOpenGL ES versiyasiWebGL versiyasiGLSL versiyasiga asoslanganSanaShader protsessori
1.00.17[14]2.01.01.202009 yil 12-may# versiya 100
3.00.6[15]3.02.03.302016 yil 29-yanvar# versiya 300 es

Ikki til bir-biriga bog'liq, ammo to'g'ridan-to'g'ri mos kelmaydi. Ular orqali o'zaro bog'lanish mumkin SPIR-xoch.[16]

Til

Operatorlar

GLSL da xuddi shu operatorlar mavjud operatorlari C va C ++ da, bundan mustasno ko'rsatgichlar. Bitwise operatorlari 1.30 versiyasida qo'shilgan.

Vazifalar va boshqaruv tuzilmalari

Ga o'xshash C dasturlash tili, GLSL ko'chadan va tarvaqaylab ketishni qo'llab-quvvatlaydi, masalan: if-else, for, switch va hk. Rekuratsiya taqiqlanadi va kompilyatsiya paytida tekshiriladi.

Foydalanuvchi tomonidan belgilangan funktsiyalar qo'llab-quvvatlanadi va o'rnatilgan funktsiyalar ta'minlanadi. Grafik karta ishlab chiqaruvchisi apparat darajasida o'rnatilgan funktsiyalarni optimallashtirishi mumkin. Ushbu funktsiyalarning aksariyati C dasturlash tilining matematik kutubxonasiga o'xshash, boshqalari esa grafik dasturlash uchun xosdir. O'rnatilgan funktsiyalar va operatorlarning aksariyati bir yoki ikkala operand uchun skalar va vektorlarda (4 ta elementgacha) ishlashi mumkin. Grafika maqsadida taqdim etiladigan va odatda ishlatiladigan umumiy o'rnatilgan funktsiyalar: aralashtiramiz, silliq qadam, normallashtirish, inversesqrt, qisqich, uzunlik, masofa, nuqta, kesib o'tish, aks ettirish, sinish va vektor min va maksimal. Shunga o'xshash boshqa funktsiyalar abs, gunoh, kuchva boshqalar taqdim etiladi, ammo ularning barchasi vektor kattaliklarida ishlashi mumkin, ya'ni. pow (vec3 (1.5, 2.0, 2.5), abs (vec3 (0.1, -0.2, 0.3))). GLSL-ni qo'llab-quvvatlaydi funktsiyani haddan tashqari yuklash (o'rnatilgan funktsiyalar va operatorlar uchun ham, foydalanuvchi tomonidan belgilangan funktsiyalar uchun ham), shuning uchun har xil parametrlar yoki parametr turlariga ega bo'lgan bir xil nomdagi bir nechta funktsiya ta'riflari bo'lishi mumkin. Ularning har biri o'zlarining mustaqil qaytish turiga ega bo'lishi mumkin.

Preprocessor

GLSL ning pastki qismini belgilaydi C oldingi protsessori (CPP), versiyalar va OpenGL kengaytmalarini ko'rsatish uchun o'zining maxsus ko'rsatmalari bilan birlashtirilgan. CPP-dan o'chirilgan qismlar, masalan, fayl nomlari bilan bog'liq # shu jumladan va __FILE__.[17]

The GL_ARB_shading_language_include kengaytma[18] (masalan, Nvidia drayverlarida amalga oshiriladi[19] Windows va Linux-da va barcha Mesa 20.0.0-da[20] Linux, FreeBSD va Android-dagi drayverlar) foydalanish qobiliyatini amalga oshiradi # shu jumladan manba kodida, qo'shimcha ravishda oldindan ishlov bermasdan, ko'plab shaderlar o'rtasida kod va ta'riflarni osonroq almashish imkonini beradi. Shunga o'xshash kengaytma GL_GOOGLE_include_ direktiv va GL_GOOGLE_cpp_style_line_ direktivasi Vulkan bilan GLSL-dan foydalanish uchun mavjud va SPIR-V kompilyatorida (glslang aka glslangValidator).[21][22][23]

Tuzish va bajarish

GLSL shaderlari mustaqil dastur emas; ular turli xil platformalarda mavjud bo'lgan OpenGL API-dan foydalanadigan dasturni talab qiladi (masalan, Linux, macOS, Windows ). Tilga bog'lanishlar mavjud C, C ++, C #, JavaScript, Delphi, Java va boshqa ko'plab narsalar.

GLSL shaderlarining o'zi shunchaki to'plamdir torlar ular OpenGL API kirish nuqtalari yordamida dastur ichidan kompilyatsiya qilish uchun apparat sotuvchisi drayveriga uzatiladi. Shaderlarni yaratish mumkin parvozda dastur ichidan yoki matnli fayllar sifatida o'qiladi, lekin haydovchiga satr shaklida yuborilishi kerak.

Parametrlarni kompilyatsiya qilish, bog'lash va GLSL dasturlariga uzatish uchun ishlatiladigan API-lar to'plami uchta OpenGL kengaytmasida ko'rsatilgan va OpenGL Version 2.0-dan boshlab OpenGL-ning asosiy qismiga aylangan. API OpenGL 3.2 da geometriya shaderlari, OpenGL 4.0 da tessellation shaderlar va hisoblash shaderlari OpenGL 4.3 da. Ushbu OpenGL API-lari kengaytmalarda joylashgan:

  • ARB vertex shader
  • ARB fragmentini shader
  • ARB shader moslamalari
  • ARB geometriyasi shader 4
  • ARB tessellation shader
  • ARB hisoblash shader

GLSL shaderlari bilan ham foydalanish mumkin Vulkan va Vulkan-da shaderlardan foydalanishning keng tarqalgan usuli. GLSL shaderlari ishlatishdan oldin yoki ish vaqtida ikkilik bayt kodi formatida oldindan kompilyatsiya qilinadi. SPIR-V, odatda oflayn kompilyator yordamida.

Shuningdek qarang

Boshqa soyali tillar

Adabiyotlar

Iqtiboslar
  1. ^ "GLSL tilining spetsifikatsiyasi, 1.10.59 versiyasi" (PDF).
  2. ^ "GLSL tilining spetsifikatsiyasi, 1.20.8 versiyasi". (PDF).
  3. ^ "GLSL tilining spetsifikatsiyasi, 1.30.10 versiyasi". (PDF).
  4. ^ "GLSL tilining spetsifikatsiyasi, 1.40.08 versiyasi" (PDF).
  5. ^ "GLSL tilining spetsifikatsiyasi, 1.50.11 versiyasi". (PDF).
  6. ^ "GLSL tilining spetsifikatsiyasi, 3.30.6 versiyasi". (PDF).
  7. ^ "GLSL tilining spetsifikatsiyasi, 4.00.9 versiyasi". (PDF).
  8. ^ "GLSL tilining spetsifikatsiyasi, 4.10.6 versiyasi". (PDF).
  9. ^ "GLSL tilining spetsifikatsiyasi, 4.20.11 versiyasi". (PDF).
  10. ^ "GLSL tilining spetsifikatsiyasi, 4.30.8 versiyasi". (PDF).
  11. ^ "GLSL tilining spetsifikatsiyasi, 4.40.9 versiyasi". (PDF).
  12. ^ "GLSL tilining spetsifikatsiyasi, 4.50.7 versiyasi". (PDF).
  13. ^ "GLSL tilining spetsifikatsiyasi, 4.60.5 versiyasi". (PDF).
  14. ^ "GLSL ES til spetsifikatsiyasi, 1.00 versiyasi, 17-versiyasi" (PDF).
  15. ^ "GLSL ES til spetsifikatsiyasi, 3.00 versiyasi, 6-versiyasi" (PDF).
  16. ^ KhronosGroup / SPIRV-Xoch, Xronos guruhi, 2019-09-06, olingan 2019-09-08
  17. ^ "Shader Preprocessor". OpenGL dasturlash bo'yicha qo'llanma: OpenGL-ni o'rganish bo'yicha rasmiy qo'llanma, 4.3 versiyasi, sakkizinchi nashr.
  18. ^ "ARB_shading_language_include". Khronos.org. Olingan 2020-05-31.
  19. ^ "NVIDIA drayveri 265.90 WHQL Quadro". LaptopVideo2Go forumlari.
  20. ^ "Mesa 20.0.0 nashrining eslatmalari / 2020-02-19". www.mesa3d.org. Olingan 2020-05-31.
  21. ^ "# antigainst tomonidan direktiv yordamni o'z ichiga oladi · Pull Request # 46 · KhronosGroup / glslang". GitHub. Olingan 2020-05-31.
  22. ^ "Qarama-qarshi qarshi chiziqli raqamlarni qayta ishlash · Pull Request # 38 · KhronosGroup / glslang". GitHub.
  23. ^ "Fayl nomi satrlarini antigainst tomonidan qo'llab-quvvatlash uchun #line va __FILE__ sintaksisini kengaytiring · Pull Request # 43 · KhronosGroup / glslang". GitHub.

Qo'shimcha o'qish

Kitoblar
  • Rost, Randi J. (2009 yil 30-iyul). OpenGL soyalash tili (3-nashr). Addison-Uesli. ISBN  978-0-321-63763-5.
  • Kessenich, Jon; Bolduin, Devid; Rost, Randi. OpenGL soyalash tili. 1.10.59 versiyasi. 3Dlabs, Inc.
  • Beyli, Mayk; Kanningem, Stiv (2009 yil 22 aprel). Grafika shaderlari: nazariya va amaliyot (2-nashr). CRC Press. ISBN  978-1-56881-434-6.

Tashqi havolalar