Вот написал три теста "рисования" большой плоскости из GL_QUADS 150*150 т.е. 22500 квадов или 45000 треугольников с различными техниками отображения:
1.
Array.exe - создается простой массив вершин (Ground) и рисуется следующим образом:
glInterleavedArrays(GL_T2F_N3F_V3F, 0, Ground);
glDrawArrays(GL_QUADS, 0, fwidth*fheight*4);
2.
ArrayInDisplayList.exe - тож самое, что и первый вариант, только массив помещается в дисплейный список:
flist=glGenLists(1);
glNewList(flist,GL_COMPILE);
glInterleavedArrays(GL_T2F_N3F_V3F, 0, Ground);
glDrawArrays(GL_QUADS, 0, fwidth*fheight*4);
glEndList()
...
glCallList(flist);
3.
DisplayList.exe - дисплейный список заполняется и рисуется следующим образом:
int t[2];
int v[3];
flist=glGenLists(1);
glNewList(flist,GL_COMPILE);
for (int i=0; i<fwidth; i++)
{
for (int j=0; j<fheight; j++)
{
glBegin(GL_QUADS);
glNormal3i(0, 1, 0);
t[0]=0; t[1]=0; v[0]=i; v[1]=0; v[2]=j;
glTexCoord2iv(t); glVertex3iv( v );
t[0]=0; t[1]=1; v[0]=i; v[1]=0; v[2]=j+1;
glTexCoord2iv(t); glVertex3iv( v );
t[0]=1; t[1]=1; v[0]=i+1; v[1]=0; v[2]=j+1;
glTexCoord2iv(t); glVertex3iv( v );
t[0]=1; t[1]=0; v[0]=i+1; v[1]=0; v[2]=j;
glTexCoord2iv(t); glVertex3iv( v );
glEnd();
}
}
glEndList();
...
glCallList(flist);
Потестите пожалуйста... У меня странные результаты:
первые два варианта ведут себя одинаково (FPS 122 - 164 соответственно когда все видно и когда не видно ничего), а вот третий... вообще должно быть медленнее, а выходит что OpenGL как-то сам включает алгоритм определения видимости треугольников и когда на экраене ниче нет FPS выростает до 584, а когда видно поле результат такой же как и в первых двух случаях (FPS около 128 )
PS: Особо интересно как это будет работать на ATI карточках...
PS2: Мой комп: Cel D 2.4GHz/512 MB Dual/64MB GF4 MX440