From bda6248d23745cdca90d8cdd0808286a5a3ed4c4 Mon Sep 17 00:00:00 2001 From: Lee Salzman Date: Wed, 29 Nov 2017 15:35:10 -0500 Subject: [PATCH] always use scissor on reflections --- source/src/rendergl.cpp | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/source/src/rendergl.cpp b/source/src/rendergl.cpp index a78bab25..09692492 100644 --- a/source/src/rendergl.cpp +++ b/source/src/rendergl.cpp @@ -655,17 +655,20 @@ void drawreflection(float hf, int w, int h, float changelod, bool refract) extern float wsx1, wsx2, wsy1, wsy2; int sx = 0, sy = 0, sw = size, sh = size; - bool scissor = reflectscissor && (wsx1 > -1 || wsy1 > -1 || wsx1 < 1 || wsy1 < 1); - if(scissor) + if(reflectscissor && (wsx1 > -1 || wsy1 > -1 || wsx1 < 1 || wsy1 < 1)) { sx = int(floor((wsx1+1)*0.5f*size)); sy = int(floor((wsy1+1)*0.5f*size)); sw = int(ceil((wsx2+1)*0.5f*size)) - sx; sh = int(ceil((wsy2+1)*0.5f*size)) - sy; - glScissor(sx, sy, sw, sh); - glEnable(GL_SCISSOR_TEST); } - + glScissor(sx, sy, sw, sh); + glEnable(GL_SCISSOR_TEST); + + if(!refract) glCullFace(GL_BACK); + glViewport(0, 0, size, size); + glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); + resetcubes(); render_world(camera1->o.x, camera1->o.y, refract ? camera1->o.z : hf, changelod, @@ -673,10 +676,6 @@ void drawreflection(float hf, int w, int h, float changelod, bool refract) setupstrips(); - if(!refract) glCullFace(GL_BACK); - glViewport(0, 0, size, size); - glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); - glEnable(GL_TEXTURE_2D); glPushMatrix(); @@ -749,7 +748,7 @@ void drawreflection(float hf, int w, int h, float changelod, bool refract) if(!refract) glCullFace(GL_FRONT); glViewport(0, 0, w, h); - if(scissor) glDisable(GL_SCISSOR_TEST); + glDisable(GL_SCISSOR_TEST); glBindTexture(GL_TEXTURE_2D, refract ? refracttex : reflecttex); glCopyTexSubImage2D(GL_TEXTURE_2D, 0, sx, sy, sx, sy, sw, sh);