游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4524|回复: 17

请教C++高手我这段代码哪里效率低下?

[复制链接]

30

主题

357

帖子

388

积分

中级会员

Rank: 3Rank: 3

积分
388
QQ
发表于 2006-9-2 19:02:00 | 显示全部楼层 |阅读模式
自己编写了一个地形,预处理了大量数据后开始进入循环渲染。期间没有任何计算,都是调用扇面样板的索引绘制的。但CPU使用率却占到了70%多,Release模式也有60%多,而且是65*65的小地图,不知道怎么回事啊,渲染循环的大体框架如下:


//第1个函数
VOID Game::Render()
{
    // 清除后台缓冲为指定颜色
    // 开始渲染
    调用下面的方法___FLandInfo:raw()
    // 结束渲染
    g_pd3dDevice-&gtresent( NULL, NULL, NULL, NULL );
}

//第2个函数
VOID FLandInfo::Draw()
{
        //设置VB,State,FVF
        for (16个循环)
        {
                if (如果此砖块可渲染)
                {
                    调用下面的方法___FPatch::DrawPatch(传两个参数都是指针)
                }
        }
}

//第3个函数
void FPatch::DrawPatch(两个参数)
{
        //创建局部变量接收2个参数
        for (8个循环 Z)
        {
                for (8个循环 X)
                {
                        调用下面的内联函数___DrawFan(三重指针 ppp[z][x], 指针, pD3D设备);
                }
        }
}

//第4个函数
inline void        FPatch::DrawFan(p, p, pd3dDevice)
{
        //创建局部变量接收3个参数

        pd3dDevice->SetIndices(IB);
        pd3dDevice->DrawIndexedPrimitive();
}

我猜测可能是循环+压栈太多了,另外有个三重指针寻址不知道是不是很慢啊?
希望高手能给个答复~ [em4] [em4]

9

主题

58

帖子

64

积分

注册会员

Rank: 2

积分
64
发表于 2006-9-2 19:27:00 | 显示全部楼层

Re:请教C++高手我这段代码哪里效率低下?


pd3dDevice->DrawIndexedPrimitive();

d3d的Draw函数调用有一定的开销,尽量减少

89

主题

4036

帖子

4132

积分

论坛元老

Rank: 8Rank: 8

积分
4132
发表于 2006-9-2 22:39:00 | 显示全部楼层

Re:请教C++高手我这段代码哪里效率低下?

dp次数不要太多.
gl就没这个问题.

121

主题

2029

帖子

2034

积分

金牌会员

Rank: 6Rank: 6

积分
2034
QQ
发表于 2006-9-3 02:25:00 | 显示全部楼层

Re:请教C++高手我这段代码哪里效率低下?

同上,我当时也是扇面的,8个三角形一次我的85001秒只能渲染12K个三角形。

5

主题

686

帖子

697

积分

高级会员

Rank: 4

积分
697
QQ
发表于 2006-9-3 09:41:00 | 显示全部楼层

Re:请教C++高手我这段代码哪里效率低下?

to xpertsoft:
Low-Batch Size的DP问题OGL里面不存在么?太牛了吧

21

主题

120

帖子

129

积分

注册会员

Rank: 2

积分
129
发表于 2006-9-3 17:00:00 | 显示全部楼层

Re: Re:请教C++高手我这段代码哪里效率低下?

jk20012001: Re:请教C++高手我这段代码哪里效率低下?

to xpertsoft:
Low-Batch Size的DP问题OGL里面不存在么?太牛了吧


关注

34

主题

629

帖子

629

积分

高级会员

Rank: 4

积分
629
发表于 2006-9-3 18:37:00 | 显示全部楼层

Re:请教C++高手我这段代码哪里效率低下?

你先看看你这个东西有多少桢吧,如果你限制FPS在10以下,CPU占用自然就下来了,不限制的话,占用超过50%只能说明你的CPU不是双核/超线程

121

主题

2029

帖子

2034

积分

金牌会员

Rank: 6Rank: 6

积分
2034
QQ
发表于 2006-9-3 18:38:00 | 显示全部楼层

Re:请教C++高手我这段代码哪里效率低下?

不,如果GPU是瓶颈的话CPU占用率也不会太高。

30

主题

357

帖子

388

积分

中级会员

Rank: 3Rank: 3

积分
388
QQ
 楼主| 发表于 2006-9-3 22:32:00 | 显示全部楼层

Re:请教C++高手我这段代码哪里效率低下?

哎!我试了一下,用256*256的点绘制,居然卡的要死,LOD了之后只有几千个面居然也是奇卡,CPU使用率一直是满的,这看来不是 GPU的问题了。

30

主题

357

帖子

388

积分

中级会员

Rank: 3Rank: 3

积分
388
QQ
 楼主| 发表于 2006-9-3 22:37:00 | 显示全部楼层

Re: Re:请教C++高手我这段代码哪里效率低下?

lingjingqiu: Re:请教C++高手我这段代码哪里效率低下?

同上,我当时也是扇面的,8个三角形一次我的85001秒只能渲染12K个三角形。


DP这么慢啊?不是吧!那我该怎么办?改用渲染条带吗?D3D真的没办法用扇面绘制地形啊?或者用OPenGL绘地形,然后用D3D绘制其他的?还请各位高手继续帮忙啊,真不知道怎么办好了! [em7] [em7]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-25 07:21

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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