index bb805dab58b530d8e855bdabc7eebbf44144a7a5..18e4c1a676a81416360fc4c950bd25f4081ae864 100644 (file)
interface
uses
- SysUtils, Classes, Math, e_log, e_texture, SDL2, GL, GLExt, MAPDEF, ImagingTypes, Imaging, ImagingUtility;
+{$IFDEF USE_NANOGL}
+ nanoGL,
+{$ELSE}
+ GL, GLExt,
+{$ENDIF}
+ SysUtils, Classes, Math, e_log, e_texture, SDL2, MAPDEF, ImagingTypes, Imaging, ImagingUtility;
type
TMirrorType=(None, Horizontal, Vertical);
Result.Width := w;
Result.Height := h;
+{$IFNDEF USE_NANOGL} // FIXIT: nanoGL doesn't support glGetTexImage
if e_NoGraphics then Exit;
data := GetMemory(w*h*4);
end;
FreeMemory(data);
+{$ENDIF}
end;
procedure e_ResizeWindow(Width, Height: Integer);
@@ -951,6 +958,7 @@ procedure e_DrawQuad(X1, Y1, X2, Y2: Integer; Red, Green, Blue: Byte; Alpha: Byt
var
nX1, nY1, nX2, nY2: Integer;
begin
+{$IFNDEF USE_NANOGL} // FIXIT: nanoGL doesn't support glBegin(GL_LINES)
if e_NoGraphics then Exit;
// Only top-left/bottom-right quad
if X1 > X2 then
glColor4ub(e_Colors.R, e_Colors.G, e_Colors.B, 255);
glDisable(GL_BLEND);
+{$ENDIF}
end;
procedure e_DrawFillQuad(X1, Y1, X2, Y2: Integer; Red, Green, Blue, Alpha: Byte;
procedure e_DrawLine(Width: Byte; X1, Y1, X2, Y2: Integer; Red, Green, Blue: Byte; Alpha: Byte = 0);
+{$IFDEF USE_NANOGL}
+ var
+ v: array [0..3] of GLfloat;
+{$ENDIF}
begin
if e_NoGraphics then Exit;
// Pixel-perfect lines
glColor4ub(Red, Green, Blue, 255-Alpha);
glLineWidth(Width);
+{$IFDEF USE_NANOGL}
+ v[0] := X1; v[1] := Y1; v[2] := X2; v[3] := Y2;
+ glVertexPointer(2, GL_FLOAT, 0, @v[0]);
+ glEnableClientState(GL_VERTEX_ARRAY);
+ glDisableClientState(GL_COLOR_ARRAY);
+ glDisableClientState(GL_NORMAL_ARRAY);
+ glDisableClientState(GL_TEXTURE_COORD_ARRAY);
+ glDrawArrays(GL_LINES, 0, 4);
+{$ELSE}
glBegin(GL_LINES);
glVertex2i(X1, Y1);
glVertex2i(X2, Y2);
glEnd();
+{$ENDIF}
glColor4ub(e_Colors.R, e_Colors.G, e_Colors.B, 255);
id := High(e_TextureFonts);
end;
+{$IFNDEF USE_NANOGL} // FIXIT: nanoGL doesn't support gl-lists
with e_TextureFonts[id] do
begin
Base := glGenLists(XCount*YCount);
glTranslated((e_Textures[Tex].tx.Width div XCount)+Space, 0, 0);
glEndList();
end;
+{$ENDIF}
FontID := id;
end;
procedure e_TextureFontKill(FontID: DWORD);
begin
if e_NoGraphics then Exit;
+{$IFNDEF USE_NANOGL} // FIXIT: nanoGL doesn't support gl-lists
glDeleteLists(e_TextureFonts[FontID].Base, 256);
+{$ENDIF}
e_TextureFonts[FontID].Base := 0;
end;
procedure e_TextureFontPrint(X, Y: GLint; Text: string; FontID: DWORD);
begin
+{$IFNDEF USE_NANOGL} // FIXIT: nanoGL doesn't support gl-lists
if e_NoGraphics then Exit;
if Integer(FontID) > High(e_TextureFonts) then Exit;
if Text = '' then Exit;
glPopMatrix;
glDisable(GL_BLEND);
+{$ENDIF}
end;
// god forgive me for this, but i cannot figure out how to do it without lists
procedure e_TextureFontPrintChar(X, Y: Integer; Ch: Char; FontID: DWORD; Shadow: Boolean = False);
begin
+{$IFNDEF USE_NANOGL} // FIXIT: nanoGL doesn't support gl-lists
if e_NoGraphics then Exit;
glPushMatrix;
glCallLists(1, GL_UNSIGNED_BYTE, @Ch);
glPopMatrix;
+{$ENDIF}
end;
procedure e_TextureFontPrintCharEx (X, Y: Integer; Ch: Char; FontID: DWORD; Shadow: Boolean = False);
result := e_TextureFonts[FontID].CharWidth;
end;
-procedure e_TextureFontPrintFmt(X, Y: Integer; Text: string; FontID: DWORD; Shadow: Boolean = False);
+procedure e_TextureFontPrintFmt(X, Y: GLint; Text: string; FontID: DWORD; Shadow: Boolean = False);
var
a, TX, TY, len: Integer;
tc, c: TRGB;
w: Word;
begin
+{$IFNDEF USE_NANOGL} // FIXIT: nanoGL doesn't support gl-lists
if e_NoGraphics then Exit;
if Text = '' then Exit;
if e_TextureFonts = nil then Exit;
glDisable(GL_TEXTURE_2D);
glDisable(GL_BLEND);
end;
+{$ENDIF}
end;
procedure e_TextureFontPrintEx(X, Y: GLint; Text: string; FontID: DWORD; Red, Green,
Blue: Byte; Scale: Single; Shadow: Boolean = False);
begin
+{$IFNDEF USE_NANOGL} // FIXIT: nanoGL doesn't support gl-lists
if e_NoGraphics then Exit;
if Text = '' then Exit;
glPopMatrix;
glColor3ub(e_Colors.R, e_Colors.G, e_Colors.B);
glDisable(GL_BLEND);
+{$ENDIF}
end;
procedure e_TextureFontGetSize(ID: DWORD; out CharWidth, CharHeight: Byte);
for i := 0 to High(e_TextureFonts) do
if e_TextureFonts[i].Base <> 0 then
begin
+{$IFNDEF USE_NANOGL} // FIXIT: nanoGL doesn't support gl-lists
glDeleteLists(e_TextureFonts[i].Base, 256);
+{$ENDIF}
e_TextureFonts[i].Base := 0;
end;