Skip to content
This repository was archived by the owner on Jan 4, 2022. It is now read-only.

Commit 329b388

Browse files
committed
Reworking the render passes.
1 parent 7a8f459 commit 329b388

11 files changed

+121
-177
lines changed

Core/Components/Render/OrthographicRenderFeature.cs

Lines changed: 12 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -1,74 +1,8 @@
1-
using System.Collections.Generic;
2-
using Unity.Entities;
3-
using UnityEngine;
41
using UnityEngine.Rendering;
52
using UnityEngine.Rendering.Universal;
63

74
namespace UGUIDots.Render {
85

9-
public unsafe class OrthographicRenderPass : ScriptableRenderPass {
10-
11-
public unsafe struct RenderInstruction {
12-
public SubmeshKeyElement* Start;
13-
public MaterialPropertyBatch Batch;
14-
public Mesh Mesh;
15-
};
16-
17-
public Queue<RenderInstruction> RenderInstructions { get; private set; }
18-
19-
private string profilerTag;
20-
private ProfilingSampler sampler;
21-
22-
public OrthographicRenderPass(OrthographicRenderSettings settings) {
23-
profilerTag = settings.ProfilerTag;
24-
base.renderPassEvent = settings.RenderPassEvt;
25-
RenderInstructions = new Queue<RenderInstruction>();
26-
sampler = new ProfilingSampler(settings.ProfilerTag);
27-
}
28-
29-
public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData) {
30-
// Skip attempting to render the context if the camera is a RT camera
31-
if (RenderInstructions.Count <= 0 || renderingData.cameraData.targetTexture) {
32-
return;
33-
}
34-
35-
var cmd = CommandBufferPool.Get(profilerTag);
36-
37-
using (new ProfilingScope(cmd, sampler)) {
38-
context.ExecuteCommandBuffer(cmd);
39-
cmd.Clear();
40-
41-
// Set the projection view matrix
42-
var proj = Matrix4x4.Ortho(0, Screen.width, 0, Screen.height, -100f, 100f);
43-
var view = Matrix4x4.TRS(Vector3.zero, Quaternion.identity, Vector3.one);
44-
cmd.SetViewProjectionMatrices(view, proj);
45-
46-
var mgr = World.DefaultGameObjectInjectionWorld.EntityManager;
47-
48-
while (RenderInstructions.Count > 0) {
49-
var dequed = RenderInstructions.Dequeue();
50-
var keys = dequed.Start;
51-
var mesh = dequed.Mesh;
52-
var batch = dequed.Batch.Value;
53-
54-
for (int i = 0; i < mesh.subMeshCount; i++) {
55-
var matEntity = keys[i].MaterialEntity;
56-
57-
// TODO: I would like for the data to already be there without this check - need to revise soon
58-
if (mgr.HasComponent<SharedMaterial>(matEntity)) {
59-
var mat = mgr.GetComponentData<SharedMaterial>(matEntity).Value;
60-
var prop = batch[i];
61-
cmd.DrawMesh(mesh, Matrix4x4.identity, mat, i, -1, prop);
62-
}
63-
}
64-
}
65-
}
66-
67-
context.ExecuteCommandBuffer(cmd);
68-
CommandBufferPool.Release(cmd);
69-
}
70-
}
71-
726
[System.Serializable]
737
public class OrthographicRenderSettings {
748
public string ProfilerTag;
@@ -90,6 +24,18 @@ public override void Create() {
9024
Pass.renderPassEvent = Settings.RenderPassEvt;
9125
}
9226

27+
public CommandBuffer InitCommandBuffer() {
28+
if (Pass == null) {
29+
Create();
30+
}
31+
32+
return Pass.Init();
33+
}
34+
35+
public void ReleaseCommandBuffer() {
36+
Pass.Release();
37+
}
38+
9339
public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData) {
9440
renderer.EnqueuePass(Pass);
9541
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
using UnityEngine.Rendering;
2+
using UnityEngine.Rendering.Universal;
3+
using UnityEngine;
4+
5+
namespace UGUIDots.Render {
6+
7+
public class OrthographicRenderPass : ScriptableRenderPass {
8+
9+
private string profilerTag;
10+
private ProfilingSampler sampler;
11+
12+
private CommandBuffer cmd;
13+
14+
public OrthographicRenderPass(OrthographicRenderSettings settings) {
15+
base.renderPassEvent = settings.RenderPassEvt;
16+
profilerTag = settings.ProfilerTag;
17+
sampler = new ProfilingSampler(settings.ProfilerTag);
18+
19+
Debug.Log("Created");
20+
}
21+
22+
public CommandBuffer Init() {
23+
if (cmd != null) {
24+
return cmd;
25+
}
26+
27+
cmd = CommandBufferPool.Get(profilerTag);
28+
29+
return cmd;
30+
}
31+
32+
public void Release() {
33+
if (cmd != null) {
34+
CommandBufferPool.Release(cmd);
35+
}
36+
}
37+
38+
public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData) {
39+
#if UNITY_EDITOR
40+
if (cmd == null) {
41+
return;
42+
}
43+
#endif
44+
context.ExecuteCommandBuffer(cmd);
45+
}
46+
}
47+
}

Core/Components/Render/OrthographicRenderPass.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Core/Components/Render/RenderCommand.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
namespace UGUIDots.Render {
55

66
public class RenderCommand : IComponentData, IEquatable<RenderCommand> {
7+
78
public OrthographicRenderFeature RenderFeature;
89

910
public bool Equals(RenderCommand other) {
Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,42 @@
11
using Unity.Entities;
22
using Unity.Jobs;
33
using UnityEngine;
4-
using static UGUIDots.Render.OrthographicRenderPass;
4+
using UnityEngine.Rendering;
55

66
namespace UGUIDots.Render.Systems {
77

88
[UpdateInGroup(typeof(MeshRenderGroup))]
99
public class OrthographicRenderSystem : SystemBase {
1010

11-
private EntityQuery renderQuery, renderCommandQuery;
12-
private OrthographicRenderFeature renderFeature;
13-
14-
protected override void OnCreate() {
15-
renderQuery = GetEntityQuery(new EntityQueryDesc {
16-
All = new [] { ComponentType.ReadOnly<SubmeshKeyElement>(), ComponentType.ReadOnly<Mesh>() }
17-
});
18-
19-
renderCommandQuery = GetEntityQuery(new EntityQueryDesc {
20-
All = new [] { ComponentType.ReadOnly<RenderCommand>() }
21-
});
22-
}
11+
#pragma warning disable 649
12+
private CommandBuffer cmd;
13+
#pragma warning restore 649
2314

2415
protected override void OnStartRunning() {
25-
Entities.WithStoreEntityQueryInField(ref renderCommandQuery).ForEach((RenderCommand cmd) => {
26-
renderFeature = cmd.RenderFeature;
16+
Entities.ForEach((RenderCommand cmd) => {
17+
this.cmd = cmd.RenderFeature.InitCommandBuffer();
2718
}).WithoutBurst().Run();
2819
}
2920

3021
protected unsafe override void OnUpdate() {
22+
cmd?.Clear();
23+
Entities.ForEach((Mesh mesh, MaterialPropertyBatch batch, DynamicBuffer<SubmeshKeyElement> keys) => {
24+
if (keys.Length == 0) {
25+
return;
26+
}
27+
28+
for (int i = 0; i < mesh.subMeshCount; i++) {
29+
var materialKey = keys[i].MaterialEntity;
30+
var prop = batch.Value[i];
31+
var mat = EntityManager.GetComponentData<SharedMaterial>(materialKey).Value;
32+
33+
// Debug.Log($"{cmd == null}, {mesh == null}, {batch.Value == null}, {keys.IsCreated}");
34+
35+
cmd.DrawMesh(mesh, Matrix4x4.identity, mat, i, -1, prop);
36+
}
37+
}).WithoutBurst().Run();
38+
39+
/*
3140
Entities.WithStoreEntityQueryInField(ref renderQuery).
3241
ForEach((Mesh mesh, MaterialPropertyBatch batch, DynamicBuffer<SubmeshKeyElement> keys) => {
3342
renderFeature.Pass.RenderInstructions.Enqueue(new RenderInstruction {
@@ -37,6 +46,7 @@ protected unsafe override void OnUpdate() {
3746
}
3847
);
3948
}).WithoutBurst().Run();
49+
*/
4050
}
4151
}
4252
}

Prefabs/2DRenderer_URP.asset

Lines changed: 0 additions & 67 deletions
This file was deleted.

Prefabs/URP Asset.asset renamed to Prefabs/Default URP Pipeline.asset

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,14 @@ MonoBehaviour:
1010
m_Enabled: 1
1111
m_EditorHideFlags: 0
1212
m_Script: {fileID: 11500000, guid: bf2edee5c58d82540a51f03df9d42094, type: 3}
13-
m_Name: URP Asset
13+
m_Name: Default URP Pipeline
1414
m_EditorClassIdentifier:
1515
k_AssetVersion: 5
1616
k_AssetPreviousVersion: 5
1717
m_RendererType: 1
1818
m_RendererData: {fileID: 0}
1919
m_RendererDataList:
20-
- {fileID: 11400000, guid: 95c9b70d328f84047a847a2d7d71a924, type: 2}
20+
- {fileID: 11400000, guid: e338f2be5c0c93840adc956486c9f34c, type: 2}
2121
m_DefaultRendererIndex: 0
2222
m_RequireDepthTexture: 0
2323
m_RequireOpaqueTexture: 0
@@ -44,6 +44,7 @@ MonoBehaviour:
4444
m_SupportsDynamicBatching: 0
4545
m_MixedLightingSupported: 1
4646
m_DebugLevel: 0
47+
m_UseAdaptivePerformance: 1
4748
m_ColorGradingMode: 0
4849
m_ColorGradingLutSize: 32
4950
m_ShadowType: 1

Prefabs/URP Asset.asset.meta renamed to Prefabs/Default URP Pipeline.asset.meta

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,5 @@
11
%YAML 1.1
22
%TAG !u! tag:unity3d.com,2011:
3-
--- !u!114 &-1372306941258236212
4-
MonoBehaviour:
5-
m_ObjectHideFlags: 0
6-
m_CorrespondingSourceObject: {fileID: 0}
7-
m_PrefabInstance: {fileID: 0}
8-
m_PrefabAsset: {fileID: 0}
9-
m_GameObject: {fileID: 0}
10-
m_Enabled: 1
11-
m_EditorHideFlags: 0
12-
m_Script: {fileID: 11500000, guid: ac620f9bc3a53f2478bc078f9d7082bd, type: 3}
13-
m_Name: Orthographic Render Feature
14-
m_EditorClassIdentifier:
15-
Settings:
16-
ProfilerTag: Orthographic Render Pass
17-
RenderPassEvt: 600
183
--- !u!114 &11400000
194
MonoBehaviour:
205
m_ObjectHideFlags: 0
@@ -25,10 +10,11 @@ MonoBehaviour:
2510
m_Enabled: 1
2611
m_EditorHideFlags: 0
2712
m_Script: {fileID: 11500000, guid: de640fe3d0db1804a85f9fc8f5cadab6, type: 3}
28-
m_Name: ForwardRenderer
13+
m_Name: Default URP Pipeline_Renderer
2914
m_EditorClassIdentifier:
3015
m_RendererFeatures:
31-
- {fileID: -1372306941258236212}
16+
- {fileID: 5773635822035489810}
17+
m_RendererFeatureMap: 1254e5aa30132050
3218
postProcessData: {fileID: 11400000, guid: 41439944d30ece34e96484bdb6645b55, type: 2}
3319
shaders:
3420
blitPS: {fileID: 4800000, guid: c17132b1f77d20942aa75f8429c0f8bc, type: 3}
@@ -50,3 +36,20 @@ MonoBehaviour:
5036
passOperation: 0
5137
failOperation: 0
5238
zFailOperation: 0
39+
m_ShadowTransparentReceive: 1
40+
--- !u!114 &5773635822035489810
41+
MonoBehaviour:
42+
m_ObjectHideFlags: 0
43+
m_CorrespondingSourceObject: {fileID: 0}
44+
m_PrefabInstance: {fileID: 0}
45+
m_PrefabAsset: {fileID: 0}
46+
m_GameObject: {fileID: 0}
47+
m_Enabled: 1
48+
m_EditorHideFlags: 0
49+
m_Script: {fileID: 11500000, guid: ac620f9bc3a53f2478bc078f9d7082bd, type: 3}
50+
m_Name: UI Pass
51+
m_EditorClassIdentifier:
52+
m_Active: 1
53+
Settings:
54+
ProfilerTag: Orthographic Render Pass
55+
RenderPassEvt: 600

Prefabs/2DRenderer_URP.asset.meta renamed to Prefabs/Default URP Pipeline_Renderer.asset.meta

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)