我正在编写一个在Metal中使用压缩纹理的程序。我对MTLTexture的bytesPerRow
功能有点麻烦。参数bytesPerRow
似乎没有意义。它表示对于压缩纹理," Cells(1, "A").Select
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:= _
"mailto:taco@gmail.com", TextToDisplay:="taco@gmail.com"
是从一行块的开头到下一行的开头的字节数。"
现在我使用带有4x4块的ASTC,这意味着我有8 bpp。那么4 * 4是16,而8位是一个字节。所以我猜测每个块大小是16个字节。但是,当我输入16时,我得到一个失败的断言,要求最小值为4096.发生了什么?
非常感谢。
答案 0 :(得分:1)
bytesPerRow = texelsPerRow / blockFootprint.x * 16
答案 1 :(得分:1)
uint32_t bytes_per_row(uint32_t texture_width, uint32_t block_width) {
return (texture_width % block_width ? texture_width + (texture_width % block_width) : texture_width) / block_width * 16;
}
这首先将纹理宽度向上舍入为块宽度的倍数。例如。使用 6x6 块大小编码的 1024x1024 纹理对应于每行 2736 字节。 1026 / 6 * 16 == 2736。