X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Frenders%2Fopengl%2Fr_draw.pas;h=c839936087a0754aa00405d235b32c67087422a3;hb=007ba24a2c0e0c07941679f415561c3cdf43cef2;hp=67bd23041275b237de894398f5960198e4691c30;hpb=203d8922aa34a34fb63e312691c711c419c34ae1;p=d2df-sdl.git diff --git a/src/game/renders/opengl/r_draw.pas b/src/game/renders/opengl/r_draw.pas index 67bd230..c839936 100644 --- a/src/game/renders/opengl/r_draw.pas +++ b/src/game/renders/opengl/r_draw.pas @@ -41,6 +41,9 @@ interface procedure r_Draw_SetRect (l, t, r, b: Integer); procedure r_Draw_GetRect (out l, t, r, b: Integer); + procedure r_Draw_EnableTexture2D (enable: Boolean); + procedure r_Draw_SetColor (r, g, b, a: Byte); + implementation uses @@ -63,6 +66,30 @@ implementation sl, st, sr, sb: Integer; ScreenWidth, ScreenHeight: Integer; + enableTexture2D: Boolean; + curR, curG, curB, curA: Byte; + + procedure r_Draw_EnableTexture2D (enable: Boolean); + begin + if enable <> enableTexture2D then + begin + if enable then glEnable(GL_TEXTURE_2D) else glDisable(GL_TEXTURE_2D); + enableTexture2D := enable; + end; + end; + + procedure r_Draw_SetColor (r, g, b, a: Byte); + begin + if (r <> curR) or (g <> curG) or (b <> curB) or (curA <> a) then + begin + glColor4ub(r, g, b, a); + curR := r; + curG := g; + curB := b; + curA := a; + end; + end; + procedure r_Draw_Setup (w, h: Integer); begin ASSERT(w >= 0); @@ -95,9 +122,9 @@ implementation begin if tile = nil then begin - glColor4ub(rr, gg, bb, aa); + r_Draw_SetColor(rr, gg, bb, aa); if blend then glBlendFunc(GL_SRC_ALPHA, GL_ONE) else glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glDisable(GL_TEXTURE_2D); + r_Draw_EnableTexture2D(false); glEnable(GL_BLEND); DrawQuad(x, y, w, h); end @@ -110,10 +137,10 @@ implementation ay := (tile.t) / nw; by := (tile.b + 1) / nh; l := x; t := y; r := x + w; b := y + h; - glBindTexture(GL_TEXTURE_2D, tile.id); - glColor4ub(rr, gg, bb, aa); + r_Textures_GL_Bind(tile.id); + r_Draw_SetColor(rr, gg, bb, aa); + r_Draw_EnableTexture2D(true); if blend then glBlendFunc(GL_SRC_ALPHA, GL_ONE) else glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glEnable(GL_TEXTURE_2D); glEnable(GL_BLEND); glBegin(GL_QUADS); glTexCoord2f(ax, ay); glVertex2i(r, t); @@ -121,8 +148,6 @@ implementation glTexCoord2f(bx, by); glVertex2i(l, b); glTexCoord2f(ax, by); glVertex2i(r, b); glEnd(); - glDisable(GL_TEXTURE_2D); - glBindTexture(GL_TEXTURE_2D, 0); end end; @@ -134,10 +159,10 @@ implementation ay := 0 / nw; by := h / nh; l := x; t := y; r := x + w; b := y + h; - glBindTexture(GL_TEXTURE_2D, gltex); - glColor4ub(rr, gg, bb, aa); + r_Textures_GL_Bind(gltex); + r_Draw_SetColor(rr, gg, bb, aa); + r_Draw_EnableTexture2D(true); if blend then glBlendFunc(GL_SRC_ALPHA, GL_ONE) else glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glEnable(GL_TEXTURE_2D); glEnable(GL_BLEND); glBegin(GL_QUADS); glTexCoord2f(ax, ay); glVertex2i(r, t); @@ -145,8 +170,6 @@ implementation glTexCoord2f(bx, by); glVertex2i(l, b); glTexCoord2f(ax, by); glVertex2i(r, b); glEnd(); - glDisable(GL_TEXTURE_2D); - glBindTexture(GL_TEXTURE_2D, 0); end; procedure r_Draw_Texture (img: TGLTexture; x, y, w, h: Integer; flip: Boolean; r, g, b, a: Byte; blend: Boolean); @@ -267,8 +290,8 @@ implementation ASSERT(b >= t); glEnable(GL_BLEND); glBlendFunc(GL_ZERO, GL_SRC_COLOR); - glDisable(GL_TEXTURE_2D); - glColor4ub(rr, gg, bb, aa); + r_Draw_EnableTexture2D(false); + r_Draw_SetColor(rr, gg, bb, aa); glBegin(GL_QUADS); glVertex2i(l, t); glVertex2i(r, t); @@ -283,8 +306,8 @@ implementation ASSERT(b >= t); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glDisable(GL_TEXTURE_2D); - glColor4ub(rr, gg, bb, aa); + r_Draw_EnableTexture2D(false); + r_Draw_SetColor(rr, gg, bb, aa); glBegin(GL_LINE_LOOP); { glVertex2i(l, t); @@ -305,8 +328,8 @@ implementation ASSERT(b >= t); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glDisable(GL_TEXTURE_2D); - glColor4ub(rr, gg, bb, aa); + r_Draw_EnableTexture2D(false); + r_Draw_SetColor(rr, gg, bb, aa); glBegin(GL_QUADS); { glVertex2i(l, t); @@ -333,8 +356,8 @@ implementation ASSERT(b >= t); glEnable(GL_BLEND); glBlendFunc(GL_ONE_MINUS_DST_COLOR, GL_ZERO); - glDisable(GL_TEXTURE_2D); - glColor4ub(rr, gg, bb, aa); + r_Draw_EnableTexture2D(false); + r_Draw_SetColor(rr, gg, bb, aa); glBegin(GL_QUADS); glVertex2i(l, t); glVertex2i(r, t);