{"id":3663,"date":"2021-01-26T14:32:23","date_gmt":"2021-01-26T06:32:23","guid":{"rendered":"http:\/\/blog.coolcoding.cn\/?p=3663"},"modified":"2021-01-26T14:36:13","modified_gmt":"2021-01-26T06:36:13","slug":"urppass","status":"publish","type":"post","link":"https:\/\/blog.coolcoding.cn\/?p=3663","title":{"rendered":"URP\u4e2d\u7684\u591aPass\u6e32\u67d3"},"content":{"rendered":"\n<pre class=\"wp-block-code\"><code>public ForwardRenderer(ForwardRendererData data) : base(data)\n{\n  \/\/ \u7ed8\u5236\u4e0d\u900f\u660e\u7269\u4ef6\n  m_RenderOpaqueForwardPass = new DrawObjectsPass(\"Render Opaques\", true, RenderPassEvent.BeforeRenderingOpaques, RenderQueueRange.opaque, data.opaqueLayerMask, m_DefaultStencilState, stencilData.stencilReference);\n  \/\/ \u7ed8\u5236\u900f\u660e\u7269\u4ef6\nm_RenderTransparentForwardPass = new DrawObjectsPass(\"Render Transparents\", false, RenderPassEvent.BeforeRenderingTransparents, RenderQueueRange.transparent, data.transparentLayerMask, m_DefaultStencilState, stencilData.stencilReference);\n\n\n...\n\n\npublic DrawObjectsPass(string profilerTag, bool opaque, RenderPassEvent evt, RenderQueueRange renderQueueRange, LayerMask layerMask, StencilState stencilState, int stencilReference)\n{\n    m_ProfilerTag = profilerTag;\n    m_ProfilingSampler = new ProfilingSampler(profilerTag);\n    m_ShaderTagIdList.Add(new ShaderTagId(\"UniversalForward\"));\n    m_ShaderTagIdList.Add(new ShaderTagId(\"LightweightForward\"));\n    m_ShaderTagIdList.Add(new ShaderTagId(\"SRPDefaultUnlit\"));\n    renderPassEvent = evt;\n    m_FilteringSettings = new FilteringSettings(renderQueueRange, layerMask);\n    m_RenderStateBlock = new RenderStateBlock(RenderStateMask.Nothing);\n    m_IsOpaque = opaque;\n\n    if (stencilState.enabled)\n    {\n        m_RenderStateBlock.stencilReference = stencilReference;\n        m_RenderStateBlock.mask = RenderStateMask.Stencil;\n        m_RenderStateBlock.stencilState = stencilState;\n    }\n}\n\npublic override void Execute(ScriptableRenderContext context, ref RenderingData renderingData)\n{\n    CommandBuffer cmd = CommandBufferPool.Get(m_ProfilerTag);\n    using (new ProfilingScope(cmd, m_ProfilingSampler))\n    {\n        context.ExecuteCommandBuffer(cmd);\n        cmd.Clear();\n\n        Camera camera = renderingData.cameraData.camera;\n        var sortFlags = (m_IsOpaque) ? renderingData.cameraData.defaultOpaqueSortFlags : SortingCriteria.CommonTransparent;\n        var drawSettings = CreateDrawingSettings(m_ShaderTagIdList, ref renderingData, sortFlags);\n        context.DrawRenderers(renderingData.cullResults, ref drawSettings, ref m_FilteringSettings, ref m_RenderStateBlock);\n\n        \/\/ Render objects that did not match any shader pass with error shader\n        RenderingUtils.RenderObjectsWithError(context, ref renderingData.cullResults, camera, m_FilteringSettings, SortingCriteria.None);\n    }\n    context.ExecuteCommandBuffer(cmd);\n    CommandBufferPool.Release(cmd);\n}\n\n\n\/\/ ...\n\n\npublic DrawingSettings CreateDrawingSettings(List&lt;ShaderTagId> shaderTagIdList,\n    ref RenderingData renderingData, SortingCriteria sortingCriteria)\n{\n    if (shaderTagIdList == null || shaderTagIdList.Count == 0)\n    {\n        Debug.LogWarning(\"ShaderTagId list is invalid. DrawingSettings is created with default pipeline ShaderTagId\");\n        return CreateDrawingSettings(new ShaderTagId(\"UniversalPipeline\"), ref renderingData, sortingCriteria);\n    }\n\n    DrawingSettings settings = CreateDrawingSettings(shaderTagIdList[0], ref renderingData, sortingCriteria);\n    for (int i = 1; i &lt; shaderTagIdList.Count; ++i)\n        settings.SetShaderPassName(i, shaderTagIdList[i]);\n    return settings;\n}\n<\/code><\/pre>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=\/wp\/v2\/posts\/3663"}],"collection":[{"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3663"}],"version-history":[{"count":4,"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=\/wp\/v2\/posts\/3663\/revisions"}],"predecessor-version":[{"id":3668,"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=\/wp\/v2\/posts\/3663\/revisions\/3668"}],"wp:attachment":[{"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3663"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3663"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3663"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}