【发布时间】:2013-07-27 05:03:08
【问题描述】:
下面的代码将一行从 8 位调色板格式转换为 32-RGBA。
在尝试实现它之前,我想知道下面的代码是否适合使用Direct-Math 或ARM Neon intrinsics 或内联汇编进行优化。我第一次看文档并没有发现任何涵盖表格查找部分的内容。
void CopyPixels(BYTE *pDst, BYTE *pSrc, int width,
const BYTE mask, Color* pColorTable)
{
if (width)
{
do
{
BYTE b = *pSrc++;
if (b != mask)
{
// Translate to 32-bit RGB value if not masked
const Color* pColor = pColorTable + b;
pDst[0] = pColor->Blue;
pDst[1] = pColor->Green;
pDst[2] = pColor->Red;
pDst[3] = 0xFF;
}
// Skip to next pixel
pDst += 4;
}
while (--width);
}
}
【问题讨论】:
-
访问表只是一个内存操作。这取决于表格的格式。使用 NEON,您只需使用
vld。如果您需要重新订购,有很多选择。例如,Blog on re-arranging vectors. -
你知道彩色图中的内容吗?您可能会想出一个近似值来避免查找操作并在更短的时间内运行,但仅适用于已知地图。
标签: arm neon directxmath