自动测试OpenGL应用程序

hha*_*fez 12 opengl user-interface automated-tests jogl

我有一个Java应用程序,它使用JOGL来提供GUI的很大一部分.

是否有任何您知道或使用过的工具可以自动测试OpenGL应用程序(或者更具体地说是那些使用JOGL的应用程序)

只是为了更新:该工具可以在linux或windows上运行.

tim*_*day 10

我曾经为C++(Linux上的Qt)和OpenGL编写过单元测试.我不知道它也不适用于Java.

对我有用的东西是:

  • 抽象您的OpenGL上下文提供程序,以便其余代码独立于它.在我的情况下,主应用程序使用Qt的QGLWidget,但是单元测试使用了基于pbuffer的单元测试,我可以创建没有窗口基础设施(除了指定的X11 DISPLAY).后来我添加了一个"offscreen Mesa"(纯软件OpenGL实现),所以他们甚至可以在没有GPU的无头构建机器上工作.

  • 保持OpenGL代码独立于GUI代码.在我的例子中,OpenGL"渲染引擎"对Qt类(例如鼠标事件)一无所知.定义您自己的可测试API,它不依赖于任何特定的GUI概念,并为其编写测试.

  • 在单元测试中,使用glReadPixels从帧缓冲区读回内容,并使用一些关于哪些像素应该是特定值的断言来命中它们,或者沿着回归测试路线向下看并将帧缓冲区捕获与您知道的存储图像进行比较(要么是手动验证,要么是因为它是从其他参考模型中产生的.

  • 在任何图像回归测试中都要有一些模糊性; 大多数OpenGL实现产生略有不同的输出.

  • (我没有这样做,但是......)理想情况下,你希望能够通过断言它为了响应GUI活动而对渲染引擎进行预期的调用序列来测试GUI层.如果它这样做,并且由于上述测试你对渲染层有信心......好吧,不需要实际进行渲染.因此,在GUI测试时创建一个合适的渲染层模拟对象(我想象"鼠标从这里拖到那里导致调用渲染层来设置特定的变换矩阵"......这样的东西).

  • 使用任何特定的库来实现GUI都无关紧要.创建一个抽象OpenGL Canvas/frame的GraphicsContext类,以及一个抽象所需GUI功能的GUI类.然后,GUI类实现可以呈现给显示上下文实现,但是您不需要关心它们如何协同工作. (2认同)