Home > Back-end >  SDL2: Drawing tiles with SDL_RenderFillRect() causes strange flickering/graphical bugs
SDL2: Drawing tiles with SDL_RenderFillRect() causes strange flickering/graphical bugs

Time:08-21

In my game, there is a map (2D array) represented by tiles some of which are walls and each on of them I draw with SDL_RenderFillRect(), but for some reason when moving the camera (the position of each rect is determined by camera offset) I get light lines appearing on the screen (like seams between the tiles maybe) and something like tearing. I don't understand where this would come from, because I first render everything and SDL_RenderPresent() it once. These bugs are most noticeable on Android, perhaps because of the CPU/GPU being slower or something. I did try to enable Vsync/cap FPS, but that didn't help much.

Here is a piece of code where I draw the tiles (the entire source code can be found screenshot

CodePudding user response:

User keltar has provided the answer in the comments. I set g_camera.x and g_camera.y in the callback function that runs in another thread, so its position was changing parallel to drawing the map. What I did is change the camera position in the function that draws the map instead (the main thread)

CodePudding user response:

I'm far from an SDL2 expert, but I think you shouldn't draw it tile by tile. Because this means every tick of the program, SDL2 is drawing your whole map tile by tile which is a lot of function calls.

I think you want to draw to a preliminary texture. See the answer here : Fastest way to render a tiled map with SDL2

  • Related