<分区>
我想用 Turbo C++ 进行 1024*768 编程
我正在使用 Turbo C 3.0,我正在使用旧的 VGA 方法调用图形
<code>initgraph( &GraphDriver, &GraphMode, "..\\bgi" );</code>
我想要一个可以轻松处理SVGA 模式和真彩色 的库。
<分区>
我想用 Turbo C++ 进行 1024*768 编程
我正在使用 Turbo C 3.0,我正在使用旧的 VGA 方法调用图形
<code>initgraph( &GraphDriver, &GraphMode, "..\\bgi" );</code>
我想要一个可以轻松处理SVGA 模式和真彩色 的库。
最佳答案
有多家 SVGA 卡芯片制造商,对它们进行编程可能需要针对每一种芯片的特定代码(除非您的显卡支持 VESA,请参见下文)。我很久以前(90 年代)就这样做了,我使用 POVRAY(一种光线追踪器)的来源作为引用。
幸运的是,POVRAY 今天仍然存在:http://www.povray.org/
这里需要抓取http://www.povray.org/ftp/pub/povray/Old-Versions/仍然具有 SVGA 例程的 1990 年代旧版本的源代码(作者可能在最新版本中删除了它们!)。您会在源代码中找到一堆内联汇编函数,用于初始化图形模式并为各种图形板/制造商(S3、ET4000 等)设置像素。首先解压 POVSRC.ZIP,然后解压 MACHINE.ZIP,然后解压 IBMPC.ZIP(它在 IBM.C 中)。
代码有点深奥:这是因为最初 IBM PC 的视频内存不超过 64Kb(位于 A000:0000 段)。为了获得更高的分辨率,有一种称为“bank switching”的技术,它允许更改映射到 A000:0000 的视频 RAM 中的“窗口”。
如果您的 SVGA 板支持 VESA 标准(大多数都是这种情况),那么事情可能会更容易,有一个标准中断用于更改图形模式和进行库切换(因此您可能只需要在 POVRAY 中找到“设置图形模式”和“设置像素”的 VESA 实现。
最后,我提到了 djgpp(g++ 端口到 MSDOS),它有一个 32 位 DOS 扩展器和一个图形库(grx),它以一种巧妙的方式使用虚拟内存来模拟连续的图形内存(它为视频 RAM 并使用页面错误中断自动触发库切换)。我用它在 33Mhz 486 上进行 3D 图形编程。
编辑: 挖了一下之后,我发现有例程的最新版本是这里的那个: http://www.povray.org/ftp/pub/povray/Old-Versions/Official-3.1g/MS-Dos/
解压povmsd_s.zip
例程位于 SOURCE/MSDOS/VESAVBE.{H,C}(如果您的卡支持 VESA 规范,则可用)。其他卡的例程在SOURCE/MSDOS/MSDOSVID.C
关于c++ - Turbo C 中的 SVGA 编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42561452/