Advertisement Jump to content
Sign in to follow this  

Free texture image memory after binding it

This topic is 2119 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



After binding a texture, is it possible to free the image memory and still be able to use the texture?  For example:


int LoadGLTextures()	// Load Bitmaps And Convert To Textures
	int Status=FALSE;	// Status Indicator

	// Load The Bitmap, Check For Errors.
	if (LoadTGA(&texture[0], "Data/Uncompressed.tga") &&
	    LoadTGA(&texture[1], "Data/Compressed.tga"))
		Status=TRUE;	// Set The Status To TRUE

		for (int loop=0; loop<2; loop++)// Loop Through Both Textures
			// Typical Texture Generation Using Data From The TGA 
			glGenTextures(1, &texture[loop].texID);	// Create The Texture
			glBindTexture(GL_TEXTURE_2D, texture[loop].texID);
			glTexImage2D(GL_TEXTURE_2D, 0, texture[loop].bpp / 8, texture[loop].width, texture[loop].height, 0, texture[loop].type, GL_UNSIGNED_BYTE, texture[loop].imageData);

			if (texture[loop].imageData)	// If Texture Image Exists 
				free(texture[loop].imageData);	// Free The Texture Image Memory 
	return Status;	// Return The Status



Share this post

Link to post
Share on other sites

Yes, glTexImage2D is copying your image data.


Probably worth mentioning GL synchronization notes:

This stuff used to be a little different, and has improved immensely:



Legacy Note: The only OpenGL functions that behave differently are functions that end in Pointer?. When these use client-side memory (which is no longer permitted in core OpenGL), the pointers are stored for a period of time. During that period, they must remain valid.

These are usually used for rendering calls; in which case, once the rendering call has returned, the memory to be read from client data has been read. Modifications to client memory after the rendering call will only affect future rendering calls, not those that have already passed.
This is generally why Buffer Objects are better than using client memory for rendering. A rendering call with buffers does not have to handle the possibility of the user changing the memory later, so it can simply write a few tokens into the command stream. With client memory, it must copy all of the vertices out of the client-side arrays.

Edited by TheKreature

Share this post

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

  • Advertisement

Important Information

By using, you agree to our community Guidelines, Terms of Use, and Privacy Policy. is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!