Divide Framework 0.1
A free and open-source 3D Framework under heavy development
Loading...
Searching...
No Matches
SceneState.cpp
Go to the documentation of this file.
1
2
5
6namespace Divide
7{
9 {
10 _moveFB.reset();
11 _moveLR.reset();
12 _moveUD.reset();
15 _roll.reset();
16 _zoom.reset();
17 }
18
20 {
22
23 _cameraUnderwater = false;
24 _cameraUpdated = false;
25 _overrideCamera = nullptr;
26 _cameraLockedToMouse = false;
27 }
28
30 : SceneComponent( parentScene ),
31 _renderState( parentScene )
32 {
33 }
34
36 : SceneComponent( parentScene )
37 {
38 enableOption( RenderOptions::RENDER_GEOMETRY );
39 _lodThresholds.set( 25, 45, 85, 165 );
40 }
41
43 {
44 constexpr bool validateRenderMask = false;
45
46 if constexpr( validateRenderMask )
47 {
48 const auto validateMask = [mask]() -> U16
49 {
50 U16 validMask = 0;
51 for ( U16 stateIt = 1u; stateIt <= to_base( RenderOptions::COUNT ); ++stateIt )
52 {
53 const U16 bitState = toBit( stateIt );
54
55 if ( mask & bitState )
56 {
57 validMask |= to_base(bitState );
58 }
59 }
60 return validMask;
61 };
62
63 const U16 parsedMask = validateMask();
64 DIVIDE_ASSERT( parsedMask != 0 && parsedMask == mask,
65 "SceneRenderState::renderMask error: Invalid state specified!" );
66 _stateMask = parsedMask;
67 }
68 else
69 {
70 _stateMask = mask;
71 }
72 }
73
74 bool SceneRenderState::isEnabledOption( const RenderOptions option ) const noexcept
75 {
76 return _stateMask & to_base(option);
77 }
78
79 void SceneRenderState::enableOption( const RenderOptions option ) noexcept
80 {
81 _stateMask |= to_base(option);
82 }
83
84 void SceneRenderState::disableOption( const RenderOptions option ) noexcept
85 {
86 _stateMask &= ~to_base(option);
87 }
88
89 void SceneRenderState::toggleOption( const RenderOptions option ) noexcept
90 {
91 toggleOption( option, !isEnabledOption( option ) );
92 }
93
94 void SceneRenderState::toggleOption( const RenderOptions option, const bool state ) noexcept
95 {
96 if ( state )
97 {
98 enableOption( option );
99 }
100 else
101 {
102 disableOption( option );
103 }
104 }
105
107 {
108 // Hack dumping ground. Scene specific lod management can be tweaked here to keep the components clean
109 if ( stage == RenderStage::REFLECTION || stage == RenderStage::REFRACTION )
110 {
111 // cancel out LoD Level 0
112 return {
113 0u,
114 _lodThresholds.y,
115 _lodThresholds.z,
116 _lodThresholds.w };
117 }
118 if ( stage == RenderStage::SHADOW )
119 {
120 return _lodThresholds * 3u;
121 }
122
123 return _lodThresholds;
124 }
125} // namespace Divide
#define DIVIDE_ASSERT(...)
void disableOption(RenderOptions option) noexcept
Definition: SceneState.cpp:84
bool isEnabledOption(RenderOptions option) const noexcept
Definition: SceneState.cpp:74
void enableOption(RenderOptions option) noexcept
Definition: SceneState.cpp:79
void renderMask(U16 mask)
Definition: SceneState.cpp:42
SceneRenderState(Scene &parentScene) noexcept
Definition: SceneState.cpp:35
vec4< U16 > & lodThresholds() noexcept
Definition: SceneState.h:123
void toggleOption(RenderOptions option) noexcept
Definition: SceneState.cpp:89
SceneState(Scene &parentScene)
Definition: SceneState.cpp:29
Handle console commands that start with a forward slash.
Definition: AIProcessor.cpp:7
bool isEnabledOption(const GenericDrawCommand &cmd, CmdRenderOptions option) noexcept
void disableOption(GenericDrawCommand &cmd, CmdRenderOptions option) noexcept
void toggleOption(GenericDrawCommand &cmd, CmdRenderOptions option) noexcept
void enableOption(GenericDrawCommand &cmd, CmdRenderOptions option) noexcept
uint16_t U16
constexpr T toBit(const T X)
Converts an arbitrary positive integer value to a bitwise value used for masks.
constexpr auto to_base(const Type value) -> Type
void reset() noexcept
Definition: SceneState.h:180
void resetMoveDirections() noexcept
Definition: SceneState.cpp:8
void resetAll() noexcept
Definition: SceneState.cpp:19