O suporte a pixel e vertex shaders da GSlib 1.5.0 está todo implementado e em fase de testes agora.
Esta parte de shaders está baseado na linguagem
Cg (shaders de alto nível cross-API da NVIDIA) e a GSlib está com uma interface muito simples, bem mais fácil de usar do que o runtime padrão da Cg, está parecido com isso:
| |
GS_SHADER pixelShader; pixelShader->LoadShader(&gsVideo, "meu_shader.cg", SHADER_MODEL_2);
gsVideo->SetPixelShader(&pixelShader); |
Quem não sabe/gosta ou não pretende usar shaders não precisa se preocupar, pois os outros componentes da GSlib continuarão funcionando da mesma forma que antes e a programação não vai mudar em nada. Mas por trás da interface da biblioteca o pipeline foi todo reformulado para rodar baseado em shaders.
A idéia nisso é basicamente tratar o 2D como um estilo de jogo, e não como uma limitação técnica. Esses screenshots fazem parte de uma demo que pretendo soltar com código-aberto para mostrar algumas novas possibilidades com shaders em 2D. Todas essas luzes são dinâmicas, por pixel e estão sendo desenhadas em tempo real. O shader está bem simples e é só de teste mesmo, nada muito elaborado:
Sem shaders:
http://asantee.net/gamespace/screenShot.jpg
Com shaders:
http://asantee.net/gamespace/screenShot2.jpg