RenderPipeline.ProcessRenderRequests
Declaration
protected void ProcessRenderRequests(Rendering.ScriptableRenderContext context, Camera camera, RequestData renderRequest);Параметры
| Параметр | Описание |
|---|---|
| контекст | Контекст для выполнения запроса. |
| камера | Камера для выполнения запроса. |
| renderRequest | Вся необходимая информация о месте назначения для отображения запроса, например, место назначения отображения, уровень mipmap, индекс слоя и т.д. Эта информация зависит от типа RequestData. |
Описание
Реализуйте этот метод в пользовательском Scriptable Render Pipeline (SRP) для выполнения запросов рендеринга, поданных с помощью RenderPipeline.SubmitRenderRequest.
Unity вызывает этот метод с конвейером рендеринга, когда вы вызываете RenderPipeline.SubmitRenderRequest или Camera.SubmitRenderRequest. Если вы создаете пользовательский Scriptable Render Pipeline, вы должны реализовать этот метод и RenderPipeline.IsRenderRequestSupported для рендеринга запросов вне цикла рендеринга Unity.
См. также: RenderPipeline.SupportsRenderRequest, RenderPipeline.SubmitRenderRequest.
using UnityEngine; using UnityEngine.Rendering; using System.Collections.Generic;
public class ExampleRenderPipelineInstance : RenderPipeline { public ExampleRenderPipelineInstance() { }
override protected bool IsRenderRequestSupported<RequestData>(Camera camera, RequestData data) { // StandardRequest is supported by this render pipeline if (data is StandardRequest) return true;
return false; }
// Process a basic render request to a Texture2D destination with a single mipmap level override protected void ProcessRenderRequests<RequestData>(ScriptableRenderContext context, Camera camera, RequestData renderRequest) { StandardRequest standardRequest = renderRequest as StandardRequest;
if (standardRequest != null) { RenderTexture destination = standardRequest.destination;
// Don't go further if there's no destination texture. if (destination == null) { Debug.LogError("Your render request has no destination texture. Set a destination texture before sending a request"); return; }
int mipLevel = standardRequest.mipLevel; int slice = standardRequest.slice; int face = (int)standardRequest.face;
// If mip is 0 and target is Texture2D, immediately render to the requested destination. if (destination.dimension != TextureDimension.Tex2D || mipLevel != 0) { Debug.LogError("ProcessRenderRequests only support Texture2D destination with a single mipmap level. Adjust your render request"); return; }
// Store data that will be changed. var originalTarget = camera.targetTexture;
camera.targetTexture = destination;
Render(context, new Camera[] { camera });
// Restore data. camera.targetTexture = originalTarget; Graphics.SetRenderTarget(originalTarget); } else { Debug.LogWarning("RenderRequest type: " + typeof(RequestData).FullName + " is either invalid or unsupported by the current pipeline"); } }
override protected void Render(ScriptableRenderContext context, List<Camera> cameras) { // Put your Render method code here } }