「MonoGame/クラスライブラリ/RenderTargetUsage列挙体」の版間の差分

編集の要約なし
 
(同じ利用者による、間の3版が非表示)
30行目: 30行目:


=== DiscardContentsの注意点 ===
=== DiscardContentsの注意点 ===
DiscardContentsは「GraphicsDevice.SetRenderTargetするたびに破棄(初期化)される」という特徴がある。この特性があるためレンダリング系APIの呼出順序を間違えると残念なことになる。
DiscardContents設定になっていると「GraphicsDevice.SetRenderTargetするたびに破棄(初期化)される」という特徴がある。この特性があるためレンダリング系APIの呼出順序を間違えると残念なことになる。
<source lang="csharp">
<source lang="csharp">
GraphicsDevice.SetRenderTarget(このRenderTargetは初期化される);
GraphicsDevice.SetRenderTarget(このRenderTargetは初期化される);
</source>
</source>


ちなみにGraphicsDeviceが最初から持っているレンダリングターゲット([[DirectX]]でいう[[プライマリサーフェイス]]、SetRenterTarget(null))に相当するものはDiscardContentsに設定されている。
ちなみにGraphicsDeviceが最初から持っているレンダリングターゲット([[DirectX]]でいう[[プライマリサーフェイス]]、SetRenterTarget(null))に相当するものは問答無用でDiscardContentsに設定されている。


このため、たとば以下のコードは正常に動作しない。
このため、たとば以下のコードは正常に動作しない。
50行目: 50行目:


     // (3)レンダリングターゲットをプライマリサーフェイスに戻す
     // (3)レンダリングターゲットをプライマリサーフェイスに戻す
     // このときプライマリサーフェイスはDiscardContents設定なので内容がクリアされ(1)の塗りつぶしが無かったことにされる。
     // プライマリサーフェイスは問答無用でDiscardContents設定なので
     // (2)のレンダーターゲットは影響を受けない。
     // 内容はクリアされ(1)の塗りつぶしは無かったことにされる。
    // なお、(2)のレンダーターゲットは影響を受けない。
     gd.SetRenderTarget(null);
     gd.SetRenderTarget(null);