簡體   English   中英

為什么我的圖像不渲染?

[英]Why won't my image render?

所以我正在用SDL學習C ++(在Visual Studio 2013上)。 我正在關注Lazy Foo的教程(特別是: http : //lazyfoo.net/tutorials/SDL/02_getting_an_image_on_the_screen/index.php )。

我的圖像無法渲染。 與本教程相反(有效),我沒有全局表面變量。 相反,我在主體中聲明了它們並傳遞了指針。

碼:

#include <SDL.h>
#include <SDL_image.h>
#include <stdio.h>
#include <string>

const int SCREEN_WIDTH = 600;
const int SCREEN_HEIGHT = 480;

//SDL init.
bool initialiseSDL(SDL_Window* gWindow, SDL_Surface* gWindowSurface)
{
    bool success = true;

    /*SDL_Init() initisalises SDL library. Returning 0 or less signifies an error.
      SDL_INIT_VIDEO flag refers to graphics sub system.*/
    if (SDL_Init(SDL_INIT_VIDEO) < 0)
    {
        printf("SDL could not initialise. SDL Error: %s\n", SDL_GetError());
        success = false;
    }
    else
    {
        //Create the window
        gWindow = SDL_CreateWindow("Asteroids", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);
        if (gWindow == NULL)
        {
            printf("Could not create window. SDL Error: %s\n", SDL_GetError());
            success = false;
        }
        else
        {
            //Get the window surface.
            gWindowSurface = SDL_GetWindowSurface(gWindow);
        }
    }
    return success;
}

bool loadMedia(SDL_Surface* surface, std::string path)
{
    //Success flag
    bool success = true;

    surface = SDL_LoadBMP(path.c_str());

    if (surface == NULL)
    {
        printf("SDL surface failed to load. SDL Error: %s\n", SDL_GetError());
        success = false;
    }

    return success;
}

void close()
{

}

int main(int argc, char* argv[])
{
    SDL_Window* gWindow = NULL;
    SDL_Surface* gWindowSurface = NULL;
    SDL_Surface* gImageSurface = NULL;

    if (!initialiseSDL(gWindow, gWindowSurface))
    {
        printf("Failed to initialise.\n");
    }
    else
    {

        if (!loadMedia(gImageSurface, "hw.bmp"))
        {
            printf("Failed to load inital media.");
        }
        else
        {
            //Apply the image
            SDL_BlitSurface(gImageSurface, NULL, gWindowSurface, NULL);

            //Update the surface
            SDL_UpdateWindowSurface(gWindow);

            //Wait two seconds
            SDL_Delay(2000);
        }
    }

    return 0;
}

您的程序表現出未定義的行為 ,因為main函數內部的指針初始化。

當您將它們傳遞給initialiseSDL函數時,將按值傳遞它們,這意味着它們將被復制,並且該函數僅對副本進行操作,而不對原始指針進行操作,原始指針在調用后仍將未初始化。

您需要做的是通過引用傳遞指針:

bool initialiseSDL(SDL_Window*& gWindow, SDL_Surface*& gWindowSurface)

當然,您需要對loadMedia函數執行相同的loadMedia

暫無
暫無

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

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