首页 > 解决方案 > 图形缓冲区 - 水平和垂直填充,性能

问题描述

我想知道是否有可能解决某个问题。简而言之:通过逐行和逐列填充缓冲区来获得最佳性能。

下面的描述:给出了一个图形缓冲区(即用于保存位图)

#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;
      }
  }
}

出现的问题是是否有可能以某种方式结合有效的逐行和逐列完成。从我执行的一些测试中,事实证明,如果缓冲区呈现为二维,即逐列填充甚至比一维中的逐行填充更快 - 但它是反过来,即逐行填充这样的二维缓冲区将是低效的。

我正在考虑的解决方案:

标签: calgorithmgraphicsbitmapraycasting

解决方案


推荐阅读