c++ - Turbo C 中的 SVGA 编程

标签 c++ turbo-c++ bgi

<分区>

我想用 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/

相关文章:

c++ - "invalid use of incomplete type"作为模板参数的 const 函数指针类型

c++ - X11 窗口不会自动更新/绘图

c++ - Winmouse在C++控制台上的坐标

c - 带有图形的程序被中止,即使调用了 XInitThreads

c - GNU/Linux 替代 Turbo C 函数 `clrscr` 和 `cprintf`

c++ - 禁止在没有用户定义构造函数的情况下显式复制数据成员

c - C语言程序运行时出现错误

c++ - 为什么这个程序会显示编译时警告?

c++ - 如何在 C 中包含第三方库?

c++ - 使用标准笛卡尔圆公式在图形模式下绘制圆(C++)