Direct2D - 为什么Brush资源绑定到单个Direct2D渲染目标?

问题描述 投票:2回答:2

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

c++ directx direct2d
2个回答
2
投票

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

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


1
投票

我不确定这是否有帮助,因为你没有描述当用户在全屏模式和窗口模式之间切换时会发生什么,所以我假设唯一的变化是渲染目标的大小,如果是这种情况,您可以通过调用ReSize函数来调整渲染目标的大小,并像往常一样使用画笔,不需要随刷子更改。

© www.soinside.com 2019 - 2024. All rights reserved.