Direct2D использует обратный буфер? - PullRequest
2 голосов
/ 20 июня 2011

Чтение http://blogs.msdn.com/b/directx/archive/2009/09/29/comparing-direct2d-and-gdi.aspx:

Модель презентации

Когда Windows была впервые разработана, было недостаточно памяти для того, чтобы каждое окно могло быть сохранено в своем собственном растровом изображении.В результате GDI всегда визуализируется логически непосредственно на экране с применением различных областей отсечения, чтобы гарантировать, что он не будет отображаться за пределами своего окна.В контракте Direct2D следует модели, в которой приложение рендерится в резервный буфер, и результат атомарно «переворачивается», когда приложение завершает рисование.Это позволяет Direct2D обрабатывать сценарии анимации гораздо более плавно, чем это делает GDI.

Автор говорит, что Direct2D использует обратный буфер и, как я полагаю, под "перевернутым" он подразумевал цепочку обмена.Я создал простую демонстрацию, которая рисует прямоугольник в случайном месте щелчком мыши.Но предыдущие прямоугольники не очищаются, поэтому кажется, что он рисуется непосредственно на экране и не использует никакого заднего буфера.

Ответы [ 3 ]

4 голосов
/ 11 февраля 2012

Когда вы инициализируете RenderTarget для ваших операций Direct2D, вы можете указать во втором параметре опцию D2D1_PRESENT_OPTIONS.

Я думаю, что вас смущает D2D1_PRESENT_OPTIONS_RETAIN_CONTENTS и тот факт, что буфер не обменивается, а копируется.

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

Direct2D действительно использует обратный буфер.

Возможно, вы забыли очистить свою цель рендеринга, которая является обратным буфером, сразу после вызова begindraw, и поэтому предыдущие рисования остались там?

1 голос
/ 20 июня 2011

Это не опровергает существование обратных буферов, это только означает, что резервный буфер не очищается между перерисовками.Правильное наблюдение, неправильный вывод!

Если вы увеличите количество обратных буферов в цепочке, вы начнете замечать мерцающие прямоугольники при продолжении щелчка, поэтому вы всегда должны очищать свой буферный буфер между перерисовками.

...