Przeczytałem kilka tutoriali na temat GLSL. W pewnym położeniu atrybut jest vec4 w niektórych vec3. Wiem, że operacje macierzy wymagają vec4, ale czy warto wysłać dodatkowy element? Czy nie lepiej wysłać vec3, a później rzucić w shadera vec4 (pozycja, 1.0)? Mniej danych w pamięci - będzie szybciej? Lub powinniśmy spakować dodatkowy element, aby uniknąć rzucania?Shader position vec4 lub vec3
Jakieś wskazówki, co powinno być lepsze?
layout(location = 0) in vec4 position;
MVP*position;
lub
layout(location = 0) in vec3 position;
MVP*vec4(position,1.0);
Czy to oznacza, że mogę użyć: glBufferSubData (GL_ARRAY_BUFFER, 0, vertex * 3, data); glVertexAttribPointer (0, 3, GL_FLOAT, GL_FALSE, 0, 0); oraz w modułach cieniujących użyj układu " " (lokalizacja = 0) w pozycji wen4; " wyrażenie? – Skides
Tak, właśnie to oznacza. Jeśli to zrobisz, GLSL doda 1.0 dla W za każdym razem, gdy spróbujesz uzyskać do niego dostęp. –
Tylko szybkie pytanie dodatkowe: czy dotyczy to czegoś więcej niż "GLfloat"? To znaczy, czy to samo rozszerzenie ma miejsce dla 'dvec2' ->' dvec4' lub 'ivec2' ->' ivec4'? – ThePhD