summaryrefslogtreecommitdiff
path: root/src/graphics/Renderer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/graphics/Renderer.cpp')
-rw-r--r--src/graphics/Renderer.cpp48
1 files changed, 44 insertions, 4 deletions
diff --git a/src/graphics/Renderer.cpp b/src/graphics/Renderer.cpp
index ef3b8aa..30f1bfd 100644
--- a/src/graphics/Renderer.cpp
+++ b/src/graphics/Renderer.cpp
@@ -35,6 +35,29 @@ extern "C"
#define drawrect(args) g->drawrect(args)
#endif
+void Renderer::RenderBegin()
+{
+
+ draw_air();
+ render_parts();
+ render_fire();
+ draw_grav();
+ DrawWalls();
+ DrawSigns();
+#ifndef OGLR
+ RenderZoom();
+ FinaliseParts();
+#endif
+}
+
+void Renderer::RenderEnd()
+{
+#ifdef OGLR
+ RenderZoom();
+ FinaliseParts();
+#endif
+}
+
void Renderer::clearScreen(float alpha)
{
#ifdef OGLR
@@ -245,7 +268,7 @@ void Renderer::FinaliseParts()
}
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glDisable( GL_TEXTURE_2D );
-#else
+#elif defined(OGLI)
g->draw_image(vid, 0, 0, VIDXRES, VIDYRES, 255);
#endif
}
@@ -254,7 +277,7 @@ void Renderer::RenderZoom()
{
if(!zoomEnabled)
return;
- #ifdef OGLR
+ #if defined(OGLR)
int sdl_scale = 1;
int origBlendSrc, origBlendDst;
float zcx1, zcx0, zcy1, zcy0, yfactor, xfactor, i; //X-Factor is shit, btw
@@ -344,8 +367,8 @@ void Renderer::RenderZoom()
int x, y, i, j;
pixel pix;
pixel * img = vid;
- drawrect(zoomWindowPosition.X-2, zoomWindowPosition.Y-2, zoomScopeSize*ZFACTOR+2, zoomScopeSize*ZFACTOR+2, 192, 192, 192, 255);
- drawrect(zoomWindowPosition.X-1, zoomWindowPosition.Y-1, zoomScopeSize*ZFACTOR, zoomScopeSize*ZFACTOR, 0, 0, 0, 255);
+ drawrect(zoomWindowPosition.X-2, zoomWindowPosition.Y-2, zoomScopeSize*ZFACTOR+4, zoomScopeSize*ZFACTOR+4, 192, 192, 192, 255);
+ drawrect(zoomWindowPosition.X-1, zoomWindowPosition.Y-1, zoomScopeSize*ZFACTOR+2, zoomScopeSize*ZFACTOR+2, 0, 0, 0, 255);
clearrect(zoomWindowPosition.X, zoomWindowPosition.Y, zoomScopeSize*ZFACTOR, zoomScopeSize*ZFACTOR);
for (j=0; j<zoomScopeSize; j++)
for (i=0; i<zoomScopeSize; i++)
@@ -617,6 +640,8 @@ void Renderer::render_gravlensing()
void Renderer::render_fire()
{
#ifndef OGLR
+ if(!(render_mode & FIREMODE))
+ return;
int i,j,x,y,r,g,b,nx,ny;
for (j=0; j<YRES/CELL; j++)
for (i=0; i<XRES/CELL; i++)
@@ -2093,9 +2118,24 @@ Renderer::Renderer(Graphics * g, Simulation * sim):
void Renderer::CompileRenderMode()
{
+ int old_render_mode = render_mode;
render_mode = 0;
for(int i = 0; i < render_modes.size(); i++)
render_mode |= render_modes[i];
+
+ //If firemode is removed, clear the fire display
+ if(!(render_mode & FIREMODE) && (old_render_mode & FIREMODE))
+ {
+ ClearAccumulation();
+ }
+}
+
+void Renderer::ClearAccumulation()
+{
+ //Fire
+ 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_b[0]+0, fire_b[(YRES/CELL)-1]+((XRES/CELL)-1), 0);
}
void Renderer::AddRenderMode(unsigned int mode)