Почему мое изображение не отображается?

Поэтому я изучаю C ++ с SDL (на 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;
}

0

Решение

Ваша программа экспонатов неопределенное поведение, потому что указатели внутри main функция не инициализируется.

Когда вы передаете их initialiseSDL функция, которую вы передаете им по значению, что означает, что они копируются, и функция работает только с копиями, а не с оригинальными указателями, которые все еще будут неинициализированы после вызова.

Вам нужно вместо этого передать указатели по ссылке:

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

Вы, конечно, должны сделать то же самое с loadMedia функция.

2

Другие решения


По вопросам рекламы [email protected]