DirectXで遊ぼう 上のページ

IDirectDrawSurface その3(描画テクニック)
  1. 概要

    その1,2で生成したサーフェイスを使用して、よく使われる描画関数の使い方を解説します。

    以下の内容について解説します。

  2. Blt関数(画像転送)

    プライマリサーフェイスとの画像転送にはBlt関数を使います。
    RECT drect = {....};    // 転送先範囲(プライマリサーフェイス)
    RECT srect = {....};    // 転送元範囲(通常サーフェイス)
    HRESULT r;              // 関数の返値
    
    r = ddsurface->Blt(&drect,dds_image,&srect,DDBLT_WAIT,NULL);
    if(r != DD_OK){
        //
        // Blt失敗(r:エラーコード)
        //
    }
    
  3. Blt関数(塗りつぶし)

    Blt関数には、サーフェイスを任意の色で塗りつぶす機能も搭載しています。
    以下は、全体を塗りつぶす為のサンプルコードです。
    HRESULT r;              // 関数の返値
    DDBLTFX bltfx;
    
    ZeroMemory(&bltfx,sizeof(DDBLTFX));
    bltfx.dwSize = sizeof(DDBLTFX);
    bltfx.dwFillColor = 0;	// 塗りつぶす色
    r = ddsurface->Blt(NULL,dds_image,NULL,DDBLT_COLORFILL|DDBLT_WAIT,&bltfx);
    if(r != DD_OK){
        //
        // Blt失敗(r:エラーコード)
        //
    }
    
  4. BltFast関数

    オフスクリーンサーフェイス同士であれば、BitFast関数を用いて高速な描画を行うことが可能です。
    DirectX SDKヘルプによると、Blt関数より10%の高速化が望めるそうです。
    DWORD x,y;              // 転送先
    RECT srect = {....};    // 転送元範囲
    HRESULT r;              // 関数の返値
    
    r = dds_image1->BltFast(x,y,dds_image2,&srect,DDBLTFAST_WAIT,NULL);
    if(r != DD_OK){
        //
        // BltFast失敗(r:エラーコード)
        //
    }
    
  5. カラーキー(SetColorKey関数)

    サーフェイスには、カラーキーといって透明色を設定する事ができます。
    これによって、マスク等の処理をやらなくてもスプライト描画を行う事ができます。
    // カラーキーの設定(10を透明色にする場合)
    DDCOLORKEY ckey;
    ckey.dwColorSpaceLowValue = ckey.dwColorSpaceHighValue = 10;
    
    r = dds_image->SetColorKey(DDCKEY_SRCBLT,&ckey);
    if(r != DD_OK){
        //
        // SetColorKey失敗(r:エラーコード)
        //
    }
    
    現在、単色でしかカラーキーを設定する事ができないようです。
    よって、dwColorSpaceLowValuedwColorSpaceHighValueには同じ値を設定するようにしてください。
    実際のカラーキーの使用は以下のような感じになります。
    RECT drect = {....};    // 転送先範囲(プライマリサーフェイス)
    RECT srect = {....};    // 転送元範囲(通常サーフェイス)
    HRESULT r;              // 関数の返値
    
    r = ddsurface->Blt(&drect,dds_image,&srect,DDBLT_KEYSRC|DDBLT_WAIT,NULL);
    if(r != DD_OK){
        //
        // Blt失敗(r:エラーコード)
        //
    }
    
    Blt関数に与えるフラグにDDBLT_KEYSRCを追加します。
    同様に、BltFast関数を使う場合にはDDBLTFAST_SRCCOLORKEYを追加します。




上のページ