Ho letto alcuni tutorial su GLSL. In certi attributi position è un vec4 in alcuni vec3. So che le operazioni con la matrice hanno bisogno di un vec4, ma vale la pena inviare un elemento aggiuntivo? Non è meglio inviare vec3 e successivamente cast nello shader vec4 (posizione, 1.0)? Meno dati in memoria: sarà più veloce? O dovremmo impacchettare un elemento in più per evitare il casting?Posizione shader vec4 o vec3
Qualche consiglio, cosa dovrebbe essere meglio?
layout(location = 0) in vec4 position;
MVP*position;
o
layout(location = 0) in vec3 position;
MVP*vec4(position,1.0);
Significa che posso utilizzare: glBufferSubData (GL_ARRAY_BUFFER, 0, vertice * 3, dati); glVertexAttribPointer (0, 3, GL_FLOAT, GL_FALSE, 0, 0); e negli shader utilizzare il layout (posizione = 0) nella posizione vec4; " espressione? – Skides
Sì, questo è ciò che significa. Se lo fai, GLSL aggiungerà 1.0 per W ogni volta che proverai ad accedervi. –
Solo una rapida domanda in più: questo vale per più di 'GLfloat'? Cioè, sarebbe la stessa espansione per un 'dvec2' ->' dvec4' o 'ivec2' ->' ivec4'? – ThePhD