[WPF, SlimDx] DXGI из D3DImage
От: Аноним  
Дата: 10.07.11 23:30
Оценка:
Собираюсь скрестить WPF и SlimDx Direct2D но мне нужно каким-то образом одержать SlimDx DXGI Surface из WPF D3DImage как сделал этот товарищ http://www.gamedev.net/topic/573777-slimdx-direct2d-and-wpf/?

Всё остальное свободно валяется в сети, лишь не смог это найти.
Re: [WPF, SlimDx] DXGI из D3DImage
От: Sinix  
Дата: 11.07.11 00:27
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Всё остальное свободно валяется в сети, лишь не смог это найти.

Прямо по ссылке намекнули на RenderTarget.FromDXGI

А вообще-то такие вещи лучше спрашивать у авторов — вот тут (с их офсайта: "Please prefix your thread subject with [SlimDX] if the question is reasonably specific to SlimDX").

На всякий — примеры они выкладывают здесь; для D2D ещё ничего полезного нет.
Re[2]: [WPF, SlimDx] DXGI из D3DImage
От: Аноним  
Дата: 11.07.11 05:27
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Прямо по ссылке намекнули на RenderTarget.FromDXGI


S>А вообще-то такие вещи лучше спрашивать у авторов — вот тут (с их офсайта: "Please prefix your thread subject with [SlimDX] if the question is reasonably specific to SlimDX").


S>На всякий — примеры они выкладывают здесь; для D2D ещё ничего полезного нет.


Дык оно то понятно что RenderTarget.FromDXGI, но где взять тот аргумент DXGI?
Re[3]: [WPF, SlimDx] DXGI из D3DImage
От: Sinix  
Дата: 11.07.11 05:40
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Дык оно то понятно что RenderTarget.FromDXGI, но где взять тот аргумент DXGI?

А не вспомню уже — я с SlimDX только игрался, на практике не пригодилось.

Код вот отсюда даже похож на правду Единственно, надо будет подсунуть другой surface.
Re: [WPF, SlimDx] DXGI из D3DImage
От: Аноним  
Дата: 11.07.11 07:20
Оценка:
Во всём вышесказанном разобраться не смог . Но попытался методом тыка всё сделать.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Windows.Controls;
using System.Windows.Interop;
using System.Windows.Forms.Integration;

using SlimDX;

using D2D = SlimDX.Direct2D;
using D3D = SlimDX.Direct3D10;
using D3D1 = SlimDX.Direct3D10_1;
using DXGI = SlimDX.DXGI;


namespace SHHHHH
{
    class SlimDxControl : ContentControl
    {
        static D2D.Factory g_D2DFactory;
        static DXGI.Factory g_DXGIFactory;

        static SlimDxControl()
        {
            g_D2DFactory = new D2D.Factory(D2D.FactoryType.SingleThreaded);
            g_DXGIFactory = new DXGI.Factory();
        }

        
        D3D1.Device1 m_D3DDevice;
        D2D.RenderTarget m_D2DRenderTarget;

        public SlimDxControl()
        {
            Initialize();
        }

        void Initialize()
        {
            m_D3DDevice = new D3D1.Device1(g_DXGIFactory.GetAdapter(0), D3D.DriverType.Hardware, D3D.DeviceCreationFlags.SingleThreaded, D3D1.FeatureLevel.Level_10_0);

            DXGI.SwapChainDescription schdesc = new DXGI.SwapChainDescription();

            schdesc.IsWindowed = true;
            schdesc.BufferCount = 1;
            schdesc.SwapEffect = DXGI.SwapEffect.Discard;
            schdesc.Usage = DXGI.Usage.RenderTargetOutput;

            DXGI.ModeDescription mdesc = new DXGI.ModeDescription(200, 200, new Rational(1, 0), DXGI.Format.R8G8B8A8_SNorm);

            mdesc.RefreshRate = new Rational(20,0);
            mdesc.Scaling = DXGI.DisplayModeScaling.Centered;
            mdesc.ScanlineOrdering = DXGI.DisplayModeScanlineOrdering.Progressive;

            schdesc.ModeDescription = mdesc;

            WindowsFormsHost wfhost = new WindowsFormsHost();

            this.Content = wfhost;

            wfhost.Child = new System.Windows.Forms.Panel();//Create panel because WindowsFormsHost.Handle is allways zero 

            g_DXGIFactory.SetWindowAssociation(wfhost.Child.Handle, DXGI.WindowAssociationFlags.None);

            DXGI.SwapChain ch = new DXGI.SwapChain(g_DXGIFactory, m_D3DDevice, schdesc);

            m_D2DRenderTarget = D2D.RenderTarget.FromDXGI(g_D2DFactory, DXGI.Surface.FromSwapChain(ch, 0), new D2D.RenderTargetProperties()
            {
                Type = SlimDX.Direct2D.RenderTargetType.Hardware
            });
        }
    }
}


Но оно кидает exception на
DXGI.SwapChain ch = new DXGI.SwapChain(g_DXGIFactory, m_D3DDevice, schdesc);



Если здесь не ответят — пойду на рекомендованный в таких ситуациях форум

Извиняюсь за то что лезу не разбираясь в сути вопроса. Нужно просто прикрутить direct2d к WPF для быстрого рисования, а рисовать в direct2d — проще пареной репы.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.