X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_gfx.pas;h=e4c46f199d17a9bf74a2180be95d1ff5e4fc0c4c;hb=a9ab7bf0c72e15b932b20aad24b10db60138bb21;hp=2e4dc8730c400582dc59085bb1515a2cbd20ef8f;hpb=66a94fecae8b7adff4a52946029944e3cb1870da;p=d2df-sdl.git diff --git a/src/game/g_gfx.pas b/src/game/g_gfx.pas index 2e4dc87..e4c46f1 100644 --- a/src/game/g_gfx.pas +++ b/src/game/g_gfx.pas @@ -1,4 +1,4 @@ -(* Copyright (C) DooM 2D:Forever Developers +(* Copyright (C) Doom 2D: Forever Developers * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -26,6 +26,8 @@ uses const BLOOD_NORMAL = 0; BLOOD_SPARKS = 1; + BLOOD_CSPARKS = 2; + BLOOD_COMBINE = 3; ONCEANIM_NONE = 0; ONCEANIM_SMOKE = 1; @@ -78,7 +80,8 @@ function awmIsSetHolmes (x, y: Integer): Boolean; inline; implementation uses - g_map, g_panel, g_basic, Math, e_graphics, GL, GLExt, + {$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; @@ -920,6 +923,11 @@ begin 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); @@ -1619,19 +1627,60 @@ end; 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; if (Particles <> nil) then begin glDisable(GL_TEXTURE_2D); - glPointSize(2); + if (g_dbg_scale < 0.6) then glPointSize(1) + else if (g_dbg_scale > 1.3) then glPointSize(g_dbg_scale+1) + else glPointSize(2); + glDisable(GL_POINT_SMOOTH); 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); @@ -1649,6 +1698,7 @@ begin end; glEnd(); +{$ENDIF} glDisable(GL_BLEND); end; @@ -1660,7 +1710,7 @@ begin begin if (OnceAnims[a].Animation <> nil) then begin - with OnceAnims[a] do Animation.Draw(x, y, M_NONE); + with OnceAnims[a] do Animation.Draw(x, y, TMirrorType.None); end; end; end;