为什么微软决定将笔刷资源绑定到单独的Direct2D渲染目标,而不是整个Direct2D上下文。如果我们有一个映射到Direct2D渲染目标(对于平显)的Direct3D纹理,当用户在全屏和窗口模式之间切换,或者调整窗口大小时,需要调整到屏幕的全宽和全高,我们应该怎么做?发生这种情况时,唯一要做的就是重新创建所有笔刷;还是有其他方法,比如以某种方式将笔刷绑定到ID2D1Factory,而不是Direct2D表面?
发布于 2012-10-09 03:02:42
笔刷需要在GPU上分配资源。由于Direct2D是一个“无策略”的应用程序接口,这意味着它们希望确保您可以直接控制内存使用,因此笔刷工厂方法挂起呈现目标而不是根工厂。否则,他们需要制定一些策略来决定何时释放硬件资源,并且该策略在某些情况下总是错误的(它将对性能或内存使用产生负面影响)。
几何图形和笔划样式的工厂方法挂在根工厂之外,因为它们存储在主内存中,并且它们影响的任何处理都在CPU上完成。可以通过ID2D1Mesh将具有笔划样式的几何体对象“编译”为硬件资源,这基本上只是将其直接细分到顶点缓冲区中。虽然它会快得多(在渲染时,而不是在细分时!),但它也可以使用更多的内存,具体取决于几何体的复杂性。
发布于 2012-09-30 08:43:21
我不确定这是否有帮助,因为你没有描述当用户在全屏模式和窗口模式之间切换时会发生什么,所以我假设唯一的变化是渲染目标的大小,如果是这样的话,你可以通过调用ReSize函数来调整渲染目标的大小,并像往常一样使用笔刷,不需要使用笔刷进行任何更改。
https://stackoverflow.com/questions/11883140
复制相似问题