Jump to content
  • Advertisement
Sign in to follow this  
DMINATOR

OpenGL glCopyTexImage2D strange result

This topic is 4829 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hi I am using glCopyTexImage2D to render current game screen to texture and then use it as still background for menu. Everything works fine except that texture is somehow not filled fully, some black parts are shown instead. Here is image to show it better: Image Hosted by imagehosting.us Here is the code i use to render it:

//save viewport and set up new one
int viewport[4];

//first let's draw the mainscene to the texture
//and then use that texture 


RenderToTextureStart();

//clear any rendering made
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); 
glMatrixMode( GL_MODELVIEW );

//draw the scene
mainScene.GameDraw();

//and render to texture
RenderToTextureEnd();

	//draws current scene to the texture and use it after
	void RenderToTextureStart()
	{	
		glGetIntegerv(GL_VIEWPORT,(int*)viewport);
		glViewport(0,0,512,512);
		
	}

	void RenderToTextureEnd()
	{

		
		//save data to texture using glCopyTexImage2D
            //backimage.texID - is the texture we save to
		glBindTexture(GL_TEXTURE_2D,backimage.TextId(0 ));
		
		glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB,
			0,0, 512, 512, 0);
		
		//restore viewport
		glViewport( viewport[0],viewport[1],viewport[2],viewport[3]);
	}

	//draws background scene
	void DrawBack()
	{

		  glTranslatef(0.0f,0.0f,-1.0f); 

		      glColor3f(1.0f,1.0f,1.0f);          

			  glBindTexture( GL_TEXTURE_2D , backimage.TextId(0 ) );
			
		      glBegin(GL_QUADS);// Drawing Using Triangles
		
		
		
		
		          glTexCoord2f(0.0f, 0.0f);          // Top
		          glVertex3f(-0.77f,  -0.578f , 0);      		
		
		
	
	              glTexCoord2f(1.0f, 0.0f);
		          glVertex3f( 0.77f , -0.578f, 0);              // Bottom Left
		
		
		          glTexCoord2f(1.0f, 1.0f);
		          glVertex3f( 0.77f,   0.578f, 0);              // Bottom Right
		

		          glTexCoord2f(0.0f, 1.0f);
		          glVertex3f(-0.77f , 0.578f, 0);              // Bottom Right
		
		
		
		      glEnd();
		 
		    glTranslatef(0.0f,0.0f,1.0f); 
	}





Overall I am using SDL , OpenGL and DevIL One more thing is that this only occurs at 640x480 resolution. Higher resolutions work correctly ( 800x600 1024x768 ...) Here is what I get at 320x240. Strange :) Image Hosted by imagehosting.us I hope some one can help me out. [Edited by - DMINATOR on May 26, 2005 6:10:25 PM]

Share this post


Link to post
Share on other sites
Advertisement
The buffer you render to is only as large as your window, so when you try to copy to a texture that is larger than this, only part of the texture will be filled.
(In other words, the top part of the texture is black because the window has height 480 and the texture is 512 pixels high.)

You have several options:
* Use a smaller texture
* Use only part of a texture (glCopyTexSubImage2D)
* Use pbuffers
* Render a small part of the texture every time and copy into the same texture (again glCopyTexSubImage2D.)
* and probably a bunch more...

I'd say the simplest would be to either use a texture that is small enough (512x256 for 640x480 window) or use only part of a larger texture (512x512 for 640x480, and render with texture coordinates 0 to 480/512 in y-direction.)

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!