【问题标题】:Changing display modes from the command line从命令行更改显示模式
【发布时间】:2015-01-14 21:39:08
【问题描述】:

很久以前就想从一本游戏编程书籍中学习 C。如果我没记错的话,你的游戏“引擎”要做的第一件事就是切换显示模式以进行渲染。这涉及到切换到 640x480 显示模式(可能是模式 13?)的一些 asm,因此您可以直接在屏幕上绘图。类似的东西。

我的问题是,现代的等价物是什么?我有兴趣编写一个执行类似操作的命令行程序;进入某种光栅模式供我绘制,但是,我不认为我的程序会在 kde、unity、Aqua 等某种窗口管理器下运行。

这是 OpenGL 可以提供的东西吗(或者 OpenGL 也假设一个窗口管理器)。我提议的程序不是游戏,但理想情况下会从一个基本的清晰屏幕开始,我可以绘制图元(二维线、圆形矩形等)

干杯!

【问题讨论】:

  • 模式 13 只有 320x200,但它最受欢迎,因为它允许对所有字节进行线性访问,而其他更高分辨率的模式需要 blit 掩码(一次写入 1 个颜色位)或存储库切换(每种图形芯片都需要特殊代码)。 ..也就是说,推荐图书馆是题外话,所以我不会提及 SDL。 (糟糕。)
  • 通常,对于裸机,在内存中分配(至少)两个缓冲区(或在视频内存中使用现代显卡)。启用视频垂直回扫开始的中断。该中断,如果另一个缓冲区已准备好,则交换正在显示的缓冲区。保留未显示哪个缓冲区的指示。所有写入都写入该未显示的缓冲区。当缓冲区准备好显示时,更改要显示哪个缓冲区的指示,因此中断会导致视频卡显示最新的缓冲区。然后代码可以复制/更新新可用的缓冲区

标签: c immediate-mode


【解决方案1】:

现代操作系统不像过去那样让程序员可以方便地访问低级图形例程。部分原因是由于 GPU 的出现,这使得使用图形硬件成为比只有 CPU 更大的挑战。另一个原因是随着窗口管理器变得越来越复杂,每个操作系统为程序员提供的图形沙箱越来越受到限制。

话虽如此,OpenGL 绝对值得一看。它是跨平台的、多功能的,并且可以自动利用任何可用的硬件(包括显卡)。 OpenGL 本身并不直接提供对窗口上下文的访问,但您可以使用 OpenGL 实用程序库 (GLUT) 轻松创建它。然而,OpenGL 是非常低级的,您必须处理帧缓冲区、刷新和位掩码以及各种低级的废话,如果您以前没有做过这些事情,可能会使 OpenGL 开发成为一场噩梦。

如果我开始一个项目,我可能想要一个更强大的图形环境,提供绘图功能和开箱即用的窗口。 SDLSFML 都提供低级图形 API,开始时会更友好一些。它们都是在 OpenGL 之上实现的,因此您可以在需要时使用任何 OpenGL 功能,但您不必担心一些更繁琐的细节。

顺便说一句,如今 C 可能不是开始图形编程的最佳语言。如果您想要一个非常简单且每天都变得越来越相关的图形环境,您可能需要查看 Web 必须提供的内容。 JavaScript 和 HTML5Canvas 为绘制图元、图像等提供了一个非常简单的界面。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-22
    • 1970-01-01
    • 1970-01-01
    • 2010-09-21
    • 2013-07-05
    相关资源
    最近更新 更多