旧バージョンのMicrosoft® Direct3D® 保持モードでは、ある呼び出しから次の呼び出しまでレンダリング状態と照明状態が変更されない可能性があることを考慮していなかった。この結果、保持モードは現在値と同じ値を設定するため、一般的なアプリケーションで冗長な状態変更が多数発生した。IDirect3DRMDevice3インターフェイスでは、パフォーマンスを向上させるため、こうした冗長な状態変更を解消するGetStateChangeOptions、LightStateChange、RenderStateChange、SetStateChangeOptionsメソッドが導入された。以上のメソッドを使用するには、以下の手順に従う。
Dev3->SetStateChangeOptions(D3DRMSTATECHANGE_RENDER, 0, D3DRMSTATECHANGE_NONVOLATILE); Dev3->SetStateChangeOptions(D3DRMSTATECHANGE_LIGHT, 0, D3DRMSTATECHANGE_NONVOLATILE);
たとえば、次のコードは、テクスチャハンドルを変更して、状態キャッシュを更新する方法を示している。
Dev3->RenderStateChange(D3DRENDERSTATE_TEXTUREHANDLE, hTex, 0UL);
状態を変更して、保持モードに状態キャッシュを更新させるには、UPDATEONLYフラグを次のように使用する。
Dev3->RenderStateChange(D3DRENDERSTATE_TEXTUREHANDLE, hTex, D3DRMSTATECHANGE_UPDATEONLY);
状態値を何度も変更するため、保持モードに現在値を追跡させたくない場合、次のコードに示すように、指定した状態に対する冗長状態チェックをオフに設定する。ただし、この方法はパフォーマンスが向上しないため推奨しない。
Dev3->SetStateChangeOptions(D3DRMSTATECHANGE_RENDER, D3DRENDERSTATE_TEXTUREHANDLE, D3DRMSTATECHANGE_VOLATILE);
トップに戻る
© 1999 Microsoft and/or its suppliers. All rights reserved. Terms of Use.