/
XYRenderer.h
86 lines (72 loc) · 2.44 KB
/
XYRenderer.h
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#pragma once
#include "irenderable.h"
/// RenderableCollector implementation for the ortho view
class XYRenderer: public RenderableCollector
{
// State type structure
struct State
{
bool highlightPrimitives;
bool highlightAsGroupMember;
// Constructor
State() :
highlightPrimitives(false),
highlightAsGroupMember(false)
{}
};
State _state;
RenderStateFlags _globalstate;
// Shader to use for highlighted objects
Shader* _selectedShader;
Shader* _selectedShaderGroup;
public:
XYRenderer(RenderStateFlags globalstate, Shader* selected, Shader* selectedGroup) :
_globalstate(globalstate),
_selectedShader(selected),
_selectedShaderGroup(selectedGroup)
{}
bool supportsFullMaterials() const override
{
return false;
}
void setHighlightFlag(Highlight::Flags flags, bool enabled) override
{
if (flags & Highlight::Primitives)
{
_state.highlightPrimitives = enabled;
}
if (flags & Highlight::GroupMember)
{
_state.highlightAsGroupMember = enabled;
}
}
// Ortho view never processes lights
void addLight(const RendererLight&) override {}
void addRenderable(Shader& shader,
const OpenGLRenderable& renderable,
const Matrix4& world, const LightSources* lights,
const IRenderEntity* entity) override
{
if (_state.highlightPrimitives)
{
if (_state.highlightAsGroupMember)
_selectedShaderGroup->addRenderable(renderable, world,
lights, entity);
else
_selectedShader->addRenderable(renderable, world, lights, entity);
}
shader.addRenderable(renderable, world, lights, entity);
}
void addLitRenderable(Shader& shader,
const OpenGLRenderable& renderable,
const Matrix4& localToWorld,
const LitObject& /* litObject */,
const IRenderEntity* entity = nullptr) override
{
shader.addRenderable(renderable, localToWorld, nullptr, entity);
}
void render(const Matrix4& modelview, const Matrix4& projection)
{
GlobalRenderSystem().render(_globalstate, modelview, projection);
}
}; // class XYRenderer