虚拟机如何呈现GUI?

2024-04-20 01:32:40 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我已经读了很多关于执行环境(Python,JVM…)的文章,我开始自己实现一个。这是一个用C语言编写的基于寄存器的环境。我定义了一个基本的字节码格式,到目前为止,执行非常顺利。我的问题是VEs如何呈现gui。到目前为止,关于我的工作的更详细的描述中,我的VE有一个屏幕缓冲区(正在试用)。每次我拨动它,我输出屏幕缓冲区完全知道输出。在

到目前为止,基本的计算和东西都很好,但是当我想了解如何呈现gui时,我遇到了一个障碍。我对这件事一窍不通。任何帮助都将不胜感激。即使我的想法是完全错误的,任何指向正确方向的开始都是非常好的。谢谢。在


Tags: 字节定义环境屏幕格式错误文章ve
1条回答
网友
1楼 · 发布于 2024-04-20 01:32:40

Python上的所有GUI工具包都是围绕C/C++代码的包装器。在Java上有一些“纯”的Java工具包,比如Swing,但是在最底层,它们依赖C代码来绘制和处理用户输入。在javavm中没有对图形之类的东西的特殊支持。

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

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

我不知道目前在Linux和其他Unix类型的操作系统上的做法是什么,但过去通常是让X服务器(用户模式进程)直接访问帧缓冲区。X服务器中的C代码最终负责呈现。现在GPU加速更为普遍,想必这至少在某种程度上有所改变。

相关问题 更多 >