OpenGL'yi öğreniyorum ve giriş öznitelikleriyle uğraşırkenveya glBindAttribLocation()
'u kullanma seçeneğim olduğunu fark ettim, ancak formalar için glGetUniformLocation()
kullanmam gerekiyor. API'da glBindUniformLocation()
dahil edilmediğinden teknik bir neden var mı?Tekdüze değişkenler için neden glBindAttribLocation() eşdeğeri yok?
cevap
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
- 1. Neden kullanılmayan değişkenler bozuk?
- 2. Tekdüze Bir düzlemde dağıtılmış noktalar java'da kümeleniyor, neden?
- 3. Referans değişkenler neden tanım sırasında başlatılmalı?
- 4. Neden RecyclerView için imleç bağdaştırıcısı yok?
- 5. BroadcastReceiver için neden test cihazı yok?
- 6. Neden swagger-ui için tema yok?
- 7. Lambda için neden işlev bloku yok?
- 8. Neden foreignAutoDelete yok?
- 9. Raylar neden yok sayılır.
- 10. Son değişkenler için alıcılar
- 11. Neden VB.NET'te hata yok
- 12. Neden UTF-24 yok?
- 13. Neden std :: protect yok?
- 14. Neden xlrd'm yok?
- 15. Sistem.float neden .net'de yok?
- 16. Değişkenler metin dosyalarına yazarken neden çizgileri değiştiriyor?
- 17. ggplot için eğri() eşdeğeri
- 18. PHP için Autotest eşdeğeri?
- 19. + = önekleme için + = eşdeğeri
- 20. Thunderbird için Firebug eşdeğeri
- 21. MongoDB için Kibana eşdeğeri
- 22. 'pat2cwav' için Python eşdeğeri
- 23. Neden bu tür bağımsız değişkenler çıkarılamıyor?
- 24. Değişkenler
- 25. Öğeleri tekdüze kontrolle dolduracak ItemsPanelTemplate var mı?
- 26. SSE intrinsics için Neon eşdeğeri
- 27. JavaFX'de neden hiçbir ObservableQueues yok?
- 28. kullanma değişkenler
- 29. Neden to_string yok (const string &)?
- 30. Neden .htaccess'in bir etkisi yok?