C # Двойная буферизация? - PullRequest
3 голосов
/ 30 июля 2011

Я использую компилятор COSMOS для написания ОС на C # (для тех, кто не знает, COSMOS преобразует код IL в сборку x86), и я делаю графический интерфейс.
Я делал GUI раньше, но сейчас я пытаюсь создать двойной буфер.
Звучит довольно просто, но вот моя проблема -
Я не могу использовать какие-либо методы из библиотеки System.Drawing или любого другого пространства имен, которое использует p / вызывает. Кроме того, я не могу использовать многомерные массивы (я МОГУ использовать обычные массивы). Итак, мой вопрос, как бы я реализовать двойной буфер?
Я знаю, что это возможно, потому что я знаю кого-то, кто это сделал.

Кроме того, у меня есть только графические функции SetPixel, GetPixel и Clear. Несмотря на то, что я предпочитаю ответ, если кто-нибудь знает хорошую статью о двойной буферизации и т. Д., Скажите, пожалуйста.
PS. Моя ОС в разрешении 320 x 200 LOL

Ответы [ 3 ]

4 голосов
/ 30 июля 2011

Вам нужно будет немного узнать об игре DOS C VGA, это звучит как; -)

См. Двойная буферизация, перелистывание страниц и режим Unchained . Применяются все те же понятия, но не уверен, как они будут переводиться в код C #.

Удачного кодирования.

1 голос
/ 30 июля 2011

Попробуйте проверить, есть ли у вас доступ к System.Drawing.BufferedGraphics .Он реализует методы для этой цели.В противном случае, я боюсь, что вам придется делать это вручную.

Обычно, когда вы рисуете прямо на экране, пользователь видит то, что вы рисуете, в процессе рисования.Это как когда ты просишь Алекса нарисовать тебе яблоко;вы осмотрите его, пока он рисует яблоко ручкой.Теперь, если вы попросите Алекса нарисовать красное яблоко, затем сотрите его, затем нарисуйте синее яблоко, затем сотрите его, затем нарисуйте желтое яблоко и т. Д. Вы будете смотреть на него, пока он стирает его каждый раз.Подумайте об этом так: компьютер быстрый Алекс.Поэтому, если вы попросите нарисовать быструю анимацию прямо на экране, пользователь отметит, что между кадрами анимации что-то происходит: плохое мерцание!

Решением мерцания является двойная буферизация.Буфер - это просто область памяти вне экрана, используемая для рисования.Когда вы используете двойную буферизацию, вместо рисования непосредственно на экран, вы рисуете в задний буфер, расположенный в видеопамяти, а затем копируете весь буфер на экран.

0 голосов
/ 30 июля 2011

Двойная буферизация может быть реализована путем использования массива для построения графика (в отличие от отображения) и перетаскивания массива (после завершения построения графика) на дисплей.

...