ディスプレイリスト

displaylist.png

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

サポートサイト Wikidot.com opengl-deprecated