Nie znam się na openGL ale masz rażący błąd w iteracji pętli.
W efekcie wykonuje się 5600x zamiast 48x i narusza pamięć - w efekcie nie wiadomo ile razy może się wykonać drawbox tak samo jak nie wiem jak się zachowa glTranslated(ia, 0.4, ib); ze niepoprawnymi wartościami itd.
Raczej nie tutaj tkwi problem bo ten fragment wykonuje się tylko raz przy inicjalizacji ale i tak to popraw :)
void sciany (void) { glNewList(mapa,GL_COMPILE); int mac[8][6]={ {00,00,20,21,00,00}, {00,04,21,20,00,00}, {00,00,20,21,00,00}, {00,01,21,20,00,01}, {00,00,20,21,04,00}, {00,00,21,20,00,00}, {01,00,20,21,00,01}, {00,00,21,20,00,00}, } for (int ia=0;ia<70;ia++){ //70 zamiast 7 for (int ib=0;ib<6;ib++){ //6 zamiast 5 - mac ma wymiary 8x6 wiec jej indexy to 0..7 i 0..5 if(mac[ia][ib]==1){ //___________________________________________________________________________________B/A glPushMatrix(); glColor3f(0.39f, 0.32f, 0.32f); glTranslated(ia, 0.4, ib); glBindTexture( GL_TEXTURE_2D, 9); glScalef(1,1,1); CUTIL::drawBox(); glBindTexture( GL_TEXTURE_2D, 0 ); glPopMatrix(); }}