关于RenderTarget的注意事项
来源:互联网 发布:深圳软件外包协会 编辑:程序博客网 时间:2024/06/10 13:54
1. 设置一个RenderTarget会导致viewport变成跟RenderTarget一样大
2. 反锯齿类型必须跟DepthStencilBuffer一样
3. RenderTarget的类型必须跟DepthStencilBuffer的类型兼容, 可以用IDirect3D9::CheckDepthStencilMatch进行检测
4. DepthStencilBuffer的大小必须>=RenderTarget的大小
5. IDirect3DDevice9::SetRenderTarget的第0个不能为NULL
6. Usage为D3DUSAGE_RENDERTARGET的Texture不能进行反锯齿, 而且Pool必须为D3DPOOL_DEFAULT. 如果想利用RenderTarget做为纹理又想反锯齿, 可以先把场景渲染到一个CreateRenderTarget创建的Surface(或BackBuffer)上, 再用IDirect3DDevice9::StretchRect拷贝到纹理上
7. D3DX提供了一个ID3DXRenderToSurface, 简化了RenderTarget的使用. 注意它的BeginScene跟EndScene与再用IDirect3DDevice9的同名函数对不能嵌套, 因为实际上内部还是调用的IDirect3DDevice9的, 用PIX可以看到它进行了哪些调用. 还有就是这个接口仍然不能反锯齿, 而且每次都要保存/恢复一堆状态, 总觉得不爽
8. RTT不能既做为输入就做为输出目标, 某些显卡上可能只会给一个warning, 有些显卡上则会发生报错/黑屏/死机之类不可预计的事情...另外, Depth stencil texture(参见Hareware shadow map)也有同样的问题, 用完之后要SetTexture(n, NULL)清空, 不然A卡会黑屏/花屏/深度错误, 既使你没有使用, 只要它被寄存器引用了, 显卡还是会当做是正在使用的, 这时就不能做为depth stencil buffer
9. RTT如果想保存到文件中, 是不能直接SaveToTexture的. 需要创建一个OffscreenSurface, 拷贝过去, 再保存. 不过N卡好像不支持DXT1格式的OffscreenSurface, 可以创建Texture, 取其level0的surface代替.
10. N卡在开启了锯齿后冒似所有的RTT都要反锯齿, 不然深度测试会失败-_-
11. Intel的显卡在RTT没有设置DepthBuffer时可能所有绘制全部深度测试失败, 需要关闭深度测试再画.
12. 想到再写
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/xoyojank/archive/2009/02/11/3876843.aspx
补充:
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
- 关于RenderTarget的注意事项
- 关于RenderTarget的注意事项
- 关于RenderTarget的二三事
- 关于RenderTarget的二三事
- RenderTarget
- 关于的若干注意事项
- 关于xp_cmdshell的注意事项
- 关于define的注意事项
- 关于背包的注意事项
- 关于Textarea的注意事项
- 关于ListView的注意事项
- 关于AsyncTask的注意事项
- 关于安卓适配的注意事项
- 关于面试的注意事项
- 关于memset的注意事项
- 关于监听的注意事项
- 关于postgresql的注意事项
- 关于pgpool的注意事项
- Winform程序注销
- UltraEdit编辑文件编码为utf-8容易带有BOM导致的错误解决
- 添加、删除SVG Viewer的主菜单项
- vc修改注册表开机自动启动程序
- 使用daemontools监控服务
- 关于RenderTarget的注意事项
- SAP 添加在线Library
- VC得到指定文件的详细信息/属性
- ie7下javascript中获取input type=file中的内容
- 第一次来这里~大家支持下吧~
- 瑞星木马防御专杀QQ,360,百度软件管家(见图为证!)
- 堆和栈的区别
- 关于短延迟 SLEEP USLEEP NANOSLEEP SELECT
- 000-702 最新题库资料【Testinside 最新题库180元起】