Суровая правда жизни о Direct3D
Спецвыпуск Хакер, номер #004, стр. 004-098-5
Листинг №4 - Main.cpp, инициализация серфайсов.
hr = lpDD->SetCooperativeLevel(hWnd , DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN | DDSCL_ALLOWREBOOT);
//Важный момент. Устанавливаем параметры DirectDraw'а:
//Эксклюзивный полноэкранный режим
//Разрешить комбинацию Ctrl+Alt+Del (Если вдруг повиснет)
if(FAILED(hr))
return hr;
hr = lpDD->SetDisplayMode(1280, 1024, 16, 0, 0); //Режим экрана 1280х1024, глубина цвета 16 бит
if(FAILED(hr))
return hr;
//Создаем "поверхности" экрана и буфера
DDSURFACEDESC2 ddsd2;
ZeroMemory(&ddsd2, sizeof(DDSURFACEDESC2));
ddsd2.dwSize = sizeof(ddsd2);
ddsd2.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT; //Есть внеэкранные буферы, есть доп. параметры
ddsd2.ddsCaps.dwCaps = DDSCAPS_COMPLEX | DDSCAPS_FLIP | DDSCAPS_PRIMARYSURFACE | DDSCAPS_3DDEVICE;
//Поверхность не одна в цепочке (двойная буферизация), разрешаем метод flip
//Это - экранная главная поверхность, на ней рисует Direct3D устройство
ddsd2.dwBackBufferCount = 1; // 1 внеэкранный буфер
hr = lpDD->CreateSurface(&ddsd2, &lpM, NULL); //Создание поверхности
if(FAILED(hr))
return hr;
//СОздаем внеэкранный буфер
DDSCAPS2 ddscaps = { DDSCAPS_BACKBUFFER | DDSCAPS_3DDEVICE | DDSCAPS_FLIP, 0, 0, 0 };
hr = lpM->GetAttachedSurface(&ddscaps,
&lpBB); //Подключаем к главной поверхности
if(FAILED(hr))
return hr;
Конец листинга 4.
Здесь самое место (и нигде более) создать D3D девайс. Делается это методом CreateDevice интерфейса IDirect3D7, первым параметром которого является гид создаваемого девайса, он может быть одним из указанных: IID_IDirect3DTnLHalDevice, IID_IDirect3DHALDevice, IID_IDirect3DRGBDevice (первый работает, если на компе стоит новый девайс, поддерживающий все 3D фичи. Второй - если аксель держит только часть возможностей. Третий - если акселя принципиально нет). Так как я опять же не знаю, какой у тебя девайс, тут придется перепробовать все: от TnLHal до RGB. Вторым параметром - серфайса, на которую мы будем рендерить (оной будет внеэкранный буфер - lpBB). Третьим - указатель на интерфейс создаваемого девайса.