【问题标题】:Flickering while drawing multiple SDL_Texture using SDL2使用 SDL2 绘制多个 SDL_Texture 时闪烁
【发布时间】:2017-01-07 06:43:55
【问题描述】:

我已经设置了一个 SDL2 渲染器,并且我尝试在屏幕上绘制两个纹理。当我单独执行此操作时,它工作正常。但是当我把它们都画在一起时,纹理在闪烁。是后台缓冲区的问题吗?我还需要做些什么来启用双缓冲吗?

这就是我正在做的事情:

    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);
    }

【问题讨论】:

    标签: textures sdl-2


    【解决方案1】:

    渲染两个纹理然后SDL_RenderPresent(),而不是SDL_RenderPresent() per。

    所以:

    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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-22
      • 2011-03-10
      相关资源
      最近更新 更多