文章转自EasyX原链接
常见的屏幕分辨率很奇怪,为什么总用一些不零不整的数字比如以前最常见的分辨率是 0x480,当初为什么这么设计
因为这个分辨率运算速度比较快,人吔相对比较好记
大家知道,屏幕上的每一个点都会对应内存中的一个位置。比如 0x480@256色表示每个点占用一个字节,整个屏幕有 0x480=300k 个点占鼡 300KB 内存。屏幕的每一个像素的保存在内存中是线性存储结构。在屏幕上的坐标 (x, y) 画一个点就相当于在对应显存偏移 y * 0 + x 的位置赋值。
PS:在这篇文章中有一段代码可以实践一下通过内存赋值来直接画点:
每绘制一个点,都需要执行一次乘法和一次加法运算所有的绘图操作都需要调用画点函数,因此提高画点的效率将会提升所有绘图操作的速度。
现在我们将计算内存偏移量的算法修改一下:
于是1 次乘法 1 次加法,就修改为了 2 次移位 2 次加法学过计算机组成原理的同学应该知道,修改后的算法虽然繁琐但是性能提高了数倍。
这也是为什么采鼡 0 的原因
常见的分辨率,都可以拆分为 2 的 n 次方的和差运算例如:
基于前面讲的原理,大家可以将其应用在最基础的画点上以提升算法的效率。
不过现在 CPU 里面都有乘法器单元写程序时直接用乘法性能也不差。但是在硬件实现上这个数值还是很有意义的。
发布了23 篇原創文章 · 获赞 24 · 访问量 3万+