BeginDraw() (Direct2D) 的位置在编码时重要吗?
Is the position of BeginDraw() (Direct2D) important when coding?
我目前正在学习如何使用 Direct2D 创建应用程序,我想知道在调用 "BeginDraw()" 之后放置大量 'non-graphical' 代码是否有影响。我不完全理解 "BeginDraw()" 实际上做了什么,所以我的问题主要是关于执行时间。它会减慢其他进程吗?是'eating'被调用后的CPU直到"EndDraw()"被调用?
在 BeginDraw
内度过的时间段内,您不会获得额外费用。
调用它需要付费,就像任何其他函数一样,因为它需要准备东西和处理状态。在这方面,少BeginDraw
块比多好。
但是你不会因为块的作用域更长而产生成本。事实上,如果需要的话,更早地调用它甚至可能是有益的,因为它让 Direct2D 库有时间进行后台处理。可能只涉及获取内存。我希望这会产生微不足道的影响或没有影响,但如果这是唯一的改变,那么早点这样做不会有什么坏处。
在实践中,尽量使用尽可能少的块。并使用任何可用的命令缓冲 API 作为对立即绘制命令的反对。 (抱歉这里缺少细节,我自己对 DirectDraw 不是很熟悉,更多的是 OpenGL/Vulkan 开发者)
您会很高兴知道 BeginDraw 在调用后不会消耗 CPU 时间。有些人分析他们的游戏或应用程序,并得到像 ID2DDeviceContext.BeginDraw
(实际上通常是 EndDraw
)和 IDXGISwapChain.Present
这样的调用消耗大量 CPU 的印象。事实上,它只是以这种方式出现,因为它们是此类应用程序中最常发出的两个调用。还有一个很好的机会,有些人可能会误解分析报告。
简单地说,BeginDraw
和 EndDraw
只是定义您何时可以对 DeviceContext
或 RenderTarget
进行绘图调用。何时调用它完全取决于您拥有的应用程序类型。如果它有一个游戏循环,请在您的主要 Draw 方法开始时调用它。您可以编写一个完整的游戏,每个游戏只调用一次 BeginDraw
和 EndDraw
。
我目前正在学习如何使用 Direct2D 创建应用程序,我想知道在调用 "BeginDraw()" 之后放置大量 'non-graphical' 代码是否有影响。我不完全理解 "BeginDraw()" 实际上做了什么,所以我的问题主要是关于执行时间。它会减慢其他进程吗?是'eating'被调用后的CPU直到"EndDraw()"被调用?
在 BeginDraw
内度过的时间段内,您不会获得额外费用。
调用它需要付费,就像任何其他函数一样,因为它需要准备东西和处理状态。在这方面,少BeginDraw
块比多好。
但是你不会因为块的作用域更长而产生成本。事实上,如果需要的话,更早地调用它甚至可能是有益的,因为它让 Direct2D 库有时间进行后台处理。可能只涉及获取内存。我希望这会产生微不足道的影响或没有影响,但如果这是唯一的改变,那么早点这样做不会有什么坏处。
在实践中,尽量使用尽可能少的块。并使用任何可用的命令缓冲 API 作为对立即绘制命令的反对。 (抱歉这里缺少细节,我自己对 DirectDraw 不是很熟悉,更多的是 OpenGL/Vulkan 开发者)
您会很高兴知道 BeginDraw 在调用后不会消耗 CPU 时间。有些人分析他们的游戏或应用程序,并得到像 ID2DDeviceContext.BeginDraw
(实际上通常是 EndDraw
)和 IDXGISwapChain.Present
这样的调用消耗大量 CPU 的印象。事实上,它只是以这种方式出现,因为它们是此类应用程序中最常发出的两个调用。还有一个很好的机会,有些人可能会误解分析报告。
简单地说,BeginDraw
和 EndDraw
只是定义您何时可以对 DeviceContext
或 RenderTarget
进行绘图调用。何时调用它完全取决于您拥有的应用程序类型。如果它有一个游戏循环,请在您的主要 Draw 方法开始时调用它。您可以编写一个完整的游戏,每个游戏只调用一次 BeginDraw
和 EndDraw
。