私は現在、Touhou-esqueの弾丸地獄のシューティングゲームを開発しています。画面には弾丸が詰まっています(インスタンシングは私がここでやりたいことです)が、これは古いハードウェア上で動作させたいので、私は現時点でこれに沿って何かをやっています。色、テクスチャ、私がこれを把握するまで、まだ。OpenGL 2Dのパフォーマンスのヒント
glVertexPointer(3, GL_FLOAT, 0, SQUARE_VERTICES);
for (int i = 0; i < info.centers.size(); i += 3) {
glPushMatrix();
glTranslatef(info.centers.get(i), info.centers.get(i + 1), info.centers.get(i + 2));
glScalef(info.sizes.get(i), info.sizes.get(i + 1), info.sizes.get(i + 2));
glDrawElements(GL_QUADS, 4, GL_UNSIGNED_SHORT, SQUARE_INDICES);
glPopMatrix();
}
これを古いハードウェアで動作させたいので、シェーダやその他のものを避けようとしています。そこのセットアップは約80のポリゴンで私に失敗します。私はこのうち少なくとも数百を得るために探しています。 info
は、レンダリングのためのすべての機能を備えた構造体ですが、いくつかのベクターのほかには何もありません。
私はOpenGLにはかなり新しいですが、私は少なくとも聞いて試してみることができました。このゲームは2Dのゲームです。私はSDLからOpenglに切り替えました。これは、より美しいエフェクトを簡単にするためです。明らかにSDLは違った働きをしますが、私は決してそれを使ってこの問題を抱えませんでした。
これまでのところ、私は明らかに何か間違っています。古いハードウェア(OpenGL 1.x)のインスタンスを正しく実装するにはどうしたらいいですか?また、パフォーマンスを向上させるためのヒントを教えてください。
GDebuggerのようなツールを使ってプロファイルを作成しましたか?それはあなたにボトルネックを教えてくれるでしょう。 – Pubby
可能な限り少数の描画呼び出しを使用して、すべてを1つのVAに入れてみてください(すべての翻訳などを自分でCPU側で行います)。 – harold