X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fengine%2Fe_graphics.pas;h=83664b1c0050562fd35ae231ffcf7567d18273e9;hb=981037c01006b8a8bea65b69a75ba9f7353b295d;hp=3ce6890983813bc23af01d68666943658a6609ff;hpb=9d2405d500b579d36f6e2330762a6cd51fbce581;p=d2df-sdl.git diff --git a/src/engine/e_graphics.pas b/src/engine/e_graphics.pas index 3ce6890..83664b1 100644 --- a/src/engine/e_graphics.pas +++ b/src/engine/e_graphics.pas @@ -77,6 +77,8 @@ procedure e_DrawLine(Width: Byte; X1, Y1, X2, Y2: Integer; Red, Green, Blue: Byt procedure e_DrawQuad(X1, Y1, X2, Y2: Integer; Red, Green, Blue: Byte; Alpha: Byte = 0); procedure e_DrawFillQuad(X1, Y1, X2, Y2: Integer; Red, Green, Blue, Alpha: Byte; Blending: TBlending = B_NONE); +procedure e_DarkenQuad (x0, y0, x1, y1: Integer; a: Integer); +procedure e_DarkenQuadWH (x, y, w, h: Integer; a: Integer); function e_CreateTextureImg (var img: TImageData; var ID: DWORD): Boolean; function e_CreateTexture(FileName: string; var ID: DWORD): Boolean; @@ -110,7 +112,7 @@ procedure e_TextureFontPrint(X, Y: GLint; Text: string; FontID: DWORD); procedure e_TextureFontPrintEx(X, Y: GLint; Text: string; FontID: DWORD; Red, Green, Blue: Byte; Scale: Single; Shadow: Boolean = False); procedure e_TextureFontPrintFmt(X, Y: GLint; Text: string; FontID: DWORD; Shadow: Boolean = False); -procedure e_TextureFontGetSize(ID: DWORD; var CharWidth, CharHeight: Byte); +procedure e_TextureFontGetSize(ID: DWORD; out CharWidth, CharHeight: Byte); procedure e_RemoveAllTextureFont(); function e_TextureFontCharWidth (ch: Char; FontID: DWORD): Integer; @@ -861,6 +863,34 @@ begin glDisable(GL_BLEND); end; + +// ////////////////////////////////////////////////////////////////////////// // +procedure e_DarkenQuad (x0, y0, x1, y1: Integer; a: Integer); +begin + if (a < 0) then a := 0; + if (a > 255) then a := 255; + glEnable(GL_BLEND); + glBlendFunc(GL_ZERO, GL_SRC_ALPHA); + glDisable(GL_TEXTURE_2D); + glColor4ub(0, 0, 0, Byte(255-a)); + glBegin(GL_QUADS); + glVertex2i(x0, y0); + glVertex2i(x1, y0); + glVertex2i(x1, y1); + glVertex2i(x0, y1); + glEnd(); + //glRect(x, y, x+w, y+h); + glColor4ub(1, 1, 1, 1); + glDisable(GL_BLEND); + //glBlendEquation(GL_FUNC_ADD); +end; + +procedure e_DarkenQuadWH (x, y, w, h: Integer; a: Integer); +begin + if (w > 0) and (h > 0) then e_DarkenQuad(x, y, x+w, y+h, a); +end; + + procedure e_DrawLine(Width: Byte; X1, Y1, X2, Y2: Integer; Red, Green, Blue: Byte; Alpha: Byte = 0); begin if e_NoGraphics then Exit; @@ -1596,7 +1626,7 @@ begin glDisable(GL_BLEND); end; -procedure e_TextureFontGetSize(ID: DWORD; var CharWidth, CharHeight: Byte); +procedure e_TextureFontGetSize(ID: DWORD; out CharWidth, CharHeight: Byte); begin CharWidth := 16; CharHeight := 16; @@ -1739,7 +1769,7 @@ begin sign[2] := 68; sign[3] := 82; st.writeBuffer(sign, 4); - crc := crc32(0, @sign, 4); + crc := crc32(0, @sign[0], 4); hbuf[0] := 0; hbuf[1] := 0; hbuf[2] := (Width shr 8) and $ff; @@ -1753,7 +1783,7 @@ begin hbuf[10] := 0; // compression method hbuf[11] := 0; // filter method hbuf[12] := 0; // no interlace - crc := crc32(crc, @hbuf, 13); + crc := crc32(crc, @hbuf[0], 13); st.writeBuffer(hbuf, 13); writeIntBE(st, crc); //e_WriteLog('PNG: header written', MSG_NOTIFY); @@ -1765,7 +1795,7 @@ begin sign[2] := 65; sign[3] := 84; st.writeBuffer(sign, 4); - crc := crc32(0, @sign, 4); + crc := crc32(0, @sign[0], 4); crc := crc32(crc, obuf, dlen); st.writeBuffer(obuf^, dlen); writeIntBE(st, crc); @@ -1778,7 +1808,7 @@ begin sign[2] := 78; sign[3] := 68; st.writeBuffer(sign, 4); - crc := crc32(0, @sign, 4); + crc := crc32(0, @sign[0], 4); writeIntBE(st, crc); //e_WriteLog('PNG: end marker written', MSG_NOTIFY); finally