问题标签 [d3dimage]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
interop - 多重采样和 Direct3D10 / D3DImage 互操作
我正在尝试使用 Direct3D 10 (SlimDX) 和 WPF 实现渲染引擎。
我使用正确的 MultiSample 参数(1,0 / 2,0 和 4,0 正在工作)创建我的设备和 rendertargetview
然后我在尝试为 D3DImage 创建共享纹理时遇到了问题......
...
...
我错过了什么?
wpf - 使用 DirectX 11 在 WPF 控件上呈现
我正在尝试创建一个基于 WPF 的地图编辑器。目前我正在使用 hack 来呈现 DirectX 内容。我创建了一个 WinFormsHost 并在 WinForms-Panel 上呈现。
这一切都是因为 DirectX(我正在使用具有 Featurelevel 10 的 DirectX 11)需要一个句柄(别名 IntPtr)来渲染。我不知道如何在没有句柄的情况下初始化和使用 DX 设备。
但是 WPF 控件没有句柄。所以我刚刚发现,有一个名为“D3DImage”的互操作类。但我不明白如何使用它。
我当前的系统是这样工作的:
内部循环遍历“IGameloopElement”列表。对于每一个,它都会渲染其调用“Draw()”的内容。之后,它调用交换链的“Present()”来显示更改。然后它重置设备以将句柄切换到下一个元素(大多数情况下只有一个元素)。
现在,因为 D3DImage 没有句柄,我如何渲染它?我只知道我必须使用“Lock()”然后是“SetBackBuffer()”、“AddDirtyRect()”然后是“Unlock()”。
但是如何在不指定设备句柄的情况下渲染到 DirectX11.Texture2D 对象?
我真的迷路了...我刚刚在 codeplex 上找到了“DirectX 4 WPF”示例,但这实现了 DirectX 的所有版本,管理设备本身并且具有如此巨大的开销。我想留在我目前的系统。我自己管理设备。我不希望 WPF 控件处理它。
该循环应该调用“Render()”,然后将后缓冲纹理传递给 WPF 控件。
谁能告诉我该怎么做?我完全卡住了...
非常感谢 :)
R
c# - WPF frame rate unusably low when D3D application is running
I am encountering a problem where a WPF application runs with a very low frame rate when a D3D application is running at the same time.
The situation is as follows: The first application is a Winforms form that renders 3D graphics using SlimDX and D3D10. The application doesn't run in fullscreen mode, but in a maximized window. This is very smooth and fast.
The second application consists of a WPF window that renders a ScatterView
with some images. The WPF window is transparent (AllowsTransparency="True"
with a transparent background). The general idea here is that the WPF window should look like it is composited on top of the 3D scene.
However, as soon as the D3D10 application is running, the performance of the WPF app deteriorates to as low as 1-2 fps (as measured by the WPF Performance Tool). That's not because my computer hardware is not capable of rendering both applications: the D3D10 app is always rendering the 3D scene very smoothly, and GPU and CPU utilization does not max out when I have both applications running. Even when I give the WPF app a higher process priority, the rendering performance stays at 1-2 fps.
I have also tried to combine both applications into a single process and using a D3DImage
and using a shared D3D10 surface (with a D3D9Ex device) to feed it into the D3DImage
. Furthermore I tried using an InteropBitmap
and writing the frame data into it. All of those solutions work and produce a D3D10 scene with some WPF controls on top of it, but none of them make WPF run smoothly.
The idea of using two different application processes was my final idea to decouple the WPF rendering stack from any eventual performance impacts that may arise from having D3D10 render in the same process.
wpf - 具有 D3DImage 共享资源的 DirectX11/DirectX10 的多重采样 (MSAA)
我正在尝试使用 D3DImage 在 DX11 中获取 MSAA,但似乎不可能,因为不允许共享多重采样纹理,如此处所述:http: //msdn.microsoft.com/en-us/library/windows/桌面/ff476531(v=vs.85).aspx
实际上,我使用的是 D3DImage 的 SharpDX 实现,它适用于 DX11 和 DX10,只要可以在没有抗锯齿的情况下离开。
此线程中描述了解决它的方法:http ://sharpdx.org/forum/5-api-usage/1000-d3d11-problem-with-usage-of-texture2d不成功。还有另一个线程问类似的问题:Multisampling and Direct3D10 / D3DImage interop
最后,问题实际上是,如果有人可以确认,绝对不可能使用 D3DImage 来渲染来自 DX10/DX11 的抗锯齿内容吗?
c# - 以编程方式确定系统是否具有可切换图形
我们在 WPF 应用程序中使用可切换显卡(AMD Radeon 7670M + Intel 4000)的笔记本电脑上遇到以下问题:
我们用来显示一些视频的D3DImage只显示一个黑框。仅当应用程序的独立显卡 (AMD) 处于活动状态时(模式设置为高性能),才会发生这种情况。在英特尔显卡处于活动状态(模式设置为省电)的情况下,它可以工作。看起来我们并不孤单。谷歌搜索显示 AMD 论坛中的以下帖子:
我找到了使用D3DImage.CopyBackBuffer的解决方法- 看起来后台缓冲区确实包含正确的帧 - 所以我将尝试显示它。
但是为了仅在必要时应用此解决方法,这使我想到了这个问题的主题:如何确定系统是否确实具有可切换图形?
我想可能有一些使用 WMI 或查看注册表的方法,但如果有人能指出我正确的方向,或者甚至可能有一个如何这样做的例子,我会很高兴。
更新:
我试过 EnumDisplayDevices 和 System.Management.ManagementObjectSearcher。第一个不返回所有设备,而后者返回。但也许还有更好的方法?
c# - D3DImage:从字节数组显示位图
我在数组中有原始位图数据(像素颜色,32 位)。有没有一种简单的方法可以在 D3DImage 上显示这样的“精灵”?最好不使用第三方库(例如 SharpDX)。
背景:我有来自非托管 DLL 的原始位图帧,我需要在 WPF 中以高帧率/低 CPU 使用率显示它们。到目前为止,我已经尝试过 WriteableBitmap 和 InteropBitmap,但它们太慢了(我在最大化窗口(1680x1050 显示)上获得 ~110 fps,Core i5;这只是一个填充内存的简单测试。我相信现代计算机应该在不使用 100% CPU 核心时间的情况下更快地执行此操作)。我也在查看 VideoRendererElement(在 C# 中显示来自原始未压缩字节源的实时视频:WPF 与 Win 表单),但这有点过于复杂(涉及非托管 dll、regsvr32 注册等)。
正如我从 D3DImage 示例中看到的那样,它在不给 CPU 带来压力的情况下实现了良好的帧速率。我想知道是否可以将它用于位图显示。
UPD: 我发现了这个: http: //www.codeproject.com/Articles/113991/Using-Direct2D-with-WPF
这基本上就是我想要的。我已经将它插入到我的项目中,它与 InteropBitmap 相当,甚至慢了一点。在我的情况下,内存性能似乎是一个瓶颈。在这两种情况下,大部分时间都花在复制位图上(我使用非托管 memcpy)。
wpf - 是否可以通过 D3DImage 和 ANGLE 将 OpenGL ES 代码与 WPF 应用程序一起使用?
摘要(TL:DR版本)
最终,我们的目标是能够在 WPF 应用程序中本地使用 OpenGL ES 代码(即不是 SharpGL 等)并且没有 Airspace 或驱动程序问题,这可能使用 Google 的 ANGLE 项目。
背景:
我喜欢 OpenGL over DirectX 的一件事是它的跨平台能力。它对 OS X 和 Linux 以及通过 ES 在 Android 和 iOS 上都有出色的支持。但是,在 Windows 上,使用它会受到驱动程序问题的影响,或者更糟糕的是,很多卡根本没有正确实现它。
输入 Google 的ANGLE 项目,或“Almost-Native-Graphics-Layer-Engine”。
ANGLE 是围绕 Direct3D 实现的 OpenGL ES 2.0 包装器,这意味着您可以编写 OpenGL ES 2.0 代码以在 Windows 上运行,而无需实际的 OpenGL 驱动程序。它不仅通过了 ES 兼容性测试,而且实际上是 Chrome 进行所有图形渲染的方式,包括 WebGL,因此它绝对是一项经过验证的技术。
问题:
我们知道 WPF 有一个 D3DImage 控件,它可以让您在 WPF 中托管 Direct3D 渲染,并且它应该通过将其输出正确地堆肥到 WPF 渲染线程来消除空域问题。我的问题是由于 ANGLE 是通过 Direct3D 实现的,而 D3DImage 是 Direct3D 渲染的目标,是否可以将两者结合起来,允许我们编写 OpenGL ES 代码并将其托管在 Windows 上的 WPF 应用程序中,所有这些都没有驱动程序或空域问题?
这将是我们的“圣杯”。
但是,由于 ANGLE 想要使用它自己的,所以我一直在让 ANGLE 将其渲染定位在由 D3DImage 控件创建的 D3D 表面上。我不确定这是否可能。我什至在任何地方都找不到任何人讨论这个问题的文章或参考资料,更不用说尝试了。
再次明确一点,我们的目标是让我们共享的跨平台 OpenGL(或 ES)代码在 WPF 应用程序中工作,而不会出现空域问题或 OpenGL 驱动程序要求。我对使用 ANGLE/D3DImage 的建议就是……尝试。到目前为止,这是我想出的“手段”,但这只是实现我们目标的潜在手段,而不是目标本身。任何其他能让我们得到相同解决方案的东西都将受到欢迎。
java - 从任何角度生成 3D 阵列图像
我有一个表示 3D 对象 (x,y,z) 的 3D 数组。存储在数组中的值是 RGB 颜色。是否可以从任何给定的角度生成对象的图像?
c# - D3DImage TryLock 失败
我使用 D3DImage 作为我的 WPF 用户控件的一部分。很少,在渲染时, D3DImage.TryLock 失败。
到目前为止,我还没有找到任何关于 D3D.TryLock 为什么会失败的文档。有谁知道为什么会发生这种情况?
matlab - matlab中3d数组页面的排列
我在 MATLAB 中有一个表示图像的 3D 数组。我想反转页面的位置(在我的情况下是切片)。假设页数为 N。我想用第 N 个替换第一页,用第 (N-1) 个替换第二页,依此类推。在 matlab 中是否有任何功能可以做到这一点。现在我正在使用下面的代码,但我必须避免嵌套 for 循环,这就是为什么我正在寻找一个准备好的函数。任何帮助,将不胜感激。
先感谢您