A GLSL (GL Shading Language) é uma linguagem de programação usada para o desenvolvimento de shaders dentro do pipeline do OpenGL. A GLSL é padronizada pela Khronos juntamente com a API OpenGL, fazendo parte de qualquer implementação OpenGL que seja compatível com a versão 2.0 ou posterior da API.
A versão mais nova da linguagem é a GLSL 4.5 que faz parte do OpenGL 4.5 em diante.
Exemplo Simples em GLSL
// pixel shader para transformar a posição de um vértice void main(){ // realiza as tranformações do pipeline fixo gl_position = ftransform(); } // shader fragmento para tonalizar (shading) um fragmento void main(){ // diz que todo fragmento deve ser amarelo gl_color = vec3(1.0, 1.0, 0.0); }
Ponto inicial
Shaders em GLSL iniciam sua execução na função main.
Tipos de dados em GLSL
Refletindo a natureza de se lidar com componentes vetoriais a linguagem GLSL além de valores primitivos escalares tem vários tipos de dados que extendem os tipos primitivos e permitem manipulá-los vetorialmente. Tais tipos de dados são:
reais escalares e vetoriais: float, vec2, vec3, vec4
inteiros escalares e vetoriais: int, ivec2, ivec3, ivec4
matrizes quadradas: mat2, mat3, mat4
matrizes não quadradas: mat3x2, mat 2x4, etc…
booleano escalar ou vetorial: bool, bvec2, bvec3, bvec4
sampler para acessos às texturas: sampler2d
(Colocar shader que mexe com textura também)
Qualificadores
- uniform
- variável uniforme armazena algum valor "por primitivo"
- attribute
- variável attribute armazena algum valor por vértice.
- varying
- variável que é passada de um estágio do shader para o outro.
Funções
dot(x,y): produto escalar (produto ponto) entre os vetores x e y de mesmo tamanho
clamp(x, a, b): garante que x esteja no intervalo [a,b]. Se x for menor que a, o resultado é a. Se x for maior que b, o resultado é b. Se x estiver entre a e b, inclusive, o resultado é x.
reflect:
refract:
step:
smoothstep:
clamp:
fract:
degrees:
radians: Converte graus para radianos
cos: Calcula o cosseno
sin: Calcula o seno
tan: Calcula a tangente
atan:
pow:
log:
exp:
exp2:
Links
Especificação
** colocar link da especificação GLSL mais atual **
Tutoriais
Tutoriais Glsl da Ozone 3D
https://thebookofshaders.com/ Livro online com vários exemplos de shaders
https://www.youtube.com/watch?v=7UvpTTEE1Hs: Vídeo no Youtube sobre como configurar VS code para executar WebGL glsl shaders
Exemplos onlines interativos de GLSL (WebGL)
https://docs.google.com/document/d/1NI-8VT584bR56cX7x93XwoADEw4pDRZ6EpytzFyJvIA/edit?pli=1
Ferramentas online
Edite shader online: http://shader-playground.timjones.io/ (https://github.com/tgjones/shader-playground)
Edite shaders online: https://www.shadertoy.com/
Apps para escrita de shaders glsl
http://www.shaderific.com/: Para IOS. Pago.
Ferramentas Utilitárias
http://www.opengl.org/sdk/tools/glslang/ Parser de referência de GLSL
http://synthclipse.sourceforge.net/index.html Ambiente de desenvolvimento de shader GLSL (em eclipse, requer JDK 8+ e uma placa de video compativel com OpenGL 3.3+)
https://sourceforge.net/projects/glshaders/?source=recommended - Eclipse shaders - Plugin para eclipse que te ajuda a criar, editar e verificar seus shader vertice e fragmento GLSL e NVidia CG diretamente dentro do IDE Eclipse. Cada shader pode ser editado em um editor que colore a sintaxe com marcadores de erro/aviso.
Para WebGL
https://cdn.rawgit.com/MaxBittker/glslify-talk/d1d3ec44/glslify.pdf: shaders GLSL para uso em WebGL/JS.