diff options
| author | Simon Robertshaw <simon@hardwired.org.uk> | 2012-08-09 00:17:01 (GMT) |
|---|---|---|
| committer | Simon Robertshaw <simon@hardwired.org.uk> | 2012-08-09 00:17:01 (GMT) |
| commit | 3bdfd510b292db5acdcb2f74989dfa2fcd18a434 (patch) | |
| tree | 9351688642e17d5951a6b6f241b4052647213bce /src/graphics/Renderer.cpp | |
| parent | bb99efdedf0f7b21bf716642217cc565ab40a915 (diff) | |
| download | powder-3bdfd510b292db5acdcb2f74989dfa2fcd18a434.zip powder-3bdfd510b292db5acdcb2f74989dfa2fcd18a434.tar.gz | |
Gravity lensing
Diffstat (limited to 'src/graphics/Renderer.cpp')
| -rw-r--r-- | src/graphics/Renderer.cpp | 27 |
1 files changed, 24 insertions, 3 deletions
diff --git a/src/graphics/Renderer.cpp b/src/graphics/Renderer.cpp index 7d77b1c..162f79e 100644 --- a/src/graphics/Renderer.cpp +++ b/src/graphics/Renderer.cpp @@ -42,6 +42,13 @@ void Renderer::RenderBegin() { std::copy(persistentVid, persistentVid+(VIDXRES*YRES), vid); } + pixel * oldVid; + if(display_mode & DISPLAY_WARP) + { + oldVid = vid; + vid = warpVid; + std::fill(warpVid, warpVid+(VIDXRES*VIDYRES), 0); + } #endif draw_air(); draw_grav(); @@ -70,6 +77,12 @@ void Renderer::RenderBegin() draw_grav_zones(); DrawSigns(); #ifndef OGLR + if(display_mode & DISPLAY_WARP) + { + vid = oldVid; + } +#endif +#ifndef OGLR FinaliseParts(); #endif } @@ -292,9 +305,16 @@ void Renderer::FinaliseParts() } glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glDisable( GL_TEXTURE_2D ); -#elif defined(OGLI) +#endif + +#if defined(OGLI) && !defined(OGLR) + render_gravlensing(warpVid); g->draw_image(vid, 0, 0, VIDXRES, VIDYRES, 255); #endif + +#if !defined(OGLR) && !defined(OGLI) + render_gravlensing(warpVid); +#endif } void Renderer::RenderZoom() @@ -775,13 +795,13 @@ void Renderer::DrawSigns() #endif } -void Renderer::render_gravlensing() +void Renderer::render_gravlensing(pixel * source) { #ifndef OGLR int nx, ny, rx, ry, gx, gy, bx, by, co; int r, g, b; pixel t; - pixel *src = vid; + pixel *src = source; pixel *dst = vid; for(nx = 0; nx < XRES; nx++) { @@ -2171,6 +2191,7 @@ Renderer::Renderer(Graphics * g, Simulation * sim): vid = g->vid; #endif persistentVid = new pixel[VIDXRES*YRES]; + warpVid = new pixel[VIDXRES*VIDYRES]; #endif memset(fire_r, 0, sizeof(fire_r)); |
