是否有SDL 1.2函数返回分配给SDL_Surface指针的内存使用量?
具体而言,IML_Load()返回SDL_Surface *。
观察结构,似乎这会给出正确的球场结果:
SDL_Surface* surface = IMG_Load(image_file_name);
size_t memory = surface->w * surface->h * surface->format->BitsPerPixel / 8
...至少我的目标架构有32位像素。但是有没有SDL 1.2。 API函数还是更准确的方法?
答案 0 :(得分:2)
没有SDL 1.2功能可用于确定曲面的内存使用情况。如果您自己创建表面,而不是通过SDL_image,那么您可以使用自定义分配器来跟踪分配。
您的代码应该足够接近估算值。但是,我会使用音调,因为每行可能有填充字节:
size_t memory_bytes = surface->pitch * surface->h;
(请注意,这可能不适合使用SDL_RLEACCEL标志的曲面。)
如果您对结构的其余部分的影响感到迂腐,请添加:
sizeof(SDL_Surface)
+ sizeof(SDL_PixelFormat)
+ (surface->format->palette == NULL? 0
: sizeof(SDL_Palette)
+ sizeof(SDL_Color) * surface->format->palette->ncolors)