• mipmap一


    讲一下mipmap

    生成的时候 指定texture 的mipmaplevel 8 然后memory自动就会那么大的

    画的时候要在lineraspace(因为我是gpucopy所以不涉及这个问题 可能)

    用不同view 对应不同level

    在loop里 每次对同一个texture的不同viewcopy 

    demo:

    	width = img.getWidth();
    	height = img.getHeight();
    	CopyRegion src_reg;
    	CopyRegion dest_reg;
    	TextureView src_view;
    	TextureView dest_view;
    	src_view.SetDefaults();
    	dest_view.SetDefaults();
    
    #define SET_REGION(reg, w, h, d) reg.xoffset = reg.yoffset = reg.zoffset = 0; reg.width = w; reg.height = h; reg.depth = d;
    	for (uint32_t level = 1; level < miplevel; ++level){
    		SET_REGION(src_reg,  width, height, 6);
    		width >>= 1;
    		height >>= 1;
    		SET_REGION(dest_reg, width, height, 6);
    
    		src_view.SetLevels(level - 1, 1);
    		dest_view.SetLevels(level, 1);
    
    		// no barrier required since copy engine do not use any cache.
    		cb.CopyTextureToTexture(&texture.GetTexture(), &src_view, &src_reg, &texture.GetTexture(), &dest_view, &dest_reg, CopyFlags::LINEAR_FILTER);
    	}
    

      每次除以2 等于downsample linear filter

    采样的时候  用texture.sample()就可以 

    gpu会根据srv是否有mipmap  set 根据像素在两个轴的斜率来选适合的mipmap level

    smaplelevel()这种函数是你想采特定levle才用得

    比如你可以采样高levle看是不是很糊 textureLod(sampler,coord,level) glsl

    设置trilinear filter for mipmap

    --------------------------------------

    一定要注意的是 mipmap在linear color space做 本来想偷懒不做。。。就变得特别暗 调了很久才想起来。

    换到srgb的rt来画就可以了 

  • 相关阅读:
    kubernetes(八)--Helm及其它功能组件dashboard/prometheus/HPA
    kubernetes(七)--安全机制
    kubernetes(六)--集群调度
    kubernetes(五)--存储之configmap/secret/volume/PV&&PVC
    Unicode规范中的BOM 和 ISO8891-1编码
    设计模式
    vue等诸多概念记录
    Linux下nc或scp命令来实现文件传输
    日常相关的标准技术和组织
    ibatis和mybatis中的BatchExecutor
  • 原文地址:https://www.cnblogs.com/minggoddess/p/6729401.html
Copyright © 2020-2023  润新知