IDirect3DDevice9 :: StretchRect失败,并显示D3DERR_INVALIDCALL

时间:2018-07-08 12:41:20

标签: c++ directx direct3d

我正在尝试使用IDirect3DDevice9::StretchRect将数据从“屏幕外平面”表面渲染到“渲染目标”表面,但是它返回D3DERR_INVALIDCALL。

根据文档,此功能应在屏幕外起作用以呈现目标操作,因此不确定为什么它可能会失败。

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

有任何提示吗?

1 个答案:

答案 0 :(得分:0)

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