( Mcsiv | 2015. 08. 21., p – 16:15 )

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)