Переключение страниц
Как правило, в графических системах используются полигональные модели объектов в декартовых координатах. В таких моделях все криволинейные поверхности аппроксимируются плоскими гранями, а геометрический объект представляется совокупностью многогранников. Задача графической системы состоит в том, чтобы преобразовать элементы сцены из полигонального представления в растровое и поместить растр в видеобуфер.
Если объекты заносить в видеобуфер по мере их поочередной растеризации, то оператор будет видеть процесс стирания объекта и рисования его в новом положении вместо мгновенной смены на экране старого и нового кадров. Устранение этого недостатка достигается двойной буферизацией, когда в видеобуфере размещаются два образа экрана. Предположим, один образ экрана начинается с адреса 0, а второй - с адреса 1 Pi ch х RY и в регистр начального адреса занесено нулевое значение. Очевидно, что при этом на экране будет виден первый кадр. Если программист занесет в регистр начального адреса число 1 Pi ch х RY, то очередной кадровый синхроимпульс перенесет его в регистр текущего адреса и в следующем цикле развертки на экран будет выводиться уже второй кадр. Обычно программисту не требуется знать, через какие порты заносить информацию в регистр начального адреса и вычислять зависящее от графического режима смещение кадра от начала видеобуфера. В состав графических библиотек для этого включают специальные функции. Так, в Borland С для DOS применялись функции SetVi suai Page( ) и SetActi vePage( ), в DirectX - функция Fl i p( ) объекта Surface или функция Présente ) интерфейса Di rect3DDevice9, a в OpenGL - SwapBuffers( ). Нужно помнить, что, когда бы программист ни занес в адаптер новый начальный адрес, данные начнут читаться адаптером из области памяти, отведенной второму кадру, только после начала нового цикла вертикальной развертки.
Если смена страниц выполняется при помощи аппаратного переключения, то содержимое активной страницы после переключения изменится и в ней окажется не последний нарисованный, а предыдущий кадр, который был виден на экране до переключения. При смене страниц копированием активная страница и видимая страница не изменяют своих адресов. После переключения изменяется содержимое буфера, отображаемого на экране, а содержимое активной страницы не изменяется. Это позволяет формировать новый кадр на основе старого, обновляя только часть изображения. Физически способ переключения определяется режимом отображения. В полноэкранном режиме возможно аппаратное переключение, а в оконном режиме данные копируются из активной страницы в видимую. Но при инициализации DirectX кроме задания режима можно при помощи констант D3DSWAPEFFECTC0PY и D3DSWAPEFFECTJL IP задать эффект переключения. При использовании D3DSWAPEFFECT_C0PY независимо от физической организации смены страниц переключение должно выглядеть как результат блиттинга. Образ, сформирован-