2011-07-30 63 views
3

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

此外,我唯一的图形功能是SetPixel,GetPixelClear。尽管我更喜欢答案,但如果有人知道关于双缓冲的好文章,请告诉我。 PS:我在320×200的RE OS LOL

回答

4

你需要学习DOSçVGA比赛绝杀的一点点,它听起来就像;-)

Double Buffering, Page Flipping, & Unchained Mode。所有相同的概念都适用,但不知道它们将如何转换为C#代码。

快乐编码。

+0

谢谢,这正是我需要的 – Grunt

0

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

1

尝试查看您是否可以访问System.Drawing.BufferedGraphics。它为此实现方法。否则,我担心你必须手动完成。

通常,当您直接在屏幕上绘图时,用户会在绘制时看到您正在绘制的内容。就像你问亚历克斯给你画一个苹果;你会在他用笔画苹果的时候检查他。现在,如果你问亚历克斯画一个红苹果,然后抹去它,然后画一个蓝色的苹果,然后抹掉它,然后画一个黄色的苹果等等。每次擦拭它时你都会看着他。这样想想:电脑是一个快速的亚历克斯。因此,如果您要求在屏幕上直接绘制快速动画,用户将会标记动画帧之间发生了什么:闪烁不佳!

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