DirectXで遊ぼう 上のページ

IDirectDrawSurface その1(プライマリサーフェイス生成)
  1. 概要

    DirectDrawの本命とも言うべき、実際の描画を行うオブジェクトです。
    これが理解できれば、DirectDrawのほとんどをマスターしたと言っても過言では無いでしょう。

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

  2. プライマリサーフェイスって何?

    実際にウィンドゥに反映するオブジェクトを差します。 グラフィックを表示するには、このオブジェクトに対して操作を行ってやる必要があります。
    DirectX関数だけでなく従来のGDI関数を使用する事ができるので、今まで培ってきたノウハウを無駄にする事もありません。

  3. サンプルプログラム

    IDirectDrawオブジェクトからサーフェイスを生成する方法です。
    IDirectDrawの説明で使用した、ddrawから呼び出す事を前提としています。
    LPDIRECTDRAWSURFACE ddsurface;  // IDirectDrawSurfaceのポインタ
    DDSURFACEDESC dds;              // CreateSurfaceに渡す構造体
    HRESULT r;                      // 関数の返値
    
    ZeroMemory(&dds,sizeof(DDSURFACEDESC));
    dds.dwSize = sizeof(DDSURFACEDESC);
    dds.dwFlags = DDSD_DDSCAPS;
    dds.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
    r = ddraw->CreateSurface(&dds,&ddsurface,NULL);
    if(r != DD_OK){
        //
        // CreateSurface失敗(r:エラーコード)
        //
    }
    
  4. 生成に用いる構造体
    DDSURFACEDESC構造体に、サーフェイスを生成するための情報を設定する必要があります。
    しかし、プライマリサーフェイスを生成するには以下の情報だけで十分です。

    • dwSize
      DDSURFACEDESC構造体の大きさを格納します。

    • dwFlags
      DDSURFACEDESC構造体中にあるデータ中において、有効にするデータをフラグで設定します。
      ここではddsCapsの値を有効にするために、DDSD_DDSCAPSを与えてやります。

    • ddsCaps
      サーフェイスの属性を設定します。
      ここではプライマリサーフェイスを生成するという事を宣言(DDSCAPS_PRIMARYSURFACE)しています。

  5. オブジェクトの開放

    IDirectDrawSurfaceは、プログラム終了時には開放しなければなりません。
    ddsurface->Release();
    



上のページ