【问题标题】:Bottom Level Graphics Programming/ Working with Screen Hardware底层图形编程/使用屏幕硬件
【发布时间】:2014-09-24 08:12:18
【问题描述】:

据说“低级”编程语言是一种“接近”硬件工作的语言。我使用 C 以及 Python 和 Java,但通常除了 C 是一种“低级”语言或与其他两种语言相比“更接近”硬件工作。这当然是有道理的,因为 python 和 java 是 C 派生语言。

那么我想知道的是,在显示器上使用计算机屏幕显示像素图形的“最低级别”或“最接近硬件”的方式是什么?

基本上,屏幕在编程“后端”上是如何工作的?

为了清楚起见,我将给出一个类比。当我第一次了解 python 列表时,我认为它们是存储在一起的多个数字。后来我了解到,它们实际上是内存中为数组长度保留的位置的指针,以数据类型为单位。

所以我对屏幕的了解是它是一个 x 宽 y 长的像素网格。当您使用接受某种矢量形式的函数引用此网格时,像素将在该像素的坐标处点亮指定的颜色(当然,0,0 从左上角开始。)真正发生了什么在那些函数中?

【问题讨论】:

    标签: c assembly screen driver hardware


    【解决方案1】:

    sMachine code 是最低的你可以去。这甚至仍然被 CPU 解释。 (当然取决于 CPU)

    不过,通常大多数人只会低至assembler

    (我没有提到 GPU 编程,因为你提到了 Python、Java、C,并假设你正在尝试掌握旧的渲染方式)。

    编辑

    错过了你的其他问题

    当内存块需要引用时使用指针。简单数据类型不需要指针(但仍然可以有一个)。这取决于语言以及它如何允许数据类型分配。

    在数据列表/数组的情况下,您不能在堆上分配它,因为它是可变长度的,因此从操作系统请求一块内存,它将返回指向这部分内存的指针,该指针可以使用。操作系统并不关心它是如何使用的,它取决于应用程序知道分配多少以及应该如何使用它。

    这就是语言使用数据类型以便编译器知道如何操作该内存块的原因。现在没有什么能阻止你直接操作这块内存,但你必须遵循编译使用的规则,因为任何进一步执行的代码都可能导致错误。

    编辑

    根据评论补充。

    在修改与硬件相关联的缓冲区时,您需要了解缓冲区的规范。通常,您已经要求设备使用某种操作模式,并且您知道硬件的行为方式。这就是为什么出现不同的标准来帮助程序员使用这些标准的原因。我将参考一个非常好的老式硬件编程指南,它应该对你有很大帮助PC Game Programmer's Encyclopedia

    这些概念现在仍然适用于 Windows 中的操作系统,您可以使用 GDI 分配这些屏幕,并将 GDI 接口分配给驱动程序以呈现所需的图像。我链接的指南是关于直接使用不支持图形的旧操作系统(例如 MS-DOS)的硬件

    【讨论】:

    • 我对它的工作原理比实际操作更感兴趣。像素在内存中是如何排列的? cpu如何与屏幕硬件通信?
    • 我会阅读有关汇编程序的信息,但如果有帮助的话,我目前的技能还不愿意低于 C。
    【解决方案2】:

    您要查找的词是帧缓冲区。简介见http://en.wikipedia.org/wiki/Framebuffer

    【讨论】:

    • mmm 看起来是正确的链接。似乎简短的答案是它与列表完全相同。
    • 你知道我在哪里可以找到有关如何在 C 中直接使用帧缓冲区的说明吗?很遗憾我读的书从未涉及这些内容。
    • 有一个项目microwindows.org 涵盖了各种类型的帧缓冲区的编程。该项目主要针对 PC 以外的平台,因为您会因为不使用库函数的原因而受到压力。 microwindows 项目中的 fblinXX.c 描述了访问帧缓冲区的各种方法。
    • 您可以在开发人员手册中查看 PXA-270 处理器的布局可能性marvell.com/application-processors/pxa-family/assets/…
    猜你喜欢
    • 2010-09-19
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 2019-05-02
    • 1970-01-01
    • 2021-08-04
    • 2015-09-16
    相关资源
    最近更新 更多