代码之家  ›  专栏  ›  技术社区  ›  Akshit Verma

用于Mac应用的金属帧缓冲区颜色

  •  0
  • Akshit Verma  · 技术社区  · 7 年前

    enter image description here 如何在我的shader for mac应用程序中读取帧缓冲区当前颜色。

    我试着使用如下所示的纹理,有些像素丢失了。

    样本代码

    fragment float4 funcname(QuadFragIn     inFrag [[ stage_in ]],
                                      texture2d_array<float> normal_1 [[texture(0)]])
    {
    
    
    
        float4 color_0 = float4(normal_1.sample(tex_sampler, inFrag.m_TexCoord, 0));
        float4 color_1 = float4(normal_1.sample(tex_sampler, inFrag.m_TexCoord, 1));
        float4 color_2 = float4(normal_1.sample(tex_sampler, inFrag.m_TexCoord, 2));
    
        int index = inFrag.index;
    
        if(index == 0)
        {
            return color_0;
        }
        else if(index == 1)
        {
            return color_1;
        }
        else
        {
            return color_2;
        }
    
    }[![enter image description here][1]][1]
    

    在输出文件attach中,白色条带是相关的问题。

    0 回复  |  直到 7 年前
        1
  •  0
  •   Spo1ler    7 年前

    按金属着色语言规范( https://developer.apple.com/metal/Metal-Shading-Language-Specification.pdf ,表12下的评论)

    为了 [[color(m)]] (写入)片段函数中的多个颜色附件。这个 [[颜色(m)]] 属性仅为 iOS支持。

    避免执行像素回读的一种方法是在单独的渲染过程中执行像素写入和读取:在第一个渲染过程中渲染所需的内容,然后将第一个渲染过程的结果附加为纹理,可以对其进行采样或仅读取。