在对本版本中“构建自己的图形库”的改进中遇到的问题
上半年我对此版本中“构建自己的图形库”系列帖中给出的代码进行了改进。我的目标是1、让各种色深、各种分辨率的图形模式编程具有同一性
2、提高位图的显示速度、基本图形绘制的速度
3、再增加一些基本图形绘制方法
做这些事情的原因是是为了方便从TC开始学习编程的同学们学习计算机图形学。因为AMD、INTEL高于奔腾D E2180的cpu型号不支持tc中的图形库。其原因是,计算机显示图形的底层实现标准VBE已经改变了好几次,继续对很旧的不再使用的标准提供支持是没有必要的。
一开始这三项任务都算是基本完成。把代码打包上传了。过了一段时间,拿出来编译,忽然发现提高位图显示的几个函数工作不当。百思不的其解,因为上传到网络后没有改写过代码呀。匆匆忙忙的检查了一下代码,虽然发想了几个错误,但这些bug不会在我的测试中表现出来,因为测试中没有考虑退化情况。
后来又很忙,国家测绘局的事情、软考复习、找工作等。国家测绘局的事最混账,把我软考的时间挤的还剩十多天。现在总算闲些了,又把代码改了下。但是我还是没发现自己错在哪儿。个人觉得把错误避免了,却不知道错误在那儿绝对不是我想要。所以我把有错误的代码和改正了的代码都发出来希望各位有时间时帮忙找找。
correct.rar 中放的是改正过的代码;另外一个放的就是错误的代码。
在说一下提高位图显示速度的方法,显示位图一点一点的绘制,那么我就一行一行的绘制,用memcpy把一行的信息写入视频缓存。观察内存页的大小和一样像素值所需的内存的多少,我得出来下面的结论
/*容易知道一行像素最多跨两个内存页,一行像素可以分别
占用第一页和占用第二页的两部分*/
那么在显示位图时只有某些行需要换页,对于需换页的行一分为二,用两次memcpy,其余的用一次memcpy这样能显著提高绘制速度。
但是我这样改写好后,绘制16位位图时是成功的,但绘制24位位图时只能绘制左边一半。但算法的想法是没有错的,代码到底错在那,也需要论坛里的各位帮帮忙。
correct.rar
(561.32 KB)
GrSVGA.rar
(4.44 KB)