summaryrefslogtreecommitdiff
path: root/Runtime/Terrain/QuadTreeNodeRenderer.h
blob: 7f70ee7e06c1d63d3f36bc6c9e2bacbda0154d38 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#pragma once

#include "Runtime/Camera/IntermediateRenderer.h"

struct QuadTreeNode;
class Camera;
class TerrainRenderer;

class QuadTreeNodeRenderer : public MeshIntermediateRenderer
{
public:
	QuadTreeNodeRenderer ();

	void Initialize (const Matrix4x4f& matrix, const AABB& localAABB, PPtr<Material> material, int layer, bool castShadows, bool receiveShadows);

	virtual ~QuadTreeNodeRenderer();

	void Setup(TerrainRenderer* terrainRenderer, QuadTreeNode* node);

	virtual void Render( int materialIndex, const ChannelAssigns& channels );

	static void StaticInitialize ();
	static void StaticDestroy ();

protected:


private:
	// Note: not using per-frame linear allocator, because in the editor
	// it can render multiple frames using single player loop run (e.g. when editor is paused).
	// Clearing per-frame data and then trying to use it later leads to Bad Things.
	DECLARE_POOLED_ALLOC(QuadTreeNodeRenderer);

	TerrainRenderer*	m_TerrainRenderer;	// It's safe to store raw pointer to the TerrainRender object here
											// because TerrainRenderers are deleted before Render() happens
											// and the life-time of TerrainVBORenderer object is only one frame.
	QuadTreeNode*		m_QuadTreeNode;
};

QuadTreeNodeRenderer* AddQuadTreeNodeRenderer( const Matrix4x4f& matrix, const AABB& localAABB, PPtr<Material> material, int layer, bool castShadows, bool receiveShadows, Camera* camera );