--- deliantra/Deliantra-Client/Client.xs 2007/08/11 12:07:54 1.225 +++ deliantra/Deliantra-Client/Client.xs 2007/08/11 13:05:58 1.226 @@ -1747,7 +1747,7 @@ HV *smooth = (HV *)sv_2mortal ((SV *)newHV ()); uint32_t smooth_level[256 / 32]; // one bit for every possible smooth level - static uint8_t smooth_max[256][256]; // egad, fats and wasteful on memory (64k) + static uint8_t smooth_max[256][256]; // egad, fast and wasteful on memory (64k) smooth_key skey; rc_t *rc = rc_alloc (); @@ -1819,8 +1819,6 @@ maptex tex = self->tex [tile]; int px, py; - // suppressing texture state switches here - // is only moderately effective, but worth the extra effort if (key.texname != tex.name) { if (!tex.name) @@ -1913,6 +1911,8 @@ { int w, b; + glEnable (GL_TEXTURE_2D); + glBegin (GL_QUADS); for (w = 0; w < 256 / 32; ++w) { uint32_t smask = smooth_level [w]; @@ -1947,39 +1947,42 @@ // save gobs of state changes. if (key.texname != tex.name) { - key.texname = tex.name; - arr = rc_array (rc, &key); + glEnd (); + glBindTexture (GL_TEXTURE_2D, key.texname = tex.name); + glBegin (GL_QUADS); } if (border) { float ox = border * dx; - rc_t2f_v3f (arr, ox , 0.f , px , py , 0); - rc_t2f_v3f (arr, ox , dy , px , py + T, 0); - rc_t2f_v3f (arr, ox + dx, dy , px + T, py + T, 0); - rc_t2f_v3f (arr, ox + dx, 0.f , px + T, py , 0); + glTexCoord2f (ox , 0.f ); glVertex2i (px , py ); + glTexCoord2f (ox , dy ); glVertex2i (px , py + T); + glTexCoord2f (ox + dx, dy ); glVertex2i (px + T, py + T); + glTexCoord2f (ox + dx, 0.f ); glVertex2i (px + T, py ); } if (corner) { float ox = corner * dx; - rc_t2f_v3f (arr, ox , dy , px , py , 0); - rc_t2f_v3f (arr, ox , dy * 2.f, px , py + T, 0); - rc_t2f_v3f (arr, ox + dx, dy * 2.f, px + T, py + T, 0); - rc_t2f_v3f (arr, ox + dx, dy , px + T, py , 0); + glTexCoord2f (ox , dy ); glVertex2i (px , py ); + glTexCoord2f (ox , dy * 2.f); glVertex2i (px , py + T); + glTexCoord2f (ox + dx, dy * 2.f); glVertex2i (px + T, py + T); + glTexCoord2f (ox + dx, dy ); glVertex2i (px + T, py ); } } } } } } + + glEnd (); + glDisable (GL_TEXTURE_2D); + key.texname = -1; } hv_clear (smooth); - rc_draw (rc); - rc_clear (rc); } glDisable (GL_BLEND);