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

Электрик сделает монтаж электрики на даче в Кемерове и пригороде. Русский электрик. | Заказать устрановка металлоконструкций в Новосибирске и пригороде. Металлоконструкции на заказ. | Заказать монтаж электропроводки дома в Прокопьевске и пригороде. Русский электрик.

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


dds.ddpfPixelFormat.dwRGBBitCount) m_cbModes.AddString(buf) ;

}

Как видно из листинга, мы определяем режимы и получаем описание поверхности для каждого из них. Затем для каждого режима конструируется строка, которая заносится в список. Код объекта CDirectDraw выглядит несколько сложнее, поскольку для нумерации режимов в DirectDraw используются функции косвенного вызова. Я реализовал функции CDirectDraw::GetNumModes и CDirectDraw::GetModelnfo с помощью одной функции косвенного вызова, расположенной в файле 3dDirDrw.cpp:

// Информационная структура для нумерации режимов typedef struct _EnumModeInfo {

int iModeCount;

int iMode;

DDSURFACEDESC ddSurf;

} EnumModeInfo;

// Функция косвенного вызова для нумерации // режимов устройства

static HRESULT FAR PASCAL EnumModesFn(LPDDSURFACEDESC psd, LPVOID pArg)

1

EnumModeInfo* pinfo = (EnumModeInfo*) pArg;

ASSERT(pinfo) ;

// Проверить правильность режима if (p!nfo-»iMode == p!nfo-»iModeCount) {

p!nfo-»ddSurf = *psd;

return DDENuMRET_CANCEL; // Прекратить нумерацию

}

p!nfo-»iModeCount++;

return DDENUMRET_OK;

}

Работа с DirectDraw ТЙВ 285

// Определить количество поддерживаемых экранных режимов int CDirectDraw::GetNumModes()

{

ASSERT(m_pIDD) ;

EnumModeInfo mi;

mi.iModeCount = 0;

mi.iMode = -1;

m_hr = m_pIDD-»EnumDisplayModes (0, NULL, Smi, EnumModesFn) ;

ASSERT(SUCCEEDED(m_hr)) ;

return mi.iModeCount;

}

// Получить данные для заданного режима BOOL CDirectDraw::GetModeInfo(int iMode,

DDSURFACEDESC* pDesc)

{

int iModes = GetNumModes();

if (iMode »= iModes) return FALSE;

ASSERT(m_pIDD) ;

EnumModeInfo mi;

mi. iModeCount =0;

mi.iMode = iMode;

m hr = m pIDD-»EnumDisplayModes (0, NULL, &mi, EnumModesFn);

ASSERT(SUCCEEDED(m_hr)) ;

*pDesc = mi.ddSurf;

return TRUE;

}

Структура EnumModeInfo управляет функцией нумерации и служит для возвращения результата. При подсчете количества режимов возвращаемые данные не используются. При получении информации по конкретному режиму функция нумерации вызывается до тех пор, пока номер режима, возвращаемый интерфейсом DirectDraw, не совпадет с заданным.




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



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