Programação com OpenGL/Modern OpenGL Tutorial 03: diferenças entre revisões

[edição não verificada][edição não verificada]
Conteúdo apagado Conteúdo adicionado
Linha 184:
 
== Portando para OpenGL ES 2 ==
 
O Oposto de uma variável ''attribute'' é as variáveis ''uniform'': Elas são as mesmas para todas as vértices.
Note que podemos mudar-los em uma forma de base regular pelo código C - mas cada vez que um conjunto de vértices é mostrada na tela, a uniform será constante.
 
Vamos dizer que nós queremos definir a transparência global do triângulo pelo código C. tal qual acontece com os attributes, nós precisamos declaro isto.
em uma global no código C:
<source lang="c">
GLint uniform_fade;
</source>
Depois de declararmos isto no código C (ainda após a linkagem do programa)
<source lang="c">
const char* uniform_name;
uniform_name = "fade";
uniform_fade = glGetUniformLocation(program, uniform_name);
if (uniform_fade == -1) {
fprintf(stderr, "Could not bind uniform %s\n", uniform_name);
return 0;
}
</source>
 
Note: Poderiamos até atingir um array especifica de elementos no código de shader com <code>uniform_name</code>, e.g. <code>"my_array[1]"</code>!
 
Além disto, para o uniform, nó também definiremos explicitamente o valor da non-varying. Vamos requisitar, em <code>onDisplay</code>, que o triangulo deve ser um pouco opaco:
<source lang="c">
glUniform1f(uniform_fade, 0.1);
</source>
 
Agora nós podemos usar esta variável em nosso fragment shader:
<source lang="glsl">
varying vec3 f_color;
uniform float fade;
void main(void) {
gl_FragColor = vec4(f_color.x, f_color.y, f_color.z, fade);
}
</source>
 
Nota: se você não usar uniform em seus código, o <code>glGetUniformLocation</code> não vai enxergar nada, e vai falhar.
 
== Referências ==