From 15740faf9fe9fe4be08965098bbf2947e096aeeb Mon Sep 17 00:00:00 2001 From: chai Date: Wed, 14 Aug 2019 22:50:43 +0800 Subject: +Unity Runtime code --- Runtime/Filters/Mesh/MeshRenderer.h | 87 +++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 Runtime/Filters/Mesh/MeshRenderer.h (limited to 'Runtime/Filters/Mesh/MeshRenderer.h') diff --git a/Runtime/Filters/Mesh/MeshRenderer.h b/Runtime/Filters/Mesh/MeshRenderer.h new file mode 100644 index 0000000..d42c22e --- /dev/null +++ b/Runtime/Filters/Mesh/MeshRenderer.h @@ -0,0 +1,87 @@ +#ifndef MESHRENDERER_H +#define MESHRENDERER_H + +#include "Runtime/Filters/Renderer.h" + +class Mesh; + + + +class MeshRenderer : public Renderer { + public: + MeshRenderer (MemLabelId label, ObjectCreationMode mode); + // ~MeshRenderer (); declared-by-macro + REGISTER_DERIVED_CLASS (MeshRenderer, Renderer) + static void InitializeClass (); + + // Tag class as sealed, this makes QueryComponent faster. + static bool IsSealedClass () { return true; } + + static void RenderMultiple (const BatchInstanceData* instances, size_t count, const ChannelAssigns& channels); + virtual void Render (int materialIndex, const ChannelAssigns& channels); + + virtual void UpdateLocalAABB(); + + virtual void SetSubsetIndex(int subsetIndex, int index); + + virtual int GetStaticBatchIndex() const; + virtual UInt32 GetMeshIDSmall() const; + int GetMeshStaticBatchIndex() const; + + void TransformChanged (int changeMask); + void AwakeFromLoad(AwakeFromLoadMode mode); + virtual void Deactivate (DeactivateOperation operation); + + void SetSharedMesh (PPtr mesh); + PPtr GetSharedMesh (); + + Mesh& GetInstantiatedMesh (); + void SetInstantiatedMesh (Mesh* mesh); + + Mesh* GetMeshUsedForRendering(); + + void DidModifyMeshBounds (); + void DidModifyMeshValidity (); + void DidModifyMesh (); + void DidDeleteMesh (); + #if UNITY_EDITOR + float GetCachedSurfaceArea (); + virtual void GetRenderStats (RenderStats& renderStats); + #endif + + static bool CanUseDynamicBatching(const Mesh& mesh, UInt32 wantedChannels, int vertexCount); + + private: + + Mesh* GetCachedMesh (); + + ListNode m_MeshNode; + void UpdateCachedMesh (); + + void FreeScaledMesh (); + + Mesh* m_CachedMesh; + PPtr m_Mesh; + + struct ScaledMesh + { + Matrix4x4f matrix; + Mesh* mesh; + }; + + ScaledMesh* m_ScaledMesh; + + // as we have padding anyway, we can add more flags here + UInt8 m_ScaledMeshDirty; + // setted on responce to event to properly handle vertices changing on non-uniform scale + UInt8 m_MeshWasModified; + // for future + UInt16 m_Padding16; + + #if UNITY_EDITOR + float m_CachedSurfaceArea; + #endif + +}; + +#endif -- cgit v1.1-26-g67d0