Можно ли построить поверхность DirectX для элемента управления WPF? - PullRequest
5 голосов
/ 09 сентября 2011

Можно ли использовать DirectX для построения набора точек на элементе управления WPF (или чего-то, что может использоваться WPF).

Мне нужно реализовать элемент управления в WPF, который должен отображать 16k точек с обновлениемчастота 30 Гц, и сейчас у меня заканчиваются решения.

Эта идея взята из комментария к этому вопросу.

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

6 голосов
/ 09 сентября 2011

Да, может.Обычно это довольно гладко, потому что сам WPF является реализацией DirectX.

См. Блог MS Greg Schechter:

Перенаправление приложений GDI, DirectX и WPF

Вы также можете иметь образец D3DImage на поверхности в WPF из Codeproject: http://www.codeproject.com/KB/WPF/D3DImage.aspx

0 голосов
/ 23 ноября 2018

Да. Вы используете D3DImage, текстуру (SharpDX или SlimDX) и Surface. Вам необходимо создать текстуру вне приложения и обновить ее содержимое с помощью видеодрайвера или другим способом. В WPF вы создаете D3DImage:

Texture = new Texture(Device.DeviceEx, width, height, 1, Usage.RenderTarget, Format.A8R8G8B8, Pool.Default, ref handle);

Очень важно, чтобы вы были Format.A8R8G8B8 (это ограничение WPF):

using (var surface = texture.GetSurfaceLevel(0))
        {
            var handle = surface.NativePointer;
            Lock();
                SetBackBuffer(D3DResourceType.IDirect3DSurface9, handle);
                Unlock();
        }

А после каждого обновления фрейма нужно только

Lock();
                AddDirtyRect(new Int32Rect(0, 0, PixelWidth, PixelHeight));
                Unlock();

Лучше, если вы поместите свой D3DImage в отдельный Dispatcher

...