簡體   English   中英

SDL2渲染(閃爍)

[英]SDL2 Rendering (flickering)

我在使用SDL2渲染紋理時遇到問題。 在我的程序中,有一堆像素在屏幕上移動,但是它們明顯閃爍。 這是我的代碼:

Source.cpp

 frameStart = SDL_GetTicks();

    screen.update();

    // Makes the screen black
    for (int x = 0; x < Screen::SCREEN_WIDTH; x++)
    {
        for (int y = 0; y < Screen::SCREEN_HEIGHT; y++) {
            screen.setPixel(x, y, 0, 0, 0);
        }
    }

    // Draw + Update people (Code should be separated and moved)
    for (Person &p : people) {
        if (p.isAlive == true) {
            p.Update(p);
            cout << p.x << ", " << p.y << endl;
            screen.setPixel(p.x, p.y, 255, 0, 0);
        }
        else {
            screen.setPixel(p.x, p.y, 0, 0, 0);
        }
    }



    // Manage events
    if (screen.processEvents() == false) {
        break;
    }

    frameTime = SDL_GetTicks() - frameStart;

    if (frameDelay > frameTime) {
        SDL_Delay(frameDelay - frameTime);
    }
}

Screen.update點在這里:

 void Screen::update() {

    SDL_UpdateTexture(m_texture, NULL, m_buffer, SCREEN_WIDTH * sizeof(Uint32) );       
    SDL_RenderCopy(m_renderer, m_texture, NULL, NULL);
    SDL_RenderPresent(m_renderer);
    SDL_RenderClear(m_renderer);
}

我的渲染器和紋理設置如下:

 m_renderer = SDL_CreateRenderer(m_window, -1, SDL_RENDERER_PRESENTVSYNC);
    m_texture = SDL_CreateTexture(m_renderer, SDL_PIXELFORMAT_RGBA8888,
        SDL_TEXTUREACCESS_STATIC, SCREEN_WIDTH, SCREEN_HEIGHT);

我把渲染器和紋理的標志都弄得亂七八糟,但是還沒有找到阻止閃爍的解決方案。 任何幫助將非常感激。

您應遵循的順序是:

  • 明確
  • 渲染
  • 呈現禮物
  • 等待
  • 重復。

基本上,您正在做的是正確渲染和清除路徑。 如果您這樣做,可能會很好

frameStart = SDL_GetTicks();

SDL_RenderClear(m_renderer);

/* Do you rendering */

/*Manage your events*/


SDL_RenderPresent(m_renderer);


frameTime = SDL_GetTicks() - frameStart;

if (frameDelay > frameTime) {
    SDL_Delay(frameDelay - frameTime);
}

同樣關於渲染像素,清除紋理時,應使用速度更快的內存集。 但是你的方式仍然有效

memset(pixels,0,h*pitch);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM