Jetson TK1でGLXでOpenGLを使ってみる


前回はEGLで組んでみましたが、折角普通のLinux,OpenGLが使えるボードということで、X11とGLXで前回同様のアプリケーションを作成してみようと思います。

NVIDIAでLinux OpenGL といえば、関数エントリが共有ライブラリに準備されていることで有名です。この組み込み用ではどうであるか確認してみます。

$ nm -Do /usr/lib/arm-linux-gnueabihf/tegra/libGL.so.1

## 一部抜粋  ###

/usr/lib/arm-linux-gnueabihf/tegra/libGL.so.1:00067478 T glActiveStencilFaceEXT
/usr/lib/arm-linux-gnueabihf/tegra/libGL.so.1:0005ec80 T glActiveTexture
/usr/lib/arm-linux-gnueabihf/tegra/libGL.so.1:00064688 T glActiveTextureARB
/usr/lib/arm-linux-gnueabihf/tegra/libGL.so.1:0006b58c T glActiveVaryingNV
/usr/lib/arm-linux-gnueabihf/tegra/libGL.so.1:0005d82c T glAlphaFunc
/usr/lib/arm-linux-gnueabihf/tegra/libGL.so.1:0006ed38 T glAlphaFuncx
/usr/lib/arm-linux-gnueabihf/tegra/libGL.so.1:000656d4 T glAreProgramsResidentNV
/usr/lib/arm-linux-gnueabihf/tegra/libGL.so.1:0005e4d8 T glAreTexturesResident
/usr/lib/arm-linux-gnueabihf/tegra/libGL.so.1:00064568 T glAreTexturesResidentEXT
/usr/lib/arm-linux-gnueabihf/tegra/libGL.so.1:0005e19c T glArrayElement
/usr/lib/arm-linux-gnueabihf/tegra/libGL.so.1:0006440c T glArrayElementEXT
/usr/lib/arm-linux-gnueabihf/tegra/libGL.so.1:0006aa24 T glAttachObjectARB
/usr/lib/arm-linux-gnueabihf/tegra/libGL.so.1:000603f8 T glAttachShader
/usr/lib/arm-linux-gnueabihf/tegra/libGL.so.1:0005b800 T glBegin
/usr/lib/arm-linux-gnueabihf/tegra/libGL.so.1:00061498 T glBeginConditionalRender
/usr/lib/arm-linux-gnueabihf/tegra/libGL.so.1:0006b154 T glBeginConditionalRenderNV
/usr/lib/arm-linux-gnueabihf/tegra/libGL.so.1:0006b10c T glBeginConditionalRenderNVX
/usr/lib/arm-linux-gnueabihf/tegra/libGL.so.1:00066d08 T glBeginOcclusionQueryNV

今回のボードでも前例通り各関数の実体が含まれるようです。
そこで、GLヘッダを読み込む前に、 GL_GLEXT_PROTOTYPES (1) を定義して extern宣言させた状態にしておきます。

早速プログラムを示します。

このプログラムを実行してみたのがこんな感じです。
Ubuntu-screenshot-glx

GL_RENDERER: GK20A/AXI
GL_VENDOR: NVIDIA Corporation
GL_VERSION: 4.4.0 NVIDIA 19.3
FPS: 1294.80
FPS: 1151.00
FPS: 1046.20
FPS: 1073.00
FPS: 1049.40
FPS: 1051.40
FPS: 987.60
FPS: 995.60
FPS: 1008.20
FPS: 1582.60

平均するとおよそ1000ちょいのFPSといったところでしょうか。前回のEGLに比べると多少パフォーマンスがよい傾向にありそうです。
VSyncをオフにしてみようと思ったのですが、 glXSwapIntervalEXT がこの環境では使用できず試してみることは出来ませんでした。コンテキストは予想通り最新の 4.4 が取得されました。

プログラムコードがglVertexAttribPointerでクライアント配列を渡している部分があったり、毎描画フレームで無駄な処理をしているところが多いので、もしかするとCPU側でバラツキの要因を持っているのかもしれません。

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする