always use scissor on reflections
This commit is contained in:
+9
-10
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user