OpenGL如何进行单元测试?

BЈо*_*вић 6 c c++ opengl unit-testing

有没有一种使用OpenGL命令对函数或类进行单元测试的好方法?

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

namespace myNamespace
{
struct RealOpenglCall
{
  static inline void glVertex2fv( const GLfloat * v)
  { ::glVertex2fv( v ); }
};

template< typename T >
class SomeRendering
{
  public:
    SomeRendering() : v()
    {
      // set v
    }
    void Draw()
    {
      T::glVertex2fv(v);
    }
    GLfloat v[4];
};

}
Run Code Online (Sandbox Code Playgroud)

在C和c ++中,我可以将函数指针传递给调用opengl函数的函数(然后进行单元测试,将指针传递给mock函数).

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

那么,什么是单元测试代码调用opengl函数的其他技术呢?

Ber*_*ann 5

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

#ifdef _test_
#define glVertex3f(x,y,z)  (mockGlVertex3f((x),(y),(z)))
...
#endif
Run Code Online (Sandbox Code Playgroud)

使用配置的预处理器.根本不需要更改绘图功能.此外:您可以mockGlVertex3f以这样的方式实现它例如检查参数或计算对它的调用次数,然后可以检查它.