簡體   English   中英

使用SDL2和SDL_image加載C ++圖像

[英]C++ image loading with SDL2 and SDL_image

我有一個關於使用SDL_image庫在SDL2中加載圖像的問題。

不幸的是,我在SDL_image文檔中找不到有關IMG_LoadTexture的任何信息。 那么,使用IMG_LoadTexture直接加載PNG圖像作為紋理與使用IMG_Load加載表面然后使用SDL_CreateTextureFromSurface將其轉換為紋理之間有什么區別? 使用一個比另一個有什么好處嗎?

如有疑問,請檢查源(可在https://hg.libsdl.org/輕松瀏覽) -https ://hg.libsdl.org/SDL_image/file/ca95d0e31aec/IMG.c#l209:

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;
}

我剛剛完成了用SDL編寫GUI的工作。 因此,我相信IMG_Load是從SDL 1加載SDL圖像的舊方法。 它過去的工作方式是先擁有SDL曲面,然后將它們合並在一起,然后將其塗抹到屏幕上,或者使用蒙版等將曲面的部分塗抹到其他表面上。問題是一些東西-例如繪圖線,現在需要渲染器。

渲染器引入了SDL2的新功能。 這也意味着您不能不先轉換就將表面必不可少地塗成紋理。

因此,總而言之,如果您可以擺脫使用IMG_load和使用舊的SDL功能的麻煩,那么這樣做是因為它更加直觀。 如果您打算繪制任何線條,或使用SDL渲染器的任何線條,那么您將需要學習如何在表面和紋理之間轉換!

關於您的原始問題,因為我意識到我的回答不太好,所以通常最好直接使用正確的函數調用(例如IMG_LoadTexture),而不是IMG_Load,然后將其轉換為紋理。 SDL直接與硬件對話,並且進行了令人驚訝的優化。 將表面轉換為紋理,大概涉及刮擦,這意味着復制大量內存。

但是,在這種情況下,在撰寫本文時,似乎根本沒有區別。 IMG_LoadTexture函數執行的功能完全相同。

但是再次檢查一下,您可能根本不需要紋理,如果不需要,則可以節省一些工作;)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM