I apologize if this question has already been asked but I've been researching for about a week now and cannot find the answer any where.
The problem that I am having is that while SDL_LoadBMP() is loading the image successfully, The window does not render an image at all, and instead renders an entirely black screen. However I do know something is being loaded (not just because there is no error being returned by SDL_LoadBMP() but also) because when I run the program with the SDL_LoadBMP() call commented out the window stays entirely white.
if it helps I have been writing along with the Lazyfoo tutorial located here. Code below...
From Main.cpp
int main(int argc, char* args[])
{
//the surface that we will be applying an image on
SDL_Surface* ImageSurface = NULL;
//try to initalize SDL
try
{
initSDL();
}
//if an error is caught
catch (string Error)
{
//print out the error
cout << "SDL error occurred! SDL Error: " << Error << endl;
//return an error
return -1;
}
//try loading an image on to the ImageSurface
try
{
loadMedia(ImageSurface, "ImageTest.bmp");
}
//if an error is caught
catch(string Error)
{
//print the error out
cout << "SDL error occurred! SDL Error: " << Error << endl;
//return an error
SDL_Delay(6000);
return -1;
}
//Apply Image surface to the main surface
SDL_BlitSurface(ImageSurface, NULL, Surface, NULL);
//upadte the surface of the main window
SDL_UpdateWindowSurface(Window);
//wait for 2 seconds (2000 miliseconds)
SDL_Delay(10000);
//close SDL
close();
//return
return 0;
}
From SDLBackend.cpp (I will only be posting the code relevant to the image loading process)
void loadMedia(SDL_Surface* surface, string path)
{
cout << "Attempting to load an image!" << endl;
//load the image at path into our surface
surface = SDL_LoadBMP(path.c_str());
//if there was an error in the loading procdure
if(surface == NULL)
{
//make a string to store our error in
string Error = SDL_GetError();
//throw our error
throw Error;
}
cout << "Successfully loaded an image!" << endl;
cout << "Pushing surface into the Surface List" << endl;
//Put the surface in to our list
SurfaceList.push_back(surface);
return;
}
I am compiling using visual studio 2013, and the image ImageTest.bmp is located in the same directory as the vcxproj file.
The problem is in
loadMedia(). The loaded surface is being assigned to a local variable. You'll need to use a reference to pointer,Or a double pointer (maybe preferred, clarifies intent),
Alternately, you could return it or even extract it from
SurfaceList.back().