Novos mecanismos de renderização para OpenGL e Vulkan foram adicionados ao GTK

Os desenvolvedores da biblioteca GTK anunciaram a disponibilidade de dois novos mecanismos de renderização - “ngl” e “vulkan”, usando as APIs gráficas OpenGL (GL 3.3+ e GLES 3.0+) e Vulkan. Novos motores estão incluídos na versão experimental do GTK 4.13.6. Na ramificação experimental do GTK, o mecanismo ngl agora é usado por padrão, mas se problemas significativos forem identificados na próxima ramificação estável 4.14, o antigo mecanismo de renderização "gl" será retornado.

Novos motores são posicionados como unificados e montados a partir de uma única base de código. A essência da unificação é que a API Vulkan é usada como base, sobre a qual um nível de abstração separado foi criado para OpenGL, levando em consideração as diferenças entre OpenGL e Vulkan. Essa abordagem possibilitou a utilização de uma infraestrutura comum em ambos os motores para processamento do gráfico de cena, transformações, cache de texturas e glifos. A unificação também simplificou significativamente a manutenção da base de código de ambos os mecanismos, mantendo-os atualizados e sincronizados.

Ao contrário do antigo mecanismo gl, que usava um shader simples separado para cada tipo de nó de renderização e reordenava periodicamente os dados durante a renderização fora da tela, os novos mecanismos, em vez da renderização fora da tela, usam um shader complexo (ubershader) que interpreta os dados do buffer . Na sua forma atual, a nova implementação ainda fica atrás da antiga no nível de otimizações, uma vez que o foco principal na fase atual é o correto funcionamento e facilidade de manutenção.

Novos recursos que estão faltando no antigo mecanismo gl:

  • Suavização de contornos - permite preservar detalhes finos e obter contornos mais suaves.
    Novos mecanismos de renderização para OpenGL e Vulkan foram adicionados ao GTK
  • Formação de gradientes arbitrários, que podem usar qualquer número de cores e anti-aliasing (no mecanismo gl, apenas gradientes lineares, radiais e cônicos com 6 cores de parada eram suportados).
    Novos mecanismos de renderização para OpenGL e Vulkan foram adicionados ao GTK
  • Escala fracionária, que permite definir valores de escala não inteiros, por exemplo, ao usar uma escala de 125% para uma janela de 1200x800, será alocado um buffer de 1500x1000, e não 2400x1600 como no motor antigo.
  • Suporte para tecnologia DMA-BUF para uso de múltiplas GPUs e transferência de operações individuais para outra GPU.
  • Muitos nós de renderização que apresentavam problemas na implementação antiga são processados ​​corretamente.

As limitações dos novos motores incluem a falta de suporte para posicionamento por valores não inteiros (posição fracionária) e nós glshader, que estavam fortemente atrelados aos recursos do motor antigo, e que não eram mais necessários após a adição de suporte para nós com máscaras (máscara) e texturas com transparência. Também é mencionado que existe a possibilidade de possíveis problemas com drivers gráficos decorrentes de alterações no método de trabalho com os drivers.

No futuro, com base no novo modelo unificado, não está excluída a criação de motores de renderização utilizando Metal no macOS e DirectX no Windows, mas a criação de tais motores é complicada pelo uso de outras linguagens para shaders (o “ngl Os motores "e" Vulkan "usam a linguagem GLSL, portanto, para Metal e Direct, será necessário duplicar shaders ou usar uma camada baseada no kit de ferramentas SPIRV-Cross).

Os planos futuros incluem o fornecimento de suporte HDR e ferramentas para gerenciamento correto de cores, suporte para renderização de caminho no lado da GPU, a capacidade de renderizar glifos, renderização off-stream e otimizações de desempenho para dispositivos mais antigos e de baixo consumo de energia. Na sua forma atual, o desempenho do motor "vulkan" está próximo do desempenho do antigo motor "gl". O motor "ngl" tem desempenho inferior ao antigo motor "gl", mas o desempenho disponível é suficiente para renderizar a 60 ou 144 FPS. Espera-se que a situação mude após a otimização.

Fonte: opennet.ru

Adicionar um comentário