差分

ナビゲーションに移動 検索に移動

MonoGame/クラスライブラリ/RenderTargetUsage列挙体

137 バイト追加, 2020年9月15日 (火) 02:41
編集の要約なし
=== DiscardContentsの注意点 ===
GraphicsDeviceが最初から持っているレンダリングターゲット([[DirectX]]でいう[[プライマリサーフェイス]])に相当するものはDiscardContentsに設定されている。DiscardContentsは「GraphicsDevice.SetRenderTargetするたびに破棄(初期化)される」という特徴がある。この特性があるためレンダリング系APIの呼出順序を間違えると残念なことになる。DiscardContentsの欠点はGraphicsDevice<source lang="csharp">GraphicsDevice.SetRenderTargetするたびに破棄される点であり、レンダリング系APIの呼出順序を間違えると残念なことになる。SetRenderTarget(このRenderTargetは初期化される);</source>
たとば以下のコードは正常に動作しない。ちなみにGraphicsDeviceが最初から持っているレンダリングターゲット([[DirectX]]でいう[[プライマリサーフェイス]]、SetRenterTarget(null))に相当するものはDiscardContentsに設定されている。 このため、たとば以下のコードは正常に動作しない。
<source lang="csharp">
protected override void Draw(GameTime gameTime) { // (1)プライマリサーフェイスを塗りつぶす var gd = _graphics.GraphicsDevice.Clear(Color.CornflowerBlue);
// (2)レンダリングターゲットを切り替える(1)プライマリサーフェイスを塗りつぶす _graphics gd.GraphicsDeviceClear(Color.SetRenderTarget(new RenderTarget2D(GraphicsDevice, 128, 128)CornflowerBlue);
// (3)レンダリングターゲットをプライマリサーフェイスに戻す(2)レンダリングターゲットを切り替える // このときプライマリサーフェイスはDiscardContents設定なので内容がクリアされ(1)の塗りつぶしが無かったことにされる。 _graphics.GraphicsDevice gd.SetRenderTarget(nullnew RenderTarget2D(GraphicsDevice, 128, 128));
// (3)レンダリングターゲットをプライマリサーフェイスに戻す // このときプライマリサーフェイスはDiscardContents設定なので内容がクリアされ(1)の塗りつぶしが無かったことにされる。 // (2)のレンダーターゲットは影響を受けない。 gd.SetRenderTarget(null);  base.Draw(gameTime); }
</source>
DiscardContentsの場合は以下のような呼出順序で書かなければならない。
<source lang="csharp">
protected override void Draw(GameTime gameTime) { var gd = _graphics.GraphicsDevice;  // (1)レンダリングターゲットを切り替える _graphics.GraphicsDevice gd.SetRenderTarget(new RenderTarget2D(GraphicsDevice, 128, 128));
// (2)レンダリングターゲットをプライマリサーフェイスに戻す(と同時にまっさらになる) _graphics.GraphicsDevice // (1)のレンダーターゲットは影響を受けない。 gd.SetRenderTarget(null);
// (3)プライマリサーフェイスを塗りつぶす _graphics.GraphicsDevice gd.Clear(Color.CornflowerBlue);
base.Draw(gameTime); }
</source>

案内メニュー