Экран обновления Graphics.h

Я сделал небольшую программу, которая отображает 3D-куб, который можно масштабировать по любой оси с помощью клавиш со стрелками. Единственная проблема в том, что я использую cleardevice(); для обновления куба (чтобы не было «размазывания» при масштабировании куба). это прекрасно работает, просто каждый раз, когда куб обновляется с помощью этого метода, экран становится черным на долю секунды, что приводит к раздражающему мерцанию. Есть ли лучший способ обновлять экран каждый раз, когда пользователь меняет куб? Я на самом деле исследовал это, но не смог найти ничего подходящего (может быть, я просто плохо исследовал, но я не мог найти ничего для себя)


person MoustacheSpy    schedule 14.03.2016    source источник
comment
То, что вы ищете, это двойная буферизация.   -  person H. Guijt    schedule 15.03.2016


Ответы (1)


есть 2 способа справиться с этим:

  1. Двойная буферизация

    Я не использую BGI, поэтому придерживаюсь их документации. для WinBGIm вы можете использовать

    В старом стиле BGI используйте это:

    int oldv = getvisualpage( );
    int olda = getactivepage( );
    setvisualpage(olda);
    setactivepage(oldv);
    
  2. использовать вертикальную синхронизацию с монитором

    Перед вызовом cleardevice(); необходимо дождаться VSync. В DOS вы можете использовать VGA BIOS или прямой доступ VGA/VESA для получения сигнала. В более поздних версиях OS вам необходимо использовать API gfx или API драйвера, чтобы получить VSync.

    В обоих случаях обратитесь к документации для целевой платформы.

person Spektre    schedule 15.03.2016