DirectXで遊ぼう 上のページ

IDirectDrawClipper
  1. 概要

    特にウィンドゥ表示で有用である、クリッパーについて説明します。

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

  2. 高速化が生んだ副産物

    高速に処理が可能なDirectDrawですが、領域外に対する対処に関しては全く考慮されていません。 大抵の場合実行エラーを出すのですが、時には表示がおかしくなったり、最悪ハングアップを起こします。 いわゆるクリッピングという処理を施していない事によります。
    表示できる範囲を判定させてやればこれらを回避する事もできるのですが、これを考慮したインターフェースがDirectDrawには用意されています。 それが、IDirectDrawClipperです。
    またウィンドゥ表示においてはマルチウィンドゥを考慮する必要があり、ウィンドゥの事を考えずに転送しまくってくれるbilterチップを制御してやらない事には正しく表示する事はできません。 これに対するクリッピングは非常に難解です。描画範囲が四角形である訳では無いのですから・・・
    ウィンドゥ表示ではこのインターフェースは必要不可欠な物です。

  3. サンプルプログラム

    以下はウィンドゥ表示における、プライマリサーフェイスを対象にクリッピング処理を行う為のサンプルです。
    LPDIRECTDRAWCLIPPER ddclipper;      // IDirectDrawClipperオブジェクト
    HRESULT r;                          // 関数の返値
    
    r = ddraw->CreateClipper(0,&ddclipper,NULL);
    if(r != DD_OK){
        //
        // CreateClipper失敗(r:エラーコード)
        //
    }
    ddclipper->SetHWnd(hwnd);           // hwnd:ウィンドゥハンドル
    
    // プライマリサーフェイスにクリッパーを設定する
    ddsurface->SetClipper(ddclipper);
    
    SetHWndコマンドで、プライマリサーフェイスとなるウィンドゥハンドルを与えます。 そして、プライマリサーフェイスに関連付けをする。これだけです。




上のページ