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_ModelViewProjectionMatrixposiciona 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 mais antiga; ainda suportado Versão Atual Versão preliminar atual Versão futura
versão publicação Descrição / mudanças
Versão mais antiga; Não mais suportado: 1,10 30 de abril de 2004
  • OpenGL 2.0
  • primeira publicação
Versão mais antiga; Não mais suportado: 1,20 2 de agosto de 2006
  • OpenGL 2.1
  • Matrizes não quadradas
  • Interpolação baseada em centróide entre sombreadores de vértice e fragmento
  • Valores invariantes das mesmas expressões em programas diferentes
  • Produto externo de uma multiplicação de matriz algébrica linear
  • Transpor uma matriz
  • Coordenadas do fragmento atual dentro de um ponto primitivo
Versão mais antiga; Não mais suportado: 1,30 11 de agosto de 2008
  • OpenGL 3.0
  • Múltipla escolha
  • Tipos de dados de textura inteira
  • Inteiro sem sinal, vetor e tipos de dados de textura
  • interpolação linear sem perspectiva e não interpolação
  • funções de ângulo hiperbólico
  • truncar e arredondar números de ponto flutuante
Versão mais antiga; Não mais suportado: 1,40 24 de março de 2009
  • OpenGL 3.1
  • Layout de formato para declaração de variável
  • Inverta uma matriz
Versão mais antiga; Não mais suportado: 1,50 3 de agosto de 2009
  • OpenGL 3.2
  • Escolha entre o perfil principal e o perfil de compatibilidade
  • determinar uma matriz
  • Shader de geometria
Versão mais antiga; Não mais suportado: 3,30 11 de março de 2010
  • OpenGL 3.3
  • Conversão entre números inteiros e números de ponto flutuante com retenção da representação de nível de bit
Versão mais antiga; Não mais suportado: 4,00 11 de março de 2010
  • OpenGL 4.0
  • Tipo de dados de ponto flutuante de precisão dupla
  • Empacotando e desempacotando números de ponto flutuante
  • Shader Tessellation
Versão mais antiga; Não mais suportado: 4,10 26 de julho de 2010
  • OpenGL 4.1
Versão mais antiga; Não mais suportado: 4,20 8 de agosto de 2011
  • OpenGL 4.2
  • Controle de acesso de variáveis ​​de memória
  • Empacotando e descompactando inteiros
Versão mais antiga; Não mais suportado: 4,30 6 de agosto de 2012
  • OpenGL 4.3
  • Shader de computação
Versão mais antiga; Não mais suportado: 4,40 22. julho 2013
  • OpenGL 4.4
Versão mais antiga; Não mais suportado: 4,50 20 de julho de 2014
  • OpenGL 4.5
  • Perfil de compatibilidade para OpenGL ES 3.1
  • Controle estendido do cálculo de derivativos
Versão Atual: 4,60 23 de julho de 2017
  • OpenGL 4.6
  • Suporte para OpenGL SPIR-V

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

Evidência individual

  1. Especificação do idioma, versão 4.30 (PDF; 830 kB; Inglês)