Platform SDK: DirectX

ミップマップの生成

デフォルトで、Direct3DX ユーティリティ ライブラリにより提供されているテクスチャ作成メソッドは、ラスタライザがミップマップをサポートしている限りテクスチャのミップマップを生成する。ただし、D3DX_TEXTURE_NOMIPMAP フラグを使用すればミップマップの生成を無効にできる。

次のコードは、D3DX_TEXTURE_NOMIPMAP フラグを設定して、ミップマップをサポートしないテクスチャを作成する。

    DWORD flags = D3DX_TEXTURE_NOMIPMAP;
    pFlags = &flags;
 
    hr = D3DXCreateTexture(
            pd3dDevice,         // 渡される d3ddevice 
            pFlags,             // オプションのロード
            pWidth,             // 幅
            pHeight,            // 高さ
            pTmpPixelFormat,    // 目的のピクセル フォーマット
            NULL,               // パレット
            &pSurf,             // 返されるサーフェス
            pNumMipMaps);       // ミップマップ レベル数

次のコードは、作成されたテクスチャに対し、ミップマップがサポートされているかどうかを問い合わせる。

    DDCAPS ddcaps;
    ZeroMemory(&ddcaps, sizeof(ddcaps));
    ddcaps.dwSize = sizeof(ddcaps);
 
    hr = pDD->GetCaps(&ddcaps, NULL);
    if (SUCCEEDED(hr))
    {
    // ミップマップがサポートされているかどうかをチェックする。
        if (!(*pFlags & D3DX_TEXTURE_NOMIPMAP))
        {
            if (!(ddcaps.ddsCaps.dwCaps & DDSCAPS_MIPMAP))
            {
                // ミップマップを無効にする。
                *pFlags |= D3DX_TEXTURE_NOMIPMAP;
            }
        }
    }

D3DXLoadTextureFromSurface 関数と D3DXLoadTextureFromFile 関数を使用すれば、更新したい特定のミップマップ レベルを指定できる。ミップマップ レベルとして D3DX_DEFAULT を指定すると、最上位のレベルが更新されるので、その他のミップマップ レベルはそれに合わせて自動的に更新される。

ミップマップの個別のレベルを細かく更新しければならないアプリケーションでは、明示的なミップマップ レベルを Direct3DX テクスチャ ロード メソッドに渡す。また、IDirectDrawSurface7::Blt メソッドや IDirectDrawSurface7::Lock メソッドを直接使用してサーフェスを修正するアプリケーションは、必要に応じてミップマップ レベルを更新する。