RenderTexture2D は一時的なメモリ コンストラクトにすぎず、非常に迅速かつ定期的にフラッシュされます。これは、メモリを節約するために再利用され、スピードアップの程度が低いためです。そのため、テクスチャを保存する非常に一時的な場所としてのみ扱う必要があります。より長く保存される適切な Texture2D にシフトする必要があります。簡単なことをするだけです:
Texture2D YourPic = (RenderTexture2D)SomeRenderedPic;
しません。これは、ポインタをレンダリングされたイメージのメモリ空間に渡すだけです。グラフィックカードがそれを破棄すると、それは消えてしまいます。あなたがしたいことは、次のようなものです:
Color[] MyColorArray = new Color[SomeRenderedPic.Width * SomeRenderedPic.Height];
SomeRendeerPic.GetData<Color>(MyColorArray);
Texture2D YourPic = new Texture2D(
GraphicsDevice,
SomeRenderedPic.Width,
SomeRenderedPic.Height);
YourPic.SetData<Color>(MyColorArray);
そのコードを正しく作成した場合、ポインタではなくデータを新しいテクスチャに格納する必要があります。これにより、新しいテクスチャは、レンダー ターゲット スペースと同じようにフラッシュされない独自のメモリ スペースになります。
この方法にはマイナス面があります。XNA のフル リフレッシュ レートでは実行できません。(1 秒あたり 60 フレームのようなもの... たぶん 30 フレームだと思います... 忘れてしまいました。) いずれにせよ、非常に一定のリフレッシュが必要な場合、これは十分な速度ではない可能性があります。ただし、実際にはあまり変化しない静的テクスチャを作成している場合は、これでうまくいく可能性があります。
私はその場で夜遅くにこれを書いているので、うまくいけばこれは理にかなっています. これが機能しない場合は、お詫び申し上げます。必要に応じて、jareth_gk@hotmail.com までご連絡ください。あなたの質問に答えることができれば、喜んでお答えします。
それ以外の場合は、幸運を祈り、創意工夫してください。解決策があると確信しています。
×ジェレミーM.