私は巨大なメモリ リークを抱えてSDL_TTF
おり、全体としての実装に疑問を投げかけています。
現在、私は次のクラスを持っています
MainMenu
Menu
Options
Button
Text
MainMenu
およびクラスはOption
、メニュー クラスを抽象化し、テキスト クラスを構築するパラメーターを使用して、それぞれ独自のボタン クラスを呼び出します。
したがって、現在、私のメイン ループはSDL_Renderer
MainMenu->Button->Text パスを介して (gRenderer) を渡します。
TTF_RenderText_Solid
Text クラスが初期化されると、フォントが読み込まれ、Button クラスによって渡されたメッセージを使用してフォントTTF_SetFontStyle
が設定され、テキストを太字に設定します。
私は以下を使用して描画します:
void Text::draw(SDL_Renderer* gRenderer)
{
renderQuad = { getXPosition(), getYPosition() };//, getWidth(), getHeight()};
mTexture = SDL_CreateTextureFromSurface(gRenderer, message);
SDL_RenderCopyEx(gRenderer, mTexture, NULL,
&renderQuad, NULL, NULL, SDL_FLIP_NONE);
};
SDL_CreateTextureFromSurface
またはで膨らんでいると思いますSDL_RenderCopyEx
。
このメモリ リークを修正するにはどうすればよいですか? 私は露骨な何かを見落としていますか?
解決:
Twinklebear の ifnroamtion の発見/使用:
ヘッダーでオブジェクトを宣言するときに、テクスチャを宣言し、それをNULL
Byと等しくなるように設定しました。SDL_Texture* mTexture = NULL;
次に、描画関数内で、テクスチャが NULL に設定されているかどうかを確認します。
void Text::draw(SDL_Renderer* gRenderer)
{
renderQuad = { getXPosition(), getYPosition(), message->w, message->h };
if (mTexture == NULL)
{
mTexture = SDL_CreateTextureFromSurface(gRenderer, message);
}
SDL_RenderCopy(gRenderer, mTexture, NULL, &renderQuad);
};
私がやりたいのは、クラスにブール変数をスローして、テクスチャを更新する必要があるかどうかを示し、テクスチャをリセットすることです。