Esempio n. 1
0
        static public void RenderLights(Camera camera, CommandBuffer cmdBuffer, int layerToRender, uint blendStylesUsed)
        {
            for (int i = 0; i < s_BlendStyles.Length; ++i)
            {
                if ((blendStylesUsed & (uint)(1 << i)) == 0)
                {
                    continue;
                }

                string sampleName = s_BlendStyles[i].name;
                cmdBuffer.BeginSample(sampleName);

                cmdBuffer.SetRenderTarget(s_LightRenderTargets[i].Identifier());

                bool  rtDirty = false;
                Color clearColor;
                var   globalLight = Light2DManager.GetGlobalLight(layerToRender, i, out clearColor);
                //Global light Color
                if (!globalLight)
                {
                    clearColor = Color.black;
                }
                else
                {
                    rtDirty = true;
                }

                if (s_LightRenderTargetsDirty[i] || rtDirty)
                {
                    cmdBuffer.ClearRenderTarget(false, true, clearColor);
                }

                //全局光方向
                if (globalLight)
                {
                    cmdBuffer.SetGlobalVector("_GlobalLightDirection", globalLight.LightDirection);
                }
                else
                {
                    cmdBuffer.SetGlobalVector("_GlobalLightDirection", new Vector3(1, 1, 5));
                }

                rtDirty |= RenderLightSet(camera, i, cmdBuffer, layerToRender, s_LightRenderTargets[i].Identifier(), Light2D.GetLightsByBlendStyle(i));

                s_LightRenderTargetsDirty[i] = rtDirty;

                cmdBuffer.EndSample(sampleName);
            }
        }