【问题标题】:SlimDX DX9 Shared Surfaces between processes. (C#)SlimDX DX9 进程之间的共享表面。 (C#)
【发布时间】:2012-07-05 19:32:13
【问题描述】:

问题: 需要与另一个进程共享 SlimDx.Direct3D9.Surface 以便它可以显示渲染输出。我可以创建 Surface,但我还没有找到在进程之间共享它的方法。

可用代码 我可以访问应用程序的双方,但提供渲染输出的应用程序是有限的。我无权创建设备。我可以引用 Direct3D9 设备,创建渲染目标,并成功捕获输出。

更多详情

我有一种感觉,我会被指责不先看,但我可以向你保证,我必须尽我所能。

但是,我正在尝试将 DirectX 9 Surface 共享给另一个进程,以便我可以在外部表单中捕获渲染输出。

我在共享表面上发现了一些东西,但似乎还没有弄清楚如何使用 DirectX 9 设备在两个进程之间共享表面。

我对 DirectX 设备本身的访问受到限制。我通过嵌入在应用程序中的内置脚本模块来访问它。我无法知道不是公共变量的创建属性或参数,但我可以完全访问设备本身。

因此,使用下面的代码(以准确演示我在大多数情况下必须使用的内容)我试图弄清楚如何与另一个进程共享该 Surface,以便我可以获取渲染器的输出那个表格。

基本上,我的代码如下所示: (简体)

byte[] ARGB;
//Getting internal access to renderer's Direct3D9.Device (Already created)
SlimDx.Direct3D9.Device dev = renderer.Device.Device;
//Surface I create to capture the devices output
SlimDx.Direct3D9.Surface destination; 
//Create render target to device
destination = Surface.CreateRenderTarget(this.dev, this.w, this.h, Format.A8R8G8B8, MultisampleType.None, 0, true);

// 1. Render, 
// 2. then grab snapshot (internal call), 
// 3. convert to byte array (not relevant to what I'm currently doing)
if (this.renderer.Render())
{
    board.Snapshot(this.destination); //some internal logic to get surface
    try
    {
        using (DataStream data = destination.LockRectangle(LockFlags.ReadOnly).Data)
        {
            data.Read(ARGB, 0, (int) data.Length);
        }
    }
    finally
    {
        this.destination.UnlockRectangle();
    }
}

【问题讨论】:

    标签: c# winforms directx directx-9 slimdx


    【解决方案1】:

    要与 directx9 共享纹理,您的设备需要是以下类型:

    SlimDX.Direct3D9.DeviceEx mydeviceex;
    

    默认的 directx9 设备不支持共享资源。

    然后您可以使用以下方式获取共享句柄:

     IntPtr sharedhandle;
     Texture texture = new Texture(mydeviceex, width, height, 1, Usage.RenderTarget,    
     format, Pool.Default, out sharedhandle);
    

    1 用于 mipmap(共享资源必须只有一层)。 格式也有一些限制,A8R8G8B8 在这种情况下很常见。

    【讨论】:

      猜你喜欢
      • 2021-06-15
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 2021-04-30
      • 1970-01-01
      • 2019-11-15
      • 2012-07-22
      相关资源
      最近更新 更多