如何解决图形缓冲区 - 水平和垂直填充,性能
我想知道是否有可能解决某个问题。 简而言之:不仅可以逐行填充缓冲区,还可以逐列填充缓冲区,从而获得最佳性能。
说明如下: 给出了一个图形缓冲区(即用于保存位图)
#define WIDTH 320
#define HEIGHT 256
typedef struct
{
unsigned char r,g,b,a;
}sRGBA;
sRGBA* bufor_1;
main()
{
bufor_1 = (sRGBA*)malloc(WIDTH*HEIGHT*sizeof(sRGBA));
}
逐行水平填充没有问题,因为它是“缓存友好”的情况,这是最好的,例如地板和天花板 rycasting:
main()
{
bufor_1 = (sRGB*)malloc(WIDTH*HEIGHT*sizeof(sRGB));
for (int y = 0; y < HEIGHT; ++y)
{
for (int x = 0; x < WIDTH; ++x)
{
bufor_1[x+y*WIDTH].r = 100;
}
}
}
当我们想要垂直补充这样的缓冲区时,即逐列补充时,性能差异就会出现,例如墙体再生,就是这样完成的,即
main()
{
bufor_1 = (sRGB*)malloc(WIDTH*HEIGHT*sizeof(sRGB));
for (int x = 0; x < WIDTH; ++x)
{
for (int y = 0; y < HEIGHT; ++y)
{
bufor_1[x+y*WIDTH].r = 100;
}
}
}
出现的问题是是否有可能以某种方式将高效的逐行完成和逐列完成结合起来。 从我执行的一些测试中,结果证明如果缓冲区显示为二维,即 在一维中,逐列填充甚至比逐行填充更快 - 但反过来说,即逐行填充这样的二维缓冲区将是低效的。
我正在考虑的解决方案:
- 将缓冲区旋转 90 度,不幸的是它花费了太多时间,至少使用我检查过的算法, 除非有一些超快的 N (1) 方式
- 某种缓冲区重新映射,以便某些表包含指向列中下一个像素的指针,但它可能不会“缓存友好”或更糟 - 我还没有检查过
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。