Advertisement
PowerJake

Renderer Feature black screen bug

Aug 24th, 2023 (edited)
13
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.81 KB | None | 0 0
  1. public class WasdBlitRendererFeature : ScriptableRendererFeature {
  2. public class WasdBlitPass : ScriptableRenderPass {
  3. private ProfilingSampler _profilingSampler = new ProfilingSampler("WasdBlitPass");
  4.  
  5. private readonly Material _mat;
  6. private GameRenderWindow _renderWindow;
  7. private readonly bool _debug;
  8.  
  9.  
  10. public WasdBlitPass(GameRenderWindow gameRenderWindow, Shader shader, bool debug) {
  11. _renderWindow = gameRenderWindow;
  12. renderPassEvent = RenderPassEvent.AfterRenderingPostProcessing;
  13. _mat = new Material(shader);
  14. _debug = debug;
  15. }
  16.  
  17. public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData) {
  18. if (!_renderWindow || !_renderWindow.Rt) return;
  19. var camera = renderingData.cameraData.camera;
  20. if (camera.cameraType != CameraType.Game) return;
  21. if (!camera.name.Equals(_renderWindow.tgtCameraName)) return;
  22.  
  23.  
  24. CommandBuffer cmd = CommandBufferPool.Get();
  25.  
  26. using (new ProfilingScope(cmd, _profilingSampler)) {
  27. float scaledCamWidth = camera.scaledPixelWidth;
  28. float scaledCamHeight = camera.scaledPixelHeight;
  29. float camAspectWh = scaledCamWidth / scaledCamHeight;
  30.  
  31. float sourceAspectWh = (float)_renderWindow.Rt.width / (float) _renderWindow.Rt.height;
  32. float sourceAspectHw = (float)_renderWindow.Rt.height / (float)_renderWindow.Rt.width;
  33.  
  34. int maxIntScale = Mathf.FloorToInt(scaledCamHeight / _renderWindow.Rt.height);
  35. float windowScale = 1; float uvHeight = 1;
  36. if (maxIntScale > 0) {
  37. windowScale = scaledCamHeight/_renderWindow.Rt.height;
  38. uvHeight = windowScale/maxIntScale;
  39. }
  40. float yMargin = (1 - uvHeight) / 2;
  41. //Debug.Log(maxIntScale + ", " + windowScale + ", " + uvHeight);
  42.  
  43. float uvHeightAsWidth = uvHeight * camAspectWh;
  44. float uvWidth = uvHeightAsWidth / sourceAspectWh;
  45. float xMargin = (1 - uvWidth) / 2;
  46.  
  47. Vector4 st = new Vector4(uvWidth, uvHeight, xMargin, yMargin);
  48.  
  49. if (_debug && Application.isEditor) {
  50. Debug.Log("VirtualWindow: " + _renderWindow.Rt.width + " x / " + _renderWindow.Rt.height + " y\n"
  51. + "ActualWindow: " + scaledCamWidth + " x / " + scaledCamHeight + " y\n"
  52. + st);
  53. }
  54.  
  55.  
  56. _mat.SetTexture("_MainTex", _renderWindow.Rt);
  57. _mat.SetVector("_MainTex_ST", st);
  58. cmd.DrawMesh(RenderingUtils.fullscreenMesh, Matrix4x4.identity, _mat);
  59. }
  60.  
  61. context.ExecuteCommandBuffer(cmd);
  62. cmd.Clear();
  63. CommandBufferPool.Release(cmd);
  64. }
  65. }
  66.  
  67. public GameRenderWindow renderWindow;
  68. public Shader shader;
  69. public bool debug;
  70. private WasdBlitPass _renderPass;
  71.  
  72. public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData) {
  73. if (renderingData.cameraData.cameraType == CameraType.Game) {
  74. // Calling ConfigureInput with the ScriptableRenderPassInput.Color argument
  75. // ensures that the opaque texture is available to the Render Pass.
  76. _renderPass.ConfigureInput(ScriptableRenderPassInput.Color);
  77. renderer.EnqueuePass(_renderPass);
  78. }
  79. }
  80.  
  81. public override void Create() {
  82. _renderPass = new WasdBlitPass(renderWindow, shader, debug);
  83. }
  84.  
  85. protected override void Dispose(bool disposing) { }
  86. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement