对了我想提一下具体做法,直接写屏首先是取显卡其实地址,以线性的方式把一个一个点的颜色写入由起始地址开始,加上偏移量的位置,可以将这种存储方式看成一个线性表;
而绘制的时候,在写入特定位置之前需要计算颜色,计算位置位置等等,那么每次画一个点到屏幕上速度并非一致,则会造成屏幕抖动;LZ可以假设一个与屏幕尺寸大小一致的数组,该数组的类型呢,是RGB色彩(也就是一个32位整数吧),据我所了解常用的色彩分为RGB(24位色彩)和ARGB(带有阿尔法半透明效果的24位色彩),其中ARGB高8位0-255是Alpha指,后面的24位排列方式为bbggrr(也就是RGB三个分量在内存中是倒置)这和CPU从存储器中取数的方式一样;言归正传,你可以先把需要绘制的东西全部填入预先设定好的数组中,然后通过一个函数进行页面交换,也就是简单的调用memcpy函数进行内存与内存的复制,memcpy使用汇编写的,而且复制每个单元的数据都是等速,我觉得这么一来写屏的效率就高了很多。
而绘制的时候,在写入特定位置之前需要计算颜色,计算位置位置等等,那么每次画一个点到屏幕上速度并非一致,则会造成屏幕抖动;LZ可以假设一个与屏幕尺寸大小一致的数组,该数组的类型呢,是RGB色彩(也就是一个32位整数吧),据我所了解常用的色彩分为RGB(24位色彩)和ARGB(带有阿尔法半透明效果的24位色彩),其中ARGB高8位0-255是Alpha指,后面的24位排列方式为bbggrr(也就是RGB三个分量在内存中是倒置)这和CPU从存储器中取数的方式一样;言归正传,你可以先把需要绘制的东西全部填入预先设定好的数组中,然后通过一个函数进行页面交换,也就是简单的调用memcpy函数进行内存与内存的复制,memcpy使用汇编写的,而且复制每个单元的数据都是等速,我觉得这么一来写屏的效率就高了很多。
我们都在命运湖上荡舟划桨,波浪起伏使我们无法逃离孤行;如果我们迷失方向,波浪将指引我们穿过另一天曙光