Exemplo n.º 1
0
    public static void SetupDrawMode()
    {
        //Setup object
        CustomDrawModeAssetObject.SetUpcdma();
        if (CustomDrawModeAssetObject.cdma == null)
        {
            return;
        }

        //Setup draw mode
        SceneView.ClearUserDefinedCameraModes();
        for (int i = 0; i < CustomDrawModeAssetObject.cdma.customDrawModes.Length; i++)
        {
            if (
                CustomDrawModeAssetObject.cdma.customDrawModes[i].name != "" &&
                CustomDrawModeAssetObject.cdma.customDrawModes[i].category != ""
                )
            {
                SceneView.AddCameraMode(
                    CustomDrawModeAssetObject.cdma.customDrawModes[i].name,
                    CustomDrawModeAssetObject.cdma.customDrawModes[i].category);
            }
        }
        ArrayList sceneViewArray = SceneView.sceneViews;

        foreach (SceneView sceneView in sceneViewArray)
        {
            sceneView.onValidateCameraMode -= AcceptedDrawMode;     // Clean up
            sceneView.onValidateCameraMode += AcceptedDrawMode;
        }
    }
Exemplo n.º 2
0
//******************************************* */

    static void RunDrawMode()
    {
        //Setup object
        if (!CustomDrawModeAssetObject.SetUpObject())
        {
            return;
        }

        //Set camera
        GetCurrentSceneCam();

        //Setup draw mode
        SceneView.ClearUserDefinedCameraModes();
        for (int i = 0; i < CustomDrawModeAssetObject.cdma.customDrawModes.Length; i++)
        {
            if (
                CustomDrawModeAssetObject.cdma.customDrawModes[i].name != "" &&
                CustomDrawModeAssetObject.cdma.customDrawModes[i].category != ""
                )
            {
                SceneView.AddCameraMode(
                    CustomDrawModeAssetObject.cdma.customDrawModes[i].name,
                    CustomDrawModeAssetObject.cdma.customDrawModes[i].category);
            }
        }
        ArrayList sceneViewArray = SceneView.sceneViews;

        foreach (SceneView sceneView in sceneViewArray)
        {
            sceneView.onValidateCameraMode -= AcceptedDrawMode;             // Clean up
            sceneView.onValidateCameraMode += AcceptedDrawMode;
        }


        //Render with selected draw mode

        if (cam != null)
        {
            ArrayList sceneViewsArray = SceneView.sceneViews;
            foreach (SceneView sceneView in sceneViewsArray)
            {
                bool success = false;
                for (int i = 0; i < CustomDrawModeAssetObject.cdma.customDrawModes.Length; i++)
                {
                    if (CustomDrawModeAssetObject.cdma.customDrawModes[i].name != "")
                    {
                        if (sceneView.cameraMode.name == CustomDrawModeAssetObject.cdma.customDrawModes[i].name)
                        {
                            //cam.SetReplacementShader(shader, ""); //this does nothing...
                            if (CustomDrawModeAssetObject.cdma.customDrawModes[i].shader != null)
                            {
                                cam.RenderWithShader(CustomDrawModeAssetObject.cdma.customDrawModes[i].shader, "");
                            }
                            success = true;
                            break;
                        }
                    }
                }
                //If nothing can be found
                if (!success)
                {
                    cam.ResetReplacementShader();
                }
            }
        }
    }
Exemplo n.º 3
0
    protected override void Render(ScriptableRenderContext context, Camera[] cameras)
    {
        BeginFrameRendering(cameras);

        foreach (Camera camera in cameras)
        {
            BeginCameraRendering(camera);

            //Culling
            ScriptableCullingParameters cullingParams;
            if (!camera.TryGetCullingParameters(out cullingParams))
            {
                continue;
            }
            CullingResults cull = context.Cull(ref cullingParams);

            //Camera setup some builtin variables e.g. camera projection matrices etc
            context.SetupCameraProperties(camera);

            //Get the setting from camera component
            bool drawSkyBox = camera.clearFlags == CameraClearFlags.Skybox? true : false;
            bool clearDepth = camera.clearFlags == CameraClearFlags.Nothing? false : true;
            bool clearColor = camera.clearFlags == CameraClearFlags.Color? true : false;

            //Camera clear flag
            CommandBuffer cmd = new CommandBuffer();
            cmd.ClearRenderTarget(clearDepth, clearColor, camera.backgroundColor);
            context.ExecuteCommandBuffer(cmd);
            cmd.Release();

            //Setup DrawSettings and FilterSettings
            var               sortingSettings = new SortingSettings(camera);
            DrawingSettings   drawSettings    = new DrawingSettings(m_PassName, sortingSettings);
            FilteringSettings filterSettings  = new FilteringSettings(RenderQueueRange.all);

            //Skybox
            if (drawSkyBox)
            {
                context.DrawSkybox(camera);
            }

            //SceneViewDrawMode
            #if UNITY_EDITOR
            bool isSceneViewCam = camera.cameraType == CameraType.SceneView;
            if (isSceneViewCam)
            {
                Material debugMaterial = CustomDrawModeAssetObject.GetDrawModeMaterial();
                if (debugMaterial != null)
                {
                    sortingSettings.criteria        = SortingCriteria.None;
                    filterSettings.renderQueueRange = RenderQueueRange.all;
                    DrawingSettings debugSettings = new DrawingSettings(new ShaderTagId("debugMaterial"), sortingSettings)
                    {
                        perObjectData             = PerObjectData.None,
                        overrideMaterial          = debugMaterial,
                        overrideMaterialPassIndex = 0
                    };
                    debugSettings.SetShaderPassName(1, m_PassName);
                    context.DrawRenderers(cull, ref debugSettings, ref filterSettings);
                    context.Submit();
                    continue;
                }
            }
            #endif

            //Opaque objects
            sortingSettings.criteria        = SortingCriteria.CommonOpaque;
            drawSettings.sortingSettings    = sortingSettings;
            filterSettings.renderQueueRange = RenderQueueRange.opaque;
            context.DrawRenderers(cull, ref drawSettings, ref filterSettings);

            //Transparent objects
            sortingSettings.criteria        = SortingCriteria.CommonTransparent;
            drawSettings.sortingSettings    = sortingSettings;
            filterSettings.renderQueueRange = RenderQueueRange.transparent;
            context.DrawRenderers(cull, ref drawSettings, ref filterSettings);

            context.Submit();
        }
    }