C#双缓冲技术?

3
我正在使用COSMOS编译器用C#编写操作系统(对于不了解的人,COSMOS将IL代码转换为x86汇编),并且我正在制作GUI界面。
以前我已经制作了GUI,但现在我正在尝试制作双缓冲区。
听起来很容易,但以下是我的问题:
我不能使用任何来自System.Drawing库或任何其他使用p / invoke的命名空间的方法。 此外,我不能使用多维数组(我可以使用常规数组)。 那么我的问题是如何实现双缓冲区呢?
我知道这是可能的,因为我认识一个做到了的人。

此外,我只有SetPixelGetPixelClear这些图形函数。虽然我更喜欢得到一个答案,但如果有人知道关于双缓冲等方面的好文章,请告诉我。
附:我的操作系统分辨率是320 x 200。LOL

3个回答

4

看起来你需要学习一些关于DOS C VGA游戏的知识;-)

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

祝编程愉快。


1

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

通常情况下,当您直接在屏幕上绘制时,用户会看到您正在绘制的内容。就像当您要求Alex用笔画一个苹果时,您会在他画苹果时观察他。现在,如果您要求Alex画一个红色的苹果,然后擦掉它,再画一个蓝色的苹果,然后擦掉它,再画一个黄色的苹果等等...每次擦掉时,您都会看着他。这样想:计算机就是一个快速的Alex。因此,如果您要求在屏幕上直接绘制快速动画,用户将标记在动画帧之间发生了什么:糟糕的闪烁!

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


0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接