游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3882|回复: 9

[求助]DirectX程序中资源的动态加载问题

[复制链接]

5

主题

34

帖子

34

积分

注册会员

Rank: 2

积分
34
发表于 2009-5-7 12:35:00 | 显示全部楼层 |阅读模式
[em7]如何实现动态加载资源呢?比如一边游戏一边读取地图,要开辟新线程么?另外DirectX不支持线程又是什么意思?基于DX的程序如何实现动态加载资源呢?最好有个例子,呵呵,太贪心了

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
发表于 2009-5-8 00:08:00 | 显示全部楼层

Re:[求助]DirectX程序中资源的动态加载问题

DWORD devBehaviorFlags = 0;
        if( caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT )
                devBehaviorFlags |= mRequestedVP;
        else
                devBehaviorFlags |= D3DCREATE_SOFTWARE_VERTEXPROCESSING;

        if(m_bDebugShader)
        {
      devBehaviorFlags = D3DCREATE_SOFTWARE_VERTEXPROCESSING;
        }

     devBehaviorFlags |=D3DCREATE_MULTITHREADED; //创建的设备支持多线程环境下使用

就是D3DCREATE_MULTITHREADED这个标志,打开就可以了,dx设备支持多线程的,我现在也是这么干的

只要会用线程,自然就知道怎么动态加载了,动态加载的过程有很多部分要用线程的调度,如果资源竞争处理不好,频繁的等待唤醒,以及频繁上锁临界互斥,那基本效率也跟单线程一个样,而且还难维护,这关键看你怎么写了,客户端不见得多线程就一定高效,极有可能写一堆垃圾,楼主要有心里准备

8

主题

125

帖子

125

积分

注册会员

Rank: 2

积分
125
发表于 2009-5-8 01:29:00 | 显示全部楼层

Re:[求助]DirectX程序中资源的动态加载问题

一边游戏一边读取地图,这样不好吧 -。-
就算开辟多线程来做,万一人家个CPU是单核呢,那样会造成性能下降。
大部分游戏过场等时候都会有个LOADING画面,这个时候开始加载接下来要用的资源,和释放之前不用的资源……
所以在下推荐动态加载资源时,还是用单线程来操作。枚举个状态不是很好吗~
客户端使用的多线程技术,一般是给逻辑部分一个主线程,给渲染部分开辟个新线程。

5

主题

34

帖子

34

积分

注册会员

Rank: 2

积分
34
 楼主| 发表于 2009-5-8 10:07:00 | 显示全部楼层

Re:[求助]DirectX程序中资源的动态加载问题

谢谢楼上两位,其实我也不想搞多线程啊,就是为了避免loading画面,我感觉欧美的大部分游戏已经避免了明显loading过程了,GTA的游戏模式个人认为会成为主流

8

主题

125

帖子

125

积分

注册会员

Rank: 2

积分
125
发表于 2009-5-8 19:55:00 | 显示全部楼层

Re:[求助]DirectX程序中资源的动态加载问题

那个,是不是好像在一整个大关卡之前就有LOADING的,就像终极刺客和GTA系列,一个大章节之前都还是有LOADING。
对了,还有就是播放过场剧情动画的时候,同时也在加载资源。

7

主题

22

帖子

25

积分

注册会员

Rank: 2

积分
25
发表于 2009-5-8 21:03:00 | 显示全部楼层

Re: Re:[求助]DirectX程序中资源的动态加载问题

tonykee: Re:[求助]DirectX程序中资源的动态加载问题

DWORD devBehaviorFlags = 0;
        if( caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT )
                devBehavior...

兄弟在做多线程的时候会不会有内存的问题?我用多线程的时候经常内存出错?如果要线程同步该怎么做?

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
发表于 2009-5-8 22:30:00 | 显示全部楼层

Re:[求助]DirectX程序中资源的动态加载问题

我的没有内存错误啊,我的线程里面读数据的操作都不用dx的api(即使用也没问题),我有自己的mesh格式,读取准备好了数据才通知主线程中dx的api去生成mesh,这其中需要设置一些临界区锁,说实话客户端使用多线程唯一好的就是能把磁盘操作IO和渲染分离开来,我把渲染放主线程,并没有单独设渲染的线程,也够用了,关键是线程之间共享信息的锁要做好就ok了。

5

主题

34

帖子

34

积分

注册会员

Rank: 2

积分
34
 楼主| 发表于 2009-5-9 01:01:00 | 显示全部楼层

Re:[求助]DirectX程序中资源的动态加载问题

5L,我大概就这个意思,其中GTA是最夸张的,只有读档的loading
恩,大概决定开个线程负责读盘了,只是没经验,有点怕怕的...

2

主题

79

帖子

85

积分

注册会员

Rank: 2

积分
85
QQ
发表于 2009-5-11 11:14:00 | 显示全部楼层

Re:[求助]DirectX程序中资源的动态加载问题



  程序中资源的动态加载问题跟DirectX没有关系的.

5

主题

34

帖子

34

积分

注册会员

Rank: 2

积分
34
 楼主| 发表于 2009-5-13 10:11:00 | 显示全部楼层

Re:[求助]DirectX程序中资源的动态加载问题

LS,如果新开个读盘的线程,在该线程里调用directx里读文件的函数,没问题么?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-20 09:33

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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