ディスプレイリスト

ディスプレイリストにあらかじめ描画命令を入れておけば、描画速度が向上する。

使い方

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);
サポートサイト Wikidot.com