OpenGL Gölgelendirme Dili - OpenGL Shading Language

Video oyunları , gerçek zamanlı olarak OpenGL üzerinden GPU'ya işleme hesaplamaları için dış kaynak sağlar . Gölgelendiriciler OpenGL Gölgelendirme Dili ile yazılır ve derlenir. Derlenen programlar GPU'da yürütülür.

OpenGL Shading Language ( GLSL ), C programlama diline dayalı bir sözdizimine sahip üst düzey bir gölgeleme dilidir . Bu tarafından oluşturulan OpenGL ARB geliştiricilere daha doğrudan kontrol sağlamak için (OpenGL Mimarlık İnceleme Kurulu) grafik boru hattı kullanımı gerek kalmadan ARB birleştirici dili veya donanıma özgü dilleri.

Arka fon

Grafik kartlarındaki gelişmelerle, köşe ve parça düzeyinde işleme hattında daha fazla esneklik sağlamak için yeni özellikler eklendi . Bu seviyedeki programlanabilirlik, parça ve köşe gölgelendiricilerinin kullanımıyla sağlanır .

Başlangıçta, bu işlevsellik, gölgelendiricileri ARB derleme dilinde yazarak elde edildi - karmaşık ve sezgisel olmayan bir görev. OpenGL ARB programlama için daha sezgisel bir yöntem sağlamak OpenGL Gölgelendirme Dil oluşturulan birimi işleme grafikleri tarihi boyunca OpenGL tahrik etmiştir açık standartlar avantajını korurken.

Başlangıçta OpenGL 1.4'ün bir uzantısı olarak tanıtılan GLSL, 2004 yılında OpenGL ARB tarafından OpenGL 2.0 çekirdeğine resmen dahil edildi. 1992'de OpenGL 1.0'ın oluşturulmasından bu yana OpenGL'ye yapılan ilk büyük revizyon oldu .

GLSL kullanmanın bazı faydaları şunlardır:

  • Linux , macOS ve Windows dahil olmak üzere birden çok işletim sisteminde platformlar arası uyumluluk .
  • OpenGL Gölgelendirme Dilini destekleyen herhangi bir donanım satıcısının grafik kartında kullanılabilen gölgelendiriciler yazma yeteneği.
  • Her donanım satıcısı sürücüsünde GLSL derleyicisini içerir, böylece her satıcının kendi grafik kartı mimarisi için optimize edilmiş kod oluşturmasına izin verir.

Sürümler

GLSL sürümleri, OpenGL API'sinin belirli sürümleriyle birlikte gelişmiştir. GLSL ve OpenGL majör ve minör sürüm numaraları yalnızca OpenGL 3.3 ve üzeri sürümlerde eşleşir. GLSL ve OpenGL için bu sürümler aşağıdaki tabloda ilişkilidir:

GLSL Sürümü OpenGL Sürümü Tarih Gölgelendirici Ön İşlemcisi
1.10.59 2.0 30 Nisan 2004 #sürüm 110
1.20.8 2.1 07 Eylül 2006 #sürüm 120
1.30.10 3.0 22 Kasım 2009 #versiyon 130
1.40.08 3.1 22 Kasım 2009 #sürüm 140
1.50.11 3.2 04 Aralık 2009 #sürüm 150
3.30.6 3.3 11 Mart 2010 #sürüm 330
4.00.9 4.0 24 Temmuz 2010 #sürüm 400
4.10.6 4.1 24 Temmuz 2010 #sürüm 410
4.20.11 4.2 12 Aralık 2011 #sürüm 420
4.30.8 4.3 7 Şubat 2013 #sürüm 430
4.40.9 4.4 16 Haziran 2014 #sürüm 440
4.50.7 4.5 09 Mayıs 2017 #sürüm 450
4.60.5 4.6 14 Haziran 2018 #sürüm 460

OpenGL ES ve WebGL kullanım OpenGL ES Gölgelendirme Dil (kısaltılmış: GLSL ES veya ESSL ).

GLSL ES sürümü OpenGL ES sürümü WebGL sürümü GLSL sürümüne göre Tarih Gölgelendirici Ön İşlemcisi
1.00.17 2.0 1.0 1.20 12 Mayıs 2009 #sürüm 100
3.00.6 3.0 2.0 3.30 29 Ocak 2016 #sürüm 300 es
3.10.5 3.1 GLSL ES 3.00 29 Ocak 2016 #sürüm 310 es
3.20.6 3.2 GLSL ES 3.10 10 Temmuz 2019 #sürüm 320 es

İki dil birbiriyle ilişkilidir ancak doğrudan uyumlu değildir. SPIR-Cross aracılığıyla birbirine dönüştürülebilirler .

Dil

operatörler

GLSL, işaretçiler dışında, C ve C++'daki işleçlerle aynı işleçleri içerir . 1.30 sürümünde bitsel operatörler eklendi.

Fonksiyonlar ve kontrol yapıları

C programlama diline benzer şekilde , GLSL döngüleri ve dallanmayı destekler, örneğin: if-else, for, switch, vb. Özyineleme yasaktır ve derleme sırasında kontrol edilir.

Kullanıcı tanımlı işlevler desteklenir ve yerleşik işlevler sağlanır. Grafik kartı üreticisi, yerleşik işlevleri donanım düzeyinde optimize edebilir. Bu işlevlerin çoğu, C programlama dilinin matematik kitaplığındakilere benzerken, diğerleri grafik programlamaya özgüdür. Yerleşik işlevlerin ve operatörlerin çoğu, bir veya her iki işlenen için hem skaler hem de vektörler (4 öğeye kadar) üzerinde çalışabilir. Ortak yerleşik sağlanır ve yaygın amaçları şunlardır grafikler için kullanılan fonksiyonlar: mix, smoothstep, normalize, inversesqrt, clamp, length, distance, dot, cross, reflect, refractve vektör minve max. abs, sin, pow, vb gibi diğer işlevler sağlanır, ancak bunların tümü vektör miktarları üzerinde de çalışabilir, yani pow(vec3(1.5, 2.0, 2.5), abs(vec3(0.1, -0.2, 0.3))). GLSL, işlev aşırı yüklemesini destekler (hem yerleşik işlevler ve operatörler hem de kullanıcı tanımlı işlevler için), bu nedenle aynı ada sahip, farklı sayıda parametreye veya parametre türüne sahip birden çok işlev tanımı olabilir. Her birinin kendi bağımsız dönüş türü olabilir.

önişlemci

GLSL, sürümleri ve OpenGL uzantılarını belirtmek için kendi özel yönergeleriyle birleştirilmiş C önişlemcisinin (CPP) bir alt kümesini tanımlar . CPP'den kaldırılan parçalar, #includeve gibi dosya adlarıyla ilgili olanlardır __FILE__.

GL_ARB_shading_language_include(Windows ve Linux üzerinde Nvidia sürücülerini örneğin uygulanan ve Linux, FreeBSD ve Android'de tüm Mesa 20.0.0 sürücüleri) uzantısı kullanımına uygular yeteneği #includeekstra manuel öncesi olmadan birçok shader arasında daha kolay kod paylaşımı ve tanımları sağlayan kaynak kodunda, -işleme. Benzer uzantı GL_GOOGLE_include_directiveve GL_GOOGLE_cpp_style_line_directiveGLSL'yi Vulkan ile kullanmak için mevcuttur ve referans SPIR-V derleyicisinde ( glslangaka glslangValidator) desteklenir.

Derleme ve yürütme

GLSL gölgelendiricileri bağımsız uygulamalar değildir; birçok farklı platformda (örneğin, Linux , macOS , Windows ) bulunan OpenGL API'sini kullanan bir uygulamaya ihtiyaç duyarlar . C , C++ , C# , JavaScript , Delphi , Java ve daha pek çoğu için dil bağlamaları vardır .

GLSL gölgelendiricilerinin kendileri , OpenGL API'sinin giriş noktalarını kullanan bir uygulama içinden derleme için donanım satıcısının sürücüsüne geçirilen bir dizi dizidir . Gölgelendiriciler, bir uygulama içinden anında oluşturulabilir veya metin dosyaları olarak okunabilir, ancak sürücüye bir dize biçiminde gönderilmelidir.

GLSL programlarını derlemek, bağlamak ve parametreleri GLSL programlarına geçirmek için kullanılan API'ler seti, üç OpenGL uzantısında belirtilmiştir ve OpenGL Sürüm 2.0'dan itibaren temel OpenGL'nin bir parçası haline gelmiştir. API, OpenGL 3.2'deki geometri gölgelendiricileri, OpenGL 4.0'daki mozaik gölgelendiricileri ve OpenGL 4.3'teki hesaplama gölgelendiricileri ile genişletildi . Bu OpenGL API'leri, uzantılarda bulunur:

  • ARB köşe gölgelendiricisi
  • ARB parça gölgelendiricisi
  • ARB gölgelendirici nesneleri
  • ARB geometri gölgelendirici 4
  • ARB mozaik gölgelendirici
  • ARB hesaplama gölgelendiricisi

GLSL gölgelendiricileri Vulkan ile de kullanılabilir ve Vulkan'da gölgelendirici kullanmanın yaygın bir yoludur. GLSL gölgelendiricileri, kullanımdan önce veya çalışma zamanında , genellikle çevrimdışı derleyici kullanılarak SPIR-V adlı bir ikili bayt kodu biçiminde önceden derlenir .

Ayrıca bakınız

Diğer gölgeleme dilleri

Referanslar

alıntılar

daha fazla okuma

Kitabın
  • Rost, Randi J. (30 Temmuz 2009). OpenGL Gölgelendirme Dili (3. baskı). Addison-Wesley. ISBN'si 978-0-321-63763-5.
  • Kessenich, John; Baldwin, David; Rost, Randi. OpenGL Gölgelendirme Dili . Sürüm 1.10.59. 3Dlabs, Inc.
  • Bailey, Mike; Cunningham, Steve (22 Nisan 2009). Graphics Shaders: Teori ve Uygulama (2. baskı). CRC Basın. ISBN'si 978-1-56881-434-6.

Dış bağlantılar