游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2420|回复: 7

D3D 问题,高手帮忙啊

[复制链接]

9

主题

25

帖子

25

积分

注册会员

Rank: 2

积分
25
发表于 2006-7-12 23:31:00 | 显示全部楼层 |阅读模式
小弟初学D3D,想用D3DXSprite做2D游戏,但是遇到些问题,还有些概念不是很清楚,希望能得到高手们的解答

小弟以前是用DDraw做2D的,以前都是把后台缓冲区开在系统内存,这样可以把贴图也加载到系统内存,在系统内存处理完后一次性把后台缓冲区的内容Blt到显存,这样可以极大的提高效率。但在D3D中不知怎么把后台缓冲区开在系统内存?
还有就是,我用Texture8加载帖图,但加载的帖图太多的时候就产生错误,我估计是加载到显存了,显存不够用了,怎么把Texture8加载到系统内存?

望高手能指教
对了,因为小弟初学还望能得到简单有效的回答,小弟在这里先谢过了

5

主题

686

帖子

697

积分

高级会员

Rank: 4

积分
697
QQ
发表于 2006-7-12 23:42:00 | 显示全部楼层

Re:D3D 问题,高手帮忙啊

D3D的渲染和Blt全部都是在显存中进行的,所以不需要把后台缓冲开在系统内存。用D3DPOOL_SYSTEM可以创建内存纹理,但是它不能用于渲染,只能做备份之用。另外在D3D中做2D一定要注意纹理资源的管理,2D图片容量非常大,全放到显存中是绝对不可能的,一定要用好的调度算法释放当前不用的,保证有足够的显存空间来加载当前要用的纹理

9

主题

25

帖子

25

积分

注册会员

Rank: 2

积分
25
 楼主| 发表于 2006-7-13 11:33:00 | 显示全部楼层

Re:D3D 问题,高手帮忙啊

是不需要把后台缓冲开在系统内存?还是不能开在系统内存?如果能的话,该怎么做?
我的游戏同时用到的纹理非常多,难道说就没有办法了?像暗黑等游戏是怎么处理的?
还望您能进一步解答

41

主题

242

帖子

273

积分

中级会员

Rank: 3Rank: 3

积分
273
发表于 2006-7-13 13:17:00 | 显示全部楼层

Re:D3D 问题,高手帮忙啊

使用动态对tex的处理,用的时候读入,不用的时候清除(set Nothing)。

5

主题

686

帖子

697

积分

高级会员

Rank: 4

积分
697
QQ
发表于 2006-7-13 22:56:00 | 显示全部楼层

Re:D3D 问题,高手帮忙啊

LS正解
你可以建两份纹理,一份在SYSTEMMEM,一份在显存,初始化时从磁盘读入SYSTEMMEM,用的时候从SYSTEMMEM刷进显存,不用的时候释放掉显存的就行了
至于后台缓冲,不能,也不需要创建在系统内存

9

主题

25

帖子

25

积分

注册会员

Rank: 2

积分
25
 楼主| 发表于 2006-7-13 23:33:00 | 显示全部楼层

Re:D3D 问题,高手帮忙啊

我的显卡现存是128M的,但没加载多少就出错了
还有,各位能给点实际的操作代码吗?小弟初学真的是没有头绪,呵呵

89

主题

4036

帖子

4132

积分

论坛元老

Rank: 8Rank: 8

积分
4132
发表于 2006-7-13 23:51:00 | 显示全部楼层

Re:D3D 问题,高手帮忙啊

直接使用D3D的函数,不是很推荐用VB/VB.NET。 最好是用C++。各种调度算法都比较好实现一些。

32

主题

1583

帖子

1589

积分

金牌会员

Rank: 6Rank: 6

积分
1589
发表于 2006-7-15 17:45:00 | 显示全部楼层

Re:D3D 问题,高手帮忙啊

首先,D3D的渲染方法和DDraw不一样,不用考虑什么后台缓冲的问题。

其次,你可以把大量纹理载入到系统内存,当哪一个需要渲染的时候再将其载入显存。

最后,鉴于你说你的128M显卡都经常不够用,可能是你用DDraw的习惯的问题。将图片尽量做成大小为2的幂次的正方形(比如256×256,512×512),这样可以保证显存不被浪费。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-24 23:07

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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