Déboguer avec OpenGL 4

Lorsque l’on débute l’apprentissage d’OpenGL et des shaders (et même ensuite), on est vite confronté au problème du débogage, soit parce que le programme s’arrête brusquement, soit parce que le résultat obtenu ne correspond pas à ce que l’on attend. Traditionnellement, on utilise la fonction glGetError, mais elle est encore trop souvent « oubliée » par les développeurs et elle donne finalement assez peu d’informations.
Heureusement, cette problématique a été prise en compte dans les dernières spécifications d’OpenGL avec l’ajout de nouvelles extensions pour le débogage. Ce billet de blog aborde les fonctionnalités de débogage introduites dans OpenGL 4.1 avec l’extension ARB_debug_output et complétées dans OpenGL 4.3 avec l’extension KHR_debug.
Les outils externes de débogage ne sont pas abordés.
Lire la suite

Les accesseurs et les détails d’implémentation

C’est une discussion qui revient régulièrement sur le chat de Developpez.com. Une personne demande comment fait-on pour accéder aux variables membres privées d’une classe et on lui répond de créer des getter et setter. Viens alors un C++ien moyen (c’est-à-dire un casse-pied, en général moi) qui hurle au scandale et sort l’adage bien connu : « les accesseurs, c’est le mal ». S’en suit une discussion sur pourquoi les accesseurs sont à éviter, quand j’ai le temps et l’humeur. :)
Dans cet article, je vais présenter les problèmes que posent les accesseurs concernant l’exposition des détails d’implémentation.
Lire la suite

Introduction aux geometry shaders

A la demande de LittleWhite, mon premier bloc technique est consacré à l’utilisation des geometry shader. Il n’y a rien de tres compliqué donc je présente un exemple simple apres quelques rappels. Pour ceux qui ne connaissent pas du tout les geometry shaders, je ferais un article plus detaille sur ce sujet.
Pour faire au plus simple, j’utilise Qt et en particulier QShaderProgram, qui gère les geometry shaders depuis Qt 4.7.
Lire la suite

Les queries objects

Les queries objects permettent d’interroger OpenGL pour obtenir des informations à propos des traitements effectués. Par exemple, les queries objects permetttent de récupérer les nombres d’instances/primitives restant après un occlusion culling dans un geometry shader. On utilise également des tableaux de queries objects pour tester chaque rendu et la technique de conditional rendering pour faire les tests de culling directement sur le GPU.
Lire la suite

Ouverture du blog

Bienvenue sur ce blog consacré à la programmation des GPU

Pourquoi ce blog ?

J’ai commencé il y a maintenant plus d’un an la rédaction d’un tutoriel sur la programmation des processeurs graphiques (La 3D avec le module OpenGL de Qt, avec Rémi Achard, mon stagiaire de l’époque). L’idée de cet article est venue du constat que la plupart des ressources sur la programmation 3D en français utilisent des méthodes dépréciées. Ce tutoriel présente donc les bases de programmation 3D moderne, en s’affranchissant de l’approche « historique » (comme par exemple le pipeline fixe ou le mode directe).

La rédaction de ce genre d’article est très épuisante et un peu frustrante. Épuisante, car cela prend du temps à se documenter, à écrire, à coder des exemples simples et pédagogiques… et tout recommencer plusieurs fois. Frustrant parce que ce tutoriel n’aborde, pour le moment, que des techniques destinées aux débutant. Quand la principale motivation est de s’amuser à découvrir des techniques avancées (et donc complexes), la rédaction de ce genre d’article n’apporte pas assez de satisfactions personnelles. La conséquence de cela est que la rédaction traîne un peu depuis quelques temps. Beaucoup même.

Le but de ce blog est donc avant tout de m’amuser avec les gpu, d’expérimenter des techniques avancées, de faire des tests, d’échanger sur ces techniques, etc.

Alors, tu laisses tomber l’article principal ?

Non. Le tutoriel va continuer à évoluer de son côté. Deux chantiers sont en cours : la réorganisation en plusieurs petits tutoriels et la fin de la rédaction de la partie sur OpenCL. Le découpage de l’article devrait le rendre plus abordable pour les débutants et faciliter la mise à jour.

Le blog et les articles ne s’adressent pas au mêmes personnes. Le premier est un lieu d’expérimentation et d’échange technique. Il intéressera donc les développeurs plus expérimentés (j’espère). L’article est beaucoup plus pédagogiques et synthétiques. Il est destiné aux débutants.

Que va-t-on trouver dans ce blog ?

La thématique principale sera la programmation de gpu au sens large (3D, GPU computing), les thèmes annexes seront plus variés (c++, opengl, opencl, cuda, architecture des gpu, 3d, Qt, moteurs 3D, moteurs de jeux, etc.) Il n’y a pas vraiment de limites bien définies. Les sujets abordés dépendront de mes envies, de mes lectures, des questions sur le forum ou de suggestions que l’on pourra me faire.

Je publierai deux types d’articles : les articles techniques, orientés vers une technique spécifique et ses différentes applications (par exemple la tesselation ou le feedback), et les articles applicatifs, orienté vers une application (par exemple comment afficher des arbres ou un personnage réaliste) en utilisant les différentes approches possibles.

J’essaierai de publier 1 ou 2 articles par mois. Les premiers articles sont déjà rédigés (un sur les geometry shaders, à la demande de LittleWhite, et un sur l’ambient occlusion).

A bientôt