|
|
我看到一个粒子系统的实现,在Init的时候先创建一张空白纹理
IDirect3DDevice9* m_pRrenderTarget;
pd3dDevice->(m_uWidth, m_uHeight, 1,
D3DUSAGE_RENDERTARGET,
D3DFMT_A8R8G8B8,
D3DPOOL_DEFAULT,
&m_pRenderTarget,
NULL);
在Render的时候,先渲染到纹理中,再把纹理渲染到后台缓冲:
IDirect3DSurface9* pRTSurface = NULL;
m_pRenderTarget->GetSurfaceLevel(0, &rpRTSurface);
pd3dDevice->SetRenderTarget(0, pRTSurface);
... 渲染Praticles到m_pRenderTarget ...
// 恢复渲染目标
IDirect3DSurface9* pBackBuffer = NULL;
pd3dDevice->GetBackBuffer(0, 0, D3DBACKBUFFER_TYPE_MONO, &pBackBuffer);
pd3dDevice->SetRenderTarget(0, pBackBuffer);
// 渲染画好的纹理
pd3dDevice->SetTexture(0, m_pRenderTarget);
...
我觉得从表面上看这种方式要在一frame中渲染两次,效率并不怎么样啊。但是有什么深层的含义呢,求教了。 |
|