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


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


m_iWidth = ex;

m_iHeight = су;

DDSURFACEDESC sd;

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

sd.dwSize == sizeof(sd);

if (bFullScreen) {

// Создать сложную переключаемую поверхность // с первичным и вторичным буферами sd.dwFlags = DDSD_CAPS

I DDSD_BACKBUFFERCOUNT;

sd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE

I DDSCAPS_FLIP

I DDSCAPS_COMPLEX

I DDSCAPS_3DDEVICE;

sd.dwBackBufferCount = 1;

// Создать поверхности для первичного и вторичного буфера

m_pFront Buffer = new CDDSurface/if ( !m_pFrontBuffer-»Create (this, Ssd) ) { return FALSE;

} ASSERT(m_pFrontBuffer) ;

// Получить указатель на присоединенный вторичный буфер DDSCAPS caps;

:::::^^ Работа с DirectDraw ч!И 289

memset(Scaps, 0, sizeof(caps));

caps.dwCaps = DDSCAPS_BACKBUFFER;

m_pBackBuffer = m_pFrontBuffer-»GetAttachedSurface(&caps) ;

if (!m_pBackBuffer) {

delete m_pFrontBuffer;

m_pFrontBuffer = NULL;

return FALSE;

}

) else { // Оконный режим

// Создать две поверхности для оконного режима — // первичную, используемую совместно с GDI, //и вторичный буфер для вывода изображения.

// Создать поверхность первичного буфера. // Примечание: поскольку первичный буфер является // основной (существующей) поверхностью, // мы не указываем его ширину и высоту. sd.dwFlags = DDSD_CAPS;

sd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;

m_pFrontBuffer = new CDDSurface;

if ( !m_pFrontBuffer-»Create (this, &sd) ) { return FALSE;

}

// Создать поверхность вторичного буфера sd.dwFlags = DDSD_WIDTH

I DDSD_HEIGHT

I DDSD_CAPS;

sd.dwWidth = ex;

sd.dwHeight = cy;

sd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN

I DDSCAPS_3DDEVICE;

m_pBackBuffer = new CDDSurface;

if ( !m_pBackBuffer-»Create(this, &sd)) (

delete m_pFrontBuffer;

m_pFrontBuffer = NULL;

return FALSE;

}

// Создать объект-ограничитель для первичного буфера, // чтобы вывод ограничивался пределами окна m_pClipper = new CDDClipper;

if ( !m_pClipper-»Create(this, hWnd) ) { return FALSE;

} }

/b> ^^' Глава 12. Интерфейс DirectDraw

Хотя многие функции в данном фрагменте относятся к классам SdPlus, я не стану приводить обращения к соответствующим интерфейсам DirectDraw, поскольку в основном роль функции сводится к простой передаче полученных параметров инкапсулированному интерфейсу.




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



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