OpenGL如何进行unit testing?

有没有一种使用OpenGL命令对函数或类进行unit testing的好方法?

对于c ++,我知道我可以使该类成为模板并传递一个直接进行opengl调用的类:

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]; }; } 

在C和c ++中,我可以将函数指针传递给调用opengl函数的函数(然后用于将指针传递给mock函数的unit testing)。

我也可以链接不同的库(而不是opengl),但这听起来像是一个很大的复杂function。

那么,什么是unit testing代码调用opengl函数的其他技术呢?

这是我回过头来学到的一个很好的技巧。 您可以使用常规的旧#define来模拟各种API函数:

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

使用配置的预处理器。 根本不需要更改绘图function。 进一步:你可以实现mockGlVertex3f ,例如检查参数或计算对它的调用次数,然后再进行检查。