GLSL

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.

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-Share Alike 2.5 License.