首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过D3DImage实现的WPF和DirectX 11

通过D3DImage实现的WPF和DirectX 11
EN

Stack Overflow用户
提问于 2012-02-01 19:34:31
回答 3查看 12.9K关注 0票数 5

我想使用非托管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/

EN

回答 3

Stack Overflow用户

发布于 2012-02-03 01:09:31

我对顶点缓冲区布局使用了错误的格式。我使用了DXGI_FORMAT_B8G8R8A8_UNORM,但在我的例子中必须使用DXGI_FORMAT_R32G32B32_FLOAT。

票数 3
EN

Stack Overflow用户

发布于 2012-02-03 00:41:08

你错过了一个给D3DImage.AddDirtyRect的电话。在使用Direct3D11渲染场景之后,您需要告诉WPF有一个新图像可以显示。为此,请执行以下操作,其中d3dimage是您的D3DImage实例:

代码语言:javascript
复制
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

票数 2
EN

Stack Overflow用户

发布于 2012-02-01 20:14:07

我不能评论如何让DirectX11在这个例子中工作,但是你看到的5%的CPU很可能是DirectX work中的渲染循环,但没有工作要做。

渲染循环通常用于游戏中,以便在更新不同线程上的场景/物理/AI时“尽可能快地”渲染。在桌面可视化应用程序中,这通常不是必需的。

对于科学可视化应用程序,只有在用户交互时才会更新GUI (例如,拖动项目、平移视口),我重新设计了渲染循环,使其仅在有更新时才进行渲染。例如:在完成了在mousemove中平移视口的工作之后,您可以通过设置标志或类似设置来强制DirectX重新绘制。这种“在需要时绘制”的方式将在应用程序空闲时将您的CPU减少到接近零,更适合于桌面应用程序。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9095089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档