Shader ve Uniformlar | Günlük Kayıt #2


  • Shaderlar, en basit hali ile girdileri çıktılara dönüştüren programdır.
  • Shaderlar arası iletişim sadece input ve output ile mümkündür.
  • OpenGL donanımda 16 4-component vertex attribute sağlar. Ancak bazı donanımlarda bunu arttırmanın yolları olabilir. (GL_MAX_VERTEX_ATTRIBS araştırılabilir)
  • GLSL'de vektörler 1,2,3 veya 4 bileşenli(component) olabilir. Örnek: vec1, bvec2, vec2, vec3, bvec4, bvec3, uvec1, uvec4, vs. Ancak sadece vecn formunu kullanmak bizim için yeterli olabilir.
  • Vektörlerde swizzling denilen ilginç vektör seçimleri yapılabilir. Örnek: vec2 deneme = vector.xxxx; ya da vector2.xyxy gibi.
  • Vektör parametresi içinde vektör değişkeni kullanabiliriz. Bu durum esneklik sağlar.
  • Vertex shader'da layout (layout = x) kullanımını ihmal edebiliriz ama bu durumda glGetAttribLocation'ı kullanmamız gerekir.
  • Fragment shader'da bir output rengi belirlemeyi başaramazsak OpenGL nesnesini siyah beyaz yapar.
  • Shaderlar arası veri gönderim işlemi bir program nesnesini bağlarken yapılır.
  • uniformlar, uygulamamızda CPU'dan GPU'ya veri geçirmek için kullandığımız bir başka yoldur. vertex attribute'lere kıyasla uniformlar:
    • globaldir. Yani global olmasının anlamı tüm shader'larda bir tane olması anlamına gelmektedir. Tabi bir program objesi içinde. Başka bir shader uniforma rahatlıkla erişebilir.
    • uniform değerleri nasıl set edildiyse reset veya güncelleme yapılanan kadar o değerler tutulur.
  • shader içersinde tanımlanmış bir uniform hiç kullanılmazsa derlenmiş halinde bu uniform değişkeni kaldırılmış olur.
  • Uniform konumu bulurken glUseProgram kodundan önce kullanılabilir. Ancak uniform'u update ederken önceden glUseProgram'ı çağırmış olmalıyız. Bağlantıda yer alan kodu inceleyiniz.

Hiç yorum yok:

Yorum Gönder