| | 1 | | using System; |
| | 2 | | using System.Collections.Generic; |
| | 3 | | using UnityEngine; |
| | 4 | | using UnityEngine.Pool; |
| | 5 | | using UnityEngine.Rendering; |
| | 6 | |
|
| | 7 | | namespace DCL |
| | 8 | | { |
| | 9 | | /// <summary> |
| | 10 | | /// This class is used by the AvatarMeshCombiner to combine meshes. Each layer represents a new generated sub-mesh. |
| | 11 | | /// </summary> |
| | 12 | | public class CombineLayer : IDisposable |
| | 13 | | { |
| | 14 | | private List<SkinnedMeshRenderer> renderers; |
| | 15 | |
|
| 441 | 16 | | public IReadOnlyList<SkinnedMeshRenderer> Renderers => renderers; |
| 540 | 17 | | public Dictionary<Texture2D, int> textureToId { get; private set; } |
| | 18 | |
|
| | 19 | | public CullMode cullMode; |
| | 20 | | public bool isOpaque; |
| | 21 | |
|
| | 22 | | public void Dispose() |
| | 23 | | { |
| 65 | 24 | | ListPool<SkinnedMeshRenderer>.Release(renderers); |
| 65 | 25 | | DictionaryPool<Texture2D, int>.Release(textureToId); |
| | 26 | |
|
| 65 | 27 | | renderers = null; |
| 65 | 28 | | textureToId = null; |
| | 29 | |
|
| 65 | 30 | | GenericPool<CombineLayer>.Release(this); |
| 65 | 31 | | } |
| | 32 | |
|
| | 33 | | internal void AddRenderer(SkinnedMeshRenderer renderer) |
| | 34 | | { |
| 231 | 35 | | renderers.Add(renderer); |
| 231 | 36 | | } |
| | 37 | |
|
| | 38 | | internal void AddRenderers(IReadOnlyCollection<SkinnedMeshRenderer> renderers) |
| | 39 | | { |
| 6 | 40 | | this.renderers.AddRange(renderers); |
| 6 | 41 | | } |
| | 42 | |
|
| | 43 | | public static CombineLayer Rent(CullMode cullMode = CullMode.Off, bool isOpaque = false, IReadOnlyCollection<Ski |
| | 44 | | { |
| 81 | 45 | | var layer = GenericPool<CombineLayer>.Get(); |
| 81 | 46 | | layer.cullMode = cullMode; |
| 81 | 47 | | layer.isOpaque = isOpaque; |
| 81 | 48 | | layer.renderers = ListPool<SkinnedMeshRenderer>.Get(); |
| 81 | 49 | | layer.textureToId = DictionaryPool<Texture2D, int>.Get(); |
| | 50 | |
|
| 81 | 51 | | if (renderers != null) |
| 5 | 52 | | layer.AddRenderers(renderers); |
| | 53 | |
|
| 81 | 54 | | return layer; |
| | 55 | | } |
| | 56 | |
|
| | 57 | | public override string ToString() |
| | 58 | | { |
| 0 | 59 | | string rendererString = $"renderer count: {Renderers?.Count ?? 0}"; |
| 0 | 60 | | string textureIdString = "texture ids: {"; |
| | 61 | |
|
| 0 | 62 | | foreach ( var kvp in textureToId ) |
| | 63 | | { |
| 0 | 64 | | textureIdString += $" tx hash: {kvp.Key.GetHashCode()} id: {kvp.Value} "; |
| | 65 | | } |
| | 66 | |
|
| 0 | 67 | | textureIdString += "}"; |
| | 68 | |
|
| 0 | 69 | | return $"cullMode: {cullMode} - isOpaque: {isOpaque} - {rendererString} - {textureIdString}"; |
| | 70 | | } |
| | 71 | | } |
| | 72 | | } |