En C, je peux déboguer du code comme:
fprintf(stderr, "blah: %f", some_var);
dans GLSL ... est-il possible pour moi de simplement vider une valeur dans un shader Vertex ou Fragment? Je m'en fiche si c'est lent; Je veux juste vider la valeur. Idéalement, je veux une configuration comme celle-ci:
Est-ce faisable? (Je ne me soucie pas des performances; je veux juste le faire pour une image).
Merci!
Malheureusement, ce n'est pas possible directement. Une solution possible cependant, que je finis par utiliser beaucoup (mais je suis sûr que c'est assez courant chez les développeurs GLSL) consiste à "imprimer" les valeurs sous forme de couleurs, à la place du résultat final souhaité.
Bien sûr, cela a de nombreuses limites; pour commencer, vous devez vous assurer que votre valeur est mappée dans un (0,1.0)
gamme. Des fonctions telles que mod
, fract
etc. s'avèrent utiles dans ces cas. Mais, en général, c'est ce que je considère comme l'équivalent "printf" dans GLSL.
Au lieu d'imprimer des valeurs, avez-vous pensé à essayer un débogueur GLSL?
Par exemple, glslDevil vous permettra de parcourir l'exécution de votre shader et d'examiner les variables à chaque étape.
Découvrez AMD CodeXL. Il vous permettra d'étape par image pour inspecter les valeurs d'état opengl, le code de shader et la mémoire de texture.
http://developer.AMD.com/tools-and-sdks/heterogeneous-computing/codexl/