为纹理分配内存

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 似乎更清楚。