微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

图形缓冲区 - 水平和垂直填充,性能

如何解决图形缓冲区 - 水平和垂直填充,性能

我想知道是否有可能解决某个问题。 简而言之:不仅可以逐行填充缓冲区,还可以逐列填充缓冲区,从而获得最佳性能

说明如下: 给出了一个图形缓冲区(即用于保存位图)

#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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?