ПРОГРАМИРУЕМ 3D ГРАФИКУ ИСПОЛЬЗУЯ DirectX

каркасные дома

Интерфейс DirectDraw - часть 17


Производительность GDI при выводе текста оказалась хорошей, и потому в следующем тесте я решил определить, насколько быстро GDI может рисовать на поверхности.

Тестирование GDI при работе с графикой

Чтобы проверить производительность GDI при работе с графикой, я внес небольшие изменения в приведенную выше функцию и заставил ее рисовать средствами GDI прямоугольник, который перемещается внутри окна. Для этого мне при-

Работа с DirectDraw ^Щ 293

шлось добавить в функцию CTestWnd::TestGDIGfx приведенную ниже строку и в каждом цикле отслеживать положение прямоугольника в окне:

// Нарисовать прямоугольник pdc-»Rectangle (х, у, х+сх, у+су);

Вы можете самостоятельно протестировать интерфейс GDI и посмотреть, как он справляется с рисованием прямоугольников.

Тестирование DirectDraw при работе со спрайтами

Этот тест значительно интереснее предыдущих. Я хотел воспользоваться поверхностью в видеопамяти для создания спрайта, задать прозрачные области с помощью цветового ключа и затем посмотреть, насколько быстро можно будет двигать спрайт в окне. За его основу я взял тест по выводу текста и добавил к нему два дополнительных фрагмента. Первый из них создает спрайт, а второй в цикле выводит спрайт во вторичный буфер. В течение некоторого времени я мучительно размышлял над тем, как же мне создать спрайт, потом махнул рукой и воспользовался функциями GDI:

void CTestWnd::TestDDSprite() {

DDSURFACEDESC sd;

memset(&sd, 0, sizeof(sd));

sd.dwSize = sizeof(sd);

sd.dwFlags = DDSD_WIDTH

I DDSD_HEIGHT

I DDSD_CAPS;

sd.dwWidth = ex;

sd.dwHeight = cy;

sd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;

CDDSurface sprite;

BOOL b = sprite.Create(m_pDD, &sd) ;

ASSERT(b) ;

// Получить DC для поверхности спрайта.

// Нарисовать спрайт в виде красного круга на черном

фоне

CDC* pdc = sprite.GetDC();

ASSERT(pdc) ;

pdc-»PatBlt(0, 0, ex, cy, BLACKNESS);

CBrush br;

br.CreateSolidBrush(RGB(255, 0, 0) ) ;

CBrush* pbrOld = pdc-»SelectObject (Sbr) ;

pdc-»Ellipse (0, 0, ex, cy) ;




Начало  Назад  Вперед



Книжный магазин