为纹理分配内存
Allocating memory for a texture
我一直在查看作为 DirectX 工具包一部分的 WICTextureLoader.cpp 文件。我正在尝试理解这段代码:
https://github.com/microsoft/DirectXTK/blob/master/Src/WICTextureLoader.cpp#L530
// Allocate temporary memory for image
uint64_t rowBytes = (uint64_t(twidth) * uint64_t(bpp) + 7u) / 8u;
uint64_t numBytes = rowBytes * uint64_t(theight);
我知道您需要为单行纹理分配纹理宽度 * 每像素位数。但是我不明白每个像素加7然后整个除以8。那是什么?
bpp
这里是“每像素位数”。表达式将 向上 舍入到下一个完整字节(8 位)。
这是用于“对齐”的经典 C 模式,用于 2 的幂对齐,此处表示为 C++ 模板。
template<typename T>
inline T AlignUp(T size, size_t alignment) noexcept
{
if (alignment > 0)
{
assert(((alignment - 1) & alignment) == 0);
auto mask = static_cast<T>(alignment - 1);
return (size + mask) & ~mask;
}
return size;
}
而不是 / 8
,我本可以使用位运算符(同样,因为它是 2 的幂)并完成 & ~8
,但 / 8
似乎更清楚。
我一直在查看作为 DirectX 工具包一部分的 WICTextureLoader.cpp 文件。我正在尝试理解这段代码:
https://github.com/microsoft/DirectXTK/blob/master/Src/WICTextureLoader.cpp#L530
// Allocate temporary memory for image
uint64_t rowBytes = (uint64_t(twidth) * uint64_t(bpp) + 7u) / 8u;
uint64_t numBytes = rowBytes * uint64_t(theight);
我知道您需要为单行纹理分配纹理宽度 * 每像素位数。但是我不明白每个像素加7然后整个除以8。那是什么?
bpp
这里是“每像素位数”。表达式将 向上 舍入到下一个完整字节(8 位)。
这是用于“对齐”的经典 C 模式,用于 2 的幂对齐,此处表示为 C++ 模板。
template<typename T>
inline T AlignUp(T size, size_t alignment) noexcept
{
if (alignment > 0)
{
assert(((alignment - 1) & alignment) == 0);
auto mask = static_cast<T>(alignment - 1);
return (size + mask) & ~mask;
}
return size;
}
而不是 / 8
,我本可以使用位运算符(同样,因为它是 2 的幂)并完成 & ~8
,但 / 8
似乎更清楚。