Użycie shader’ów

Wstęp


Shader to nic innego jak mały program, który uruchamiany jest bezpośrednio na kracie graficznej, które pozwolą nam programistom dodanie specjalnych efektów do naszej gry.

Shader’y są pisane w GLSL (OpenGL Shading Language), który jest bardzo podobny do C.

Istnieją dwa typy shader’ów: vertex shader, fragment (lub piksel) shader. Ten poradnik skupi się na wczytywaniu shader’ów nie pisaniu ich. Aby dowiedzieć się jak je pisać zapraszam do poradników GLSL dostępnych w internecie.

 

Wczytywanie


W SFML shader’y są reprezentowane przez sf::Shader. Mimo, że shader’y są coraz częściej spotykane to wciąż zdarzają się karty graficzne, które ich nie obsługują, dlatego powinieneś sprawdzić czy są obsługiwane:

Najczęściej używanym sposobem wczytywania shader’ów jest wczytywanie z pliku, do tego służy metoda loadFromFile.

Shader’y to po prostu pliki tekstowe z innym rozszerzeniem (tak jak w c++), a więc ich rozszerzenie nie ma znaczenia, wykorzystane tutaj „.frag” oraz „.vert” to tylko taka konwencja.

Shader’y mogą być także wczytywane bezpośrednio z klasy string, aby to zrobić musisz użyć loadFromMemory.

Tak jak reszta obiektów w SFML, można wczytać je także przy pomocy loadFromStream, o tym można przeczytać w TYM poradniku.

 

Używanie shader’wów


Aby użyć shader’a na jakimś obiekcie należy go dostarczyć bezpośrednio do draw.

 

Zmiennie w shaderach


Tak samo jak w innych programach komputerowych mogą mieć własne zmienne, deklarujemy je jako zmienne globalne z przedrostkiem uniform.

Zmienne uniform mogą być zmieniane (zmianie może ulec ich wartość) w programie c++, poprzez użycie setParameter z klasy Shader.

Przeładowania setParameter wspierają wszystkie typy dostarczone przez SFML:

  • float (typ GLSL: float)
  • 2 float‚y, sf::Vector2f (typ GLSL: vec2)
  • 3 float‚y, sf::Vector3f (typ GLSL: vec3)
  • 4 float‚y (typ GLSL: vec4)
  • sf::Color (typ GLSL: vec4)
  • sf::Transform (typ GLSL: mat4)
  • sf::Texture (typ GLSL: sampler2D)

Oryginalny artykuł (osoby które są zainteresowane shader’ami powinny przeczytać końcówkę dotyczącą minimal shader i openGL)


  • gość

    Wydaje mi się, że coś kody źle wyglądają. Coś są inne od tych w orginalnym tutorialu. Chyba coś się popsuło.

    • Dzięki, widocznie któraś aktualizacja zmieniła sposób formatowania kodu stąd artefakty w postaci encji HTML. Już poprawiłem, dzięki za zwrócenie uwagi