0

因此,我一直在阅读有关执行环境(Python、JVM...)的大量信息,并且我开始自己实现一个。这是一个用 C 语言编写的基于寄存器的环境。我定义了一个基本的字节码格式,到目前为止执行非常顺利。我的问题是 VE 如何呈现 GUI。在迄今为止关于我的工作的更详细描述中,我的 VE 有一个屏幕缓冲区(正在试验它)。每次戳它,我完全输出屏幕缓冲区以知道输出。

到目前为止,基本计算和东西都很好,但是当我想了解如何渲染 GUI 时,我遇到了困难。我对此无能为力。任何帮助,将不胜感激。即使我对此的想法完全错误,任何指向正确方向的开始都会非常棒。谢谢。

4

1 回答 1

1

Python 上的所有 GUI 工具包都是 C/C++ 代码的包装器。在 Java 上,有一些像 Swing 这样的“纯”Java 工具包,但它们依赖于 C 代码进行绘图和处理用户输入的最低级别。Java VM 中没有对图形之类的特殊支持。

至于 GUI 如何在最低级别呈现,这取决于。在 Windows 上,不允许用户模式软件直接访问视频硬件。最终,任何 C/C++ GUI 代码都必须通过 GDI 或 Direct3D 进行渲染。内核模式 GDI 代码能够通过写入帧缓冲区来完成所有的渲染,但也支持通过将操作传递给显示驱动程序来加速。另一方面,Direct3D 内核代码将几乎所有内容都传递给驱动程序,驱动程序又将所有内容传递给 GPU。几乎所有的内核模式代码都是用 C 编写的,而在 GPU 上运行的代码是手工编码的汇编代码和用高级着色语言编写的代码的混合体。

请注意,GPU 汇编语言与 Intel x86 汇编语言非常不同,并且在制造商和 GPU 代之间差异很大。

我不确定当前在 Linux 和其他 Unix 类型的操作系统上的做法是什么,但过去很常见的是让作为用户模式进程的 X 服务器直接访问帧缓冲区。X 服务器中的 C 代码最终负责渲染。现在,随着 GPU 加速变得更加普遍,这种情况可能至少有所改变。

于 2014-08-05T06:20:02.557 回答