游戏开发论坛

 找回密码
 立即注册
搜索
楼主: D_BOY_JQ

游戏里D3DXSPRITE稍微多点就很卡?(附游戏)

[复制链接]

14

主题

61

帖子

65

积分

注册会员

Rank: 2

积分
65
 楼主| 发表于 2005-9-23 20:39:00 | 显示全部楼层

Re:游戏里D3DXSPRITE稍微多点就很卡?(附游戏)

试过了,依然没有改善

63

主题

871

帖子

891

积分

高级会员

Rank: 4

积分
891
QQ
发表于 2005-9-23 20:48:00 | 显示全部楼层

Re:游戏里D3DXSPRITE稍微多点就很卡?(附游戏)

那就是你程序的性能问题了^^

给你看看我的DX8  2D  ,, 看一下速度

http://forum.cnman.com/quest/down/HardBlend.rar

14

主题

61

帖子

65

积分

注册会员

Rank: 2

积分
65
 楼主| 发表于 2005-9-23 20:55:00 | 显示全部楼层

Re:游戏里D3DXSPRITE稍微多点就很卡?(附游戏)

"程序的性能",问题是我其他都不变,只把显示部分改成ddraw的就一点都不掉桢(但也就64FPS左右),不解~~~我RP不好么>-<

14

主题

61

帖子

65

积分

注册会员

Rank: 2

积分
65
 楼主| 发表于 2005-9-23 21:01:00 | 显示全部楼层

Re:游戏里D3DXSPRITE稍微多点就很卡?(附游戏)

对了,我用的是DX8,版本是"Microsoft DirectX 9.0 SDK (April 2005)"跟这没关系把

5

主题

41

帖子

41

积分

注册会员

Rank: 2

积分
41
发表于 2005-9-23 23:17:00 | 显示全部楼层

Re:游戏里D3DXSPRITE稍微多点就很卡?(附游戏)

有一点我觉得需要提醒大家的,DDraw绘制时一般的做法是利用"系统内存"和"CPU"进行各种处理,最好的做法完全在"系统内存"中"绘制"好之后再拷贝到"主显存";而D3D的sprite一般是利用"显存"和"GPU"进行处理,最好的做法一般是直接利用显卡的各种混合绘制,也就是图片最好都是在显存中的

5

主题

41

帖子

41

积分

注册会员

Rank: 2

积分
41
发表于 2005-9-23 23:21:00 | 显示全部楼层

Re:游戏里D3DXSPRITE稍微多点就很卡?(附游戏)

不好意思,不小心按了回车,上面的没发全!
有一点我觉得需要提醒大家的,DDraw绘制时一般的做法是利用"系统内存"和"CPU"进行各种处理,最好的做法完全在"系统内存"中"绘制"好之后再拷贝到"主显存";而D3D的sprite一般是利用"显存"和"GPU"进行处理,最好的做法一般是直接利用显卡的各种混合绘制,也就是图片最好都是在显存中的,不需要"系统内存"和"CPU"任何介入的才是最快的,一旦介入,帧数下降及其明显!

不知道楼主是否注意到以上的没有!

82

主题

331

帖子

340

积分

中级会员

Rank: 3Rank: 3

积分
340
QQ
发表于 2005-9-23 23:25:00 | 显示全部楼层

Re:游戏里D3DXSPRITE稍微多点就很卡?(附游戏)

我上次动态改一个 512 x 512 ( 32 bits ) 纹理的象素信息,用了 6s .....

14

主题

61

帖子

65

积分

注册会员

Rank: 2

积分
65
 楼主| 发表于 2005-9-24 01:20:00 | 显示全部楼层

Re:游戏里D3DXSPRITE稍微多点就很卡?(附游戏)

回16楼的zjdyhyb:你的意思是创建纹理时用D3DPOOL_DEFAULT这个参数么?我明白你的意思,但具体怎样做呢?还有我发现我用D3DXFONT写多点字也很卡(比如显示每个精灵的坐标)>-<

我创建纹理的代码:
D3DXCreateTextureFromFileEx(pDev,BitmapFileName ,
                D3DX_DEFAULT,
                D3DX_DEFAULT,
                1,
                0,
                D3DFMT_UNKNOWN,
                D3DPOOL_MANAGED,
                D3DX_DEFAULT,
                D3DX_DEFAULT,
                colorkey,//一个参数
                NULL,
                NULL,
                &tex);

14

主题

61

帖子

65

积分

注册会员

Rank: 2

积分
65
 楼主| 发表于 2005-9-24 01:26:00 | 显示全部楼层

Re:游戏里D3DXSPRITE稍微多点就很卡?(附游戏)

这是渲染精灵的:
sf->spr->Draw(sf->tex,
                &sf->SrcRect,
                NULL
                &D3DXVECTOR2(rx,ry),
                angle,
                &D3DXVECTOR2(tx1,ty1),
                0xFFFFFFFF);
我有个结构
struct Surface
{
        LPD3DXSPRITE spr;
        LPDIRECT3DTEXTURE8 tex;
        RECT SrcRect;//tex中的RECT
};//每个精灵对象有个Surface指针,每种精灵的Surface只有一个拷贝,在游戏初始化时创建

14

主题

61

帖子

65

积分

注册会员

Rank: 2

积分
65
 楼主| 发表于 2005-9-24 01:29:00 | 显示全部楼层

Re:游戏里D3DXSPRITE稍微多点就很卡?(附游戏)

渲染的过程大概是:
pDev->Clear(0,NULL,D3DCLEAR_TARGET,D3DCOLOR_XRGB(0,0,0),1.0f,0);
pDev->BeginScene();
渲染所有精灵;
pDev->EndScene();
    if (pDev-&gtresent(NULL,NULL,NULL,NULL)==D3DERR_DEVICELOST)
        {
                if (pDev->TestCooperativeLevel()==D3DERR_DEVICENOTRESET)
                {
                        SAFE_RELEASE(pFont)
                        pDev->Reset(&d3dpp);
                        if(FAILED(D3DXCreateFont( pDev, font, &pFont)))return false;
                        Setup2DCamera();
                        if(!RestoreTexture())return false;//恢复纹理
                        if(!RestoreSurface())return false;//恢复精灵的Surface
                }
        }
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-23 02:51

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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