Hey, could anyone explain why my secondary(used for shadows and reflections/refractions) FBO’s behave such way:
If i use texture resolution greater than my application viewport height, then framebuffer’s viewport is getting smaller(bigger fb texture resolution - smaller viewport) and screwed up.
For example: if my resolution is 1280x1024, everything works as it should if framebuffer texture size is less-equal to 1024 , no matter i use 128 or 256 or 1024. But if i make it 2048x2048 it screw up.
FBO TEXTURE SETUP:
<div class=“ubbcode-block”><div class=“ubbcode-header”>Click to reveal… <input type=“button” class=“form-button” value=“Show me!” onclick=“toggle_spoiler(this, ‘Yikes, my eyes!’, ‘Show me!’)” />]<div style=“display: none;”>
glBindTexture(GL_TEXTURE_2D, FB_TEX[3]);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_R_TO_TEXTURE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, GL_LEQUAL);
glTexParameteri(GL_TEXTURE_2D, GL_DEPTH_TEXTURE_MODE, GL_INTENSITY);
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT24, Shadow_Size, Shadow_Size, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, 0);
glBindTexture(GL_TEXTURE_2D, 0);
[/QUOTE]
FBO SETUP:
glDrawBuffer(GL_NONE);
glReadBuffer(GL_NONE);
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_TEXTURE_2D, FB_TEX[3], 0);
CheckFBO(3);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
[/QUOTE]</div>
RENDER:
<div class="ubbcode-block"><div class="ubbcode-header">Click to reveal.. <input type="button" class="form-button" value="Show me!" onclick="toggle_spoiler(this, 'Yikes, my eyes!', 'Show me!')" />]<div style="display: none;">
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, FB_ID[3]);
glClear(GL_DEPTH_BUFFER_BIT);
glPushMatrix();
ChangeSize(Shadow_Size, Shadow_Size, 90);
gluLookAt(Lights[0].Position_x2[0], Lights[0].Position_x2[1], Lights[0].Position_x2[2], Lights[0].Position_x2[0] - 1, Lights[0].Position_x2[1] - 1, Lights[0].Position_x2[2] - 1, 0, 1, 0);
glCullFace(GL_FRONT);
glColorMask(false, false, false, false);
setTextureMatrix();
for(unsigned int i = 0; Objects[i].SModel != -1; i++)
Objects[i].FRender(2);
glCullFace(GL_BACK);
glColorMask(true, true, true, true);
glPopMatrix();
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
[/QUOTE]</div>
CHANGE SIZE FUNC:
<div class="ubbcode-block"><div class="ubbcode-header">Click to reveal.. <input type="button" class="form-button" value="Show me!" onclick="toggle_spoiler(this, 'Yikes, my eyes!', 'Show me!')" />]<div style="display: none;">
void ChangeSize(GLsizei w, GLsizei h, GLfloat pers = 45.0f, GLfloat zfar = 800.0f, GLfloat znear = 0.2f)
{
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(pers, (GLfloat)w/(GLfloat)h, znear, zfar);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
};
[/QUOTE]</div>