Platform SDK: DirectX

ステップ 2 : パレットの回転

[Visual Basic]

ここでは、C および C++ でのアプリケーション開発について説明する。Visual Basic については、「DirectDraw Visual Basic チュートリアル」を参照すること。

[C++]

DDEx5 の updateFrame サンプル関数は、チュートリアル 4 (DDEx4) とほぼ同じ方法で作用する。最初にバックグラウンドをバック バッファにブリットし、次に 3 つの輪を前面にブリットする。ただし、サーフェスをフリップする前に、updateFrame はプライマリ サーフェスのパレットを doInit 関数で作成されたパレット インデックスから変更する。次にコードを示す。

// パレットを変更する。
if(lpDDPal->GetEntries(0, 0, 256, pe) != DD_OK) 
{ 
    return; 
} 
 
for(i=1; i<256; i++) 
{ 
    if(!torusColors[i]) 
    { 
       continue; 
    } 
    pe[i].peRed = (pe[i].peRed+2) % 256; 
    pe[i].peGreen = (pe[i].peGreen+1) % 256; 
    pe[i].peBlue = (pe[i].peBlue+3) % 256; 
} 
 
if(lpDDPal->SetEntries(0, 0, 256, pe) != DD_OK) 
{ 
    return; 
} 
 

IDirectDrawPalette::GetEntries メソッドは、最初の行で DirectDrawPalette オブジェクトからパレット値を照会する。pe ポインタで指されるパレット エントリ値は有効となるため、メソッドは DD_OK を返して処理を続ける。この初期化の間、カラー インデックスが 1 に設定されているかどうかを判断する torusColors を調べ続ける。1 に設定されている場合、pe ポインタで指されるパレット エントリの赤、緑、および青の値は循環する。

マークされたすべてのパレット エントリが循環した後、IDirectDrawPalette::SetEntries メソッドを呼び出し、DirectDrawPalette オブジェクトのエントリを変更する。この変更は、プライマリ サーフェスに設定するパレットが作用するとすぐに実行される。

これが終了すると、続いてサーフェスがフリップされる。