X-Git-Url: https://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fengine%2Fe_graphics.pas;h=b88dfb603b61262459c5d260469b0ad013ecf198;hb=a7daeef3855f07c8302a60ab31cb20ab74aefc45;hp=c2327594645bd7ab45d5c6ee5cfc66a5c57f2f05;hpb=9358607d5a98ffd3451f2ea7d4a8332e86cc6079;p=d2df-sdl.git diff --git a/src/engine/e_graphics.pas b/src/engine/e_graphics.pas index c232759..b88dfb6 100644 --- a/src/engine/e_graphics.pas +++ b/src/engine/e_graphics.pas @@ -29,9 +29,6 @@ type X, Y: Integer; end; - TPoint = MAPDEF.TPoint; // TODO: create an utiltypes.pas or something - // for other types like rect as well - TPoint2f = record X, Y: Double; end; @@ -49,7 +46,7 @@ type R, G, B: Byte; end; - PPoint = ^TPoint; + PDFPoint = ^TDFPoint; PPoint2f = ^TPoint2f; PRect = ^TRect; PRectWH = ^TRectWH; @@ -65,7 +62,7 @@ procedure e_ResizeWindow(Width, Height: Integer); procedure e_Draw(ID: DWORD; X, Y: Integer; Alpha: Byte; AlphaChannel: Boolean; Blending: Boolean; Mirror: TMirrorType = M_NONE); procedure e_DrawAdv(ID: DWORD; X, Y: Integer; Alpha: Byte; AlphaChannel: Boolean; - Blending: Boolean; Angle: Single; RC: PPoint; Mirror: TMirrorType = M_NONE); + Blending: Boolean; Angle: Single; RC: PDFPoint; Mirror: TMirrorType = M_NONE); procedure e_DrawSize(ID: DWORD; X, Y: Integer; Alpha: Byte; AlphaChannel: Boolean; Blending: Boolean; Width, Height: Word; Mirror: TMirrorType = M_NONE); procedure e_DrawSizeMirror(ID: DWORD; X, Y: Integer; Alpha: Byte; AlphaChannel: Boolean; @@ -77,6 +74,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 +109,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; @@ -168,7 +167,7 @@ type end; Space: ShortInt; Height: ShortInt; - Live: Boolean; + alive: Boolean; end; TSavedTexture = record @@ -681,7 +680,7 @@ begin end; procedure e_DrawAdv(ID: DWORD; X, Y: Integer; Alpha: Byte; AlphaChannel: Boolean; - Blending: Boolean; Angle: Single; RC: PPoint; Mirror: TMirrorType = M_NONE); + Blending: Boolean; Angle: Single; RC: PDFPoint; Mirror: TMirrorType = M_NONE); begin if e_NoGraphics then Exit; @@ -861,6 +860,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; @@ -1024,7 +1051,7 @@ begin if e_CharFonts <> nil then for i := 0 to High(e_CharFonts) do - if not e_CharFonts[i].Live then + if not e_CharFonts[i].alive then begin id := i; Break; @@ -1046,7 +1073,7 @@ begin end; Space := sp; - Live := True; + alive := True; end; Result := id; @@ -1318,7 +1345,7 @@ begin for a := 0 to High(Chars) do if Chars[a].TextureID <> -1 then e_DeleteTexture(Chars[a].TextureID); - e_CharFonts[FontID].Live := False; + e_CharFonts[FontID].alive := False; end; procedure e_CharFont_RemoveAll(); @@ -1596,7 +1623,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;