Джонатан дал отличное объяснение RenderTargetUsage
, но я хотел бы уточнить некоторые вещи относительно исходного вопроса, включая использование RenderTarget2D
в качестве Texture2D
:
Проще говоря, RenderTargetUsage
контролирует поведение поверхности, когда она установлена на устройстве в качестве цели рендеринга.Если не установлено сохранение содержимого, они будут удалены.На Xbox 360 это происходит как причуды аппаратного обеспечения (для производительности).В Windows это эмулируется для соответствия Xbox 360, просто очищая поверхность при ее установке.
Но, если вы используете ее в качестве текстуры, это не имеет значения. Это только проблемакогда вы хотите выполнить рендеринг на одну поверхность несколько раз (каждый раз устанавливая его на устройство) без потери предыдущего содержимого.
Если вы установите его в качестве цели рендеринга только один раз, в начале вашей игры,значение параметра сохранения не имеет значения, потому что оно никогда не будет снова задано в качестве цели рендеринга.
Что вас волнует, так это свойство IsContentLost
( MSDN *)1019 *) или событие ContentLost
( MSDN ).Они будут установлены / подняты, если содержимое, которое вы визуализировали для цели рендеринга, было потеряно (из-за изменений устройства, например: переход в полноэкранный режим).
Если вы перерисовываете цель рендеринга каждый кадр, тогда вам не нужно проверять контент на потерянный.Но если вы планируете создавать цели рендеринга в начале игры и продолжать их использовать на протяжении всего времени, вам необходимо убедиться, что они не были потеряны после кадра, на котором они были созданы.
(Обратите внимание, что вымне не нужно беспокоиться о потере контента, происходящем на полпути во время вашего Draw
вызова. Я вполне уверен, что это может произойти только между кадрами.)