diff options
| author | Simon Robertshaw <simon@hardwired.org.uk> | 2012-08-15 15:25:13 (GMT) |
|---|---|---|
| committer | Simon Robertshaw <simon@hardwired.org.uk> | 2012-08-15 15:25:13 (GMT) |
| commit | 98445721fd8151381bb6fab07b9a35c2367867ae (patch) | |
| tree | 102602942546cab397433a39831f5ac99d3df52d /src/graphics/Renderer.cpp | |
| parent | 2f0e67433c624cd3e006ca3f789e36edc64a894f (diff) | |
| download | powder-98445721fd8151381bb6fab07b9a35c2367867ae.zip powder-98445721fd8151381bb6fab07b9a35c2367867ae.tar.gz | |
xor_bitmap drawing for renderer
Diffstat (limited to 'src/graphics/Renderer.cpp')
| -rw-r--r-- | src/graphics/Renderer.cpp | 94 |
1 files changed, 82 insertions, 12 deletions
diff --git a/src/graphics/Renderer.cpp b/src/graphics/Renderer.cpp index a2261f8..7467493 100644 --- a/src/graphics/Renderer.cpp +++ b/src/graphics/Renderer.cpp @@ -34,7 +34,20 @@ extern "C" void Renderer::RenderBegin() { -#ifndef OGLR +#ifdef OGLI +#ifdef OGLR + draw_air(); + draw_grav(); + render_parts(); + render_fire(); + DrawWalls(); + draw_grav_zones(); + DrawSigns(); + + glGetIntegerv(GL_FRAMEBUFFER_BINDING, &prevFbo); + glBindFramebuffer(GL_DRAW_FRAMEBUFFER, partsFbo); + glTranslated(0, MENUSIZE, 0); +#else if(display_mode & DISPLAY_PERS) { std::copy(persistentVid, persistentVid+(VIDXRES*YRES), vid); @@ -46,12 +59,12 @@ void Renderer::RenderBegin() vid = warpVid; std::fill(warpVid, warpVid+(VIDXRES*VIDYRES), 0); } -#endif - //draw_air(); - //draw_grav(); + + draw_air(); + draw_grav(); render_parts(); - //render_fire(); -#ifndef OGLR + render_fire(); + if(display_mode & DISPLAY_PERS) { int i,r,g,b; @@ -69,17 +82,59 @@ void Renderer::RenderBegin() persistentVid[i] = PIXRGB(r,g,b); } } -#endif + DrawWalls(); - //draw_grav_zones(); - //DrawSigns(); -#ifndef OGLR + draw_grav_zones(); + DrawSigns(); if(display_mode & DISPLAY_WARP) { vid = oldVid; } #endif -#ifndef OGLI +#else + if(display_mode & DISPLAY_PERS) + { + 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); + } + + draw_air(); + draw_grav(); + render_parts(); + render_fire(); + 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); + } + } + + DrawWalls(); + draw_grav_zones(); + DrawSigns(); + + if(display_mode & DISPLAY_WARP) + { + vid = oldVid; + } + FinaliseParts(); #endif } @@ -88,6 +143,8 @@ void Renderer::RenderEnd() { #ifdef OGLI #ifdef OGLR + glTranslated(0, -MENUSIZE, 0); + glBindFramebuffer(GL_DRAW_FRAMEBUFFER, prevFbo); FinaliseParts(); RenderZoom(); #else @@ -348,7 +405,7 @@ void Renderer::RenderZoom() glGetIntegerv(GL_BLEND_SRC, &origBlendSrc); glGetIntegerv(GL_BLEND_DST, &origBlendDst); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);//glBlendFunc(GL_ONE, GL_ZERO); + glBlendFunc(GL_ONE, GL_ZERO); glEnable( GL_TEXTURE_2D ); //glReadBuffer(GL_AUX0); @@ -2393,6 +2450,19 @@ Renderer::Renderer(Graphics * g, Simulation * sim): glBindTexture(GL_TEXTURE_2D, 0); glDisable(GL_TEXTURE_2D); + //Temptexture + glEnable(GL_TEXTURE_2D); + glGenTextures(1, &textTexture); + glBindTexture(GL_TEXTURE_2D, textTexture); + + glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + + glBindTexture(GL_TEXTURE_2D, 0); + glDisable(GL_TEXTURE_2D); + loadShaders(); #endif prepare_alpha(CELL, 1.0f); |
