GLSL / C++: Tablice mundurów?

Chciałbym zostawić światełka OpenGL i zrobić własne. Chciałbym, aby moje shadery pozwalały na zmienną liczbę świateł.

Czy możemy zadeklarować tablicę mundurów w shaderach GLSL? Jeśli tak, to jak ustalimy wartości tych mundurów?

Author: Miles, 2011-11-12

2 answers

Tak, to możliwe. Deklarujesz jednolite tablice podobne do tego, jak to robisz w C, np.

uniform float v[10];

Następnie możesz ustawić ich wartości za pomocą glUniform{1,2,3,4}{f,i}v

GLfloat v[10] = {...};
glUniform1fv(glGetUniformLocation(program, "v"), 10, v);
 73
Author: datenwolf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-11 21:34:04

Tak możliwe jest zadeklarowanie tablicy uniformów w shaderach GLSL. Wystarczy wpisać w google "GLSL uniform array" kilka przykładów (edit: lub zobacz przykład datenwolf). Istnieją jednak ograniczenia co do tego, ile uniformów można wysłać do różnych kart graficznych (przynajmniej na starszych, nie jestem pewien co do obecnych (chociaż wyobrażam sobie, że nadal będą)).

Jeśli zdecydujesz się iść trasą mundurów, sugerowałbym użycie mundurowych buforów. Według http://www.opengl.org/wiki/Uniform_Buffer_Object , "przełączanie między jednorodnymi wiązaniami buforów jest zwykle szybsze niż przełączanie dziesiątek uniformów w programie".

Jeśli masz dużą liczbę świateł i parametrów, Możesz również wysłać dane jako bufory float.

 6
Author: NickLH,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-11 21:35:54