我的程序一次渲染一個大的jpeg作爲紋理,並允許用戶通過重新使用「相同」紋理在它們之間切換。導致內存泄漏的OpenGL glDeleteTextures?
我在開始時撥打glGenTextures(1, &texture);
一次。
然後我想交換的圖像,每次我用:
FreeTexture(texture);
ROI_img = fetch_image(temp, sortVector[tPiece]);
loadTexture_Ipl(ROI_img , &texture);
這裏有被稱爲兩個功能:
int loadTexture_Ipl(IplImage *image, GLuint *text)
{
if (image==NULL) return -1;
glBindTexture(GL_TEXTURE_2D, *text);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glPixelStorei(GL_UNPACK_ALIGNMENT, 4);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, ROI_WIDTH, ROI_HEIGHT,0, GL_BGR, GL_UNSIGNED_BYTE, image->imageData);
return 0;
}
void FreeTexture(GLuint texture)
{
glDeleteTextures(1, &texture);
}
我的問題是,後一對夫婦的圖像,他們停止渲染(紋理全是黑色)。如果我一直在嘗試切換我收到此錯誤信息:
test(55248,0xacdf22c0) malloc: *** mmap(size=744001536) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
Mar 19 11:57:51 Ants-MacBook-Pro.local test[55248] <Error>: CGSImageDataLock: Cannot allocate memory
我認爲glDeleteTextures
將每次釋放內存?
關於如何更好地實現這一點的任何想法?
p.s.這裏是遇到內存泄漏的屏幕(https://p.twimg.com/AoWVy8FCMAEK8q7.png:large)
glTexImage *調用在傳遞給它的指針上覆制內存,通常將它存儲在特殊的圖形內存中。使用glDeleteTextures時,原始內存塊不會被刪除。我不知道這是否是你的問題,因爲你的問題並不清楚。 – 2012-03-19 12:23:52
感謝您的幫助。我如何取消分配原始內存? – Awalias 2012-03-19 12:34:17
@ Zyx2000當然,它可以釋放內存。它還能做什麼?閱讀[這裏](http://www.opengl.org/sdk/docs/man/xhtml/glDeleteTextures.xml) – 2012-03-19 13:00:30