今回は インスタンシング(drawElementsInstancedANGLEのAPI)を利用してテクスチャ付きの立方体を描画した場合、どのくらいメモリ使用量が削減出来るかを確認しました。
比較対象は、昨日の GL_TRIANGLE_STRIP の描画データです。
結果は次の通りです。
単位:バイト立方体の数 | GL_TRIANGLE_STRIP | インスタンシング |
---|---|---|
1個 | 336 | 352 (104.76%) |
10個 | 3,432 | 496 (14.45%) |
100個 | 34,392 | 1,936 (5.63%) |
インスタンシングの場合、ベースの立方体のデータ336バイト(GL_TRIANGLE_STRIPで1個の立方体を描画した場合と同じデータ量)に加えて、1つの立方体に付き位置情報(x, y, z)3 * 4バイトと種別(今回は画像の通りテクスチャを変化させました。4バイトの型を利用しました) を指定することで、ベースデータを流用してメモリ使用量を抑えつつ、同じ形をいっぱい描画することが可能です。
1つの立方体の場合は336 + 12 + 4 = 352バイト、10個の場合は336 + (12 + 4) * 10 = 496バイト、100個の場合は336 + (12 + 4) * 100 =1936バイトとなります。
比べるのも馬鹿らしくなるくらいメモリ使用量が減りました。
(♡ >ω< ♡)