Контроль области отображения. Областью отображения приложения, рассматривается, есть окно. Если в полноэкранном режиме выйдем за пределы экрана хотя бы на один пиксел, то изображение просто не будет показано вообще. В DirectX является интерфейс iDirectDrawCiipper (интерфейс отсечения), который может помочь решить проблему выхода за пределы окна. Для создания интерфейса необходимо вызвать метод Createdipper интерфейса IDirectDraw.
Создав экземпляр интерфейса iDirectDrawCiipper, необходимо связать его с окном, выходы за пределы которого нужно отслеживать. Для этого вызываем метод SetHWnd, которому нужно передать два параметра: флаг, который не используется (0), а также идентификатор окна. Теперь связываем первичную поверхность с объектом отсечения. Для этого у интерфейса поверхности является метод setciipper. У него только один параметр - объект отсечения. Задний буфер отсекать не нужно, потому что это сильно повлияет на производительность. В заднем буфере формируем будущее изображение. Во время каждого копирования данных объект отсечения будет проверять области. В виде кода все вышесказанное выглядит следующим образом:
ppiDD-> CreateClipper (0, & ddClipper, 0); ddClipper-> SetHWnd (0, hWnd); primsurf-> SetClipper (ddClipper)
Отражение в Direct3D. Как и в случае с DirectDraw, создания сцены происходит в заднем буфере и только потом осуществляется переключение на передний план. Единственное отличие - в Direct3D можно не заботиться, в каком именно буфере происходит рисования. Основной интерфейс Direct3D - это iDirect3DDevice9. Именно у него есть необходимые для отображения методы. Так, например, для очистки используется метод clear. С помощью clear закрашивается определена поверхность.
Чтобы создана сцена (закрашивание методом clear) отразилась, необходимо вызвать метод Present:
HRESULT Present (CONST RECT * pSourceRect, CONST RECT * pDestRect, HWND hDestWindowOverride, CONST RGNDATA * pDirtyRegion)
Параметры этого метода:
- PSourceRect - область копирования
- PDestRect-область приемника, куда нужно скопировать данные.
- HDestWindowOverride - указатель на окно для отображения сцены; - PDirtyRegion - прямоугольники определяют минимальный набор пикселей, которые должны быть обновлены.