Jump to content
  • Advertisement
Sign in to follow this  
Swiss Cheese

SDL2 Preparing Background with Tiles Surface is empty

This topic is 662 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hello Guys I need help.

I want to prepare a Surface with Background tiles once. Because I dont want to write all the tiles on every gameloop.  It would waste cpu.

My Idea is, to create a Surface with static tiles and copying this surface inside the gameloop to the texture memory and then paint all the additional graphics and sprites.

In my test I got a black screen without the tile background. No Compile error.

What I'm doing wrong?

#include "SDL2/SDL.h"
#include "SDL2/SDL_timer.h"
#include "SDL2/SDL_image.h"
#include <stdio.h>
#include <stdbool.h>
gcc bgtiles_test.c -o bgtiles_test.exe -lmingw32 -lSDL2main -lSDL2 -lSDL2_image
int main( int argc, char *args[] )
	SDL_Window *win = SDL_CreateWindow("B_Game 0.001",
	//Uint32 render_flags = SDL_RENDERER_ACCELERATED;
	SDL_Renderer *rend = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED);
	SDL_Surface *bg_tile = SDL_LoadBMP("assets/tiles/water.bmp");
	SDL_Surface *bg_surface = NULL;
	SDL_Rect size_bg_tile = {0,0,64,64};
	SDL_Rect coord = {0, 0, 64, 64};
	const Uint8 *keys = SDL_GetKeyboardState(NULL);
	SDL_Event e;
	bool quit = false;
	int x = 0;
	int y = 0;
	//fill surface 1024x1024 with background tiles 64x64
			coord.x = x;
			coord.y = y;
			//blitting bg tiles into bg_surface
			SDL_BlitSurface(bg_tile, &size_bg_tile, bg_surface, &coord);
	//copy bg_surface to gfx memory
	SDL_Texture *text_bg_surface = SDL_CreateTextureFromSurface(rend, bg_surface);
		while (SDL_PollEvent(&e)){
			if (keys[SDL_SCANCODE_A]){
				quit = true;
		SDL_RenderCopy(rend, text_bg_surface, NULL, NULL);
		add additional graphics
	return 0;

Share this post

Link to post
Share on other sites

SDL_Surface *bg_surface = NULL;

You didn't allocate `bg_surface`. It's null through entire program, and you didn't check error codes from SDL_BlitSurface() and the rest.

Share this post

Link to post
Share on other sites

Thank you very much.

I wrote this line and it works.

SDL_Surface *bg_surface = SDL_CreateRGBSurface(0,1024,1024,32,0,0,0,0);

I do error handling now. It was only a test. :D

Share this post

Link to post
Share on other sites
Especially with tests, check everything, and make failures loud. It costs a few minutes, but it sometimes saves you hours to days of fruitless searching at the wrong place

Share this post

Link to post
Share on other sites
Sign in to follow this  

  • Advertisement

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!