现在我知道的是,通常使用“双缓冲”:如果要获得最大帧数,则在屏幕上显示帧x的同时计算帧x + 1的内容更新速率,计算时间不得超过一帧,否则“绘制过程”是可见的。教程。
但是,如果我以某种方式编程我的东西,使得每个原语都导致片段成为水平线,然后让GPU从头到尾“动态地”处理它,该怎么办? />在这种情况下,我只需要一个可以用静态背景填充的帧缓冲区,而我只需要将其他对象存储在较小的内存中即可。
这是否可能?甚至没有任何GPU实现可以通过这种方式节省内存吗?
#1 楼
确实有/只是“及时”渲染器。例如,Dreamcast(PowerVR CLX2)具有一种模式,其中“帧缓冲区”仅需要几行磁贴大小。当显示器正在读取其他显示器的某些子集时,系统将渲染成一排。然后它将循环通过缓冲区。
为了做到这一点,您确实需要一个显示列表渲染系统。标准的“立即模式”渲染器是不合适的。特别是,如果屏幕的一小部分包含特别复杂的几何图形,则渲染器可能无法在显示器需要读取它之前及时完成它。为部分屏幕缓冲区分配更多的内存可以使场景复杂性更多地变化。飞行”,因为内存(用于帧缓冲区)曾经非常昂贵。
或者,Tomb Raider的PowerVR PCX1 / PXC2端口具有可选的单缓冲渲染模式。 (这主要是因为做端口的一个人(咳嗽,我咳嗽)只有2MB的2D图形卡,只能分配单个1024x768帧缓冲区)。同样,由于该系统是基于图块的,因此它不会遭受传统Z缓冲区系统上单缓冲所带来的令人讨厌的伪影。
更新:另一个有关“拉梁”的问题
评论
顺便说一句,有时,如果您有剩余的内存,则使用三重缓冲。这样可以在渲染速率上提供更大的灵活性。想象一下,您的目标是60Hz,但是渲染器偶尔会花费> 1/60秒的时间。使用双缓冲时,这将导致降至30Hz。三重缓冲使更新速率保持更稳定,但代价是增加了延迟。