Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;使用SDL2和SDL_图像加载图像_C++_Sdl 2_Sdl Image - Fatal编程技术网

C++ C++;使用SDL2和SDL_图像加载图像

C++ C++;使用SDL2和SDL_图像加载图像,c++,sdl-2,sdl-image,C++,Sdl 2,Sdl Image,我有一个关于在SDL2中使用SDL_图像库加载图像的问题 不幸的是,我在SDL_图像文档中找不到任何关于IMG_LoadTexture的信息。 那么,使用IMG_LoadTexture直接加载PNG图像作为纹理与使用IMG_load加载曲面,然后使用SDL_CreateTextureFromSurface将其转换为纹理之间的区别是什么?使用一个比另一个好吗?我刚刚用SDL编写了一个GUI。所以IMG_加载是在SDL图像中加载的老方法,我相信是从SDL1加载的。它过去的工作方式是使用SDL曲面,然

我有一个关于在SDL2中使用SDL_图像库加载图像的问题

不幸的是,我在SDL_图像文档中找不到任何关于IMG_LoadTexture的信息。
那么,使用IMG_LoadTexture直接加载PNG图像作为纹理与使用IMG_load加载曲面,然后使用SDL_CreateTextureFromSurface将其转换为纹理之间的区别是什么?使用一个比另一个好吗?

我刚刚用SDL编写了一个GUI。所以IMG_加载是在SDL图像中加载的老方法,我相信是从SDL1加载的。它过去的工作方式是使用SDL曲面,然后将它们合并在一起,然后使用遮罩等将它们blit到屏幕上,或将曲面的部分blit到其他曲面上。问题是一些东西-例如绘制线,现在需要渲染器

渲染器将引入SDL2的新功能。这也意味着,你不能只将你的表面blit到一个纹理,而不首先转换它

总之,如果您可以使用IMG_load和旧的SDL功能,那么就这样做吧,因为它更直观。如果您计划绘制任何线条,或任何使用SDL渲染器的东西,则需要学习如何在曲面和纹理之间转换

关于你最初的问题,因为我意识到我没有很好地回答它,通常最好使用正确的函数调用,例如IMG_LoadTexture直接,而不是IMG_Load然后将其转换为纹理。SDL直接与硬件对话,具有惊人的优化效果。将曲面转换为纹理可能涉及到光点,这意味着复制大量内存

然而,在写这篇文章的时候,在这种情况下,似乎完全没有区别。IMG_LoadTexture函数的作用与此完全相同


但再次检查,您可能根本不需要纹理,如果不需要,您可以节省一些工作;)

如有疑问,请检查来源(可在以下位置轻松浏览):


谢谢,所以IMG_LoadTexture和IMG_Load加载曲面然后将其转换为纹理是相同的。
SDL_Texture *IMG_LoadTexture(SDL_Renderer *renderer, const char *file)
{
    SDL_Texture *texture = NULL;
    SDL_Surface *surface = IMG_Load(file);
    if (surface) {
        texture = SDL_CreateTextureFromSurface(renderer, surface);
        SDL_FreeSurface(surface);
    }
    return texture;
}