请问,怎么使用CreateOffscreenPlainSurface创建的表面
我将CreateOffscreenPlainSurface 创建的表面,调用SetRenderTarget,总是返回无效的调用,用IDirect3DDevice9::CreateTexture创建一个纹理,再调用纹理的GetSurfaceLevel得到一个表面去调用设备的SetRenderTarget也总是返回无效的调用,谁有可用的代码可否借阅一下?
[解决办法]
不需要创建离屏表面,即便创建,也必须创建到显存里(D3DPOOL_DEFAULT)
RTT示例
void CRender::RenderExample(){ // m_pD3DDevice->BeginScene() // ... static bool bRTT = true; IDirect3DSurface9* pOldSurface = NULL; IDirect3DTexture9* pDstTexture = NULL; if (bRTT) { // 用于RTT的纹理必须是D3DUSAGE_RENDERTARGET、D3DPOOL_DEFAULT参数 if (SUCCEEDED(D3DXCreateTexture(m_pD3DDevice, 1024, 1024, 0, D3DUSAGE_RENDERTARGET, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &pDstTexture))) { m_pD3DDevice->GetRenderTarget(0, &pOldSurface); // 保存当前的渲染目标表面 IDirect3DSurface9* pDstSurface = NULL; pDstTexture->GetSurfaceLevel(0, &pDstSurface); m_pD3DDevice->SetRenderTarget(0, pDstSurface); // 设置渲染目标 } else { bRTT = false; } } // 渲染部分 // ... if (bRTT) { m_pD3DDevice->SetRenderTarget(0, pOldSurface); // 恢复渲染目标表面 pOldSurface = NULL; // 输出最终纹理 D3DXSaveTextureToFileA("out.png", D3DXIFF_PNG, pDstTexture, NULL); pDstTexture->Release(); bRTT = false; } // ... // m_pD3DDevice->EndScene();}