public void Prepare(PipelineResources.CameraRenderingPath renderingPath) { RequireEventAttribute requireEvt = GetType().GetCustomAttribute <RequireEventAttribute>(true); this.renderingPath = renderingPath; if (requireEvt != null) { if (dependingEvents == null) { dependingEvents = new List <PipelineEvent>(requireEvt.events.Length); } foreach (var t in requireEvt.events) { PipelineEvent targetevt = RenderPipeline.GetEvent(renderingPath, t); if (targetevt != null) { if (targetevt.dependedEvents == null) { targetevt.dependedEvents = new List <PipelineEvent>(); } targetevt.dependedEvents.Add(this); dependingEvents.Add(targetevt); } } } }
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); }
public static PipelineEvent GetEvent(PipelineResources.CameraRenderingPath path, Type targetType) { var allEvents = current.resources.renderingPaths; PipelineEvent[] events = allEvents[path]; for (int i = 0; i < events.Length; ++i) { PipelineEvent evt = events[i]; if (evt.GetType() == targetType) { return(evt); } } return(null); }
public static T GetEvent <T>(PipelineResources.CameraRenderingPath path) where T : PipelineEvent { var allEvents = current.resources.renderingPaths; PipelineEvent[] events = allEvents[path]; for (int i = 0; i < events.Length; ++i) { PipelineEvent evt = events[i]; if (evt.GetType() == typeof(T)) { return((T)evt); } } return(null); }
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(); }
public RenderingPathAttribute(PipelineResources.CameraRenderingPath path) { this.path = path; }
public TargetPathAttribute(PipelineResources.CameraRenderingPath renderingPath) { path = renderingPath; }