ディスプレイリスト
最終更新日16 Dec 2015 02:40
Table of Contents
|
OpenGL高速化Tips
OpenGL3以降非推奨になりました
使い方
init()にて
- GLuint リスト名=glGenLists(1);
- glNewList(リスト名,GL_COMPILE);
- ….glVertex3f()などを書く。
- glEndList();
ディスプレイリストにデータを渡した後、CPU側のデータは消してもok
display()描画関数にて
glCallList(リスト名);
例
arrow=glGenLists(1); glNewList(arrow,GL_COMPILE); glBegin(GL_LINES); glVertex3f(-size/2,0,0); glVertex3f(size/2,0,0); glVertex3f(size/2,0,0); glVertex3f(size/6.0,size/(3.0*1.73),0);//1.73はルート3.30度ぐらいの矢印角度にしようと思った。 glVertex3f(size/2,0,0); glVertex3f(size/6.0,-size/(3.0*1.73),0); glEnd(); glEndList();
後片付け
glDeleteLists(先頭のディスプレイリスト番号,範囲(int));
ディスプレイリストの内側に入れてはいけないもの
glEnable系
たしか、テクスチャバインドもだめだよね?
glBindBuffer()
glBufferData()
glBufferSubData()
glColorPointer()
glFlush()
glNormalPointer()
glDeleteLists()
glGenLists()
glPixelStore()
glDisableClientState()
glGet*()
glReadPixels()
glEdgeFlagPointer()
glIndexPointer()
glRenderMode()
glEnableClientState()
glInterleavedArrays()
glSelectBuffer()
glFeedbackBuffer()
glIsEnabled()
glTexCoordPointer()
glFinish()
glIsList()
glVertexPointer()
ディスプレイリストの内側にVBO
なんと、ディスプレイリストの中にVBOを入れてもいいみたい。
やってみたけど、描画速度はVBOだけの時とあんまり変わらなかった。
glGenListって変???
テクスチャやバッファみたいに配列に入れる形式とは違う。
なんで戻り値はint?たとえば、
list_id=glGenList(10);
こうすると、list_idから始まる連番を確保してくれるのだ。
なのでディスプレイリストを配列にしたいならこうすべき
GLuint m_ListIds[10]; m_ListIds[0]=glGenList(10);
opengl-deprecated