私のプログラムは、大規模なjpegを一度に1つのテクスチャとしてレンダリングし、ユーザーは「同じ」テクスチャを再利用することでそれらを切り替えることができます。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 *は、渡されたポインタのメモリをCOPYします。通常、特別なグラフィックメモリに格納します。 glDeleteTexturesを使用している場合、元のメモリは削除されません。私はこれがあなたの問題であるかどうかはわかりません。あなたの質問からはっきりしていないからです。 –
助けてくれてありがとう。元のメモリをどのように割り当て解除できますか? – Awalias
@ Zyx2000もちろん、メモリを解放します。それ以外に何がありますか? [here](http://www.opengl.org/sdk/docs/man/xhtml/glDeleteTextures.xml)を参照してください。 –