3

我正在使用 COSMOS 编译器用 C# 编写一个操作系统(对于那些不知道 COSMOS 将 IL 代码转换为 x86 程序集的人),我正在制作一个 GUI。
我以前制作过 GUI,但现在我正在尝试制作双缓冲区。
这听起来很简单,但以下是我的问题 -
我不能使用System.Drawing库中的任何方法或使用 p/ 调用的任何其他命名空间。另外,我不能使用多维数组(我可以使用常规数组)。所以我的问题是如何实现双缓冲?
我知道这是可能的,因为我知道有人这样做。

此外,我拥有的唯一图形功能SetPixelGetPixelClear。尽管我更喜欢一个答案,但如果有人知道一篇关于双缓冲等的好文章,请告诉我。
PS。我的操作系统是 320 x 200 Res LOL

4

3 回答 3

4

您将需要学习一些 DOS C VGA 游戏知识,这听起来像是 ;-)

请参阅双缓冲、翻页和非链接模式。所有相同的概念都适用,但不确定它们将如何转换为 C# 代码。

快乐编码。

于 2011-07-30T19:02:15.743 回答
1

尝试查看是否可以访问System.Drawing.BufferedGraphics。它为此目的实现方法。否则,恐怕您必须手动完成。

通常,当您直接在屏幕上绘制时,用户会在绘制时看到您正在绘制的内容。就像你让亚历克斯给你画一个苹果;你会在他用笔画苹果的时候检查他。现在如果你让 Alex 画一个红苹果,然后擦掉它,然后画一个蓝色苹果,然后擦掉它,然后画一个黄色苹果,等等……你会在他每次擦掉它的时候看着他。可以这样想:计算机是一个快速的亚历克斯。因此,如果您要求直接在屏幕上绘制快速动画,用户会标记动画帧之间发生了一些事情:糟糕的闪烁!

闪烁的解决方案是双缓冲。缓冲区只是用于绘图的屏幕外内存区域。当您使用双缓冲时,不是直接绘制到屏幕上,而是绘制到位于视频内存中的后台缓冲区,然后将整个缓冲区复制到屏幕上。

于 2011-07-30T19:11:20.260 回答
0

双缓冲可以通过使用一个数组来绘制(而不是显示)和通过将数组(完成绘制后)blitting 到显示器来实现。

于 2011-07-30T19:03:12.530 回答