Окна просмотра SlimDX в элементах управления WPF - PullRequest
7 голосов
/ 11 февраля 2010

Я перехожу с WinForms / XNA на WPF / SlimDX, потому что:

  • а) все преимущества WPF перед WinForms (но кривая обучения = ой!)
  • б) Я хотел бы иметь несколько Смотровые окна SlimDX прикреплены к панелям. XNA имеет 1 «игровой» экран.
  • c, последний и наименьший) Поддержка DirectX 10

Весь мой предыдущий код XNA написан на C #. У меня проблемы с выяснением, как перенести это на SlimDX и WPF на высоком уровне. Я искал как сумасшедший. Ближайшие, что я нашел:

1) http://www.gamedev.net/community/forums/topic.asp?topic_id=507941 Многие статьи указывают на это обсуждение, однако оно неполное, и я не могу понять XAML, и я получаю ошибки устройства после присоединения всех пропущенных событий _slimDXDevice и Window1.

2) http://www.codeproject.com/KB/WPF/D3DImage.aspx В этой статье предполагается, что пользователь переносит C ++. Я портирую код XNA, который очень близок к коду MDX.

Если бы я мог добраться до точки, где у меня есть форма WPF с настраиваемым видовым окном, управляемым SlimDX, которое было просто синим прямоугольником, я мог бы пойти оттуда. В XNA я рендерил много отдельных объектов RenderTargets и размещал их по всему экрану, теперь я хочу прикрепить их к элементам управления. Но сначала просто 1 синяя коробка! : D

Есть идеи? Я чувствую, что это либо просто, либо есть какой-то код «печенья», который мне не хватает. С благодарностью!

Ответы [ 3 ]

7 голосов
/ 12 февраля 2010

Вы можете посмотреть на образец сейчас. Он только что зарегистрирован в нашем репозитории, поэтому вам нужно использовать SVN, чтобы получить его (или подождать, пока мы не выпустим релиз в феврале 2010 года):

http://code.google.com/p/slimdx/source/detail?r=1356

0 голосов
/ 12 февраля 2010

Недавно я возился с D3DImage и SlimDX, и мне было не сложно заставить его работать (с DirextX9). У меня на домашнем компьютере есть код, который я опубликую позже, но он очень похож на код в приведенных ссылках.

Мне так и не удалось заставить его работать с более высокой версией DirectX. У Джеремии есть хороший пост в блоге об использовании устройства directx9 в качестве связи между directx 10/11 / d2d и D3DImage, но я не смог заставить его работать с Slimdx. Хотя я не прикладывал особых усилий, так как DirectX9 делал то, что мне было нужно, и я хотел, чтобы он работал на XP.

0 голосов
/ 12 февраля 2010

D3DImage - это класс, который вы хотите использовать. Несмотря на то, что учебник по проекту кода написан на C ++, он очень применим к SlimDX и WPF.

Все, что вам нужно сделать со своим SlimDX - это нормально выполнить код, но НЕ запускать Present (...) на вашем устройстве или в цепочке обмена. В тот момент, когда вы поместите Present (...), выполните D3DImage.SetBackBuffer (...) и отправьте ему свойство ComPointer поверхности SlimDX. Затем выполните D3DImage.AddDirect (...), и теперь у вас есть D3D, скомпонованный в WPF.

Кроме того, убедитесь, что вы создали IDirect3DDevice9Ex, иначе ваша производительность будет ужасной во всем, кроме XP!

...