「MonoGame/クラスライブラリ/RenderTargetUsage列挙体」を編集中

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

警告: ログインしていません。編集を行うと、あなたの IP アドレスが公開されます。ログインまたはアカウントを作成すれば、あなたの編集はその利用者名とともに表示されるほか、その他の利点もあります。

この編集を取り消せます。 下記の差分を確認して、本当に取り消していいか検証してください。よろしければ変更を保存して取り消しを完了してください。

最新版 編集中の文章
1行目: 1行目:
RenderTargetUsage列挙体は、グラフィックデバイス([[MonoGame/クラスライブラリ/GraphicsDeviceクラス|GraphicsDeviceクラス]])に新たなレンダリングターゲット([[MonoGame/クラスライブラリ/RenderTarget2Dクラス|RenderTarget2Dクラス]])を設定したとき、そのレンダリングターゲットの[[データ]]をどのように処理するかを指定するのに使用する[[列挙体]]である。
+
RenderTargetUsage列挙体は、グラフィックデバイス([[MonoGame/クラスライブラリ/GraphicsDeviceクラス|GraphicsDeviceクラス]])に新たなレンダリングターゲット([[MonoGame/クラスライブラリ/RenderTarget2Dクラス|RenderTarget2Dクラス]])を設定したとき、そのレンダリングターゲットの[[データ]]をどのように処理するかを指定するのに使用する列挙体である。
  
 
== 名前空間 ==
 
== 名前空間 ==
[[MonoGame/クラスライブラリ/Microsoft.Xna.Framework.Graphics名前空間|Microsoft.Xna.Framework.Graphics名前空間]]
+
* [[MonoGame/クラスライブラリ/Microsoft.Xna.Framework.Graphics名前空間|Microsoft.Xna.Framework.Graphics名前空間]]
  
 
== 構文 ==
 
== 構文 ==
25行目: 25行目:
 
== 備考 ==
 
== 備考 ==
 
=== PreserveContentsは遅い ===
 
=== PreserveContentsは遅い ===
PreserveContentsは[[VRAM]]容量が少ない環境では[[メインメモリ]]への保存と復元が発生するため絶望的なほど遅くなる。
+
PreserveContentsはVRAM容量が少ない環境ではメインメモリへの保存と復元が発生するため絶望的なほど遅くなる。
[[PC]]ではまず問題になることはないようだが、一部の[[スマホ]]では絶望的な速度になるようだ。
+
とくにスマホでは絶望的なようなので、なるべくDiscardContentsを使ったほうが良さそうだ。
なるべくDiscardContentsを使ったほうが良さそうだ。
 
  
 
=== DiscardContentsの注意点 ===
 
=== DiscardContentsの注意点 ===
DiscardContents設定になっていると「GraphicsDevice.SetRenderTargetするたびに破棄(初期化)される」という特徴がある。この特性があるためレンダリング系APIの呼出順序を間違えると残念なことになる。
+
GraphicsDeviceが最初から持っているレンダリングターゲット(DirectXでいうプライマリサーフェイス)に相当するものはDiscardContentsに設定されている。
<source lang="csharp">
+
DiscardContentsの欠点はGraphicsDevice.SetRenderTargetするたびに破棄される点であり、レンダリング系APIの呼出順序を間違えると残念なことになる。
GraphicsDevice.SetRenderTarget(このRenderTargetは初期化される);
 
</source>
 
  
ちなみにGraphicsDeviceが最初から持っているレンダリングターゲット([[DirectX]]でいう[[プライマリサーフェイス]]、SetRenterTarget(null))に相当するものは問答無用でDiscardContentsに設定されている。
+
たとば以下のコードは正常に動作しない。
 
 
このため、たとば以下のコードは正常に動作しない。
 
 
<source lang="csharp">
 
<source lang="csharp">
protected override void Draw(GameTime gameTime)
+
        protected override void Draw(GameTime gameTime)
{
+
        {
    var gd = _graphics.GraphicsDevice;
+
            // (1)プライマリサーフェイスを塗りつぶす
 +
            _graphics.GraphicsDevice.Clear(Color.CornflowerBlue);
  
    // (1)プライマリサーフェイスを塗りつぶす
+
            // (2)レンダリングターゲットを切り替える
    gd.Clear(Color.CornflowerBlue);
+
            _graphics.GraphicsDevice.SetRenderTarget(new RenderTarget2D(GraphicsDevice, 128, 128));
  
    // (2)レンダリングターゲットを切り替える
+
            // (3)レンダリングターゲットをプライマリサーフェイスに戻す
    gd.SetRenderTarget(new RenderTarget2D(GraphicsDevice, 128, 128));
+
            // このときプライマリサーフェイスはDiscardContents設定なので内容がクリアされ(1)の塗りつぶしが無かったことにされる。
 +
            _graphics.GraphicsDevice.SetRenderTarget(null);
  
    // (3)レンダリングターゲットをプライマリサーフェイスに戻す
+
            base.Draw(gameTime);
    // プライマリサーフェイスは問答無用でDiscardContents設定なので
+
        }
    // 内容はクリアされ(1)の塗りつぶしは無かったことにされる。
 
    // なお、(2)のレンダーターゲットは影響を受けない。
 
    gd.SetRenderTarget(null);
 
 
 
    base.Draw(gameTime);
 
}
 
 
</source>
 
</source>
  
 
DiscardContentsの場合は以下のような呼出順序で書かなければならない。
 
DiscardContentsの場合は以下のような呼出順序で書かなければならない。
 
<source lang="csharp">
 
<source lang="csharp">
protected override void Draw(GameTime gameTime)
+
        protected override void Draw(GameTime gameTime)
{
+
        {
    var gd = _graphics.GraphicsDevice;
+
            // (1)レンダリングターゲットを切り替える
 
+
            _graphics.GraphicsDevice.SetRenderTarget(new RenderTarget2D(GraphicsDevice, 128, 128));
    // (1)レンダリングターゲットを切り替える
 
    gd.SetRenderTarget(new RenderTarget2D(GraphicsDevice, 128, 128));
 
  
    // (2)レンダリングターゲットをプライマリサーフェイスに戻す(と同時にまっさらになる)
+
            // (2)レンダリングターゲットをプライマリサーフェイスに戻す(と同時にまっさらになる)
    // (1)のレンダーターゲットは影響を受けない。
+
            _graphics.GraphicsDevice.SetRenderTarget(null);
    gd.SetRenderTarget(null);
 
  
    // (3)プライマリサーフェイスを塗りつぶす
+
            // (3)プライマリサーフェイスを塗りつぶす
    gd.Clear(Color.CornflowerBlue);
+
            _graphics.GraphicsDevice.Clear(Color.CornflowerBlue);
  
    base.Draw(gameTime);
+
            base.Draw(gameTime);
}
+
        }
 
</source>
 
</source>
  
 
== 関連項目 ==
 
== 関連項目 ==
 
* [[MonoGame/クラスライブラリ/GraphicsDeviceクラス|GraphicsDeviceクラス]]
 
* [[MonoGame/クラスライブラリ/GraphicsDeviceクラス|GraphicsDeviceクラス]]
** [[MonoGame/クラスライブラリ/GraphicsDeviceクラス/SetRenderTargetメソッド|SetRenderTargetメソッド]]
+
** [[MonoGame/クラスライブラリ/GraphicsDeviceクラス/SetRenderTargetメソッド|GraphicsDeviceクラス/SetRenderTargetメソッド]]
** [[MonoGame/クラスライブラリ/GraphicsDeviceクラス/SetRenderTargetsメソッド|SetRenderTargetsメソッド]]
+
** [[MonoGame/クラスライブラリ/GraphicsDeviceクラス/SetRenderTargetsメソッド|GraphicsDeviceクラス/SetRenderTargetsメソッド]]
** [[MonoGame/クラスライブラリ/GraphicsDeviceクラス/GetRenderTargetsメソッド|GetRenderTargetsメソッド]]
+
** [[MonoGame/クラスライブラリ/GraphicsDeviceクラス/GetRenderTargetsメソッド|GraphicsDeviceクラス/GetRenderTargetsメソッド]]
 
* [[MonoGame/クラスライブラリ/RenderTarget2Dクラス|RenderTarget2Dクラス]]
 
* [[MonoGame/クラスライブラリ/RenderTarget2Dクラス|RenderTarget2Dクラス]]
 
* [[MonoGame/クラスライブラリ/RenderTargetCubeクラス|RenderTargetCubeクラス]]
 
* [[MonoGame/クラスライブラリ/RenderTargetCubeクラス|RenderTargetCubeクラス]]
 
* [[MonoGame/クラスライブラリ/CubeMapFace列挙体|CubeMapFace列挙体]]
 
* [[MonoGame/クラスライブラリ/CubeMapFace列挙体|CubeMapFace列挙体]]
 
* [[MonoGame/クラスライブラリ/RenderTargetBinding構造体|RenderTargetBinding構造体]]
 
* [[MonoGame/クラスライブラリ/RenderTargetBinding構造体|RenderTargetBinding構造体]]
* [[MonoGame/クラスライブラリ/RenderTargetUsage列挙体|RenderTargetUsage列挙体]]
 
  
 
[[category: MonoGame]]
 
[[category: MonoGame]]

MonoBookへの投稿はすべて、他の投稿者によって編集、変更、除去される場合があります。 自分が書いたものが他の人に容赦なく編集されるのを望まない場合は、ここに投稿しないでください。
また、投稿するのは、自分で書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください(詳細はMonoBook:著作権を参照)。 著作権保護されている作品は、許諾なしに投稿しないでください!

このページを編集するには、下記の確認用の質問に回答してください (詳細):

取り消し 編集の仕方 (新しいウィンドウで開きます)