问题标签 [direct2d]

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.

0 投票
2 回答
530 浏览

winapi - Windows 中的换肤引擎:只绘制“脏”区域还是一次绘制整个窗口?

我想制作一个能够使用 alpha 混合绘制自定义形状窗口的蒙皮引擎。也就是说,它将使用分层窗口 ( UpdateLayeredWindow )。一个典型的窗口将在其背景中包含几十个其他位图,范围从 10×10 到例如 300×150 像素。在最坏的情况下,这些元素中的大多数将具有高达 30 fps 的流畅动画。一切都将是 alpha 混合的,我将为此使用 Direct2D(是的,我知道旧的 Windows 版本不支持它)。一般来说,Winamp 的现代皮肤引擎是最接近的例子。

考虑到这一切并考虑到现代 PC 的性能,我可以在每一帧重绘整个窗口还是必须限制到某种剪辑矩形?

0 投票
1 回答
2665 浏览

visual-c++ - 将 2D 纹理的一部分复制到另一个 Direct3D11

我们如何将一个 Direct3D 11 2D 纹理的任意多边形区域复制到另一个纹理?我试过使用 ID3D11DeviceContext::CopySubresourceRegion 方法,但它只复制矩形部分。我使用 Visual C++。

编辑:添加了代码片段。

0 投票
2 回答
2415 浏览

direct2d - 使用 Direct2D 和 DXGI(D3D 互操作)进行多线程处理的最佳实践是什么?

理想情况下,我希望有多个工作线程能够渲染到屏幕外渲染目标,然后将渲染的内容“传输”到屏幕上的目标。使用 hwnd 渲染目标,这似乎不是问题(msdn 有一个例子)。

当屏幕渲染目标基于 DXGI 交换链时,我不太确定该怎么做。据我所知,每个窗口只能有一个交换链。因此,我只能有一个基于交换链的渲染目标。这意味着屏幕上的渲染只能通过那个单一的渲染目标来完成。

如果我的上述假设是正确的,那么处理多线程渲染的最佳方法是什么?我需要序列化对屏幕目标的访问吗?工作线程应该共享一个多线程 d2d 工厂吗?如果有适当的锁定机制,屏幕目标的 BeginDraw/EndDraw/Present 是否可以在工作线程(即未创建屏幕目标的线程)上执行?

我会很感激任何建议。谢谢。

0 投票
3 回答
2770 浏览

direct2d - Direct2D 是否使用后台缓冲区?

阅读https://docs.microsoft.com/en-us/windows/win32/direct2d/comparing-direct2d-and-gdi

演示模型

最初设计 Windows 时,内存不足,无法将每个窗口存储在自己的位图中。因此,GDI 总是在逻辑上直接呈现到屏幕上,并应用各种剪辑区域以确保它不会呈现在其窗口之外。简而言之,Direct2D 遵循一个模型,其中应用程序呈现到后台缓冲区,并且在应用程序完成绘制时自动“翻转”结果。这允许 Direct2D 比 GDI 更流畅地处理动画场景。

作者说 Direct2D 使用后缓冲,我猜“翻转”是指交换链。我创建了一个简单的演示,在鼠标单击时在随机位置绘制一个矩形。但是之前的矩形没有被清除,所以看起来它是直接绘制到屏幕上的,并且不使用任何后台缓冲区。

0 投票
2 回答
454 浏览

delphi - Direct2d 命令类似于 OpenGL 的 SwapBuffers?

什么是类似于 OpenGL 的 SwapBuffers 的 Direct2d 命令?我在 Delphi 和 CPP Builder 等 VCL 环境中使用它。谢谢

0 投票
2 回答
818 浏览

silverlight - Silverlight 或 WPF 应用程序是否使用 Direct2D 或 DirectWrite 来呈现字体和 UI?

我发现很多信息表明 IE9 使用 DirectWrite 和 Direct2D 而不是 GDI 来呈现 UI。WPF 和 Silverlight 应用程序是否也是如此?

0 投票
1 回答
318 浏览

winforms - 使用 D3D10/11 和 MDI 窗口的性能

我正在开发一个 MDI 应用程序,它可能包含很多(>40)实时(30 fps)更新图;每个图形都必须潜在地在其中渲染 3D 几何图形。我已经尝试使用 SlimDX(在每个窗口上)对每个窗口使用 Direct2D,但是当添加超过 16 个窗口时性能下降非常糟糕。任何人都有这方面的经验,其反馈可能有用吗?

  • 我目前正在使用 D3D10/11 API,根据文档,每个窗口都有一个交换链。在 D3D9 文档中,您可以在演示之前切换窗口,这是推荐的用法。我应该尝试改用 D3D9 吗?会不会是交换链切换问题?
  • 如果这不是交换链问题,对我来说跳过 D2D 并只管理我自己的顶点缓冲区并使用 D3D 渲染会更好吗?

问候!

0 投票
1 回答
357 浏览

hardware-acceleration - 我可以在服务器端场景中使用 direct2d 硬件加速吗?

浏览direct2d 资源,似乎硬件加速不适用于服务器端方案。

我的要求是在屏幕外渲染图像。虽然这很容易使用 WicBitmapRenderTarget 实现,但它不是硬件加速的。是否可以使用 Direct2d 实现这一目标?

0 投票
2 回答
1321 浏览

direct3d - 与 Direct3D 10 的最佳 2D 集成?

我有一个应用程序,到目前为止,它主要是 DirectX 10 3D 图形。现在我们想要生成一些实时 2D 图像以显示在屏幕的一部分上。2D 图形将使用来自外部硬件的原始数据生成 - 每个值都将转换为像素颜色和位置。

我已经查看了 Direct2D 集成选项,但我没有看到一种直接的方法来逐个像素地绘制到表面,而只是常见的线条和形状。

我相信仅使用 Direct3D(不使用 Direct2D)也可以做到这一点,并且每个像素都有一个简单的顶点并在正交视图中绘制它。

在生成实时 2D 图形时,使用 Direct2D 是否可以提高效率?我不想使用形状工具,所以这对我来说并不是一个真正的卖点。在 Direct3D 应用程序中生成 2D 图形是否有任何其他常见的做法会更好?

任何指针将不胜感激。谢谢你。

0 投票
2 回答
2924 浏览

c++ - Direct2D 界面和模糊文本问题

我的新应用程序将具有丰富的界面,它应该可以即时调整大小,使用透明图标/图像等。对于这个应用程序,我正在尝试决定使用新的Direct2D API 来对抗旧的 GDI。缺点之一当然是它不能在 XP 上运行,尽管我发现了一些更棘手的问题需要决定:

  1. 我注意到在 Direct2D 环境中输出文本似乎有点模糊(尽管作为一项功能销售)。只需查看启用了硬件加速(或 IE9)的 Firefox 4 中的文本。这似乎是因为 Direct2D 中的文本不像 GDI 那样遵循(像素)网格。有没有办法强制 Direct2D 使其坚持像素网格,从而解决这个问题?

  2. 速度真的有这么大的提升吗?我试图理解这篇文章,我从中得到的是,在 Windows 7 和 XP(不是 Vista?)中,GDI 已经在可能的地方进行了硬件加速。例如,在我的应用程序中,我使用了很多内存 DC,它们刚刚被BitBlt编入到位,并且正在使用AlphaBlend. 最后一个肯定是硬件加速的,因为我在测试例程时测量了速度。

那么你会把钱放在哪里呢?Direct2D 是否值得麻烦,还是您会坚持使用旧的 GDI?或者你会建议别的吗?

注意:顺便说一句,我正在用 C++ 编程,没有使用 MFC。