Direct2D --- 为什么画笔资源绑定到各个 Direct2D 呈现目标
Direct2D --- Why are Brush resources bound to individual Direct2D render targets?
为什么Microsoft决定将画笔资源绑定到单个 Direct2D 呈现目标,而不是整个 Direct2D 上下文。如果我们有一个 Direct3D 纹理,该纹理映射到 Direct2D 呈现目标(对于 HUD),当用户在全屏和窗口模式之间切换时需要将其大小调整为屏幕的整个宽度和高度,或者调整窗口大小,我们应该怎么做?发生这种情况时,唯一要做的就是重新创建所有画笔;还是有其他方法,例如以某种方式将画笔绑定到 ID2D1Factory,而不是 Direct2D 图面?
画笔需要在 GPU 上分配资源。由于 Direct2D 是"无策略"API,这意味着他们希望确保你可以直接控制内存使用情况,因此画笔工厂方法挂起呈现器目标而不是根工厂。否则,他们需要制定一些策略来决定何时释放硬件资源,并且该策略在某些情况下始终是错误的(这会对性能或内存使用情况产生负面影响)。
几何图形和描边样式的工厂方法挂在根工厂之外,因为它们存储在主内存中,并且它们影响的任何处理都是在 CPU 上完成的。您可以通过ID2D1Mesh
将带有描边样式的几何对象"编译"为硬件资源,这基本上只是将其直接细分到顶点缓冲区中。虽然它会快得多(在渲染时,而不是在细分时!),但它也可以使用更多的内存,具体取决于几何体的复杂性。
我不确定这是否有帮助,因为您没有描述当用户在全屏模式和窗口模式之间切换时会发生什么,所以我假设唯一的变化是渲染目标的大小,如果是这种情况,您可以通过调用 ReSize 函数来调整渲染目标的大小,并像往常一样使用画笔, 刷子不需要改变任何东西。
相关文章:
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- C++A*算法并不总是在路径中具有目标节点
- 基于树莓pi的tensorflow lite量化ssd目标检测
- 为测试目标创建具有不同源文件夹的文件
- 使用源向量作为目标
- 是否可以用C++/WinRT将windows 10.0.14393作为目标
- 在 CMake 中为每个目标设置编译器/链接器标志
- qmake:检测目标位宽(32 位或 64 位)
- 如何在 CMake 中对目标依赖项进行分组?
- 我的目标是编写一个程序来计算和存储字符串在字符数组中出现的位置
- 如何为包含头文件的目标编写生成文件?
- 线性优化目标函数中的绝对值
- 制作文件:没有规则来制定目标:如何设置正确的规则?
- 字符串函数在目标C++上运行时C++返回空
- 如何定义自定义生成配置类型,其中通常是.exe的目标改为 DLL
- 请求最简单的 OpenMP 目标 GPU 示例
- LLVM 编译:目标的配方 '../lib/IR/Release+Asserts/Intrinsics.gen.tmp' failed
- 调整DXGI交换链绑定到Direct2D渲染目标
- Direct2D --- 为什么画笔资源绑定到各个 Direct2D 呈现目标
- 给定同一Direct2D工厂的多个渲染目标