C for Graphics
C for Graphics (Cg), também conhecida como High-Level Shading Language (HLSL), é uma linguagem de programação desenvolvida pela Nvidia e Microsoft. Derivada do ANSI C, ela foi criada para dar suporte ao design gráfico, aproveitando os recursos do hardware NVIDIA. Sua principal aplicação é no desenvolvimento de algoritmos para pixel shaders e vertex shaders, que são instruções específicas para as GPUs das placas de vídeo.
Pontos-chave
- Cg é uma linguagem de programação derivada do ANSI C, criada pela Nvidia e Microsoft.
- Também conhecida como HLSL, otimiza o uso do hardware NVIDIA para gráficos.
- É utilizada para desenvolver algoritmos para pixel e vertex shaders em GPUs.
- Surgiu para simplificar a programação gráfica 3D, substituindo a linguagem assembly.
- Oferece maior nível de abstração, facilitando o aprendizado e a codificação de shaders.
Com os avanços tecnológicos nas placas aceleradoras gráficas, a programação gráfica 3D tornou-se complexa. Para simplificar, novas características foram adicionadas às placas, como a capacidade de modificar as filas de renderização através de vertex e pixel shaders. Inicialmente, esses shaders eram programados em linguagem assembly, que, apesar de oferecer controle total da GPU, era de difícil utilização. A Cg foi criada para suprir a necessidade de uma linguagem portátil e de maior nível de abstração, facilitando o desenvolvimento de programas que utilizam esses avanços. Uma das principais vantagens da Cg sobre a linguagem assembly é o maior nível de abstração do código, o que facilita o aprendizado, a programação, a leitura e o entendimento dos códigos.
Imagem: Paramaribo Span Pix · BY-NC-SA · Openverse
A Cg possui características que a tornam poderosa para a programação gráfica, incluindo tipos de variáveis específicos para gráficos 3D, uma biblioteca padrão rica em funções matemáticas e de mapeamento de texturas, e uma biblioteca de tempo de execução que permite a compilação dinâmica de shaders.
Tipos de Variáveis
A Cg inclui tipos de dados de vetores e matrizes, como 'float3' e 'float4x4', que são baseados nos tipos básicos de variáveis e são essenciais na programação gráfica 3D. Além disso, a Cg também suporta tipos de dados de estruturas, muito similares aos disponíveis na linguagem C.
A Biblioteca Padrão Cg
Assim como em C, a Cg possui um conjunto de funções comuns para a programação gráfica. Algumas dessas funções são equivalentes às de C, como as funções matemáticas 'abs()' e 'sin()'. Outras são especializadas para tarefas da GPU, como as funções de mapeamento de texturas, por exemplo, 'text1D' e 'text2D'.
A Biblioteca de Tempo de Execução Cg
Programas em Cg são essencialmente vertex e pixel shaders e necessitam do suporte de outros programas para gerenciar o restante do processo de renderização. A Cg pode utilizar duas APIs: OpenGL ou DirectX. Cada uma possui seu próprio conjunto de funções para se comunicar com o programa Cg, como funções para selecionar o shader atual e passar parâmetros. A biblioteca padrão de tempo de execução permite que o código Cg seja convertido para assembly e também compila shaders durante a execução do programa de suporte. Isso possibilita que a biblioteca de tempo de execução utilize as otimizações mais recentes disponíveis para o hardware alvo. No entanto, uma desvantagem dessa técnica é que ela permite ao usuário ter acesso ao código-fonte do shader.


