游戏开发论坛

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

显存 Buffer 的理解

[复制链接]

180

主题

3511

帖子

3520

积分

论坛元老

Rank: 8Rank: 8

积分
3520
发表于 2007-2-2 15:38:00 | 显示全部楼层 |阅读模式
渲染,是需要 显存的。

①最原始的方法:
直接写“显示区域”的内存,来实现渲染。

②比较高级的方法:
除了一个“显示区域”外,还有一个同等大小的内存区域“后备内存”

③另外一种方法:
双倍缓冲。

②和③ 是一样的吗?

DOUBLE BUFFER 是几个内存区域? 2个? 还是3个?

是 1个显示区域 + 1个备份?
还是 1个显示区域 + 2个备份?
还是直接就2个备份互相换过来充当显示区域?

[em8]一直都搞不明白。

180

主题

3511

帖子

3520

积分

论坛元老

Rank: 8Rank: 8

积分
3520
 楼主| 发表于 2007-2-2 15:43:00 | 显示全部楼层

Re:显存 Buffer 的理解

OpenGL里面的显存模式,好象有以下几个:

SINGLE, DOUBLE, STEREO

上面的 DOUBLE 和 STEREO 是一样的吗?

如果一个屏幕的画面需要 1.5M内存,那么以上三种模式各自占用多少倍内存?

30

主题

126

帖子

126

积分

注册会员

Rank: 2

积分
126
发表于 2007-2-2 18:29:00 | 显示全部楼层

Re:显存 Buffer 的理解

三缓冲好复哦.

193

主题

870

帖子

903

积分

高级会员

Rank: 4

积分
903
QQ
发表于 2007-2-2 18:43:00 | 显示全部楼层

Re:显存 Buffer 的理解

②和③不一样。
①最原始的方法:
直接写“显示区域”的内存,来实现渲染。这个是早期2D的,现在没有这么用的了。
现在都是通过DX或者OpenGL操作,没办法直接写显存。
②比较高级的方法:
除了一个“显示区域”外,还有一个同等大小的内存区域“后备内存”
这个是用来解决从显存中“读取”的问题的,因为从显存中读取数据到内存代价太高,所以如果有需要读取显存的时候一般要在内存中开一个备份。(我注意到你写的是内存而不是显存)
③另外一种方法:
双倍缓冲。
应该是指双缓冲吧,如果使用DX或者OpenGL的话系统帮你做了这些工作,应该缓冲区都在显存中。

(我不肯定我对LZ说的东西理解是否正确.)

106

主题

743

帖子

745

积分

高级会员

Rank: 4

积分
745
QQ
发表于 2007-2-3 10:03:00 | 显示全部楼层

Re:显存 Buffer 的理解

不知道双缓冲有什么用,曾经设置了,看不出有什么效果。

21

主题

109

帖子

127

积分

注册会员

Rank: 2

积分
127
发表于 2007-2-3 12:31:00 | 显示全部楼层

Re:显存 Buffer 的理解

双缓冲是两个后备缓冲,这样把前两个缓冲翻页过程的这个时间,也利用了起来进行绘图
好像现在没有太大用处了,不过WINDOWS游戏编程大师上说它性能非常好,也许是以前有用吧。

180

主题

3511

帖子

3520

积分

论坛元老

Rank: 8Rank: 8

积分
3520
 楼主| 发表于 2007-2-3 13:26:00 | 显示全部楼层

Re:显存 Buffer 的理解

难道,从后备内存拷贝到显示区域的这个过程,是不听从程序员的意思,硬件自己拷贝?

“后备1 => 显示区域”和“渲染 后备2”是同时进行的?
前者是显卡自动完成,后者是 CPU 完成?

121

主题

2029

帖子

2034

积分

金牌会员

Rank: 6Rank: 6

积分
2034
QQ
发表于 2007-2-3 15:24:00 | 显示全部楼层

Re:显存 Buffer 的理解

硬件方面的东西还是Tarkey,k哥哥和老马解释吧。。。并且请毫不留情的批判我。。。
简单的说,双缓冲是为了同步显示器的帧显示用的。

如果仅使用单缓冲,那么显卡便必须要在显示器的帧刷新间隔才能向帧缓存中提交数据,也就是说,你第一次提交的时间错过的话,那么就请你下个刷新才能提交你的帧数据。这样会使得帧率波动很大,而且很多时间为了同步于显示输出的刷新间隔而白白浪费了很多时间。早期的雅丽达等游戏机,程序员就只能在两帧之间利用有限的时间片来制作逻辑。

但是在双缓存的时候,由于后缓冲是不需要理会帧缓存的显示的,所以可以持续的绘制,而当显示器需要帧缓存数据的时候,那么直接Copy或者Flip过去就好了。具体的。。。我也忘了。。。反正图形硬件的入门书都讲到了。不知道D3D SDK有没有。

180

主题

3511

帖子

3520

积分

论坛元老

Rank: 8Rank: 8

积分
3520
 楼主| 发表于 2007-2-3 16:04:00 | 显示全部楼层

Re:显存 Buffer 的理解

恩!
明白了,3Q!

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
发表于 2007-2-3 16:51:00 | 显示全部楼层

Re:显存 Buffer 的理解

很有收获,看了你们的讨论,我想知道现存到底能不能直接操作?
有的资料说显存读写的速度很慢,我对此不是很了解

比如:在创建顶点缓冲的时候D3DUSAGE_DYNAMIC是不是不常修改的数据,把它数据放显存?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-26 09:22

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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