directx (sharpDX) 在 GPU 上对图像应用效果而不是 CPU
directx (sharpDX) applying effect to image on GPU instead of CPU
对于一个项目,我有一个图像,该图像具有必须在屏幕上显示的数千条注释(例如圆圈、字符串、直线、十字)。基本上,假设我有 50 000 个注释。现在,我想使用 CPU 在我的屏幕上绘制它们以循环遍历所有这些注释,使它们使用 deviceContext.DrawCircle(或线或十字...)绘制,一旦全部加载到我的屏幕并进入GPU。我希望能够缩放而不必在 CPU 上重新绘制所有那些 50 000 个注释,因为这大约需要 1 秒,这对于图像缩放来说太长了。
我的问题:有没有一种方法可以放大这些注释和图像,而不必重新绘制所有这些组件并为所有组件循环。我的缩放最大需要 50 毫秒,所以这就是为什么我期待将这些更改直接发生在 GPU 上,而不是返回 CPU,应用更改并将它们重新绘制到屏幕上...
您可以使用 rendertarget|shaderresourceview 并绘制到它。如果是这样,您可以轻松地将其用作平面的纹理。这会产生一个大的 drawcall,然后您可以随意缩放而不会影响性能。一个很好的优化是使用两个渲染目标进行绘制和呈现,然后在当前交换它们......这样你就可以与它们异步工作而不会出现访问冲突。
对于一个项目,我有一个图像,该图像具有必须在屏幕上显示的数千条注释(例如圆圈、字符串、直线、十字)。基本上,假设我有 50 000 个注释。现在,我想使用 CPU 在我的屏幕上绘制它们以循环遍历所有这些注释,使它们使用 deviceContext.DrawCircle(或线或十字...)绘制,一旦全部加载到我的屏幕并进入GPU。我希望能够缩放而不必在 CPU 上重新绘制所有那些 50 000 个注释,因为这大约需要 1 秒,这对于图像缩放来说太长了。
我的问题:有没有一种方法可以放大这些注释和图像,而不必重新绘制所有这些组件并为所有组件循环。我的缩放最大需要 50 毫秒,所以这就是为什么我期待将这些更改直接发生在 GPU 上,而不是返回 CPU,应用更改并将它们重新绘制到屏幕上...
您可以使用 rendertarget|shaderresourceview 并绘制到它。如果是这样,您可以轻松地将其用作平面的纹理。这会产生一个大的 drawcall,然后您可以随意缩放而不会影响性能。一个很好的优化是使用两个渲染目标进行绘制和呈现,然后在当前交换它们......这样你就可以与它们异步工作而不会出现访问冲突。