OpenGL Shading Language
OpenGL Shading Language | |
---|---|
Ano de publicação: | 2002 |
Desenvolvedor: | Grupo Khronos |
Versão atual : | 4,60 (23 de julho de 2017) |
Influenciado por: | C. |
www.opengl.org/documentation/glsl/ |
A OpenGL Shading Language (abreviado: GLSL ou glSlang ) é uma linguagem de programação para executar seus próprios programas, os chamados shaders , no processador gráfico usando OpenGL .
Criação e desenvolvimento posterior
Em computação gráfica , sombreamento se refere à mudança em vértices ou fragmentos individuais no pipeline gráfico . Os shaders calculam a aparência de um objeto ou criam efeitos especiais. Tarefas típicas são, por exemplo, texturização e iluminação. No pipeline OpenGL clássico (chamado de função fixa), as etapas de cálculo individuais do sombreador não podem ser alteradas e apenas parâmetros individuais podem ser configurados. Para superar essa limitação, GLSL foi introduzido como uma extensão no OpenGL versão 1.4. GLSL permite que partes do pipeline sejam definidas livremente usando seus próprios programas. Então, z. B. um modelo de iluminação especial ou um efeito de textura, como mapeamento de relevo, podem ser implementados.
Com o OpenGL versão 2.0, a linguagem tornou-se parte oficial da especificação OpenGL , que define o escopo funcional do OpenGL. A versão GLSL inicial oferecia apenas um shader de vértice e fragmento . Com o OpenGL versão 3.2 do shader geometria foi adicionado , com a versão 4.0 com os de controlo tessellation e sombreamentos avaliação tessellation e com a versão 4.3 com o sombreador de computação .
Com o pipeline baseado em GLSL de hoje , todas as etapas de processamento da placa de vídeo podem ser programadas diretamente , com exceção da rasterização .
Palavras-chave (qualificadores de precisão) da linguagem de programação subsidiária GLSL ES também foram incluídas na especificação de GLSL . Eles se destinam exclusivamente à portabilidade com OpenGL ES e possíveis extensões, mas, como tal, não têm função ou significado em GLSL. As funcionalidades do GLSL ES são descritas em uma especificação separada e, portanto, não fazem parte do GLSL.
GLSL concorre com HLSL , que fornece a funcionalidade equivalente para Direct3D .
Características da linguagem
GLSL é uma linguagem de programação semelhante a C que foi especialmente adaptada às necessidades dos shaders. Existem tipos internos de vetores , matrizes e uma variedade de funções matemáticas e gráficas. Muitas das operações oferecidas podem funcionar em vários elementos de dados simultaneamente ( SIMD ). Em contraste com C, no entanto, não há indicadores .
Existem cinco tipos diferentes de shader GLSL; Shaders de vértice, mosaico, geometria e fragmento como parte do pipeline de renderização e os shaders de computação independentes. Cada tipo de sombreador tem parâmetros de entrada e saída característicos. O desenvolvedor do aplicativo fornece o driver OpenGL com o código-fonte do shader e todas as variáveis e constantes adicionais para cada tipo de shader. O driver compila e vincula os shaders a um programa de shaders. Não é obrigatório usar todos os tipos de sombreador.
Cada primitivo que o aplicativo deseja desenhar agora passa pelos sombreadores contidos no programa de sombreador na seguinte ordem:
1. Vertex shader
O sombreador de vértice é executado uma vez para cada vértice. O shader só tem acesso ao vértice que acabou de ser tratado (incluindo suas coordenadas de textura, normais e outros dados transferidos), mas não aos vértices vizinhos, a topologia ou semelhantes.
2. Shaders de mosaico
Uma superfície (triângulo ou quadrado) pode ser subdividida em superfícies menores no quadrado do mosaico. Na implementação, é feita uma distinção entre sombreadores de controle de mosaico e sombreadores de avaliação de mosaico.
3. Geometryshader
No sombreador de geometria, novos primitivos podem ser criados a partir de um primitivo existente (ponto, linha, triângulo).
4. Fragment shader
O sombreador de fragmento é executado uma vez para cada fragmento (pixels antes de serem exibidos no dispositivo de exibição). A cor para o fragmento correspondente é calculada aqui. Os sombreadores de fragmento são equivalentes aos sombreadores de pixel do Direct3D .
Shader de computação
Este tipo de sombreador pode processar dados independentemente do pipeline de gráficos e, assim, realizar cálculos de GPGPU no contexto OpenGL.
exemplo
Um exemplo de programa GLSL que consiste em um vértice e um sombreador de fragmento. O programa cria uma silhueta vermelha de todos os objetos.
Vertex shader
Este sombreador de vértice se comporta como o pipeline OpenGL clássico (função fixa). Ele define a cor de primeiro plano do vértice para a cor especificada pelo aplicativo ( gl_Color
) e a matriz gl_ModelViewProjectionMatrix
posiciona o vértice ( gl_Vertex
) em relação à câmera no espaço.
void main(void)
{
gl_FrontColor = gl_Color;
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}
Fragment shader
Este sombreador de fragmento simples ignora a cor de entrada ( gl_Color
) e define a cor do fragmento como vermelho.
void main(void)
{
gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
}
história
Lenda: | Versão antiga | Versão Atual |
---|
versão | publicação | Descrição / mudanças |
---|---|---|
1,10 | 30 de abril de 2004 |
|
1,20 | 2 de agosto de 2006 |
|
1,30 | 11 de agosto de 2008 |
|
1,40 | 24 de março de 2009 |
|
1,50 | 3 de agosto de 2009 |
|
3,30 | 11 de março de 2010 |
|
4,00 | 11 de março de 2010 |
|
4,10 | 26 de julho de 2010 |
|
4,20 | 8 de agosto de 2011 |
|
4,30 | 6 de agosto de 2012 |
|
4,40 | 22. julho 2013 |
|
4,50 | 20 de julho de 2014 |
|
4,60 | 23 de julho de 2017 |
|
literatura
- Randi Rost: linguagem de sombreamento OpenGL . 1ª edição Pearson Education, 2004, ISBN 0-321-19789-5 .
- Heiko Ihde: Shader com GLSL: Uma introdução à linguagem de sombreamento OpenGL . 1ª ed. Diplomica, 2009, ISBN 3-8366-7927-2 .
Links da web
- Especificação de idioma, versão 4.60 (PDF; 915 kB; Inglês)
- Tutorial de linguagem de sombreamento OpenGL lighthouse3d.com (inglês)
- Exemplos de OpenGL Shading Language, alteráveis interativamente!
Evidência individual
- ↑ Especificação do idioma, versão 4.30 (PDF; 830 kB; Inglês)