Что такое поверхности

"Теория DirectDraw"

<Уголок DirectX>


Поверхность (буфер) DirectDraw представляет собой линейную область памяти. Поверхность обычно находится в памяти видеокарты, но также поверхность может существовать и в системной памяти. Так как при создании поверхности, мы не говорим DirectDraw, в какую память надо определить нашу поверхность, он сам решает это, исходя из того, где к ней будет доступ лучше всего. Не правда ли очень удобно? Это отстраняет нас от многих проблем. Объект DirectDrawSurface может использовать все преимущества графического процессора видеокарты, не только выполняя быстрее обычные операции, но и работая в параллели с главным CPU.

Вы создаете поверхности с помощью метода DirectDraw7.CreateSurface Вы можете создавать, как одиночные поверхности, так и комплексные поверхности, а также поверхности для трехмерного моделирования.

Интерфейс DirectDrawSurface7 дает вам непрямой доступ к видеопамяти, через методы переноса битов (blitting), например DirectDrawSurface7.BltFast Объект поверхности может давать свой DC, так что вы сможете применять обычные GDI функции. И наконец, вы можете использовать методы для прямого доступа к видеопамяти. Например, вы можете применить метод DirectDrawSurface7.Lock, чтобы заблокировать видеопамять и получить адрес памяти, соответствующий некой поверхности. Адреса могут указывать на фидимый буфер кадра (главную поверхность) или невидимый буфер (оффскринные или оверлейные поверхности). Невидимые буфера обычно находятся в видеопамяти, но могут быть созданы в системной памяти, если существуют аппаратные ограничения, или если DirectDraw выполняет программную эмуляцию.

Но и это еще не все. DirectDrawSurface7 дает другие методы, с помощью которых вы можете получать или задавать палитры или работать со специфичными типами поверхностей, вроде flipping-chain или оверлеями (overlays).

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


>>> Реклама <<<