【问题标题】:how to write unit tests for OpenGL(Mesa)如何为 OpenGL(Mesa) 编写单元测试
【发布时间】:2012-07-25 02:43:56
【问题描述】:

我构建并安装了 mesa,它是 OpenGL 在 Linux 和 Windows 平台上的开源实现。实际上,我只需要几个 OpenGL(mesa) 的 API,并且需要为这些 API 编写单元测试。有谁知道如何为 OpenGL 编写单元测试?给我一个样品。或者是否有任何现有的 OpenGL 单元测试框架?

【问题讨论】:

  • OpenGL 使用大量浮点数来处理您要绘制的顶点,从顶点本身到投影和变换矩阵。浮点确定性成为一个巨大的问题,可能会导致渲染帧发生非常小的变化。在显卡、驱动程序版本、CPU 甚至编译器版本之间,您可能会得到稍有不同的结果。此外,在不使用其余部分来设置单元测试的情况下,很难对 OpenGL API 的一小部分进行单元测试。
  • 我最关心的是如何验证我的单元测试结果。例如,glClear API,我调用该函数后,我不知道如何验证结果。
  • 唯一的方法是调用 swapbuffers,它会暂停线程直到所有 OpenGL 命令都被处理,(命令通常排队而不是立即完成,除了可能在一些非常旧的 GPU 上90 年代初)然后用glReadPixels 读回帧的像素值,并将它们与预期的图像进行比较。使用glClear,您将获得相当一致的结果,除非颜色/伽玛设置影响 OpenGL 帧缓冲区而不仅仅是监视器输出。可能还有其他几个我没有考虑到的因素。
  • 当你开始实际绘图时,你会发现设置和拆除单元测试是荒谬的。如果你设法让它工作,更新编译器或驱动程序可能会使预期的图像无效,并且你的所有单元测试都会失败。在制作游戏或其他 3d 应用程序时对 OpenGL 进行单元测试就像在您想要构建网站时对浏览器进行单元测试一样。浏览器渲染引擎之间存在细微差异,但您没有对它们进行单元测试,您只需在不同浏览器上查看该站点,看看是否有任何问题,然后修复它。

标签: c++ opengl


【解决方案1】:

或者是否有任何现有的 OpenGL 单元测试框架?

"Piglit is a collection of automated tests for OpenGL implementations."

【讨论】:

    猜你喜欢
    • 2018-01-17
    • 2012-01-06
    • 2019-03-17
    • 2016-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多