web-dev-qa-db-ja.com

OpenGLのグラフィックスコードでユニットテストまたは最も効果的な自動テストをどのように実行しますか?

私はC++でOpenGLの上にゲームとそれに付随するグラフィックスエンジンを書いています。また、優れたコーディングプロセスと自動テストのファンでもあります。多くの場合、出力は視覚のみであるか、非常に視覚指向であるため、グラフィックスコード+テストはかなり非混和性のようです。

たとえば、画面にバイト単位でレンダリングされる未加工のイメージストリームを分析することを想像してみてください。比較するテストデータが必要であり、作成/取得が困難であり、レンダリングされたイメージが多くの場合、異なる時間に実行する場合のバイトレベル-アルゴリズムの小さな変更は、このアプローチを完全に破壊します。

ビジュアルユニットテストスイートを作成することを考えています。基本的には、さまざまなテストシーンをレンダリングし、シャドウマッピングやアニメーションなどを表示できます。CIの一部として、これらのシーンはビデオにレンダリングされます異なるメトリックを持つファイル(または実行可能ファイルのままにする可能性があります)。これはまだビデオファイルの手動検査を必要としますが、少なくともいくぶん自動化され、標準化されます。

どう思いますか?もっと良い方法があるといいのですが?

18
Max

Opencv画像処理ライブラリは、画像を保存し、それを参照画像と比較することによってそれを行います-おおよその画像マッチングなどを処理するための c ++テスト関数とマクロ の束があります。

8
Martin Beckett

テストフレームワークは、テストイメージをバッファーにレンダリングし、レンダリングされたイメージを取得して、その目的のために以前に生成された「ゴールデン」参照イメージと比較できます。

これは、テストの結果が残ると予想されない場合には機能しません正確に同じです。ただし、テスト画像と参照画像の二乗差を計算し、それをしきい値と比較することができます。

パフォーマンスの大幅な低下は別の考えられる障害モードであるため、パフォーマンスデータのロギングとチェックを提供することもできます。

4
comingstorm

出力画像を比較できない場合でも、少なくとも、レンダリングが適切に完了することをテストできます(クラッシュ、長時間の待機などはありません)。もちろん、画像をチェックする方法を見つけることはより良いですが、それがなくても、テストから何かを得ることができます。

4
Michael Kohne