目前我正在为 Windows Store 开发应用程序,它使用 Direct2D 进行实时图像处理。它必须支持各种尺寸的图像。我遇到的第一个问题是如何处理图像大于支持的最大纹理大小的情况。经过一些研究和文档阅读后,我发现 VirtualSurfaceImageSource 作为解决方案。想法是将图像加载为 IWICBitmap,然后使用 CreateWICBitmapRenderTarget 创建渲染目标(据我所知,它不是硬件加速的)。经过一些绘图操作后,我想通过使 VirtualSurfaceImage 源中的相应区域无效或在 NeedUpdate 回调触发时将结果显示到屏幕上。我认为可以通过创建 ID2D1Bitmap(硬件加速)并使用使用 CreateWICBitmapRenderTarget 创建的渲染目标和无效区域作为边界来调用 CopyFromRenderTarget,但该方法会返回 D2DERR_WRONG_RESOURCE_DOMAIN 作为结果。使用 IWICBitmap 的另一个原因是应用程序中涉及的算法之一,它必须有权更新图像的像素。
问题是为什么这个逻辑不起作用?这是使用 Direct2D 实现我的目标的正确方法吗?此外,如果我想在 GPU 上使用大于最大允许纹理大小的图像进行图像处理,那么使用 CreateWICBitmapRenderTarget 创建的渲染目标不是硬件加速的,这是最佳解决方案吗?
先感谢您。