gpt4 book ai didi

c++ - Direct2D --- 为什么画笔资源绑定(bind)到各个 Direct2D 渲染目标?

转载 作者:搜寻专家 更新时间:2023-10-31 01:52:55 25 4
gpt4 key购买 nike

为什么 Microsoft 决定将 Brush 资源绑定(bind)到单个 Direct2D 渲染目标,而不是整个 Direct2D 上下文。如果我们有一个 Direct3D 纹理,它被映射到一个 Direct2D 渲染目标(对于 HUD),当用户在全屏和窗口模式之间切换或调整大小时,需要将其大小调整为屏幕的完整宽度和高度,我们应该怎么做 window ?发生这种情况时,唯一要做的就是重新创建所有画笔;还是有其他方法,例如以某种方式将画笔绑定(bind)到 ID2D1Factory,而不是 Direct2D 表面?

最佳答案

画笔需要在GPU上分配资源。由于 Direct2D 是一种“无策略”API,这意味着他们希望确保您可以直接控制内存使用,因此画笔工厂方法卡在渲染目标而不是根工厂。否则,他们需要制定一些政策来决定何时释放硬件资源,而该政策在某些情况下总是错误的(它会对性能或内存使用产生负面影响)。

几何和笔划样式的工厂方法卡在根工厂之外,因为它们存储在主内存中,并且它们影响的任何处理都在 CPU 上完成。您可以通过 ID2D1Mesh 将带有笔划样式的几何对象“编译”到硬件资源中,这基本上只是将其直接镶嵌到顶点缓冲区中。虽然它会快得多(在渲染时,而不是在曲面 segmentation 时!),但它还可以使用很多更多的内存,具体取决于几何体的复杂性。

关于c++ - Direct2D --- 为什么画笔资源绑定(bind)到各个 Direct2D 渲染目标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11883140/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com