私が書いたことのないライブラリを維持するよう依頼されています。私は多くの異なる見解をしているアプリケーションを持っています。彼らはさまざまなサイズ(幅/高さ)である可能性があり、異なるシーンの可能性があり、確かに異なる視点です。通常、コードは次のようになります。OpenGLよりメモリリークが多く、割り当てよりも削除されています
initialize view
set resolution of view
do stuff to view
clear view
これは、1回のプロセスで複数回繰り返されます。
Windowsタスクマネージャーには、メモリリークがあることが示されています。このアプリケーションは、レンダリングと呼ばれるC++オブジェクトを呼び出すCレイヤーの周りに設計されています。 **のコードはCのレイヤーを表します。他のすべてはオブジェクト内にあります。
新しいビューを初期化するには、ビューの
**if there is an old render delete it.**
{
glDeleteVertexArrays(1, &this->vao);
glDeleteBuffers(1, &this->positionBuffer);
glDeleteBuffers(1, &this->fbo);
glDeleteBuffers(1, &this->rbo);
glDeleteBuffers(1, &this->ibo);
glDeleteBuffers(1, &this->dbo);
}
**Create new render**
this->rbo = NULL;
this->fbo = NULL;
this->ibo = NULL;
this->dbo = NULL;
initialize this render's scalars.
セット解像度のようなものが
glDeleteBuffers(1, &this->rbo);
glDeleteBuffers(1, &this->fbo);
glDeleteBuffers(1, &this->dbo);
glGenRenderbuffers(1, &this->rbo);
glBindRenderbuffer(GL_RENDERBUFFER, this->rbo);
glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA32F, width, height);
glBindRenderbuffer(GL_RENDERBUFFER, 0);
error check
glGenRenderbuffers(1, &this->dbo);
glBindRenderbuffer(GL_RENDERBUFFER, this->dbo);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT32F, width, height);
glBindRenderbuffer(GL_RENDERBUFFER, 0);
error check
glGenFramebuffers(1, &this->fbo);
glBindFramebuffer(GL_FRAMEBUFFER, this->fbo);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, this->rbo);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, this->dbo);
error check
を行く見て、
glDeleteVertexArrays(1, &this->vao);
glDeleteBuffers(1, &this->positionBuffer);
glDeleteBuffers(1, &this->fbo);
glDeleteBuffers(1, &this->rbo);
glDeleteBuffers(1, &this->ibo);
glDeleteBuffers(1, &this->dbo);
読書はこれがに最適な方法ではないであることを示唆しているようにクリアな視界が見えますGPUを使用しますが、コードを見ると、それはうまくいくはずです。彼らは永続的でした:)私はメモリがビューの設定解像度で割り当てられているのを見ますが、そのメモリはリリースされたように見えます。それが事実なら....なぜ漏れ?私は明白な何かを見落としていますか?
私は同様の言い方をした質問を読みましたが、答えはありません。ここでの割り当てよりはるかに多くの削除があります。
OpenGLデバッガ(codeXL、nsight)を添付して、実際にすべてのOpenGLオブジェクトが解放されているかどうか確認しましたか? – BDL