虚拟机如何呈现GUI?

时间:2014-08-04 23:58:24

标签: python c++ user-interface jvm pyc

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

到目前为止基本的计算和内容都很好,但是当我想了解如何渲染GUI时,我遇到了麻烦。我无处可去。任何帮助,将不胜感激。即使我在想这个问题完全错了,任何指针作为正确方向的起点都会非常棒。感谢。

1 个答案:

答案 0 :(得分:1)

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

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

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

我不确定Linux和其他Unix类型操作系统目前的做法是什么,但过去通常会给X服务器(这是一个用户模式进程)直接访问帧缓冲区。 X服务器中的C代码最终负责呈现。据推测,现在GPU加速更常见,这已经发生了变化。