EGL使ったものと通常のGLX(OpenGL)とで性能差を感じたので、実験してみたいと思います。
JetsonTK1でEGL使用した場合には、OpenGLES 3.0のコンテキストが使用されます。通常の初期化をGLX経由でした場合には OpenGL 4.4のコンテキストとなります。
これらで同じようにパフォーマンス有利に働くように、頂点バッファ(バッファオブジェクト)、頂点配列オブジェクト(VAO)らを用いて、トーラスを描画するプログラムを作成してみました。
これで平均のフレームレートを計測してみようと思います。
OpenGL 4.4 (GLX) の場合
GL_VERSION = 4.4.0 NVIDIA 19.3 GL_RENDERER = GK20A/AXI 36075 frames in 30.0 seconds = 1202.478 FPS 30672 frames in 30.0 seconds = 1022.298 FPS 31040 frames in 30.0 seconds = 1034.529 FPS 30626 frames in 30.0 seconds = 1020.849 FPS 31759 frames in 30.0 seconds = 1058.631 FPS
OpenGLES 3.0 (EGL) の場合
R:8, G:8, B:8, A:8, Depth:24 GL_VERSION = OpenGL ES 3.0 19.3 GL_RENDERER = GK20A/AXI 7293 frames in 30.0 seconds = 243.029 FPS 5748 frames in 30.0 seconds = 191.589 FPS 5741 frames in 30.0 seconds = 191.364 FPS 6332 frames in 30.0 seconds = 211.061 FPS 5015 frames in 30.0 seconds = 167.141 FPS 6324 frames in 30.0 seconds = 210.780 FPS 5463 frames in 30.0 seconds = 182.089 FPS
まとめ
通常GLのほうが、およそ5倍のFPSとなっていました。
あまりCPUで処理をしていないので、描画系に何か違いがありそうです。
EGLのほうではダブルバッファのフラグが見当たらなかったこともあって、設定など特にしていませんがこれが影響しているかも。
またフレームレートが安定しないボードだったので、可変フレームレートで描画するようにしてみました。見かけの速度が一定となると、多少変動したところで見栄えが悪くなることはないのできれいに見えます。処理が遅くて安定しない環境では、可変フレームレートで描画するようなプログラムもいいなと感じました。