问题标签 [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.
image - 如何将 ID2D1Bitmap 保存为 PNG 文件
尝试将 ID2D1Bitmap(从 ID2D1HwndRenderTarget 创建的)保存到 PNG 文件时遇到问题。输出图像只是空白的白色。从函数调用 EndDraw() 返回的 HRESULT 为 -2003238894。
谢谢你的帮助。
这是我的代码:
visual-c++ - 无法在firebreath插件中绘制到窗口
好的,目前我在尝试使用 direct2d 的 firebreath 插件写入窗口时遇到了一些大麻烦。
我添加了 FB::AttachedEvent 事件,并在处理程序中生成了一个线程,我在其中传递了 PluginWindow(转换为 FB::PluginWindowWin* ),在该线程中我初始化了 direct2d 图形,并有我的渲染循环。
我的第一个主要问题是传递给处理程序的插件窗口似乎不正确。当我得到 HWND 并在其上运行 GetCLientRect 时,我得到的尺寸是窗口尺寸的 60 倍。在 HTML 中,我将宽度和高度设置为 640 x 480,但矩形返回的尺寸为 38400 x 28800?
我是否在某些时候错误地配置了firebreath?
bitmap - DirectX -- 将四边形渲染到 WicBitmapRenderTarget (SharpDX)
根据前面的问题,我正在尝试使用 Direct3D11 非常快地执行一些图像变形,但似乎无法让所有东西一起工作。
当我尝试将 DXGI Surface 读入 Direct2D 位图时,一切都失败了。
我也尝试使用该Map
方法直接读取表面,但在我尝试对数据做任何事情之前就失败了:
更完整的代码如下。另外,如果这里有什么与这份工作无关的东西……我全神贯注。我不是一个真正的 3D 人,只是试图解决一个没有简单 Direct2D 解决方案的非常具体的问题。
c++ - 如何为 IWICBitmap 创建 ID2D1DeviceContext?(用于 C++ 中的 Metro 应用程序)
我可以使用以下代码为 IWICBitmap 创建 ID2D1RenderTarget ...
但是如果我想将 ID2D1Effect 应用到这个位图,我只能在有 ID2D1DeviceContext 的情况下这样做。如何获取 IWICBitmap 的 ID2D1DeviceContext?
directx - 使用 Direct2D 在 Direct3D11 表面上绘图
我正在尝试创建一个使用 D2D 和 D3D11 在视频上绘制文本的媒体基础转换。我正在尝试在 D3D11 资源之上构建 D2D RenderTarget,但不幸的是,大多数 D2D 和 D3D 互操作方法都需要 D3D10,这在此项目中不可用。
我必须使用的参数如下:ID3D11Device *pDevice、ID3D11Texture2D *pInput、UINT uiInIndex、ID3D11Texture2D *pOutput 和 UINT uiOutIndex。
我试图遵循本教程的建议,但结果证明它需要一个 ID3D10Texture2D 对象,这对我来说又不是一个选项。
directx - 在 SharpDx 中保存为 png
我在 Direct2D 下使用 SharpDx 开发 Metro-application。我用deviceContext
. 如何将我的图片保存为 png 文件?
c++ - Direct2D --- 为什么画笔资源绑定到单个 Direct2D 渲染目标?
为什么 Microsoft 决定将 Brush 资源绑定到单个 Direct2D 渲染目标,而不是整个 Direct2D 上下文。如果我们有一个 Direct3D 纹理,该纹理映射到 Direct2D 渲染目标(对于 HUD),当用户在全屏和窗口模式之间切换或调整大小时,需要将其大小调整为屏幕的整个宽度和高度窗户?发生这种情况时,唯一要做的就是重新创建所有画笔;还是有其他方法,例如以某种方式将画笔绑定到 ID2D1Factory,而不是 Direct2D 表面?
cuda - 如何将 DirectX 专用于 GPU 并将 CUDA 专用于另一个 GPU?
在我的应用程序中,GUI 线程使用 Direct2D 显示图像,允许用户平移和缩放,而另一个线程使用 CUDA 进行图像处理。为了防止图形处理线程受到 GUI 线程的干扰并加快处理速度,选择为 CUDA 计算添加单独的图形卡,设置如下:
- 用于显示的 Nvidia Quadro 400(Direct2D,与 PC 一起出售,足以用于显示目的)
- Nvidia GT640 专门用于 CUDA 计算(专门为 CUDA 计算添加,因为它具有更多内核,因此对于应用程序必须执行的操作更有效,在 BIOS 中禁用显示,不连接屏幕)。CUDA 线程包含使其仅使用此 GT640 的代码。
然而,这并没有像预期的那样工作,因为当用户平移图像,从而导致连续多次更新显示时,CUDA 执行时间从典型的 20 毫秒跳到了大约 800 毫秒。使用 GPUView(我发现它正在调查这个问题并且根本不掌握),我能够看到 CUDA 线程似乎正在等待显示器完成更新,然后再将其命令排队到 GPU。与此同时,Direct2D 让 GPU 大部分时间都处于闲置状态(1ms 的工作对应 16ms 的 VSync 周期)。看起来我对 Direct2D 的调用阻塞了所有 GPU 16 毫秒,然后 GUI 线程让 CUDA 线程饿死(尽管这些线程除了 GPU 访问之外没有以任何方式同步)。
所以问题是:
- 会发生什么?
- 强制 Direct2D 仅在一个特定的 GPU 上执行会有所帮助吗?
- 甚至有可能还是我以错误的方式解决问题?
direct2d - 如何在保持其他文本对象不变的情况下转换 DirectWrite 文本对象之一
我在同一个渲染目标上有几个 DirectWrite 文本对象,我想一次转换其中一个对象,同时保持其他对象不变,在 Direct2D 中,有几种类型的转换
- 渲染目标变换
- 几何变换
- 画笔变换
我不能使用渲染目标变换,因为它会影响上面的所有对象
我不能使用几何变换,因为文本不是几何,并且 IDWriteTextLayout 没有变换方法。
所以对我来说唯一的选择是画笔变换,但是当我尝试使用实心画笔绘制一个变换的矩形时,它仍然在原来的地方绘制(见下面的代码),sdk演示显示了一个位图画笔变换的例子,所以我的问题是:转换是否适用于其他类型的画笔?像实心刷?
这是我的代码,首先,根据经过的时间计算一个平移矩阵,然后使用该矩阵平移画笔,最后绘制矩形。请看一下并告诉我是否是这种情况,或者我是否可以通过其他方式做到这一点?
direct2d - 如何在 Direct2D 中获取路径几何的分段?
下图显示了 Direct2D 中的路径几何,它包含 5 段,每段是一条直线,我的要求是,给定这样的一座山,我想获得所有 5 条线。
但是在Direct2D中似乎没有相关的API可以获取路径几何的段,我看到ID2D1PathGeometry接口提供了GetSegmentCount方法,如果我们不能获取段,为什么微软提供这个方法?