2013-04-29 24 views
7

STD140'ı OpenGL'de düzgün bloklar için ne zaman kullanırım? Her ne kadar% 100 emin olmasam da, "Paylaşılan" adı verilen aynı şeyi elde edebilecek bir alternatifin olduğuna inanıyorum.STD140 opengl'de ne zaman kullanılmalıdır?

Sadece kodlayıcı için bir tercih mi? Yoksa diğeri üzerinde kullanmanın sebepleri var mı?

+0

[ne 'std140' düzeni] (http: //www.opengl) biliyorsanız. org/wiki/Interface_Block_% 28GLSL% 29 # Memory_layout), o zaman neden kullanmak istediğinizi ya da kullanmak istemediğini bilmelisiniz, yani 'std140' düzeninin ne olduğunu soruyorsunuz? –

+0

@NicolBolas Nope, Farkı biliyorum sorgu kullanmak zorunda ve bir tane var. Benim sorum hala duruyor –

+0

@NicolBolas: I se e kod çalışıyorum ve bunu anlamak için bu kaynağı bulmak için mutluyum. – Jackalope

cevap

9

Düzgün tampon nesnelerin homojen bir blok için bir veri depolama belleği, bir ile üç arasında düzeni kullanmak bildirilebilir http://www.opengl.org/registry/specs/ARB/uniform_buffer_object.txt

açıklanmaktadır: packed, shared veya std140.

  1. packed üniforma bloklar verimlilik için bir uygulama bağımlı veri düzeni ve kullanılmayan üniformalar yer kazanmak için derleyici tarafından elimine edilebilir. Tekdüze bloklar, varsayılan düzen, verimlilik için uygulamaya bağlı bir veri düzenine sahiptir, ancak düzen, bloğun yapısı tarafından benzersiz bir şekilde belirlenerek, veri depolama programların her birinde paylaşılmasına olanak tanır. Tekdüze bloklar standart çapraz platform çapraz satıcı düzenine sahiptir. Kullanılmayan üniformalar elenmeyecek. Belirli ambalaj davranışı garanti ve uzaklıklar ve ilerlemelerden dolayı sorgulamak için uygulama gerektirmez

std140 üniforma blok düzeni. Bu durumda, sadece tekdüze blok beyanına dayalı olarak önceden belirlenmiş olmasına rağmen, asgari boyut hala sorgulanabilir. Tekdüze bir blokta her bir üniformanın ofseti, OpenGL spesifikasyonunda tarif edilen kural setinin uygulanmasıyla üniform bloğun tanımından türetilebilir.

+0

std430 ayrıca bir alternatiftir. – AzP

5

std140, tümü bir kerede güncellediğiniz tekdüze bir bloğa sahip olduğunuzda, örneğin bir sahne oluşturmak için matris ve aydınlatma değerlerinin bir koleksiyonu gibi durumlarda kullanışlıdır. Gölgeni (ler) indeki std140 ile bloğu bildirin ve C'deki bellek düzenini bir struct ile çoğaltabilirsiniz. Bunun yerine sorgulamak ve C blok içerisindeki her bireyin değeri uzaklıklar kaydetmek zorunda yapabilirsiniz sadece glBufferData (GL_UNIFORM_BUFFER bir çağrıyla, sizeof (my_struct), & my_struct. Dikkatli biraz olması gerekiyor

Örneğin, bir vec3, 4 ile değil, 4 şamandıra alır, ancak yine de çok daha kolay IMHO

İlgili konular