Quantcast
Channel: Programming Forums
Viewing all articles
Browse latest Browse all 51036

Displaying a bitmap with SDL

$
0
0
Hello,
I am new to C++ and have recently been following stayscrisp's Beginning SDL tutorials and tried a couple of others. I have spent hours trying to figure out why the images that I am trying to display always come up as white spaces.
I have tried placing the bitmap file to where my main is, also adding it as a resource to visual studio - without success. Here is my code:

//Game.h
#ifndef  _GAME_H_
#define _GAME_H_

#include <SDL.h>
#include "SDL_Graphics.h"

class Game
{
	   public:
				
		      
			  Game();

			  bool Running() {return m_bRunning;}
			  void Quit() { m_bRunning = false;}

			  void Init(const char* title, int width, int height, int bpp, bool fullscreen);
			  
			  void HandleEvents(Game* game);
			 
			   
			  void Update();
			   
			  void Draw();

			  void Clean();

	   private:
			   
			   bool m_bRunning;
			   SDL_Surface* m_pScreen;
			   bool m_bFullscreen;			 
			   SDL_Surface* testSprite;
};

#endif

//Game.cpp
#include "Game.h"

// constructor
Game::Game()
{
  
}

void Game::Init(const char* title, int width, int height,
				int bpp, bool fullscreen)
{
	int flags = 0;
	//initialize SDL
	SDL_Init(SDL_INIT_EVERYTHING);


	SDL_WM_SetCaption(title, title);

	if(fullscreen) {
		flags = SDL_FULLSCREEN;
	}


	m_pScreen = SDL_SetVideoMode(width, height, bpp, flags);

	m_bFullscreen = fullscreen;

	m_bRunning = true;


	printf("Game Initialised Successfully\n");
	// TEST GRAPHICS INIT
	testSprite = NULL;
	testSprite = SDL_Graphics::Load("testimg.bmp");
	}

void Game::HandleEvents(Game* game)
{ 
	SDL_Event event;
			  if(SDL_PollEvent(&event)) {
				  switch (event.type) {
					 case SDL_QUIT:
						  game->Quit();
						  break;

					  case SDL_KEYDOWN:
						  switch(event.key.keysym.sym) {
						  case SDLK_ESCAPE:
							  game->Quit();
						  }
						  break;
				  }
			  }
}

void Game::Update()
{
}

void Game::Draw()
{
		
		SDL_Graphics::Draw(m_pScreen, testSprite, 300, 300, 0, 0, 50,50);
		SDL_Flip(m_pScreen);
}

void Game::Clean()
{

}

int main(int argc, char* argv[])
{
	 Game game;
	  
	 game.Init("test",640,480,32,false);

	 while(game.Running())
	 {
		 game.HandleEvents(&game);
		 game.Update();
		 game.Draw();
	 }
		game.Clean();

		return 0;
}

//SDL_Graphics.h
#ifndef _SDL_GRAPHICS_H_
#define _SDL_GRAPHICS_H_

#include <SDL.h>

class SDL_Graphics
{
	public:
		   
			 SDL_Graphics();
			 
			 static SDL_Surface* Load(char* File);
			  
			 static   bool   Draw(SDL_Surface* dest, SDL_Surface* src, int x, int y);
			  
			  static bool   Draw(SDL_Surface* dest, SDL_Surface* src, int x, int y, int x2,  
			  int y2, int width, int height);
};


#endif

//SDL_Graphics.cpp
#include "SDL_Graphics.h"



 SDL_Surface* SDL_Graphics::Load(char* File)
{
	SDL_Surface* temp = NULL;
	SDL_Surface* optimized = NULL;

	if((temp = SDL_LoadBMP(File)) == NULL)
	{
		  return NULL;
	}
	
	optimized = SDL_DisplayFormatAlpha(temp);
	SDL_FreeSurface(temp);

	return optimized;
}


bool SDL_Graphics::Draw(SDL_Surface* dest, SDL_Surface* src, int x, int y)
{
	  if(dest == NULL || src == NULL)
	   {
				  return false;
	   }

	   SDL_Rect  destR;

	   destR.x = x;
	   destR.y = y;

	   SDL_BlitSurface(src, NULL, dest, &destR);
	   
		return true;
}



bool SDL_Graphics::Draw(SDL_Surface* dest, SDL_Surface* src, int x, int y, int x2, int y2, int width, int height) {
	if(dest == NULL || src == NULL) {
		return false;
	}

	SDL_Rect destR;

	destR.x = x;
	destR.y = y;

	SDL_Rect srcR;

	srcR.x = x2;
	srcR.y = y2;
	srcR.w = width;
	srcR.h = height;

	SDL_BlitSurface(src, &srcR, dest, &destR);

	return true;
}



Viewing all articles
Browse latest Browse all 51036

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>