在研究了 80 年代和 90 年代的视频游戏机后,我发现它们依赖于视频芯片来完成显示游戏图形所需的大部分工作。CPU 只需告诉视频芯片在屏幕上显示哪个内存位置上的哪个图像即可。由于所有图形和滚动背景都是由视频芯片完成的,因此可以实现流畅滚动的 2D 游戏。到 90 年代初,纹理可以很好地转换并显示在屏幕上,从而实现简单的 3D 图形。

我听说过 Direct Draw,这似乎是 Microsoft 实现这些功能并允许显卡制造商制造支持它的硬件的方法。当时的 PC 游戏没有使用 2D 加速,还是游戏机上的 2D 加速远远优于当时的 PC 所能提供的加速?1983 年的 NES 有 1.8MHz CPU,1990 年的 SNES 有 3.58MHz CPU,两者都有流畅滚动的 2D 游戏。SNES 甚至有基本的 3D 游戏。

我似乎记得直到 486 CPU 出现后,分辨率为 320×200 的流畅滚动 PC 游戏才得以实现,而直到我们超越 ISA 显卡并出现速度更快的 CPU 后,才出现更高分辨率的游戏。

编辑:我并不一定将其限制在 PC 图形上。也欢迎讨论 Apple 或 SGI 工作站图形之类的东西。2D 加速不仅适用于游戏。滚动页面和地图等 2D 图形都受益于加速。

10

  • 1
    您能具体说说您考虑的是哪种 2D PC 视频卡吗?我能想到的所有具有 2D 加速的卡也都具有某种 3D 加速,在此之前的 VGA 卡根本没有任何加速(这就是为什么您需要足够快的 CPU 和总线(如果我没记错的话,Wing Commander 甚至可以在 486 之前的 CPU 上运行,只要总频率足够高)。控制台和许多家用电脑都支持图块和精灵,而 PC 卡则不支持。


    – 

  • 1
    这取决于你谈论的是哪个时代的卡。纯 2D 卡大约有 20 年的历史。DOS 时代的 VGA 卡没有,Windows 3.11 中的后期卡有一些基本的填充和复制以及硬件鼠标光标功能,而 Windows 95/98 DirectX 时代更复杂、更新的 PCI/VLB 卡可以拥有任何东西,DirectX 使用可用的硬件功能,然后使用软件来实现不可用的功能。


    – 


  • 2
    啊,S3。是的,他们有一些纯粹是 2D Windows 加速器的卡,但只用了很短的时间,直到他们还添加了 3D。虽然我不知道有任何专门为这些编写的游戏,但可能有些游戏可以利用它们。


    – 

  • 2
    我认为您想要的搜索词是“Windows 加速”,因为 PC 2D 加速显卡实际上并没有用于游戏或面向游戏销售,而是在 Win3.x 时代提高了 GUI 性能。


    – 


  • 3
    我可能错了,所以不要太当真,但我投票决定关闭,因为它没有重点。我的感觉是,目前发布的问题是“将 PC/Mac/SGI 2d 加速与同一时代的游戏机进行比较”,这会导致冗长而离题的回答,而不是有力的 StackOverflow 风格的权威、有来源的答案。其他人可能会不同意,而且经常会不同意。没什么大不了的。只是提供这条评论来解释我的投票。


    – 


最佳答案
3

出于好奇,我尝试收集具有 2D 加速但没有 3D 加速的显卡品牌和芯片组。这些显卡似乎在 90 年代初期短暂上市。到目前为止,我有:

  • 1987 年:IBM 8514
  • 1990 年:ATI Mach 8
  • 1991 年:S3 911、911A
  • 1992年:ATI Mach 32
  • 1992年:Tseng ET4000/W32系列(不是ET4000本身)
  • 1993 年:西锐 CL-GD5426 及其后续机型
  • 1994 年:ATI Mach 64 直至 VT/264VT4
  • 1994年:S3 Vision864、Vision964
  • 1995 年:S3 Trio64 和 64V+

此后,ATI 和 S3 都开始加入 3D 加速。

ATI mach 是 IBM 8514 的克隆版,S3 Trio 也使用了 Vision 芯片组,后来具有 3D 的 S3 卡则具有完全不同的 2D 加速方案。

2D 特征由 BitBLT、线和多边形组成,可选择填充和栅格操作。如果你用 Google 搜索一下,就能找到数据表,例如

IBM 8514 采用微通道硬件,我预计其用途主要是 CAD 系统等,如果有任何游戏使用它,我会感到非常惊讶。

我记得在 Linux 下也有适用于 ATI Mach 和 S3 Trio 卡的特殊驱动程序,因此您可以对 X 进行一些加速操作。

我不知道有哪款游戏使用了 ATI Mach 或 S3 Trio 硬件。我认为滚动 2D 游戏不会从加速功能中获益太多。

我不会将这些卡片提供的单个小光标精灵算作真正的“加速度”。

6

  • 2
    “真正的加速度”=“真正的苏格兰人”?


    – 

  • 1993 年,我有一台 Diamond SpeedStar Pro,据称可以加速 Windows 和 CAD,它在 VLB 上使用 Cirrus Logic 芯片组。我记得,与使用类似计算机但没有该卡的同学相比,运行 AutoCAD 时有明显的改进。包含该卡的技术细节。


    – 

  • 还有许多基于 Intel 82786 或 TI 34010(以及后来的 34020)的卡(尽管它们都不是特别受欢迎),还有一张卡同时具有这两种功能。82786 主要进行硬件窗口处理,但 34010 几乎是一个功能齐全的 CPU,具有许多面向位的“东西”的指令,以支持诸如位块传送之类的功能。这两款处理器均于 1986 年发布。


    – 


  • 您可能想要添加基于 Tseng 的卡。虽然原始 ET 卡没有提供更多功能,但由于其极快的内存接口,它们提供了出色的 2D 性能。1994 年 (?) ET4000/W32 随后添加了完整的 256 ROP BitBlit,本地 RAM 高达 4 MiB,主 RAM 为 32 位。此外,所有 2D 处理都可以完全卸载。与 WinG 和 DirectDraw 配合使用效果很好。在 1990 年代中期,它们基本上统治了低端/专业市场。我更喜欢 ET4000(添加了 Vooodoo),直到 GeForce 炸毁了一切。我记得我是在 1999 年圣诞节后的一周购买的,当时第一批货已运抵德国。


    – 

  • 3
    Richard F. Ferraro – “EGA、VGA 和超级 VGA 卡程序员指南 (第 3 版)”1600 页,1994 年 除了 S3 和 Trident 之外,还描述了一些其他卡:Cirrus Logic、Oak、Tseng Labs、Paradise/Western Digital、Weitek。:) 我的一个朋友根据那本书为 Cirrus 卡编写了一个 2D 位块传输例程,它运行良好并且速度超快,全屏可以被位块传输数十次。


    – 


某些 NES 和 PC 显卡之间的根本区别在于,PC 显卡只是逐个串行地从帧缓冲区输出像素。从一开始(嗯,从 PC 获得图形支持的时候起)就是这样。而要为游戏或 GUI 构建任何类型的复杂场景,都需要将实际图像数据写入帧缓冲区。2D 加速通过卸载简单任务(如绘制线条、矩形、将像素块从一个地方复制到另一个地方)来帮助 CPU。但仅此而已。任何类型的加速都只是硬件原语的顺序应用,这些原语取代了 CPU 的常见访问模式。您从某个点(空白屏幕或旧帧内容等)开始,执行一系列数据写入或硬件加速调用 – 最后,您会在帧缓冲区中获得图像 – 场景的所有像素。3D 也是如此,它只是构建帧缓冲区内容。某些硬件上的某些步骤可能会隐藏/缓存场景的中间状态而不会将其溢出到帧缓冲区中,但最终其相关部分将写入帧缓冲区中。

现在 NES 不会写入任何像素。它通过检查当前位于与屏幕像素对应的区域中的精灵来直接合成输出。由于在给定的时间内,您可以在屏幕上的像素检查和组合的位置非常多,并且检查是由专用的硬件块完成的,而您只有固定数量的硬件块 – NES 上的精灵和背景层数量是有限的。此限制在 PC 上不存在,因为它可以花费尽可能多的时间将所有像素写入帧缓冲区,无论场景是否完成,输出都将显示帧缓冲区的当前状态。

NES 和 2D 加速 PC 卡之间唯一的共同点是硬件覆盖(在 PC 上),通常用于播放视频。这就像一个巨大的精灵,其中像素内容不是由帧缓冲区内容决定的,而是由单独的图像决定的,通常存储在不同的颜色空间中,如 YUV 与 RGB。并且视频输出将根据覆盖位置选择要显示哪个“像素”。

2D 加速 PC 视频卡上的另一种精灵是硬件鼠标光标,如 所述@hippietrail。虽然早期的程序必须将鼠标光标图像直接绘制到帧缓冲区中作为像素,然后在每次鼠标移动时重新绘制受影响的区域,但使用硬件加速鼠标光标允许程序避免明确绘制鼠标。这样的光标可以具有不同的颜色深度并且可以动画化,而不会以任何方式影响应用程序。

3

  • 2
    PC 2D 图形加速器通常为鼠标指针提供硬件精灵,或者至少一个精灵。就像在控制台和所有具有硬件精灵的系统上一样,不必将其绘制到帧缓冲区中。根据您对“帧缓冲区”的定义,最早的 PC 可以被视为没有/不需要帧缓冲区,因为在文本模式下它们也不输出像素,而是直接从提供像素的字符生成器“合成”。也可以说,只要有 VRAM 就符合图形加速的条件。


    – 

  • @hippietrail 此类 2D 加速器还可以进行一些基本的填充、复制和位块传输。但它需要 DOS 程序专门支持该卡,因此对​​于游戏来说它毫无用处。如果您安装了卡的驱动程序,Windows 3.X 可能会使用这些功能。


    – 

  • @Justme 是的,在玩完 Doom 后,我就不再玩电脑游戏了。游戏可能有各种显卡的驱动程序,也可能没有。操作系统有。我没有注意到这个问题是专门关于游戏的,我会继续将其标记为游戏。


    – 

游戏机采用了几种 2D 硬件加速技术的组合,让我们看看它们与 PC 上的技术相比有何不同:

基于图块的图形

这在 NES / SNES / Sega MegaDrive 上很常见,但由于固有的局限性,PC 从未真正支持它。对于平台游戏风格的游戏来说,这种游戏的关卡由存储在卡带 ROM 中的一组有限的图块组成,但对于通用个人电脑来说,这种游戏的用处要小得多。

顺便说一句,即使在游戏机上,某些游戏也不得不采取一些技巧,例如,如果游戏需要“动态”生成图形图像,则在 RAM 中动态生成图块。据我回忆,NES 上的 Elite 严重依赖动态图块,因为这是生成动态线框 3D 图像的唯一方法。

在 PC 上最接近的近似方法是用文本模式重新编程字符生成器,​​这对于游戏开发来说几乎没有实际用途(尽管已知一些演示场景制作使用了这种技术)。

硬件精灵

再次,这是游戏机上游戏开发的“基本要素”,其中游戏玩家将使用基于图块的图形作为游戏场,并使用精灵作为玩家角色和“敌人”。

不幸的是,PC 显卡实际上并不支持除鼠标光标之外的硬件精灵。也许某些特殊型号支持,但这肯定不常见。

硬件滚动

如果我没记错的话,PC 视频卡从 EGA 开始就支持此功能。事实上,Commander Keen 大量使用了硬件滚动。

然而,由于 PC 图形是基于帧缓冲区而不是基于图块的,因此需要真正发挥创造力才能充分利用 EGA/VGA 硬件滚动。因此,我们更应该向 John Carmack 先生的编程天才致敬。

此外,PC 上的硬件滚动支持缺乏视差滚动支持。

值得注意的是,随着 PC CPU 频率和显卡总线速度的提高,上述技术逐渐失去意义。到 DirectDraw 推出时,PC 硬件已经完全能够实现纯软件的屏幕外合成和视频页面翻转,并产生足够的 FPS。

与光束赛跑

游戏机能够相当精确地跟踪 CRT 光束位置,从而实现诸如在屏幕中间动态切换调色板或图块组,或显示比视频电路允许的更多的硬件精灵(有一些限制,但仍然存在)等技巧。

在 PC 上,如果我没记错的话,一些光束竞速可以从 VGA 开始,但与控制台不同的是,PC 图形电路既没有“显示列表”(想想视频芯片并行执行的代码),也没有用于跟踪光束位置的可编程中断,因此光束竞速大量涉及重新编程计时器和处理计时器中断。

5

  • 5
    有些技巧在 VGA 之前的硬件上是可行的,但当时并不为人所知,或者只在某些显卡上,或者两者兼而有之。在过去 3 年左右的时间里,出现了一个非常出色的演示,可以在非常早期的 IBM PC 硬件上实现所有这些技巧:


    – 

  • “[…] 也没有可编程中断来跟踪光束位置,因此,光束竞速需要大量重新编程定时器和处理定时器中断。” 一些 PC 卡确实有垂直回扫中断。PCjr 内置的图形和 MCA 版本的 VGA 就是其中几个例子。EGA 记录了它,但它在大多数卡上都不起作用(但我确实看到了一些它可以工作的地方)。


    – 


  • 80 年代后期,个人电脑上也出现显示列表卡,但据我所知,所有这些卡都支持 3D,并且仅受 CAD 程序支持,而不受游戏支持。


    – 

  • 这取决于您认为哪些功能是“加速”。例如,EGA 和 VGA 具有 4 平面帧缓冲区,并且能够同时在所有四个平面上执行某些操作。这在 Amstrad PC1512 / 1640 上很明显;PC1512 具有 16 色 640×200 模式,但必须依次写入每个平面,导致在绘制菜单等 GUI 元素时出现闪烁,而 PC1640 可以利用其 EGA 芯片组一次性绘制元素。


    – 

  • 啊!s/draw-droppingly/jaw-droppingly/


    –