Поэтому при формировании динамических изображений используется, как минимум, двойная буферизация, при которой хранящееся в видеопамяти изображение состоит из двух страниц - видимой и активной. В продуктах Borland для MS DOS они назывались ActivePage и VisualPage, в библиотеке DirectX для Windows - BackBuffer и FrontBuffer (PrimarySurface). В то время как на экране отображается видимая страница, новая картинка рисуется в активной, невидимой на экране странице. И только после завершения рисования активная и видимая страницы практически мгновенно меняются местами. В GDI отсутствуют функции создания видимой и активной страниц, функция переключения страниц. Это резко снижает качество динамических изображений и требует применения других, специализированных библиотек. Возможно, причина этого заключается в том, что Windows все же является многооконной системой, а графические адаптеры приспособлены к аппаратному переключению страниц размером в полный экран. Но в действительности это не является реальным ограничением, так как размер видеопамяти современных адаптеров достаточен для размещения в ней двух страниц, а аппаратное ускорение копирования участков видеопамяти позволяет очень быстро переписать часть активной страницы, соответствующую окну, в видимую область видеопамяти. Таким образом, можно считать существенным недостатком GDI то, что он не позволяет явного управления полезным использованием области видеопамяти, находящейся за пределами видимой страницы.
Также следует отметить, что модель колеса построена таким образом, что оно частично выкатывается за правый край окна. Но мы видим, что изображение отсекается по правому краю. То есть контекст памяти хранит в себе область отсечения изображений, а в функциях вывода примитивов находятся операции отсечения невидимой части примитива.
Элементы компьютерной графики
Если мы перекроем окно приложения другим окном, то увидим, как окно потеряет фокус ввода и область заголовка станет серой. Но приложению продолжают приходить сообщения №М_Т1МЕг}, и колесо будет продолжать движение. Также можно увидеть, как активное окно перекрывает изображение колеса (рис. 3.2).