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


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


Поскольку в окне этого приложения нет ничего, кроме красного круга, вам придется самостоятельно запустить тест и посмотреть на скорость работы. Думаю, она произведет на вас впечатление.

Тестирование прямого доступа к пикселям

Я едва не отказался от этого теста. Когда в течение целого дня мой компьютер «зависал» через каждые пять минут, я возненавидел DirectDraw и решил, что в дальнейшем буду работать с графикой только через GDI. Все это время я пытался заблокировать буфер, чтобы получить возможность писать в него. Вместе с буфером почему-то блокировался и компьютер, и мне приходилось перегружаться. Намучившись, я лег спать, и в лучших нердовских традициях решение пришло во сне. Чтобы моя программа заработала, из нее нужно было убрать всего один символ. Привожу старую и новую версию функции CDDSurface::Unlock из файла SdDirDraw.cpp, которая причинила мне столько огорчений:

void CDDSurface::Unlock() (

if (!m_SurfDesc.IpSurface) return; // Поверхность

// не заблокирована

m_hr = m_pISurf-»Unlock(&m_Surf Desc. IpSurface) ;

ASSERT(SUCCEEDED(m_hr)) ;

m_SurfDesc.IpSurface = NULL;

}

void CDDSurface::Unlock () (

if (!m_SurfDesc.IpSurface) return; // Поверхность

// не заблокирована

m_hr != m_pISurf-»Unlock(m SurfDesc.IpSurface);

ASSERT(SUCCEEDED(m_hr)) ;

m_SurfDesc.IpSurface == NULL;

}

Удалось ли вам найти отличие? Эти указатели так похожи друг на друга — до тех пор, пока вы не попытаетесь их использовать!

Хорошо запомнив полученный урок, я дописал код для тестирования прямого доступа к пикселям. Он стирает содержимое вторичного буфера, выводит в него

29А SSSi' Глава 17 Hu-rorvheui- Diror-tnraiiu

строку с количеством кадров в секунду и рисует горизонтальные цветные линии посредством прямого доступа к пикселям.

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




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



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