游戏开发论坛

 找回密码
 立即注册
搜索
查看: 5627|回复: 4

DrawPrimitive与DrawPrimitiveUP有何区别?

[复制链接]

7

主题

28

帖子

28

积分

注册会员

Rank: 2

积分
28
发表于 2009-5-27 18:52:00 | 显示全部楼层 |阅读模式
初学D3D,感觉有点新鲜!但也产生很多的疑问。
我看到很多入门书给出的例子都是:
首先创建一个VertexBuffer或者IndexVertexBuffer
然后Lock住Buffer把自己的顶点copy进去
再然后就是SetStreamSource,,,,,,SetFVF.....再然后DrawPrimitive或DrawIndexedPrimitive渲染出来。
但我在文档上看到一个DrawPrimitiveUP方法。不用创建VertexBuffer。

我是个初学者,我不理解、为什么要用VertexBuffer,有什么好处。直接用DrawPrimitiveUP渲染不就得了嘛。怎么还这么麻烦要创建VertexBuffer再把自己的顶点数据COPY进去。。再用DrawPrimitive渲染。觉得好麻烦。请高人说说VertexBuffer的作用?

看两个例子:一个使用VertexBuffer,一个不使用VertexBuffer。

           g_pDevice->CreateVertexBuffer(sizeof(CUSTOMVERTEX) * 3, 0,FVF,D3DPOOL_MANAGED,&g_pVB,0);
       
        CUSTOMVERTEX* pData;
        if(D3D_OK == g_pVB->Lock(sizeof(CUSTOMVERTEX)*3,sizeof(CUSTOMVERTEX)*3,(void**)&pData,0))
        {
                memcpy(pData,tri1,sizeof(CUSTOMVERTEX)*3);
                g_pVB->Unlock();
        }

7

主题

28

帖子

28

积分

注册会员

Rank: 2

积分
28
 楼主| 发表于 2009-5-27 18:58:00 | 显示全部楼层

Re: DrawPrimitive与DrawPrimitiveUP有何区别?

我标题写错了,我应该问VertexBuffer有什么作用。和不用VertexBuffer有什么不同?

7

主题

28

帖子

28

积分

注册会员

Rank: 2

积分
28
 楼主| 发表于 2009-5-27 19:03:00 | 显示全部楼层

Re: DrawPrimitive与DrawPrimitiveUP有何区别?

if(D3D_OK == g_pVB->Lock(sizeof(CUSTOMVERTEX)*3,sizeof(CUSTOMVERTEX)*3,(void**)&pData,0))
我写错了,晕死
应该 if(D3D_OK == g_pVB->Lock(0,0,(void**)&pData,0))

0

主题

3

帖子

9

积分

新手上路

Rank: 1

积分
9
发表于 2009-5-27 23:17:00 | 显示全部楼层

Re:DrawPrimitive与DrawPrimitiveUP有何区别?

速度啊。

59

主题

404

帖子

404

积分

中级会员

Rank: 3Rank: 3

积分
404
发表于 2009-5-28 10:24:00 | 显示全部楼层

Re:DrawPrimitive与DrawPrimitiveUP有何区别?

DrawPrimitive的速度明显比DrawPrimitiveUP快一点

因为DrawPrimitiveUP每次画的时候都需要从内存传递顶点信息到显存.

而DrawPrimitive则直接用显存里的VB IB来画, 当然更快了.

不过做2d游戏用DrawPrimitiveUP也不错, 至少帧率能达到200左右, 算是很快了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-20 07:52

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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