Mennyire updatelődnek ezek a "fényesség" értékek? Egy statikus dologról van szó?
Egyébként az egész koncepcionálisan rossz.
GL_POINTS esetén minden egyes glVertex2f külön külön átmegy a teljes raszterizálási folyamaton, ráadásként a teljes folyamat 90% tökéletesen felesleges a számodra, szóval nem csoda hogy baromi lassú, ráadásként feleslegesen túl sok vertex-et tolsz bele a pipeline-ba.
Első körben fel kell darabolnod az egészet a legnagyobb támogatható textúra méretre. A támogatott max textúra méretet következő módon tudod lekérdezni:
glGetIntegerv(GL_MAX_TEXTURE_SIZE, &intPointer);
Ha megvan hogy hány darab x,y darabod van, igényelsz a driver-től megfelelő mennyiségű texture slot-ot, így:
glInt textures[slices_x][slices_y];
glGenTextures(slices_x * slices_y, &textures);
Majd feltöltöd a textúrákat a videókártya memóriájába, valahogy így:
for (tex_x = 0; tex_x < slices_x; tex_x++) {
for (tex_y = 0; tex_y < slices_y; tex_y++) {
// ide majd megírod te a kódot hogy létrehozd és feltöltsd a data az értékeiddel
char *data;
// csatoljuk a slot - ot a texture unit-hoz
glBindTexture(GL_TEXTURE_2D, textures[tex_x][tex_y]);
// feltöltjük a textúrát, egy texture channelt használva
glTexImage2D(GL_TEXTURE_2D, 0,GL_RED, width, height, 0, GL_R8, GL_UNSIGNED_BYTE, data);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
}
}
Kirajzolásnál pedig valami hasonlót kell alkodnod:
glDisable(GL_LIGHTING);
glDisable(GL_DEPTH_TEST);
for (tex_x = 0; tex_x < slices_x; tex_x++) {
for (tex_y = 0; tex_y < slices_y; tex_y++) {
glBindTexture(GL_TEXTURE_2D, textures[tex_x][tex_y]);
glEnable(GL_TEXTURE_2D);
glBegin(GL_QUADS);
glTexCoord2f(0, 0);
glVertex3f(0, 0, 0);
glTexCoord2f(0, 1);
glVertex3f(0, 1, 0);
glTexCoord2f(1, 1);
glVertex3f(1, 1, 0);
glTexCoord2f(1, 0);
glVertex3f(1, 0, 0);
glEnd();
}
}
Ez persze csak egy baromi erős vázlat, sajnos a fixed pipeline betegségeire már hála égnek nem emlékszem, de ha eljutottál idáig akkor majd haladunk tovább az eredményben:)
// Happy debugging, suckers#define true (rand() > 10)