private void Render(PipelineCamera pipelineCam, ref ScriptableRenderContext context, Camera cam, bool *pipelineChecked) { PipelineResources.CameraRenderingPath path = pipelineCam.renderingPath; currentPath = path; pipelineCam.cam = cam; pipelineCam.EnableThis(resources); if (!cam.TryGetCullingParameters(out data.cullParams)) { return; } context.SetupCameraProperties(cam); //Set Global Data data.context = context; data.cullParams.reflectionProbeSortingCriteria = ReflectionProbeSortingCriteria.ImportanceThenSize; data.cullResults = context.Cull(ref data.cullParams); PipelineFunctions.InitRenderTarget(ref pipelineCam.targets, cam, data.buffer); data.resources = resources; PipelineFunctions.GetViewProjectMatrix(cam, out data.vp, out data.inverseVP); for (int i = 0; i < data.frustumPlanes.Length; ++i) { Plane p = data.cullParams.GetCullingPlane(i); //GPU Driven RP's frustum plane is inverse from SRP's frustum plane data.frustumPlanes[i] = new Vector4(-p.normal.x, -p.normal.y, -p.normal.z, -p.distance); } var allEvents = resources.allEvents; var collect = allEvents[(int)path]; #if UNITY_EDITOR //Need only check for Unity Editor's bug! if (!pipelineChecked[(int)path]) { pipelineChecked[(int)path] = true; foreach (var e in collect) { if (!e.CheckProperty()) { e.CheckInit(resources); } } } #endif data.buffer.SetInvertCulling(pipelineCam.inverseRender); foreach (var e in collect) { if (e.Enabled) { e.PreRenderFrame(pipelineCam, ref data); } } JobHandle.ScheduleBatchedJobs(); foreach (var e in collect) { if (e.Enabled) { e.FrameUpdate(pipelineCam, ref data); } } data.buffer.SetInvertCulling(false); }
private void Render(PipelineCamera pipelineCam, RenderTargetIdentifier dest, ref ScriptableRenderContext context, Camera cam) { CameraRenderingPath path = pipelineCam.renderingPath; pipelineCam.cam = cam; pipelineCam.EnableThis(); if (!CullResults.GetCullingParameters(cam, out data.cullParams)) { return; } context.SetupCameraProperties(cam); //Set Global Data data.defaultDrawSettings = new DrawRendererSettings(cam, new ShaderPassName("")); data.context = context; data.cullResults = CullResults.Cull(ref data.cullParams, context); PipelineFunctions.InitRenderTarget(ref pipelineCam.targets, cam, data.buffer); data.resources = resources; PipelineFunctions.GetViewProjectMatrix(cam, out data.vp, out data.inverseVP); for (int i = 0; i < data.frustumPlanes.Length; ++i) { Plane p = data.cullParams.GetCullingPlane(i); //GPU Driven RP's frustum plane is inverse from SRP's frustum plane data.frustumPlanes[i] = new Vector4(-p.normal.x, -p.normal.y, -p.normal.z, -p.distance); } PipelineEvent[] events = null; switch (pipelineCam.renderingPath) { case CameraRenderingPath.GPUDeferred: events = gpurpEvents; break; } currentRenderingPath = pipelineCam.renderingPath; foreach (var e in events) { if (e.enabled && e.preEnable) { e.PreRenderFrame(pipelineCam, ref data); } } JobHandle.ScheduleBatchedJobs(); foreach (var e in events) { if (e.enabled && e.postEnable) { e.FrameUpdate(pipelineCam, ref data); } } data.buffer.Blit(pipelineCam.targets.renderTargetIdentifier, dest); }
private void Render(PipelineCamera pipelineCam, ref ScriptableRenderContext context, Camera cam, bool *pipelineChecked) { PipelineResources.CameraRenderingPath path = pipelineCam.renderingPath; currentPath = path; pipelineCam.cam = cam; pipelineCam.EnableThis(resources); context.SetupCameraProperties(cam); //Set Global Data data.context = context; data.resources = resources; var allEvents = resources.allEvents; var collect = allEvents[(int)path]; #if UNITY_EDITOR //Need only check for Unity Editor's bug! if (!pipelineChecked[(int)path]) { pipelineChecked[(int)path] = true; foreach (var e in collect) { if (!e.CheckProperty()) { e.CheckInit(resources); } } } #endif foreach (var e in collect) { if (e.Enabled) { e.PreRenderFrame(pipelineCam, ref data); } } JobHandle.ScheduleBatchedJobs(); foreach (var e in collect) { if (e.Enabled) { e.FrameUpdate(pipelineCam, ref data); } } foreach (var i in waitReleaseRT) { data.buffer.ReleaseTemporaryRT(i); } waitReleaseRT.Clear(); }
private void Render(PipelineCamera pipelineCam, RenderTargetIdentifier dest, ref ScriptableRenderContext context, Camera cam) { CameraRenderingPath path = pipelineCam.renderingPath; pipelineCam.cam = cam; pipelineCam.EnableThis(); if (!CullResults.GetCullingParameters(cam, out data.cullParams)) { return; } context.SetupCameraProperties(cam); //Set Global Data data.defaultDrawSettings = new DrawRendererSettings(cam, new ShaderPassName("")); data.context = context; data.cullResults = CullResults.Cull(ref data.cullParams, context); PipelineFunctions.InitRenderTarget(ref pipelineCam.targets, cam, data.buffer); data.resources = resources; PipelineFunctions.GetViewProjectMatrix(cam, out data.vp, out data.inverseVP); for (int i = 0; i < data.frustumPlanes.Length; ++i) { Plane p = data.cullParams.GetCullingPlane(i); //GPU Driven RP's frustum plane is inverse from SRP's frustum plane data.frustumPlanes[i] = new Vector4(-p.normal.x, -p.normal.y, -p.normal.z, -p.distance); } DrawEvent evt; if (allDrawEvents.TryGetValue(path, out evt)) { //Pre Calculate Events foreach (var i in evt.preRenderEvents) { i.PreRenderFrame(pipelineCam, ref data); } //Run job system together JobHandle.ScheduleBatchedJobs(); //Start Prepare Render Targets //Frame Update Events foreach (var i in evt.drawEvents) { i.FrameUpdate(pipelineCam, ref data); } } data.buffer.Blit(pipelineCam.targets.renderTargetIdentifier, dest); data.ExecuteCommandBuffer(); }