diff --git a/src/game/g_gfx.pas b/src/game/g_gfx.pas
index 0f26212b29ce8f21c066bb80299f4c395011bfbe..e4c46f199d17a9bf74a2180be95d1ff5e4fc0c4c 100644 (file)
--- a/src/game/g_gfx.pas
+++ b/src/game/g_gfx.pas
const
BLOOD_NORMAL = 0;
BLOOD_SPARKS = 1;
+ BLOOD_CSPARKS = 2;
+ BLOOD_COMBINE = 3;
ONCEANIM_NONE = 0;
ONCEANIM_SMOKE = 1;
implementation
uses
-{$IFDEF USE_NANOGL}
- nanoGL,
-{$ELSE}
- GL, GLExt,
-{$ENDIF}
+ {$INCLUDE ../nogl/noGLuses.inc}
g_map, g_panel, g_basic, Math, e_graphics,
g_options, g_console, SysUtils, g_triggers, MAPDEF,
g_game, g_language, g_net, utils, xprofiler;
begin
g_GFX_SparkVel(fX, fY, 2+Random(2), -vx div 2, -vy div 2, devX, devY);
exit;
+ end
+ else if (kind = BLOOD_CSPARKS) OR (kind = BLOOD_COMBINE) then
+ begin
+ g_GFX_SparkVel(fX, fY, count, -vx div 2, -vy div 2, devX, devY);
+ if kind <> BLOOD_COMBINE then exit
end;
l := Length(Particles);
var
a: Integer;
begin
-{$IFDEF USE_NANOGL} // FIXIT: nanoGL doesn't support glBegin(GL_POINTS)
- count := 0;
-{$ENDIF}
if count > 50000 then count := 50000;
if (count < 1) then count := 1;
SetLength(Particles, count);
procedure g_GFX_Draw ();
-var
- a, len: Integer;
+ var
+ a, len: Integer;
+{$IFDEF USE_NANOGL}
+ type
+ Vertex = record
+ x, y: GLfloat;
+ r, g, b, a: GLfloat;
+ end;
+ var
+ count: Integer;
+ v: array of Vertex;
+{$ENDIF}
begin
if not gpart_dbg_enabled then exit;
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+{$IFDEF USE_NANOGL}
+ count := 0;
+ SetLength(v, Length(Particles));
+ for a := 0 to High(Particles) do
+ begin
+ with Particles[a] do
+ begin
+ if alive and (x >= sX) and (y >= sY) and (x <= sX + sWidth) and (sY <= sY + sHeight) then
+ begin
+ v[count].x := x + 0.37;
+ v[count].y := y + 0.37;
+ v[count].r := red / 255;
+ v[count].g := green / 255;
+ v[count].b := blue / 255;
+ v[count].a := alpha / 255;
+ Inc(count);
+ end;
+ end;
+ end;
+
+ glVertexPointer(2, GL_FLOAT, SizeOf(Vertex), @v[0].x);
+ glColorPointer(4, GL_FLOAT, SizeOf(Vertex), @v[0].r);
+ glEnableClientState(GL_VERTEX_ARRAY);
+ glEnableClientState(GL_COLOR_ARRAY);
+ glDisableClientState(GL_NORMAL_ARRAY);
+ glDisableClientState(GL_TEXTURE_COORD_ARRAY);
+ glDrawArrays(GL_POINTS, 0, count);
+{$ELSE}
glBegin(GL_POINTS);
len := High(Particles);
end;
glEnd();
+{$ENDIF}
glDisable(GL_BLEND);
end;