我想使用非托管C++代码中的DirectX 11,并使用世界粮食计划署的图形用户界面。SlimDX不适合我。我已经找到了使用DirectX 10工作的解决方案:
WPF & DirectX 10 via D3DImage
但我在DirectX 11上做不到,只有两个按钮的空白屏幕。有谁知道如何使WPF与DirectX 11一起工作。
此外,我已经看到,当我只是运行这个例子时,英特尔i5 750 (Windows7 64位,NVidia GeForce430)的CPU使用率约为4-5%。我觉得这太过分了..。是否有可能降低CPU使用率?
你可以在这里找到我的代码:http://www.gamedev.net/topic/619534-wpf-directx-11-via-d3dimage/
发布于 2012-02-03 01:09:31
我对顶点缓冲区布局使用了错误的格式。我使用了DXGI_FORMAT_B8G8R8A8_UNORM,但在我的例子中必须使用DXGI_FORMAT_R32G32B32_FLOAT。
发布于 2012-02-03 00:41:08
你错过了一个给D3DImage.AddDirtyRect的电话。在使用Direct3D11渲染场景之后,您需要告诉WPF有一个新图像可以显示。为此,请执行以下操作,其中d3dimage是您的D3DImage实例:
d3dimage.Lock();
//...
//your render code
///...
var surface = renderTexture.GetSurfaceLevel(0);
d3dimage.SetBackBuffer(D3DResourceType.IDirect3DSurface9, surface.ComPointer);
var rect = System.Windows.Int32Rect(0, 0, width, height);
d3dimage.AddDirtyRect(rect);
d3dimage.Unlock();这需要在每一帧中完成。
Additional info about AddDirtyRect
发布于 2012-02-01 20:14:07
我不能评论如何让DirectX11在这个例子中工作,但是你看到的5%的CPU很可能是DirectX work中的渲染循环,但没有工作要做。
渲染循环通常用于游戏中,以便在更新不同线程上的场景/物理/AI时“尽可能快地”渲染。在桌面可视化应用程序中,这通常不是必需的。
对于科学可视化应用程序,只有在用户交互时才会更新GUI (例如,拖动项目、平移视口),我重新设计了渲染循环,使其仅在有更新时才进行渲染。例如:在完成了在mousemove中平移视口的工作之后,您可以通过设置标志或类似设置来强制DirectX重新绘制。这种“在需要时绘制”的方式将在应用程序空闲时将您的CPU减少到接近零,更适合于桌面应用程序。
https://stackoverflow.com/questions/9095089
复制相似问题