c - 如何直接访问显示器进行绘图

标签 c drawing real-time

上下文

一段时间以来,我主要将编程作为一种爱好,主要使用 C# 和 Java。我制作了许多需要动画内容的应用程序(Windows 窗体或 Java 窗体)。在 Java 中,我将使用 Graphics.drawX() 并根据时间函数重绘。当动画频繁发生时,分辨率会降低或应用程序会变慢。我从来没有想过这个问题,直到我在同一台计算机上玩视频游戏时,渲染一个简单的 Java 应用程序遇到了很多麻烦。我的电脑怎么能瞬间渲染出复杂的移动环境,却急于显示自制的2048游戏呢?我想这一定是因为我滥用了绘制函数,或者是因为这些函数没有针对实时渲染进行优化。

问题: 如何直接访问显示屏而不需要通过预编程功能?

我意识到这在高级语言中可能很难,所以让我们在 Windows 操作系统上使用 C 语言。 (但我希望得到任何与任何语言和/或操作系统相关的答案)

我知道这是一个非常模糊的问题,但我似乎无法找到合适的词来适本地谷歌它。非常感谢您的帮助!

最佳答案

您不能(或者也许我应该说永远不应该)尝试直接在 Windows 上访问图形驱动程序。在 Windows 之前,您曾经直接写入视频内存来进行图形处理,因为 DOS 不支持图形或显示管理,并且这些程序的稳定性总是有点不稳定。在 Windows 上,它拥有屏幕,您必须通过它才能访问它。

基于 Windows 的操作系统的基本概念是操作系统拥有显示器并允许应用程序访问虚拟显示器,以便操作系统可以隐藏它或移动它。在大多数情况下,这不会导致速度问题;但是,在某些情况下(例如游戏),您需要更快的速度;因此,DirectX 允许您将其中一些任务转移到显卡,以获得所需的速度。

有关 DirectX 的更多信息,请查看 Microsoft's Graphics and Gaming资源

关于c - 如何直接访问显示器进行绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33968002/

相关文章:

c - 是否有任何工具可以从一组 C 文件中提取所有变量(公共(public)变量和静态变量)?

C - 文件 i/o 的一些荒谬错误

flash - 用于绘图、调整大小、移动形状和文本的 ActionScript 库?

android - 如何通过手指拖动在 Canvas 上绘制图案

php - 在 iOS 客户端中实现实时队列

c - 字符数组初始化的时间复杂度是多少?

c - 使用 Apache/FastCGI 生成多个 C 可执行进程

javascript - 为什么闪烁的矩形(被 Canvas 淹没)不起作用?

android - Android静态方法可以实时很好地绘制后台线程数据,但这是一个好的解决方案吗?

Javascript:创建一个深度克隆/扩展/复制功能,不会为 GC 产生任何垃圾