【3D技术宅公社】XR数字艺术论坛  XR技术讨论 XR互动电影 定格动画

 找回密码
 立即注册

QQ登录

只需一步,快速开始

调查问卷
论坛即将给大家带来全新的技术服务,面向三围图形学、游戏、动画的全新服务论坛升级为UTF8版本后,中文用户名和用户密码中有中文的都无法登陆,请发邮件到324007255(at)QQ.com联系手动修改密码

3D技术论坛将以计算机图形学为核心,面向教育 推出国内的三维教育引擎该项目在持续研发当中,感谢大家的关注。

查看: 2911|回复: 2

[求助]关于后备缓冲区的surface

[复制链接]
发表于 2007-12-7 17:12:44 | 显示全部楼层 |阅读模式

请教一下。。。

用Getbackbuffer()可以很方便的获得后备缓冲区的surface。。但是我想把这个获得的surface再画在屏幕上。。或者对他进行一些纹理操作。。那该怎么办呢?如果另外创建一个texture,然后lock,在memcpy。。这样会比较慢。。如果获取这个texture的surface,然后用GetRendertargerdata()将后备缓冲的surface拷到这个surface中则会失败。。。

另外顺便问下。。我在绘制2D游戏地图的时候。。因为地图是很多个texture组成的(有地表,花草,树木),每个都要调用一次DrawPrimitive(),这样效率非常之低下。。帧数很少。。我后来创建了一张类别是rendertarget的texture,获取他的surface,然后将surface替代后备缓冲作为渲染目标。将地表之类的东西花到上面,然后再一次调用DrawPrimitive(),虽然这样效率很高,但是由于创建一张类别是rendertarget的texture是必须在D3DPOOL_DEFAULT中。。而D3DPOOL_DEFAULT是显存。。如果创建过多将会提高游戏的显存门槛。。。

再后来,又有人告诉我创建一个大的顶点缓冲区,将所有使用相同纹理的地表的顶点缓冲区集中放在里面,这样SetTexture()一次,然后再DrawPrimitive()一次,就可以一次画出所有使用相同texture的地表,不过我使用这种方法测试的时候。。一调用DrawPrimitive()的时候。。系统蓝屏了。。。

发表于 2007-7-30 21:24:33 | 显示全部楼层
先用D3DXLoadSurfaceFromSurface将Getbackbuffer()的SurfaceA数据load到SystemMem的另一SurfaceB,对SurfaceB进行修改后,调用D3DDevice的UpdateSurface将其更新至SurfaceA中即可
发表于 2007-7-16 15:07:16 | 显示全部楼层

1.没有明白 你调用后备缓冲区用来做什么,所以不知道怎么处理

2.rander完以后一次提交DrawPrimitive(),dix都是这么做的,不是每个提交

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|3D数字艺术论坛 ( 沪ICP备14023054号 )

GMT+8, 2025-5-14 19:19

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表