0

私はOpenGLES2.0を使用する非常に小さなゲームエンジンに取り組んでいます。VBOをメッシュクラスに統合する際に、デザインに少し問題があります。

問題は、メッシュごとに新しいVBOをインスタンス化したくないことです。また、VBOサイズを、ロードするメッシュの数(2MBなどの固定サイズだけでなく)によって決定する必要があります。

VBOにはrealloc関数がないため、すべての頂点データを一度にバッチロードする必要があります。小さなメッシュが4つか5つしかないので、これで問題ありません。そこで、MeshListクラスを作成しました。

MeshList.AddMesh(Mesh mesh)を呼び出すと、メッシュオブジェクトの頂点/インデックスデータが集約され、追加されたメッシュに頂点データ/インデックスデータの配列にオフセットが返されます。このようにして、メッシュはVBOのどこにあるかを認識します(ただし、どのVBOにあるかは認識しません)。

ただし、MeshList.BindToVBO()を呼び出すまで、MeshListデータはVBOにアップロードされません。しかし、現在、どのメッシュもどのVBOにあるかを認識していません。そこで、VBOハンドルを保持する各メッシュクラスの整数メンバー変数を指すポインターの配列をMeshListに作成することを考えていました。このように、BindToVBO()が呼び出されると、ポインター配列を反復処理し、メッシュオブジェクトのVBOハンドルを更新します。

このようにして、さまざまなメッシュオブジェクトをさまざまなVBOに配置したり、すべてを1つのVBOに配置したりできる柔軟性が得られると思いました。私が持っている唯一の懸念は、これが良いデザインであるかどうかです。

MeshList.BindToVBO()が大量のメッシュオブジェクト全体を更新していることは、コードをちらっと見ている人にはわかりません。つまり、MeshListはBindToVBO()呼び出しの前にすべてのMeshオブジェクトと対話しますが、MeshオブジェクトをMeshList.AddMesh()に渡すことによって、基本的にVBOHandleメンバーをある時点で更新にサブスクライブしていることを明示的に言うことはありません。未来。

私はこれをできるだけ明確にしようとしました。何か説明が必要な場合はお知らせください。

4

1 に答える 1

0

正直なところ、疑わしい見返りのために多くの問題のように思えます。同じバッファに複数のメッシュを配置すると、パフォーマンスが顕著になると信じる理由はありますか?

私には時期尚早の最適化のように思えます。

確かに、50,000 個のパーティクルを含むパーティクル システムがある場合、それを共有バッファに入れたいと思うかもしれませんが、一般的に、2 つの任意のメッシュを同じバッファに格納する利点があるかどうかはわかりません。バグや頭痛の大きな可能性があるように思えます.

于 2012-04-27T00:35:29.300 に答える