これは、OpenGL ディスプレイ リストにとって理想的な状況のように思えます。それらを使用する方法は、最初に使用するディスプレイ リスト ID を OpenGL に要求することです。
GLuint draw_id = glGenLists(1);
(一度に複数の連続した ID を要求することもできますが、この場合は 1 つだけ要求しています) 次に、最初に描画ルーチンを介して、glNewList を呼び出します。
glNewList(draw_id, GL_COMPILE);
<do compute intensive drawing here>
glEndList();
これは実際には形状をレンダリングしないことに注意してください (形状をレンダリングする glNewList で GL_COMPILE_AND_EXECUTE を使用できますが、一般的に推奨されません)。
さて、オブジェクトを描画する必要があるときはいつでも:
< set up your OpenGL matrices >
glCallList(draw_id);
最後に、作業が完了したら、glDeleteLists を使用できます。
いくつかの最適化を行うことができ、すべての関数呼び出しのオーバーヘッドが取り除かれるため、表示リストは実際にレンダリングを高速化できます。
現在、技術的には、OpenGL ディスプレイ リストは OpenGL 3.0 以降 (glTranslate、glVertex glBegin... grrr と共に) では推奨されていません (ただし、削除されていません!)。将来の証明として、頂点配列を使用する必要がありますが、それはかなり複雑です。