c++ - 如何正确使用 SDL_DestroyTexture() 等 SDL 函数?

标签 c++ sdl

我在做this立即获取 lazyfoo SDL 教程。

他们使用的渲染类有一些使用 SDL_Surface*SDL_Texture 的图像到纹理功能。 在函数结束时,他们通过调用 SDL_FreeSurface()“释放”创建的表面。

现在,我想知道:

  1. 为什么我必须完全释放 Surface(变量是局部的?)?
  2. 为什么让创建的Texture不调用SDL_DestroyTexture就可以了?
  3. 当我破坏纹理或释放表面时,这到底意味着什么?
    bool Tile::loadTexture(const char* path){  
    SDL_Texture* newTexture = NULL;  
    SDL_Surface* loadedSurface = IMG_Load(path);  
    //...some code  
    Texture = newTexture;  
    SDL_FreeSurface(loadedSurface);         
    return Texture != NULL;} 

最佳答案

Why exactly i have to free the Surface at all (variables are local?)?

指针 loadedSurface 是局部的。实际表面不是:IMG_Load 内部有类似于malloc 的东西。与在使用 malloc 分配的内存上使用 free 的方式相同,您在使用 IMG_Load 分配的表面上使用 SDL_FreeSurface(或SDL_CreateRGBSurface 等等)。

Why its ok to let the created Texture be without calling SDL_DestroyTexture?

SDL_DestroyTexture 被调用,在 LTexture::free 内部,由 LTexture 的析构函数调用。所以如果 loadFromFile 被调用,SDL_DestroyTexture 几乎可以保证在某个时候被调用。

What exacty does it mean when i destroy a texture or free a surface?

这与在使用 malloc 分配的内存上使用 free 或在使用 new< 分配的内存上使用 delete 的含义相同,或调用 std::unique_ptr::reset(不带参数),等等。每个变体的作用都略有不同。如果想知道SDL_DestroyTextureSDL_FreeSurfacefree等到底有什么区别,可以看源码:SDL是开源的并且有很多 free 的开源实现。

关于c++ - 如何正确使用 SDL_DestroyTexture() 等 SDL 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55328678/

相关文章:

c++ - 如何为文件对话框过滤器设置通配符?

javascript - 从 JavaScript 代码中提取字符串

C++ 调用 perl 代码 - eval_sv 不将参数传递给脚本

c++ - 在 SDL 中编写 X-Bitmap 加载程序?

c# - XNA 3.1 与 SDL

C++ 和 SDL : How does SDL_Rect work exactly?

c++ - 避免 std::map::find() 的 key 构造

c++ - 对象上的范围解析运算符

c - 如何用SDL 2.0画正方形?

c++ - SDL:制作静态文本变量