Original Post
I have a texture class i wrote that can load an image as a
texture and also project it to the screen in 2D. It is also
able to create a blank texture for rendering to and take care
of the render to texture process itself. When I have one texture
with an image loaded into it and one setup as the same size i can draw the first texture and render it''s contents to the second no problem. but when i try to draw the first texture and
render the exact area of the screen it''s being drawn to into the very same texture it slowly blurs and you can see it shift to the right as it does. does anyone have any idea why this is happening? The function that draws the tex is this
//====================================================
void Textures::Draw2D(int X,int Y,Vectors3f Rotation,Vectors3f Scale)
{
if(Data == NULL) return; // AUX_RGBImageRec for storing
int HalfWidth=Data->sizeX/2;
int HalfHeight=Data->sizeY/2;
Vectors3f Center,UpperLeft,UpperRight,LowerLeft,LowerRight;
GLint Viewport[4];
GLdouble ModelView[16];
GLdouble Projection[16];
GLdouble dX,dY,dZ;
glPushMatrix();
glLoadIdentity();
glGetDoublev(GL_MODELVIEW_MATRIX,ModelView);
glPopMatrix();
glGetDoublev(GL_PROJECTION_MATRIX,Projection);
glGetIntegerv(GL_VIEWPORT,Viewport);
gluUnProject((GLdouble)X,(GLdouble)Y,(GLdouble)0.9,ModelView,Projection,Viewport,&dX,&dY,&dZ);
Center.Set(dX,dY,dZ);
gluUnProject((GLdouble)X-HalfWidth,(GLdouble)Y+HalfHeight,(GLdouble)0.9,ModelView,Projection,Viewport,&dX,&dY,&dZ);
UpperLeft.Set(dX,dY,dZ);
gluUnProject((GLdouble)X+HalfWidth,(GLdouble)Y+HalfHeight,(GLdouble)0.9,ModelView,Projection,Viewport,&dX,&dY,&dZ);
UpperRight.Set(dX,dY,dZ);
gluUnProject((GLdouble)X-HalfWidth,(GLdouble)Y-HalfHeight,(GLdouble)0.9,ModelView,Projection,Viewport,&dX,&dY,&dZ);
LowerLeft.Set(dX,dY,dZ);
gluUnProject((GLdouble)X+HalfWidth,(GLdouble)Y-HalfHeight,(GLdouble)0.9,ModelView,Projection,Viewport,&dX,&dY,&dZ);
LowerRight.Set(dX,dY,dZ);
glTranslatef(Center.X,Center.Y,Center.Z);
if(Scale != 1)
glScalef(Scale.X,Scale.Y,Scale.Z);
if(Rotation != 0)
{
glRotatef(Rotation.X,1.0,0.0,0.0);
glRotatef(Rotation.Y,0.0,1.0,0.0);
glRotatef(Rotation.Z,0.0,0.0,1.0);
}
glTranslatef(-Center.X,-Center.Y,-Center.Z);
glBindTexture(GL_TEXTURE_2D,TexName);
glBegin(GL_QUADS);
glTexCoord2f(0.0,0.0);
glVertex3f(LowerLeft.X,LowerLeft.Y,LowerLeft.Z);
glTexCoord2f(1.0,0.0);
glVertex3f(LowerRight.X,LowerRight.Y,LowerRight.Z);
glTexCoord2f(1.0,1.0);
glVertex3f(UpperRight.X,UpperRight.Y,UpperRight.Z);
glTexCoord2f(0.0,1.0);
glVertex3f(UpperLeft.X,UpperLeft.Y,UpperLeft.Z);
glEnd();
}
//==============================================================
this is the code that renders from the screen
void Textures::GetScreen(int X,int Y,int width,int height)
{
glBindTexture(GL_TEXTURE_2D,TexName);
glCopyTexImage2D(GL_TEXTURE_2D,0,GL_RGB,X,Y,width,height,0);
}