gKit2 light
prototyper un shader program

autre solution pour ecrire et tester facilement des shaders : shader_kit.cpp, c'est un petit programme qui compile les shaders, affiche les erreurs de compilation de manière assez lisible, et permet de dessiner un seul triangle ou un mesh. le gros interet de shader_kit est qu'il recharge et recompile les shaders automatiquement lorsqu'ils sont modifiés, ce qui permet de corriger interactivement le source du shader en le modifiant dans un éditeur (ouvert à coté) sans avoir besoin de fermer l'application et de la recharger.

comment ça marche ?

shader_kit est un 'bac à sable' permettant d'écrire et de tester des shaders assez facilement. il permet aussi de charger un objet .obj / wavefront, des textures et gère une camera que l'on peut contrôler à la souris (cf AppCamera)

comme il n'est pas possible d'écrire une solution totalement générique, shader_kit à des limites :

et alors ?

commencez par compiler shader_kit, si ce n'est pas deja fait :

make shader_kit -j8

enregistrez un shader de base dans un ficher shader.glsl :

#version 330
#ifdef VERTEX_SHADER
// doit calculer la position d'un sommet dans le repere projectif
// indice du sommet : gl_VertexID
void main( )
{
gl_Position= { ... }; // a completer
}
#endif
#ifdef FRAGMENT_SHADER
// doit calculer la couleur du fragment
void main( )
{
gl_FragColor= vec4(1, 1, 1, 1); // blanc opaque
}
#endif

exécutez shader_kit avec le nom du fichier en paramètre :

bin/shader_kit shader.glsl

le vertex shader ne compile pas (pour l'instant), shader_kit va afficher les erreurs de compilation :

après quelques modifications, sans fermer la fenetre de shader_kit, on peut dessiner un triangle en initialisant un tableau de positions pour les 3 sommets :

shader_kit recharge et recompile le shader tout seul, lorsqu'il est modifié et enregistré par l'éditeur. pratique non ? vous pouvez aussi appuyer sur la touche R pour forcer la compilation du shader...

mouarf, il sait dessiner qu'un seul triangle !!

ben non, on peut aussi charger un fichier .obj / wavefront et des images :

bin/shader_kit shader.glsl data/bigguy.obj data/grid.png

mais en ne dessinant qu'un seul triangle qui couvre tous les pixels de l'image... on peut quand meme faire des choses assez rigolotes avec des formes procédurales, exemple par iq/quillez et la video version longue sur youtube qui explique comment il programme ce genre de choses...

on peut aussi faire du lancer de rayons classique :

bin/shader_kit trace.glsl