Ensure zoom is drawn after particles for OpenGL Rendering, draw walls onto the correct framebuffer

This commit is contained in:
Simon Robertshaw
2012-08-15 15:02:48 +01:00
parent 0bb4c0e57a
commit 2f0e67433c
2 changed files with 52 additions and 21 deletions

View File

@@ -228,7 +228,7 @@ void PIXELMETHODS_CLASS::xor_rect(int x, int y, int width, int height)
void PIXELMETHODS_CLASS::xor_bitmap(unsigned char * bitmap, int x, int y, int w, int h) void PIXELMETHODS_CLASS::xor_bitmap(unsigned char * bitmap, int x, int y, int w, int h)
{ {
/* Rewriting until better method can be found /* Rewriting until better method can be found */
//glEnable(GL_COLOR_LOGIC_OP); //glEnable(GL_COLOR_LOGIC_OP);
//glLogicOp(GL_XOR); //glLogicOp(GL_XOR);
glEnable(GL_TEXTURE_2D); glEnable(GL_TEXTURE_2D);
@@ -254,8 +254,8 @@ void PIXELMETHODS_CLASS::xor_bitmap(unsigned char * bitmap, int x, int y, int w,
glDisable(GL_TEXTURE_2D); glDisable(GL_TEXTURE_2D);
//glDisable(GL_COLOR_LOGIC_OP); //glDisable(GL_COLOR_LOGIC_OP);
glPixelStorei(GL_UNPACK_ALIGNMENT, 4); glPixelStorei(GL_UNPACK_ALIGNMENT, 4);
*/
float old_size; /*float old_size;
glGetFloatv(GL_POINT_SIZE,&old_size); glGetFloatv(GL_POINT_SIZE,&old_size);
glPointSize(1.0); glPointSize(1.0);
@@ -269,7 +269,7 @@ void PIXELMETHODS_CLASS::xor_bitmap(unsigned char * bitmap, int x, int y, int w,
} }
} }
glEnd(); glEnd();
glPointSize(old_size); glPointSize(old_size);*/
} }
void PIXELMETHODS_CLASS::draw_line(int x, int y, int x2, int y2, int r, int g, int b, int a) void PIXELMETHODS_CLASS::draw_line(int x, int y, int x2, int y2, int r, int g, int b, int a)

View File

@@ -47,10 +47,10 @@ void Renderer::RenderBegin()
std::fill(warpVid, warpVid+(VIDXRES*VIDYRES), 0); std::fill(warpVid, warpVid+(VIDXRES*VIDYRES), 0);
} }
#endif #endif
draw_air(); //draw_air();
draw_grav(); //draw_grav();
render_parts(); render_parts();
render_fire(); //render_fire();
#ifndef OGLR #ifndef OGLR
if(display_mode & DISPLAY_PERS) if(display_mode & DISPLAY_PERS)
{ {
@@ -71,8 +71,8 @@ void Renderer::RenderBegin()
} }
#endif #endif
DrawWalls(); DrawWalls();
draw_grav_zones(); //draw_grav_zones();
DrawSigns(); //DrawSigns();
#ifndef OGLR #ifndef OGLR
if(display_mode & DISPLAY_WARP) if(display_mode & DISPLAY_WARP)
{ {
@@ -86,9 +86,16 @@ void Renderer::RenderBegin()
void Renderer::RenderEnd() void Renderer::RenderEnd()
{ {
RenderZoom();
#ifdef OGLI #ifdef OGLI
#ifdef OGLR
FinaliseParts(); FinaliseParts();
RenderZoom();
#else
RenderZoom();
FinaliseParts();
#endif
#else
RenderZoom();
#endif #endif
} }
@@ -341,7 +348,7 @@ void Renderer::RenderZoom()
glGetIntegerv(GL_BLEND_SRC, &origBlendSrc); glGetIntegerv(GL_BLEND_SRC, &origBlendSrc);
glGetIntegerv(GL_BLEND_DST, &origBlendDst); glGetIntegerv(GL_BLEND_DST, &origBlendDst);
glBlendFunc(GL_ONE, GL_ZERO); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);//glBlendFunc(GL_ONE, GL_ZERO);
glEnable( GL_TEXTURE_2D ); glEnable( GL_TEXTURE_2D );
//glReadBuffer(GL_AUX0); //glReadBuffer(GL_AUX0);
@@ -576,6 +583,39 @@ VideoBuffer * Renderer::WallIcon(int wallID, int width, int height)
void Renderer::DrawWalls() void Renderer::DrawWalls()
{ {
#ifdef OGLR
GLint prevFbo;
glGetIntegerv(GL_FRAMEBUFFER_BINDING, &prevFbo);
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, partsFbo);
glTranslated(0, MENUSIZE, 0);
int x, y, i, j, cr, cg, cb;
unsigned char wt;
pixel pc;
pixel gc;
unsigned char (*bmap)[XRES/CELL] = sim->bmap;
unsigned char (*emap)[XRES/CELL] = sim->emap;
wall_type *wtypes = sim->wtypes;
for (y=0; y<YRES/CELL; y++)
for (x=0; x<XRES/CELL; x++)
if (bmap[y][x])
{
wt = bmap[y][x];
if (wt<0 || wt>=UI_WALLCOUNT)
continue;
pc = wtypes[wt].colour;
gc = wtypes[wt].eglow;
cr = PIXR(pc);
cg = PIXG(pc);
cb = PIXB(pc);
fillrect(x*CELL, y*CELL, CELL, CELL, cr, cg, cb, 255);
}
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, prevFbo);
glTranslated(0, -MENUSIZE, 0);
#else
int x, y, i, j, cr, cg, cb; int x, y, i, j, cr, cg, cb;
unsigned char wt; unsigned char wt;
pixel pc; pixel pc;
@@ -592,13 +632,6 @@ void Renderer::DrawWalls()
continue; continue;
pc = wtypes[wt].colour; pc = wtypes[wt].colour;
gc = wtypes[wt].eglow; gc = wtypes[wt].eglow;
#ifdef OGLR
int r = PIXR(pc);
int g = PIXG(pc);
int b = PIXB(pc);
int a = 255;
#endif
#ifndef OGLR
// standard wall patterns // standard wall patterns
if (wtypes[wt].drawstyle==1) if (wtypes[wt].drawstyle==1)
@@ -714,10 +747,8 @@ void Renderer::DrawWalls()
fire_b[y][x] = cb; fire_b[y][x] = cb;
} }
#else
this->fillrect(x*CELL, y*CELL, CELL, CELL, r, g, b, a);
#endif
} }
#endif
} }
void Renderer::DrawSigns() void Renderer::DrawSigns()