2014-04-15 23 views

cevap

6

Yeni başlayanlar için, üniformanın değerini ayarlamak için glUniform* (...) gibi bir işlevi çağırmak dışında, onlarla yapabileceğiniz başka bir şey yoktur. Üniformalar GLSL'den önce yoktu.

OpenGL'deki öznitelik konumları, GL_ARB_vertex_program derleme diline geri dönerler (buradaki değerlerin isimler yerine sayıları vardı). Bu birinci GL eklendiğinde Aslında, bu endeksler geleneksel sabit işlev işaretçileri diğer adı (örn == glVertexPointer (...), == glNormalPointer (...), == glColorPointer (...)) böylece köşe programları olabilir Mevcut uygulamalara kolayca bırakılabilir. GLSL, derleme dili uzantılarının öncülüğünü yaptığı API'nın yeniden kullanılan bölümlerini (bu çok şey oluyor).

GLSL'de, yalnızca 1 takma adın, uyumlu bir uygulamada garanti edildiği/izin verildiği ve (özellikle çok sayıda sürücü, NV özellikle bundan daha fazlası) olduğu belirtilmelidir. Sabit işlev ve programlanabilir vertex niteliklerini karıştırırken ve eşleştirirken, diğer kullanılan işaretçilere diğer adın takma adlarından kaçınılması önemlidir ve bu, konumların el ile ayarlanmasını gerektirir. Daha da önemlisi, jenerik vertex öznitelik konumlarını açıkça belirleme yeteneği, GLSL programlarını katı olarak tanımlanan veriye daha uygun hale getirmeyi sağlar. Sadece bir köşe gölgelendiricinin beklenen arabirimini eşleştirmek için farklı bir verteks işaretçisi kümesi oluşturmak yerine, bir GLSL programını vertex verilerinizin düzeniyle eşleştirmek için derlemek/bağlamak daha kolaydır.

Bu davranış üniformaları için çok önemli değil, ama yine de, onlar Uniform Buffers şeklinde benzer özelliğe var. Tek biçimli arabellekleri paylaşılabilir bir konuma (seçtiğiniz öğeye) bağlayabilir ve tüm değerleri GLSL programlarınızın tümünde Tekdüzen Blok'larında yeniden kullanabilirsiniz. Aslında, bu işlevsellik orijinal olarak şu adla bir uzantı biçiminde tanıtıldı: GL_EXT_bindable_uniform