index 39b6e4330ef71754142a013ee8807501c97805ff..b88dfb603b61262459c5d260469b0ad013ecf198 100644 (file)
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*)
-{$INCLUDE e_amodes.inc}
+{$INCLUDE ../shared/a_modes.inc}
unit e_graphics;
interface
uses
- SysUtils, Classes, Math, e_log, e_textures, SDL2, GL, GLExt, MAPDEF, ImagingTypes, Imaging, ImagingUtility;
+ SysUtils, Classes, Math, e_log, e_texture, SDL2, GL, GLExt, MAPDEF, ImagingTypes, Imaging, ImagingUtility;
type
TMirrorType=(M_NONE, M_HORIZONTAL, M_VERTICAL);
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;
R, G, B: Byte;
end;
- PPoint = ^TPoint;
+ PDFPoint = ^TDFPoint;
PPoint2f = ^TPoint2f;
PRect = ^TRect;
PRectWH = ^TRectWH;
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;
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;
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;
end;
Space: ShortInt;
Height: ShortInt;
- Live: Boolean;
+ alive: Boolean;
end;
TSavedTexture = record
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;
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;
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;
end;
Space := sp;
- Live := True;
+ alive := True;
end;
Result := id;
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();
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;
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;
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);
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);
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