IDirect3DDevice9::StretchRect 失败 D3DERR_INVALIDCALL

IDirect3DDevice9::StretchRect fails with D3DERR_INVALIDCALL

我正在尝试使用 IDirect3DDevice9::StretchRect 从 Offscreen Plain Surface 将数据 blit 到渲染目标表面,但是它 returns D3DERR_INVALIDCALL.

根据文档,此函数应该适用于屏幕外渲染目标操作,因此不确定为什么会失败。

顺便说一句,如果我用 D3DPOOL_DEFAULT 标志创建屏幕外表面 - 那么 StretchRect 可以工作,但是我需要它在系统内存中,所以我使用 D3DPOOL_SYSTEMMEM 标志,这使得StretchRect 失败。

有什么提示吗?

OK 发现 IDirect3DDevice9::UpdateSurface 可用于此目的,但它不支持缩放。然而,可以使用它将数据复制到中间 D3DPOOL_DEFAULT 表面,然后使用 IDirect3DDevice9::StretchRect 将中间到最终渲染目标表面 blit。