Навигация
· XNA FAQ
· С чего начать
· Конкурсы
· Обратная связь
· XNA Блоги
Сейчас на сайте
· Гостей: 1

· Пользователей: 0

· Всего пользователей: 3,684
· Новый пользователь: headron
Последние фото
Эх, чуть не проспал закрытие.
Эх, чуть не проспал ...
Альбом: XNA Engine

GB
GB
Альбом: XNA Engine

South Park Coon & Friends
South Park Coon & Fr...
Альбом: XNA Games

Блоги
yavshoke
» XboxOne - интерес...
dampirik
» Push уведомления ...
dampirik
» Реклама,статистик...
Chort
» XNA и StartCoroutine
Chort
» Curve Class
dampirik
» Реклама, статисти...
dampirik
» Увеличение скорос...
dampirik
» Реклама, статисти...
general
» Распаковка DxtCom...
general
» Как работать с XN...
Поддержка
microsoft.com
1gb.ru - Дом для вашего сайта
Статистика посещений:

Изменения при работе с RenderTargets в XNA 2.0/3.0
Перевод записи блогаShawn Hargreaves - одного из разработчиков XNA framework.

Плохие новости:

Если у вас есть программа использующая рендертаргеты (rendertargets) и она прекрасно работает на XNA Framework 1.0, еще не факт что она будет работать на XNA 2.0.

Хорошие новости:
Работа сабжа стала более логичной.

Сейчас все объясню…

Как работают рендертаргеты в версии 1.0

В Windows:

1. Каждый рендертаргет размещается в отдельной части видеопамяти
2. После выбора рендертаргета вы можете отрисовывать в эту видеопамять
3. После завершения отрисовки, вы вызываете метод GetTexture и можете использовать эту часть видеопамяти как текстуру
4. Мы можете производить запись в различные рендертаргеты бесчисленное количество раз и состояние контента всегда будет валидным


На XBOX 360:

1. Все рендертаргеты делят специально выделенной области EDRAM памяти
2. Это означает, что в один промежуток времени только один рендертаргет может существовать физически
3. Когда вы закончили отрисовку в рендертаргет, метод GraphicsDevice.ResolveRenderTarget копирует данные из EDRAM в отдельную область текстурной памяти
4. Затем вы можете использовать эту текстуру для своих нужд
5. Но EDRAM в данный момент может быть занята другим рендертаргетом!
6. Работа производится не совсем так, как вы этого можете ожидать:
7. Отрисовка в задний буфер (EDRAM содержит только что отрисованные данные)
8. Переключаемся на рендертаргет
9. Отрисовка в рендертаргет (EDRAM содержит только что отрисованные данные)
10. Вызываем Resolve рендертаргета (RenderTarget.GetTexture() содержит копию данных, которые мы только что отрисовали)
11. Переключаемся на задний буфер (И вот тут нас ждет засада! В процессе переключения, предыдущий рендертаргет перезаписал данные которые были созданы в процессе записи в задний буфер, таким образом, в EDRAM больше нет изображения заднего буфера)


В итоге:

* Каждый раз при переключении рендертаргета, содержимое EDRAM перезаписывается, так что данные предыдущего рендертаргета (включая задний буфер) уничтожаются
* Но, если данные рендертаргета связать с текстурой, данные не перезатераются


Все будет нормально, в случае:

1. Отрисовка в рендертаргет A
2. Отрисовка в рендертаргет B
3. Отрисовка текстур из рендертаргетов A и B в рендертаргет C

Но, не будет нормально, при:

1. Отрисовка в рендертаргет A
2. Отрисовка в рендертаргет B
3. Переключение обратно на рендертаргет A и продолжить запись поверх него


Довольно легко можно написать приложение, которое будет замечательно работать на одной платформе, но так же легко оно будет не работать при запуске на другой платформе.

Как работают рендертаргеты в версии 2.0

По умолчанию:

1. Вы получаете поведение XBOX
2. На XBOX ничего не изменилось
3. В Windows мы автоматически очищаем ваши рендертаргеты, эмулируя поведение XBOX
4. Это довольно быстро на обеих платформах (очистка дешевая операци)


Если вам не нравится поведение по умолчанию:

1. Вы можете указать другой RenderTargetUsage
2. В параметре конструктора RenderTarget2D
3. Для изменения поведения для заднего буфера используйте событие GraphicsDeviceManager.PreparingDeviceSettings для изменения GraphicsDeviceInformation.PresentationParameters.RenderTargetUsage
4. Указать RenderTargetUsage.PreserveContents
5. На Windows работает так же, как и прежде
6. На XBOX мы автоматически копируем данные из текстуры в EDRAM, для восстановления содержимого рендертаргета, на который вы переключаетесь
7. Это очень дорого! Используйте данный функционально только если у вас есть запас по производительности
8. Указать RenderTargetUsage.PlatformContents чтобы вернуться к поведению версии 1.0, которые различны у Windows и XBOX

Рекомендации:

  • По возможности используйте режим по умолчанию RenderTargetUsage.DiscardContents. Он показывает хорошую производительность и пригоден для применения на обеих платформах.

Прочие хорошести:

  • В версии 2.0 больше нет необходимости вызывать метод GraphicsDevice.ResolveRenderTarget, а фактически вы даже не сможете его вызвать, так как мы его убрали. Мы делаем это автоматически когда вы переключаетесь между рендертаргетами.
  • В 2.0 на XBOX мы теперь поддерживаем множественные рендертаргеты - multiple simultaneous rendertargets (MRT)
Комментарии
Нет комментариев.
Добавить комментарий
Пожалуйста, залогиньтесь для добавления комментария.
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Авторизация
Логин

Пароль



Вы не зарегистрированы?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Мини-чат
Вы должны авторизироваться, чтобы добавить сообщение.

27.08.2014
Я умею немного на asp.net + html и css

22.08.2014
на ASP mvc 3 есть пару проектов. Могу помочь, если нужно. Обидно, если закроется Frown

21.08.2014
я тоже ноль

21.08.2014
Я в вебе только с php занимался да и то на уровне чтоб работало.

21.08.2014
Я в вебе полный ноль…

21.08.2014
Переводить его надо, хоть на ту же азуру. И двиг менять на что-то современное. Если есть веб-разрабы - можем скооперироваться. Один делать не буду.

21.08.2014
не знаю всех нюансов по оплате и все хорошее когда нибудь заканчивается

21.08.2014
А что случилось?

21.08.2014
похоже сайт будет работать до 28го числа

09.08.2014
Апи пока не видел. Но есть приложение в магазине Live Lock Screen BETA, так что думаю скоро будет

08.08.2014
Я про API для Update1. На нем работает это

08.08.2014
А что именно нужно? Чтото и сейчас открыто http://msdn.micro.
...105).aspx

06.08.2014
Кто-нибудь слышал об открытии доступа к Lock Screen Api?

31.07.2014
VPDExpress на базе MVS 2012, ни в какую не ловит исключения. Даже если их сам создаешь. И всех так?

25.07.2014
С днем системного администратора причастных к этой профессии! По случаю - тортик от жены

RSS каналы сайта
XNA - Новости
XNA - Статьи
XNA - Форум
XNA - Галерея
XNA - Файлы
Время загрузки: 0,05 секунд 8,709,734 уникальных посетителей