将像素数据写入特定的Mipmap级别的texture2d

时间:2019-12-11 16:53:19

标签: ios metal sample texture2d mipmaps

您可能已经知道,'html5lib'允许几种方法从内核函数中的import requests from bs4 import BeautifulSoup url = 'https://www.gsmarena.com/xiaomi_redmi_note_8_pro-9812.php' soup = BeautifulSoup(requests.get(url).text, 'html5lib') for th in soup.select('#specs-list th'): table = th.find_previous('table') for ttl in table.select('.ttl'): print('{:<20} {:<20} {}'.format( th.text, ttl.text, ttl.find_next_sibling('td', {'class':'nfo'}).get_text(strip=True, separator=' ')) ) 读取像素数据。它可以是简单的Network Technology GSM / HSPA / LTE Network 2G bands GSM 850 / 900 / 1800 / 1900 - SIM 1 & SIM 2 Network 3G bands HSDPA 850 / 900 / 1900 / 2100 Network 4G bands LTE band 1(2100), 3(1800), 5(850), 7(2600), 8(900), 40(2300), 41(2500) Network Speed HSPA 42.2/5.76 Mbps, LTE-A Launch Announced 2019, August Launch Status Available. Released 2019, September Body Dimensions 161.4 x 76.4 x 8.8 mm (6.35 x 3.01 x 0.35 in) Body Weight 200 g (7.05 oz) Body Build Front/back glass (Gorilla Glass 5) Body SIM Hybrid Dual SIM (Nano-SIM, dual stand-by) Display Type IPS LCD capacitive touchscreen, 16M colors Display Size 6.53 inches, 104.7 cm 2 (~84.9% screen-to-body ratio) Display Resolution 1080 x 2340 pixels, 19.5:9 ratio (~395 ppi density) Display Protection Corning Gorilla Glass 5 Display   500 nits max brightness HDR Platform OS Android 9.0 (Pie); MIUI 10 Platform Chipset Mediatek Helio G90T (12nm) ... and so on. Metal Shading Language。但是我注意到,在将某些内容写入纹理时,只有texture2d方法。

这里的问题是read(short2 coord)方法允许从某些mipmap级别进行采样,这非常方便。开发人员只需要使用sample(float2 coord, [different additional parameters])创建一个采样器并使用归一化的坐标即可。

但是如果我想写入到纹理的某些write级别怎么办?事实是,sample方法没有mipFilter方法那样的mipmap参数,而且我找不到任何替代方法。

我非常确定应该有一种方法来选择write级别以将数据写入纹理,因为mipmap框架具有解决方案,可以在其中填充纹理的mipmap。

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用纹理视图来实现。

纹理视图的目的是通过选择基本纹理的级别和切片的子集并潜在地以不同(但兼容)的像素格式读取/写入像素来重新解释基本纹理的内容。

-newTextureViewWithPixelFormat:textureType:levels:slices:协议上的MTLTexture方法返回id<MTLTexture>的新实例,该实例具有在levels范围内指定的第一级作为其基本MIP级别。通过为每个要写入的Mip级别创建一个视图,可以“定位”原始纹理中的每个级别。

例如,要在2D纹理的第二个mip级别上创建纹理视图,可以调用如下方法:

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

当将此新纹理作为参数绑定时,其mip级别0将与其基础纹理的mip级别1相对应。因此,您可以在着色器中使用普通纹理write函数来写入所选的mip级别:

myShaderTexture.write(color, coords);