本文介绍了使用SDL2绘制多个SDL_Texture时闪烁的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经设置了一个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);
    }

推荐答案

渲染两个纹理ThenSDL_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);

这篇关于使用SDL2绘制多个SDL_Texture时闪烁的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

05-27 11:19