Jump to content

  • Log In with Google      Sign In   
  • Create Account


CAR145

Member Since 30 May 2012
Offline Last Active Jun 06 2012 07:03 PM

Topics I've Started

Building an image from a TMX map

30 May 2012 - 12:08 PM

Im trying to display a TMX map image using OpenGL. I have the tile numbers for each tile in a 2D array and trying to draw the map image to an SDL_Surface* which i then convert into an OpenGL texture to render. I don't get any errors when building the image but when I draw it its just black (its not the convertion function, i use it to create several other portions of the game). The map is 60 tiles wide, tiles are 32x32 and the tilesheet is 512x512.

Can anyone tell me what I'm doing wrong?



The build image code:
void Map::buildImage(void)
{
  std::cout << "Building Map Image...\n";

  SDL_Surface* mapImg = SDL_CreateRGBSurface(SDL_SWSURFACE, 60 * 32, 60 * 32, 32, 0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000); // Map Image Surface
  std::string tilesetfile = "Levels/" + tilesets[0]->filename;
  SDL_Surface* tileImg = IMG_Load(tilesetfile.c_str()); // Load TileSet
  SDL_Rect tileRect; // TileSet Crop Rect
  SDL_Rect mapRect; // Map Destination Rect

  std::cout << "\tBuilding Image...\n";

  /* Build Map Image */
  for(int row = 0; row < 60; row++) // Rows
  {
   for(int col = 0; col < 60; col++) // Columns
   {
	int id = mapData[row][col]; // Tile ID To Put On Map
	int tileCol;
	int tileRow;
	id--; 								   // So Tile 1 in array is 0 on TileSheet

	tileCol = (id % 16); // Get TileSheet Column Position
	tileRow = id / 16; // Get TileSheet Row Position
	tileRect.x = 32 * tileCol;
	tileRect.y = 32 * tileRow;
	tileRect.w = 32;
	tileRect.h = 32;

	mapRect.x = col * 32;
	mapRect.y = row * 32;
	mapRect.w = 32;
	mapRect.h = 32;

	if(SDL_BlitSurface(tileImg, &tileRect, mapImg, &mapRect) != 0)
	{
	  std::cout << "Failed To Blit Map: " << SDL_GetError() << '\n';
	}
   }
  }

  image = graphics.convert(mapImg); // Convrt SDL_Surface* to GLuint
  std::cout << "Map Image Built!\n";
}

PARTNERS