© Den Rise/Shutterstock.com

O primeiro problema que todo novato no mundo da API gráfica enfrenta é a escolha da API certa. Quando se trata de APIs multiplataforma de código aberto, OpenGL e Vulkan são as principais considerações.

Como eles diferem e qual vale a pena escolher? Este artigo responde a essas perguntas com uma análise aprofundada das diferenças entre as duas APIs.

OpenGL x Vulkan: uma comparação lado a lado

OpenGLVulkanPurposeRenderização de gráficos vetoriais 2D e 3DProgramação de videogames e renderização de gráficos 3DFocusGraphicsComputação e gráficosNível de idiomaAlto nívelBaixo nívelIdiomas suportadosC e C++CAbstraçãoAltoBaixoSO suportadoWindows, Linux, Mac OSWindows, Linux, Mac OS, BSD, Unix, Nintendo, Android e iOSSite oficial www.opengl.orgwww.khronos.org/vulcanVersões de APITem uma API diferente para plataformas móveisTem um único API para plataformas de desktop, móvel e console

OpenGL vs. Vulkan: qual é a diferença?

Definição

OpenGL

Silicon Graphics lançou o Open Graphics Library, OpenGL, em junho de 1992 como uma API de código aberto para fornecer uma interface para programação gráfica. Ao longo dos anos, melhorias e a introdução de outras extensões fizeram com que ele evoluísse para uma API multilíngue.

O ponto de virada foi a introdução da extensão da versão 4.2 que permitiu o uso de sombreadores de computação, o que possibilitou a sincronização de threads e o compartilhamento de memória. Ele transformou o OpenGL no que é hoje, uma API para a renderização acelerada por hardware de gráficos vetoriais 2D e 3D.

Vulkan

O Khronos Group, AMD e DICE lançaram o Vulkan em 2016 como uma API de código aberto multiplataforma que fornece uma interface para programação e renderização de videogames e outros aplicativos gráficos 3D em tempo real. Era para ser uma versão moderna do OpenGL, que atenderia às necessidades em rápida mudança da indústria de jogos, ao mesmo tempo em que exploraria toda a capacidade das GPUs modernas. Inicialmente era conhecido como Next Generation OpenGL antes de ser renomeado para Vulkan.

Vulkan é uma API de código aberto para programação de videogames e aplicativos gráficos 3D.

©monticello/Shutterstock.com

Design

O O design do OpenGL o tornou adequado para estações de trabalho gráficas que possuem renderizações diretas. Como resultado, pode não ser adequado para plataformas de desktop, independentemente do sistema operacional. O modelo de segmentação inibe a geração e execução de comandos paralelos. Consequentemente, ele não podia ser executado em certas plataformas, como tablets, smartphones e consoles.

Ao contrário do OpenGL e outras APIs anteriores, o Vulkan foi projetado principalmente para ser executado em diversas plataformas, especialmente móveis e consoles. Seu design em camadas permite validação de código, criação de perfil e depuração sem afetar o desempenho; portanto, ele pode sustentar o uso inovador de ferramentas de GPU de fornecedores cruzados.

Devido ao seu design em camadas, o Vulkan oferece controle direto da GPU, um recurso exigido pelos mecanismos de jogo mais sofisticados. Ele também conta com buffers de comando, que são comandos pré-gerados, eliminando assim a necessidade de compilar ou validar durante cada loop de renderização. Como resultado, reduz significativamente a sobrecarga da CPU.

Utilização da CPU

No OpenGL, as chamadas executadas não são armazenadas em cache; portanto, muitas chamadas ao modo kernel são necessárias para alterar e validar o estado do driver. Por outro lado, o Vulkan usa buffers de comando, melhorando assim a utilização dos recursos da CPU.

A segunda diferença é o recurso de geração de buffer paralelo do Vulkan. Com ele, o Vulkan aproveita o poder de todos os núcleos da CPU, algo com o qual o OpenGL lutava, visto que foi projetado em uma época em que os processadores de múltiplos núcleos eram inéditos. Com processadores modernos com pelo menos oito núcleos, Vulkan é a única API que pode fazer uso adequado das possibilidades que eles oferecem.

Compiladores de Shader

Shaders de computação ajudam a aproveitar ao máximo as GPUs (Graphic Processing Unit) em vez de depender apenas da potência da CPU do sistema. No entanto, essas APIs gerenciam esses sombreadores de maneira diferente.

O OpenGL usa C++, uma linguagem de alto nível, com um compilador GLSL. O compilador é executado no nível do driver e grava os sombreadores, que são traduzidos pelo tempo de execução do aplicativo em código de máquina para a GPU.

Vulkan, no entanto, encurta o processo usando uma representação intermediária portátil padrão, SPIR-v. Ele possui um tradutor de fonte do compilador para GLSL, HLSL e LLVM que converte os códigos de todas as outras APIs de alto nível em SPIR-V. Vulkan então pega a entrada intermediária binária pronta para executar e a utiliza no estágio de shader. Além do GLSL, o Vulkan oferece suporte a várias linguagens específicas de domínio, ferramentas, estruturas e kernels OpenGL C.

Previsibilidade

O nível de abstração é muito alto no OpenGL, já que a maioria dos as operações ocorrem nos bastidores. Eles incluem gerenciamento de recursos, verificação e validação de erros, shaders de pré-compilação e algumas sincronizações.

Esse design implícito garante que o desenvolvedor não precise escrever códigos para cada ação, mas também a torna menos previsível; você nunca sabe se seu código fará o que deveria fazer até que ele faça. Além disso, o driver agenda os envios de tarefas para processamento, o que leva a interrupções na renderização.

O Vulkan é diferente. É uma API explícita, o que significa que o driver não rastreia recursos nem define seus relacionamentos. Isso é feito no nível do aplicativo e exige que o desenvolvedor escreva o código para cada processo.

A vantagem disso é que as tarefas são enviadas antecipadamente para execução. Como resultado, o processamento de trabalhos no Vulkan é previsível, simplificado e ininterrupto. Assim, a renderização no Vulkan não sofre lags e travamentos como é comum no OpenGL.

O OpenGL é menos previsível do que o Vulkan, pois você não precisa escrever código para cada ação, enquanto para o Vulkan, você precisa.

©Den Rise/Shutterstock.com

Camada de driver e aplicativo

O OpenGL, como uma API implícita, deixa a responsabilidade do gerenciamento de recursos e do rastreamento de estado para a camada de driver. Como resultado, a camada de aplicação é muito fina no OpenGL. A renderização leva mais tempo do que levaria se a maioria das tarefas de alocação de recursos fosse feita na camada do aplicativo.

Por outro lado, o Vulkan foi projetado para ser o mais próximo possível do hardware gráfico. Para conseguir isso, ele deixa o gerenciamento de recursos, lógica e estados para os aplicativos.

Ao permitir que a camada de aplicativo faça a alocação de recursos, o Vulkan dá ao desenvolvedor de aplicativos controle total dos recursos do computador do host sistema. Portanto, permitir que o software acesse o processador gráfico diretamente torna a GPU renderizada o mais rápido possível e melhora o desempenho do processador.

Controle do desenvolvedor de aplicativos

Outra diferença importante entre as duas APIs é o nível de controle que o desenvolvedor tem sobre a memória do sistema. No OpenGL, esse controle é inexistente, pois os drivers utilizam heurísticas internas para alocar os recursos do sistema, inclusive a memória. O principal desafio desse modo de controle de memória é que ele varia de acordo com o fornecedor e pode resultar em alocações abaixo do ideal ou problemas quando o recurso é movido.

O Vulkan expõe os vários tipos de memória disponíveis no sistema e permite que o desenvolvedor alocar e desalocar as memórias a seu critério. O programador de aplicativos deve selecionar o melhor tipo de memória para a finalidade pretendida.

Além dos tipos de memória, Vulkan também concede ao desenvolvedor acesso a extensões disponíveis, filas de buffer de comando e dispositivos físicos. Portanto, como não há interferência do driver, o desenvolvedor pode modificar o comportamento do Vulkan para atender às demandas do jogo.

Escalabilidade multithread

OpenGL tem uma capacidade multithreading muito ruim, dificultando para aproveitar o poder de processamento das CPUs modernas. Devido a isso, ele também tem alta sobrecarga de CPU.

Aqui, novamente, o Vulkan segue a trajetória oposta. Ele é projetado especificamente para explorar a capacidade multithreading total da CPU de maneira explícita. Por meio de seu controle intencional de recursos, os trabalhos são separados em diferentes segmentos, desde a criação até a execução.

Portação de jogos entre plataformas

A portabilidade de jogos entre plataformas de desktop e móveis é impossível em OpenGL. Em vez disso, existem duas versões separadas da API; a API baseada em desktop (OpenGL) e OpenGL ES, uma API incorporada para plataformas móveis. Mesmo assim, a prioridade costuma ser dada às plataformas de desktop. Além disso, as APIs GL evoluíram consideravelmente mais devagar do que o hardware e a tecnologia da GPU; portanto, mesmo as implementações mais recentes geralmente são adequadas apenas para as GPUs da geração anterior.

A Vulkan possui uma API unificada para todas as plataformas, pois integra rasterizadores de desktop e móveis. Ele também possui melhores ferramentas de integração do que o OpenGL, pois o desenvolvedor pode ativar de forma independente a camada de diagnóstico e validação. Tudo isso torna as versões de desktop e móvel da API semelhantes, tornando possível a portabilidade de jogos entre as plataformas. Além disso, ao contrário do OpenGL, o Vulkan prioriza as plataformas móveis.

Verificação de erros

No OpenGL, a verificação de erros é uma função automática da camada do driver. Como resultado, os aplicativos que estão executando bem podem sofrer quando a verificação de erros não é acionada durante a execução. Verificações de erros excessivas e aleatórias também sobrecarregam o PC.

Considerando que, no Vulkan, a verificação de erros vem como um complemento que pode ser ativado e desativado quando necessário, ativando ou desativando a verificação de erros e outras camadas de validação. Idealmente, para fins de depuração, essas camadas são ativadas no Vulkan durante a fase de desenvolvimento e depois desativadas durante a fase de lançamento.

Tamanho da API

O Vulkan geralmente é uma API mais fina que o OpenGL. As vantagens de uma API simplificada são a baixa sobrecarga e um alto nível de controle de gerenciamento de recursos. Dessa forma, os desenvolvedores do Vulkan podem adicionar estruturas e bibliotecas auxiliares à camada do aplicativo. Além disso, devido à sua baixa sobrecarga, os produtos construídos sobre ele perdem muito pouco desempenho e controle da API. Na verdade, é possível construir o OpenGL sobre o Vulkan.

Horas do desenvolvedor

A principal vantagem do OpenGL sobre o Vulkan é que ele economiza algumas horas para o desenvolvedor, assim como a camada do driver. a alocação de recursos nos bastidores. No Vulkan, no entanto, o desenvolvedor deve escrever o código para cada ação pretendida, escolhendo o tipo de memória, alocação do tamanho da memória, thread etc. Como resultado, o Vulkan requer mais linhas de código para o mesmo aplicativo do que o OpenGL.

A maioria das pessoas usa isso para justificar por que a codificação em nível de máquina não vale a pena. No entanto, para aqueles para quem a alta eficiência do hardware é o santo graal, as horas extras valem a pena. Além disso, no sentido real, você precisa fazer isso apenas uma vez e não para todos os aplicativos devido à criação de buffers de comando.

Além disso, Vulkan oferece um ecossistema em camadas para os desenvolvedores escolherem o nível de programação que desejam pode aguentar. Os especialistas do Vulkan e aqueles que precisam de flexibilidade e controle máximos se contentarão em usar o Vulkan diretamente. Aqueles que desejam acelerar a fase de desenvolvimento optam por bibliotecas e camadas. A maioria dos usuários do Vulkan se enquadra nessa categoria. Depois, há a categoria final daqueles que usam o Vulkan para otimizar mecanismos de jogos prontos.

OpenGL x Vulkan: 5 fatos que você precisa saber

A versão inicial do OpenGL foi lançada em 1992 , enquanto a primeira versão do Vulkan foi lançada em 2016. O maior mérito do Vulkan é que ele oferece suporte a uma variedade de plataformas. Mecanismos de jogos líderes, como Unreal Engine 4, Unity e CryEngine, têm suporte total ao Vulkan. O Vulkan apresenta lotes para priorizar os tanques de memória no chip e reduza a carga da CPU. Muitas operações essenciais estão ocultas no OpenGL enquanto estão acessíveis no Vulkan.

OpenGL vs. Vulkan: Qual é o melhor? Qual você deve usar?

Se você deve escolher entre as duas APIs, sua decisão dependerá dos seguintes fatores:

Seu nível de especialização: Se você é novo no mundo gráfico, você provavelmente estará desenvolvendo aplicativos simples e pequenos. Nesse caso, comece com OpenGL. À medida que suas habilidades aumentam, considere aprender Vulkan. É a API para quem deseja criar um aplicativo para GPUs modernas.O sistema operacional e o hardware de destino: o OpenGL é adequado se você se preocupa apenas com os sistemas operacionais Windows e Linux ou pretende usar os sombreadores de computação no iOS. Além disso, o hardware de destino é uma consideração crítica ao usar algumas ferramentas, como o criador de perfil de GPU integrado da AMD, que funciona apenas com  DirectX e Vulkan.Níveis de controle necessários: Se você precisa ter controle sobre o gerenciamento de recursos como um desenvolvedor, então Vulkan é a API a ser usada. Também é vital considerar se o seu aplicativo está vinculado à CPU e distribui suas operações em diferentes núcleos.Novos projetos: Vulkan é a melhor API para quem está trabalhando em um novo projeto, especialmente em plataformas móveis.

O OpenGL foi lançado em uma época em que as GPUs eram apenas dispositivos gráficos. O tempo mudou; hoje, a maioria das GPUs se concentra em acelerar os cálculos e reduzir as cargas da CPU. Como tal, APIs voltadas para o futuro, como Vulkan, são o caminho a percorrer.

No entanto, vale a pena ter em mente que Vulkan é uma API mais complexa do que OpenGL e, devido à sua alta verbosidade, o aprendizado curva é muito íngreme. Também requer um alto nível de responsabilidade e mais manutenção para funcionar de forma eficaz. Mas o alto desempenho sempre teve um preço premium.

OpenGL x Vulkan: quais são as principais diferenças? Perguntas frequentes (perguntas frequentes) 

O Vulkan pode ser usado fora do setor de jogos?

O Vulkan é a única API moderna definida pelo setor que atende claramente aos requisitos de segurança requisitos críticos de certificação de outras indústrias, como aviônica, automotiva e industrial.

Qual ​​é a relação entre OpenGL e OpenCL?

OpenCL é um dos APIs de computação destinadas a melhorar a capacidade de computação das GPUs. É interoperável com OpenGL.

Quais são os benefícios de criar estruturas no Vulkan?

Para algoritmos sofisticados, como inferência de rede neural, a camada de aplicativo pode aproveita as plataformas de nível superior, enquanto para algoritmos que exigem um alto grau de gerenciamento de recursos, ele interage diretamente com o Vulkan.

Qual ​​é a diferença entre o Vulkan e o Mantle?

O Manto é a base de Vulkan. Portanto, o Vulkan oferece tudo o que o Mantle prometeu: redução da sobrecarga da CPU e melhor desempenho e eficiência da GPU. No entanto, Vulkan não é restrito por hardware como Mantle é para AMD GCN. Ele funciona em GPUs de todos os fornecedores e sistemas operacionais diferentes.

Posso usar o OpenGL para animações?

O OpenGL pode executar várias funções, e as animações são uma delas deles.

By Maxwell Gaven

Trabalho com TI há 7 anos. É divertido observar a constante mudança no setor de TI. TI é meu trabalho, hobby e vida.