D3D9下的获得RenderTarget有2种方法
1. 使用D3DXCreateTexture或者Device->CreateTexture 创建纹理
调用Device->GetSurfaceLevel(0, &SurfacePtr );获得Surface指针
将Surface指针使用Device->SetRenderTarget设置上去即可开始绘制
注意:D3DXCreateTexture创建的是2的n次幂的纹理,而Device->CreateTexture 创建的则可以是任意大小的纹理
这种方法创建的Texture与Surface是一一对应的,由D3D底层自动做了Resolve的过程
不能使用MultiSample
2. 使用Device->CreateRenderTarget()创建一个Surface,用Surface直接设置为RenderTarget
可以开启Lockable选项,但是效率会非常低
可以使用MultiSample
由于没有Texture的关联,这种方法绘制速度理论上会快一些
可以使用Device->StretchRect来将Surface直接拷贝到后备缓冲或者另外一个Surface。不过在DX8和某些DX9的驱动上有一定兼容性问题,具体请参考SDK
参考:
Render to Surface
http://www.borgsoft.de/renderToSurface.html
渲染到纹理(Render To Texture, RTT)详解
http://www.opengpu.org/bbs/viewthread.php?tid=445