mirror of
https://github.com/The-Powder-Toy/The-Powder-Toy.git
synced 2025-09-02 20:42:36 +02:00
Persistent mode
This commit is contained in:
@@ -24,8 +24,8 @@ extern "C"
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifndef OGLI
|
#ifndef OGLI
|
||||||
#define VIDXRES XRES+BARSIZE
|
#define VIDXRES (XRES+BARSIZE)
|
||||||
#define VIDYRES YRES+MENUSIZE
|
#define VIDYRES (YRES+MENUSIZE)
|
||||||
#else
|
#else
|
||||||
#define VIDXRES XRES
|
#define VIDXRES XRES
|
||||||
#define VIDYRES YRES
|
#define VIDYRES YRES
|
||||||
@@ -37,11 +37,35 @@ extern "C"
|
|||||||
|
|
||||||
void Renderer::RenderBegin()
|
void Renderer::RenderBegin()
|
||||||
{
|
{
|
||||||
|
#ifndef OGLR
|
||||||
|
if(display_mode & DISPLAY_PERS)
|
||||||
|
{
|
||||||
|
std::copy(persistentVid, persistentVid+(VIDXRES*YRES), vid);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
draw_air();
|
draw_air();
|
||||||
draw_grav();
|
draw_grav();
|
||||||
render_parts();
|
render_parts();
|
||||||
render_fire();
|
render_fire();
|
||||||
|
#ifndef OGLR
|
||||||
|
if(display_mode & DISPLAY_PERS)
|
||||||
|
{
|
||||||
|
int i,r,g,b;
|
||||||
|
for (i = 0; i < VIDXRES*YRES; i++)
|
||||||
|
{
|
||||||
|
r = PIXR(vid[i]);
|
||||||
|
g = PIXG(vid[i]);
|
||||||
|
b = PIXB(vid[i]);
|
||||||
|
if (r>0)
|
||||||
|
r--;
|
||||||
|
if (g>0)
|
||||||
|
g--;
|
||||||
|
if (b>0)
|
||||||
|
b--;
|
||||||
|
persistentVid[i] = PIXRGB(r,g,b);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
DrawWalls();
|
DrawWalls();
|
||||||
draw_grav_zones();
|
draw_grav_zones();
|
||||||
DrawSigns();
|
DrawSigns();
|
||||||
@@ -2146,6 +2170,7 @@ Renderer::Renderer(Graphics * g, Simulation * sim):
|
|||||||
#else
|
#else
|
||||||
vid = g->vid;
|
vid = g->vid;
|
||||||
#endif
|
#endif
|
||||||
|
persistentVid = new pixel[VIDXRES*YRES];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
memset(fire_r, 0, sizeof(fire_r));
|
memset(fire_r, 0, sizeof(fire_r));
|
||||||
@@ -2325,6 +2350,7 @@ void Renderer::ClearAccumulation()
|
|||||||
std::fill(fire_r[0]+0, fire_r[(YRES/CELL)-1]+((XRES/CELL)-1), 0);
|
std::fill(fire_r[0]+0, fire_r[(YRES/CELL)-1]+((XRES/CELL)-1), 0);
|
||||||
std::fill(fire_g[0]+0, fire_g[(YRES/CELL)-1]+((XRES/CELL)-1), 0);
|
std::fill(fire_g[0]+0, fire_g[(YRES/CELL)-1]+((XRES/CELL)-1), 0);
|
||||||
std::fill(fire_b[0]+0, fire_b[(YRES/CELL)-1]+((XRES/CELL)-1), 0);
|
std::fill(fire_b[0]+0, fire_b[(YRES/CELL)-1]+((XRES/CELL)-1), 0);
|
||||||
|
std::fill(persistentVid, persistentVid+(VIDXRES*YRES), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Renderer::AddRenderMode(unsigned int mode)
|
void Renderer::AddRenderMode(unsigned int mode)
|
||||||
|
@@ -87,6 +87,7 @@ public:
|
|||||||
void loadShaders();
|
void loadShaders();
|
||||||
#else
|
#else
|
||||||
pixel * vid;
|
pixel * vid;
|
||||||
|
pixel * persistentVid;
|
||||||
void blendpixel(int x, int y, int r, int g, int b, int a);
|
void blendpixel(int x, int y, int r, int g, int b, int a);
|
||||||
void addpixel(int x, int y, int r, int g, int b, int a);
|
void addpixel(int x, int y, int r, int g, int b, int a);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user