gpt4 book ai didi

ios - 将像素数据写入 texture2d 的某个 mipmap 级别

转载 作者:行者123 更新时间:2023-11-28 23:23:25 35 4
gpt4 key购买 nike

您可能知道,Metal Shading Language 允许在内核函数中通过几种方式从 texture2d 读取像素数据。它可以是简单的 read(short2 coord)sample(float2 coord, [different additional parameters])。但我注意到,在将某些内容写入纹理时,只有 write 方法。

这里的问题是 sample 方法允许从某个 mipmap 级别进行采样,这非常方便。开发人员只需使用 mipFilter 创建一个采样器并使用归一化坐标。

但是,如果我想写入到特定的mipmap 级别的纹理中怎么办?问题是 write 方法不像 sample 方法那样有 mipmap 参数,我找不到任何替代方法。

我很确定应该有一种方法可以选择 mipmap 级别来将数据写入纹理,因为 Metal Performance Shaders 框架具有纹理 mipmap 的解决方案正在填充。

提前致谢!

最佳答案

您可以使用纹理 View 来做到这一点。

纹理 View 的目的是通过选择其级别和切片的子集并可能以不同(但兼容)的像素格式读取/写入其像素来重新解释基础纹理的内容。

-newTextureViewWithPixelFormat:textureType:levels:slices: MTLTexture 上的方法协议(protocol)返回 id<MTLTexture> 的新实例具有在 levels 中指定的第一级范围作为其基本 mip 级别。通过为您希望写入的每个 mip 级别创建一个 View ,您可以“定位”原始纹理中的每个级别。

例如,要在二维纹理的第二个 mip 级别上创建纹理 View ,您可以这样调用方法:

id<MTLTexture> viewTexture = 
[baseTexture newTextureViewWithPixelFormat:baseTexture.pixelFormat
textureType:baseTexture.textureType
levels:NSMakeRange(1, 1)
slices:NSMakeRange(0, 1)];

当绑定(bind)这个新纹理作为参数时,它的 mip 级别 0将对应于 mip 级别 1它的基础纹理。因此,您可以使用普通纹理 write着色器中的函数写入选定的 mip 级别:

myShaderTexture.write(color, coords);

关于ios - 将像素数据写入 texture2d 的某个 mipmap 级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59290560/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com