Search code examples
texturessdl-2

Flickering while drawing multiple SDL_Texture using SDL2


I have set up a SDL2 renderer and I have two textures that I am trying to draw onto the screen. When I do this separately, its working fine. But when I draw both of them together, the texture is flickering. Is it an issue with the back buffer? Is there anything else I need to do to enable the double buffer?

Here's what I'm doing:

    Renderer::m_Renderer = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
    if (Renderer::m_Renderer == nullptr){
        SDL_DestroyWindow(win);
        std::cout << "SDL_CreateRenderer Error: " << SDL_GetError() << std::endl;
        SDL_Quit();
    }

    while (!m_bQuit) {
        m_tCurrentFrameTime = clock();

        // Input
        while (SDL_PollEvent(&m_Event)) {
            switch (m_Event.type) {
                case SDL_QUIT:
                    m_bQuit = true;
                    break;

                default:
                    break;
            }
        }

       // Update

    SDL_RenderCopyEx(m_Renderer, m_tBackgroundTexture, NULL, &m_rRect, m_fRotation, NULL, SDL_FLIP_NONE);
    SDL_RenderPresent(Renderer::getRenderer());

    SDL_RenderCopyEx(m_Renderer, m_tCharacterTexture, NULL, &m_rRect, m_fRotation, NULL, SDL_FLIP_NONE);
    SDL_RenderPresent(m_Renderer);


        // Clear screen
        SDL_RenderClear(m_Renderer);
    }

Solution

  • Render both of the textures then SDL_RenderPresent(), not a SDL_RenderPresent() per.

    So:

    SDL_RenderCopyEx(m_Renderer, m_tBackgroundTexture, NULL, &m_rRect, m_fRotation, NULL, SDL_FLIP_NONE);
    SDL_RenderCopyEx(m_Renderer, m_tCharacterTexture, NULL, &m_rRect, m_fRotation, NULL, SDL_FLIP_NONE);
    SDL_RenderPresent(m_Renderer);
    
    // Clear screen
    SDL_RenderClear(m_Renderer);