DDSCAPS_MIPMAP | DDSCAPS_COMPLEX;
ddsd.dwWidth = 256UL;
ddsd.dwHeight = 256UL;
ddres = lpDD->CreateSurface(&ddsd, &lpDDMipMap);
if
(FAILED(ddres))
...
Вы можете опускать число уровней mipmaps, тогда IDirectDraw:: CreateSurface метод создаст цепочку поверхностей, каждый мощностью в два раза меньшей чем предыдущая, до самого маленького возможного размера. Также возможно опустить ширину и высоту, тогда IDirectDraw:: CreateSurface создаст число уровней с минимальным размером уровня 1ґ1.
Цепочка mipmap поверхностей может быть пересечена, используя IDirectDrawSurface:: GetAttachedSurface метод, определяя DDSCAPS_MIPMAP и DDSCAPS_TEXTURE флажки возможности. Следующий пример пересекает mipmap цепочку от самого высокого до самых низких разрешающих способностей.
LPDIRECTDRAWSURFACE lpDDLevel, lpDDNextLevel;
DDSCAPS ddsCaps;
lpDDLevel = lpDDMipMap;
lpDDLevel->AddRef();
ddsCaps.dwCaps = DDSCAPS_TEXTURE | DDSCAPS_MIPMAP;
ddres = DD_OK;
while
(ddres == DD_OK)
{
// Обрабатывают этот уровень
...
ddres = lpDDLevel->GetAttachedSurface(
&ddsCaps, &lpDDNextLevel);
lpDDLevel->Release();
lpDDLevel = lpDDNextLevel;
}
if
((ddres != DD_OK) && (ddres != DDERR_NOTFOUND))
...
Вы можете также формировать переключающиеся цепочки mipmaps. В этом сценарии, каждый уровень mipmap имеет связанную цепочку обратных буферных поверхностей текстуры. Каждая обратная буферная текстура присоединена к одному уровню mipmap. Только передний буфер в цепочке имеет набор флажков DDSCAPS_MIPMAP; другие - просто текстура(DDSCAPS_TEXTURE). Уровень mipmap может иметь две присоединенных карты текстуры, одна с набором DDSCAPS_MIPMAP, которая является следующим уровнем в mipmap цепочке, и одна с набором флажков DDSCAPS_BACKBUFFER, которая является обратным буфером переключающейся цепочки. Все поверхности в каждой переключающейся цепочке должны иметь тот же самый размер.
Не возможно формировать такое поверхностное расположение с одиночным обращением к IDirectDraw:: CreateSurface. Чтобы создавать переключаемые mipmap, или формируйте комплекс mipmap цепочек, и вручную присоедините к обратному буферу методом IDirectDrawSurface:: AddAttachedSurface, или создайте последовательность переключающихсяe цепочек, и формируйте mipmap с IDirectDrawSurface:: AddAttachedSurface.