Наиболее вероятный вариант, который я нашел до сих пор, это использовать GetData()
и SetData()
для копирования с RenderTarget2D
на новый Texture2D.
Поскольку я хочу текстуру с отображением mip, я обнаружил, что мне нужно было копировать каждый уровень mip по отдельности в новую текстуру, вот так. Если вы этого не сделаете, объект станет черным, когда вы отойдете от него, поскольку на картах MIP нет данных. Обратите внимание, что цель рендеринга также должна быть отображена в формате mip.
Texture2D copy = new Texture2D(graphicsDevice,
renderTarget.Width, renderTarget.Height, true,
renderTarget.Format);
// Set data for each mip map level
for (int i = 0; i < renderTarget.LevelCount; i++)
{
// calculate the dimensions of the mip level.
// Math.Max because dimensions always non-zero
int width = (int)Math.Max((renderTarget.Width / Math.Pow(2, i)), 1);
int height = (int)Math.Max((renderTarget.Height / Math.Pow(2, i)), 1);
Color[] data = new Color[width * height];
renderTarget.GetData<Color>(i, null, data, 0, data.Length);
copy.SetData<Color>(i, null, data, 0, data.Length);
}