LinuxのSDLでOpenGLハードウェアアクセラレーションを取得する


8

SDL + OpenGLを使用しようとしていますが、約18000ポリゴンのフレームレートはクアッドコアマシンでは約24fpsですが、Intel Atomでは希望しない1-2fpsであるため、ハードウェアアクセラレーションが機能しているとは思いません。ポリゴン数がこれを超えると、クアッドコアでさえ苦労し始めます。

私は自分のコードをチェックしましたが、明らかな何かが欠けています。SDL OpenGLテストと同じコードを使用するようにSDL初期化コードを変更しました。SDL_GL_ACCELERATED_VISUALは1ですが、SDL_VideoInfoのhw_availableは0であると報告されています

また、両方のマシンのNvidiaとCompizやglxgearsなどの高速化されたアプリが正常に動作するため、ベンダーは正しく報告されます。

何を試すかについてのアイデアはありますか?

ありがとう

回答:


6

コードでglBegin()/ glEnd()を使用している場合、特にフレーム間でテクスチャと状態を重複して設定する場合(つまり、1、1、2ではなく、テクスチャ1、2、1、2の順に描画する場合) 2)、おそらくドライバーのオーバーヘッドが発生します。特に、低速のプロセッサが良好なカードを搭載しているのに気が付く場合にそうです。通常、glDrawArraysなどを使用すると、パフォーマンスが大幅に向上します。

ただし、完全なコードリストがないと、確実に知る方法はありません。SDLはかなり薄いラッパーなので、本当に奇妙なことをしていない限り、エラーは発生しません。また、使用されているカードは何ですか?


このマシンのカードは、nVidia Corporation GT218 [ION]です。最適化する前に少し遅くなることを理解していますが、これほど遅くはありません。私は1つのテクスチャをバインドし、それを使用して、確かに一度に1つの三角形の単純なハイトフィールドを描画しています。だから、物事を行うにはかなりひどい方法ですが、それでも予想よりも遅くなります。
ロビンエルヴィン

1
ループの外でglBegin()/ glEnd()呼び出しを行い、それに応じて描画ルーチンを微調整しただけで、フレームレートは最大30fpsです。だから私はそれらの呼び出しが賢く使われなかったときにどんな劇的な効果をもたらすかを学びました:)ありがとう!
ロビンエルヴィン

問題ない。お役に立てて嬉しいです。
ChrisE

@ChrisE「SDLはかなり薄いラッパー」とはどういう意味ですか?
Chris
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.