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/Camera/BaseRenderer.h | 148 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 148 insertions(+) create mode 100644 Runtime/Camera/BaseRenderer.h (limited to 'Runtime/Camera/BaseRenderer.h') diff --git a/Runtime/Camera/BaseRenderer.h b/Runtime/Camera/BaseRenderer.h new file mode 100644 index 0000000..26350fb --- /dev/null +++ b/Runtime/Camera/BaseRenderer.h @@ -0,0 +1,148 @@ +#ifndef BASE_RENDERER_H +#define BASE_RENDERER_H + +#include "Runtime/Math/Vector4.h" +#include "Runtime/Math/Matrix4x4.h" +#include "Runtime/Geometry/AABB.h" +#include "Runtime/Modules/ExportModules.h" +#include "Runtime/Camera/RenderLoops/GlobalLayeringData.h" + +namespace Unity { class Material; } +class ChannelAssigns; +using namespace Unity; +class AABB; +class Matrix4x4f; +class Vector3f; +class Quaternionf; +class MaterialPropertyBlock; +class Shader; +class Renderer; +template class PPtr; + +enum RendererType { + kRendererUnknown, + + kRendererMesh, + kRendererSkinnedMesh, + kRendererCloth, + kRendererSprite, + + kRendererParticle, + kRendererTrail, + kRendererLine, + kRendererParticleSystem, + + kRendererIntermediate, + + kRendererTypeCount +}; + +struct BatchInstanceData +{ + Matrix4x4f xform; // 64 + Renderer* renderer; // 4 + int subsetIndex; // 4 + int xformType; // 4 + int dummy; // 4 byte padding +}; + +struct TransformInfo +{ + Matrix4x4f worldMatrix; // 64 + AABB worldAABB; // 24 + AABB localAABB; // 24 used by LightManager and Shadows + float invScale; // 4 + TransformType transformType; // 4 +}; + +// Abstract base class for renderers. +class EXPORT_COREMODULE BaseRenderer { +public: + BaseRenderer(RendererType type); + virtual ~BaseRenderer(); + + // The main Render Function. Implement this in order to draw the graphics + // When this is called, the correct material and transform have been set up. + virtual void Render (int materialIndex, const ChannelAssigns& channels) = 0; + + void GetWorldAABB( AABB& result ); + const TransformInfo& GetTransformInfo (); + void GetLocalAABB( AABB& result ); + + virtual void UpdateTransformInfo() = 0; + + virtual void RendererBecameVisible() { m_IsVisibleInScene = true; } + virtual void RendererBecameInvisible() { m_IsVisibleInScene = false; } + virtual int GetLayer() const = 0; + + virtual float GetSortingFudge () const { return 0.0f; } + + virtual int GetMaterialCount() const = 0; + virtual PPtr GetMaterial(int i) const = 0; + virtual int GetSubsetIndex(int i) const { return i; } + virtual int GetStaticBatchIndex() const { return 0; } + virtual UInt32 GetMeshIDSmall() const { return 0; } + + RendererType GetRendererType() const { return static_cast(m_RendererType); } + + UInt32 GetLayerMask() const { return 1<