Desenvolvimento

GS2D: Next-gen 2D

Essa semana foi publicada a segunda parte da minha série de artigos no blog PontoV, o mais importante do país na parte de desenvolvimento de jogos. A série fala sobre uma biblioteca open-source para C++ na qual venho trabalhando nos últimos 3 anos. A GS2D é voltada ao desenvolvimento de jogos 2D mas possui uma proposta um pouco diferente de outras bibliotecas C/C++ (open-source ou proprietárias) do gênero: oferecer uma abstração direta e orientada a objetos da API gráfica, num nível mais alto possível, com gerenciamento de memória mais simples/rápido e com o foco direcionado a shaders.

A vantagem de se utilizar shaders em um jogo 2D é que com eles é possível criar efeitos customizados que podem trabalhar a nível de vértice ou pixel sendo processados na GPU durante a execução do pipeline de renderização, isto é, de maneira MUITO RÁPIDA se comparada aos padrões dos jogos 2D “antigos”. Logo, é possível criar efeitos extremamente inovadores nos gráficos 2D.

Todos os componentes da biblioteca são baseados em ponteiros compartilhados automáticos, que abstém o programador de preocupações relacionadas ao gerenciamento de memória, corriqueiro em linguagens nativas de alta performance como C/C++. Sua sintaxe é simples e limpa, assim ela não força o programador a utilizá-la como um framework fechado e prender o código a padrões e práticas enformadas.

A biblioteca possui uma implementação completa no Windows/Direct3D. Um dos jogos que utiliza a biblioteca é o Penumbra, que faz uso pesado dos shaders, que são o foco principal da biblioteca. Atualmente aqui na Jera estou trabalhando no porte da biblioteca para a plataforma Android, que irá utilizar vertex e pixel shaders do OpenGL ES 2.0 para fazer a renderização. Jogos feitos com ela não serão para todos os smartphones, será necessária uma GPU razoável. O trabalho ainda está em seus estágios iniciais, mas em breve vou ter alguns resultados legais para postar.

O primeiro e o segundo artigo no PontoV cobrem os aspectos mais básicos de áudio, vídeo e entrada de dados da biblioteca. Pretendo começar a falar de shaders a partir do terceiro ou quarto, dependendo do feedback dos leitores.