C#双缓冲?

时间:2011-07-30 18:56:17

标签: c# user-interface graphics doublebuffered double-buffering

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

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

3 个答案:

答案 0 :(得分:4)

你需要学习一点DOS C VGA游戏知识听起来像; - )

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

快乐的编码。

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

双缓冲可以通过使用数组绘制(与显示相对)并通过将数组(完成绘图时)blit到显示器来实现。