OpenGL Comment faire des tests unitaires?

Existe-t-il un bon moyen de tester à l’unité une fonction ou une classe à l’aide de commandes OpenGL?

Pour c ++, je sais que je pourrais faire de la classe un modèle et passer une classe effectuant des appels opengl directs:

namespace myNamespace { struct RealOpenglCall { static inline void glVertex2fv( const GLfloat * v) { ::glVertex2fv( v ); } }; template class SomeRendering { public: SomeRendering() : v() { // set v } void Draw() { T::glVertex2fv(v); } GLfloat v[4]; }; } 

En C et c ++, je pouvais passer des pointeurs de fonction à des fonctions appelant des fonctions opengl (puis pour tester les unités en passant des pointeurs à des fonctions fictives)

Je pourrais aussi créer un lien avec une autre bibliothèque (au lieu d’opengl), mais cela ressemble à une grosse complication.

Alors, quelles sont les autres techniques permettant au code de test unitaire d’appeler des fonctions opengl?

Voici un bon tour que j’ai appris il y a longtemps. Vous pouvez utiliser d’anciennes #define s régulières pour vous permettre de simuler toutes sortes de fonctions d’API:

 #ifdef _test_ #define glVertex3f(x,y,z) (mockGlVertex3f((x),(y),(z))) ... #endif 

Avec un préprocesseur configuré. Il n’est pas nécessaire de changer vos fonctions de dessin. De plus, vous pouvez implémenter mockGlVertex3f de manière à vérifier par exemple les arguments ou à compter le nombre d’appels qui peuvent ensuite être vérifiés.