游戏开发论坛

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

本人写的D3D程序,CPU50%,请教为什么啊?

[复制链接]

10

主题

36

帖子

42

积分

注册会员

Rank: 2

积分
42
发表于 2008-1-3 14:26:00 | 显示全部楼层 |阅读模式
我弄了两个纹理
tex0  : 1280*1536
tex1  : 2560*4096
其中tex0用 D3DXCreateTextureFromFile(); 获得
tex1自己创建了一张固定的2560*4096的BMP,自己填上数据,然后用 D3DXCreateTextureFromFileInMemory() 获得
然后用自己的Effect文件处理 tex0 和 tex1

可是CPU占用率50%,难道不是用GPU的么?哪里来的CPU利用率?

程序的循环体只做了下面的事情

// The message loop
MSG msg;
while(msg.message != WM_QUIT)
{
    if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    Game_Main();
}

int Game_Main()
{
    g_pEffect->SetTechnique(TechHandle);

    //begin technique
    g_pEffect->Begin(NULL,0);
    g_pEffect-&gtass(0);
    g_pd3dDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2);       
    //end technique
    g_pEffect->End();

    g_pd3dDevice->EndScene();
    g_pd3dDevice->Present(NULL, NULL, NULL, NULL);
}

请高手指点一下~~~本人新手~~~~  [em7]

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
发表于 2008-1-3 16:05:00 | 显示全部楼层

Re:本人写的D3D程序,CPU50%,请教为什么啊????

一看就知道是双核的cpu以前单核的时候还100%呢,再正常不过了。呵呵。。。

写个main里面放个空循环试试,看是不是也是50%?
再想想是为什么

14

主题

345

帖子

376

积分

中级会员

Rank: 3Rank: 3

积分
376
QQ
发表于 2008-1-3 17:16:00 | 显示全部楼层

Re:本人写的D3D程序,CPU50%,请教为什么啊????

while(msg.message != WM_QUIT)
{
    if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    Game_Main();
}
一个while循环CPU能闲着?

10

主题

36

帖子

42

积分

注册会员

Rank: 2

积分
42
 楼主| 发表于 2008-1-3 17:31:00 | 显示全部楼层

Re:本人写的D3D程序,CPU50%,请教为什么啊????

但是原来的程序就是这样的
不过tex小很多,我只是稍作修改,改了tex大小和自定义的tex1,然后改了effect而已
原来的CPU利用率,几乎为0

10

主题

36

帖子

42

积分

注册会员

Rank: 2

积分
42
 楼主| 发表于 2008-1-3 18:13:00 | 显示全部楼层

Re:本人写的D3D程序,CPU50%,请教为什么啊????

同样的代码在家里又试了一下,cpu0%
不知道是不是因为在公司开了双显示器的缘故。
明天回公司测试一下。

35

主题

1735

帖子

1739

积分

金牌会员

Rank: 6Rank: 6

积分
1739
QQ
发表于 2008-1-3 21:35:00 | 显示全部楼层

Re:本人写的D3D程序,CPU50%,请教为什么啊????

想必定是有其原因的了,自己调试才是正道。

10

主题

36

帖子

42

积分

注册会员

Rank: 2

积分
42
 楼主| 发表于 2008-1-4 10:21:00 | 显示全部楼层

Re:本人写的D3D程序,CPU50%,请教为什么啊????

大家觉得我写这么大的tex,会不会很慢啊??
有经验的说一下一般D3D程序应该注意些什么?

5

主题

77

帖子

77

积分

注册会员

Rank: 2

积分
77
发表于 2008-1-4 17:28:00 | 显示全部楼层

Re:本人写的D3D程序,CPU50%,请教为什么啊?

纹理要是2的指数次方,tex0  : 1280*1536
tex1  : 2560*4096
而且纹理要尽可能小些,这都是基本常识,纹理是有规则的,不要乱指定大小

14

主题

37

帖子

37

积分

注册会员

Rank: 2

积分
37
发表于 2008-1-4 17:45:00 | 显示全部楼层

Re:本人写的D3D程序,CPU50%,请教为什么啊?

真的是一样的吗?

while(msg.message != WM_QUIT)
{
    if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    Game_Main();
}

加黑的地方用GetMessage()和PeekMessage()有很大不同。使用GetMessage可以使程序在没有消息时空闲;而使用PeekMessage则使事件循环一直满负荷运转。

就是说,你这样的代码,除非在Game_Main()中有Sleep(),否则CPU肯定满负荷运转。

5

主题

77

帖子

77

积分

注册会员

Rank: 2

积分
77
发表于 2008-1-4 18:13:00 | 显示全部楼层

Re:本人写的D3D程序,CPU50%,请教为什么啊?

这样写,大歌,呵呵
while(msg.message != WM_QUIT)
{
    if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    else
    {
        Game_Main();
    }
}


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

本版积分规则

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

GMT+8, 2025-12-19 09:35

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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