Поверхность с возможностью флиппинга - это участок памяти, который может передаваться между главной поверхностью и задним буфером. Обычно такая конструкция называется flipping chain, или цепочка флиппинга. Часто передний буфер является видимой главной поверхностью, но он совсем не обязан ею быть. Когда вы вызываете метод DirectDrawSurface7.Flip, запрашивая операцию флиппинга, происходит обмен указателями на память поверхностей между главной поверхностью и задним буфером. Флиппинг выполняется не путем копирования памяти одной поверхности на другую, а всего-лишь обменом адресов начала участка памяти. Есть исключения: когда DirectDraw эмулирует флиппинг, он копирует участки памяти. DirectDraw эмулирует флиппинг, когда задний буфер не влазит в видеопамять или когда аппаратура не поддерживает DirectDraw. Когда цепь флиппинга содержит главную поверхность и несколько задних буферов, обмен указателями происходит в циклическом порядке, как показано на картинке: ![]() На другие поверхности, прикрепленные к объекту DirectDraw, но не являющиеся частью цепи флиппинга, не просходит никакого действия при вызове метода Flip. Запомните, DirectDraw производит флиппинг поверхностей меняя указатели памяти внутри объектов DirectDraw. Он не меняет сами объекты! Это означает, что совершая блиттинг на задний буфер, вы всегда переводите биты на один и тот же объект. Это тот же задний буфер, что и был, когда вы создавали цепь флиппинга. Когда работаете с видимыми поверхностями, такими, как главная поверхность в цепи флиппинга или видимая оверлейная поверхность, метод Flip является асинхронным, если вы не включите в его вызов флаг DDFLIP_WAIT. На этих видимых поверхностях метод Flip может вернуться еще до того, как произойдет сам флиппинг. Это происходит потому, что оборудование выполняет флиппинг, пока идет обновление экрана электронной пушкой монитора. Пока идет флиппинг, задний буфер не может быть изменет операциями Lock, Blt, BltFast, GetDC. Если вы попытаетесь вызвать эти методы, они вернут код ошибки DDERR_WASSTILLDRAWING. Однако, если вы используете схему тройного буферинга, самый задний буфер остается свободным от работы и вы можете рисовать на нем уже во время выполнения флиппинга. |