index 67bd23041275b237de894398f5960198e4691c30..940b6728d2cc9827204912fcff593d848a6b0afd 100644 (file)
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);
+
implementation
uses
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);
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
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);
glTexCoord2f(bx, by); glVertex2i(l, b);
glTexCoord2f(ax, by); glVertex2i(r, b);
glEnd();
- glDisable(GL_TEXTURE_2D);
- glBindTexture(GL_TEXTURE_2D, 0);
end
end;
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);
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);
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);
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);
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);
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);