File: RenderingOptions.h

package info (click to toggle)
0ad 0.0.26-3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 130,460 kB
  • sloc: cpp: 261,824; ansic: 198,392; javascript: 19,067; python: 14,557; sh: 7,629; perl: 4,072; xml: 849; makefile: 741; java: 533; ruby: 229; php: 190; pascal: 30; sql: 21; tcl: 4
file content (138 lines) | stat: -rw-r--r-- 3,677 bytes parent folder | download | duplicates (4)
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
/* Copyright (C) 2022 Wildfire Games.
 * This file is part of 0 A.D.
 *
 * 0 A.D. is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * 0 A.D. is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with 0 A.D.  If not, see <http://www.gnu.org/licenses/>.
 */

/**
 * Keeps track of the settings used for rendering.
 * Ideally this header file should remain very quick to parse,
 * so avoid including other headers here unless absolutely necessary.
 *
 * Lifetime concerns: g_RenderingOptions always exists, but hooks are tied to the configDB's lifetime
 * an the renderer may or may not actually exist.
 */

#ifndef INCLUDED_RENDERINGOPTIONS
#define INCLUDED_RENDERINGOPTIONS

#include "ps/CStr.h"
#include "ps/CStrIntern.h"

class CRenderer;

enum RenderPath
{
	// If no rendering path is configured explicitly, the renderer
	// will choose the path when Open() is called.
	DEFAULT,

	// Classic fixed function.
	FIXED,

	// Use new ARB/GLSL system
	SHADER
};

struct RenderPathEnum
{
	static RenderPath FromString(const CStr8& name);
	static CStr8 ToString(RenderPath);
};

enum class RenderDebugMode
{
	NONE,
	AO,
	ALPHA,
	CUSTOM
};

struct RenderDebugModeEnum
{
	static RenderDebugMode FromString(const CStr8& name);
	static CStrIntern ToString(RenderDebugMode mode);
};

class CRenderingOptions
{
	// The renderer needs access to our private variables directly because capabilities have not yet been extracted
	// and thus sometimes it needs to change the rendering options without the side-effects.
	friend class CRenderer;

public:
	CRenderingOptions();
	~CRenderingOptions();

	void ReadConfigAndSetupHooks();
	void ClearHooks();

#define OPTION_DEFAULT_SETTER(NAME, TYPE) \
public: void Set##NAME(TYPE value) { m_##NAME = value; }\

#define OPTION_CUSTOM_SETTER(NAME, TYPE) \
public: void Set##NAME(TYPE value);\

#define OPTION_GETTER(NAME, TYPE)\
public: TYPE Get##NAME() const { return m_##NAME; }\

#define OPTION_DEF(NAME, TYPE)\
private: TYPE m_##NAME;

#define OPTION(NAME, TYPE)\
OPTION_DEFAULT_SETTER(NAME, TYPE); OPTION_GETTER(NAME, TYPE); OPTION_DEF(NAME, TYPE);

#define OPTION_WITH_SIDE_EFFECT(NAME, TYPE)\
OPTION_CUSTOM_SETTER(NAME, TYPE); OPTION_GETTER(NAME, TYPE); OPTION_DEF(NAME, TYPE);

	OPTION_WITH_SIDE_EFFECT(Shadows, bool);
	OPTION_WITH_SIDE_EFFECT(ShadowPCF, bool);
	OPTION_WITH_SIDE_EFFECT(Fog, bool);

	OPTION_WITH_SIDE_EFFECT(RenderPath, RenderPath);

	OPTION_WITH_SIDE_EFFECT(RenderDebugMode, RenderDebugMode);

	OPTION(WaterEffects, bool);
	OPTION(WaterFancyEffects, bool);
	OPTION(WaterRealDepth, bool);
	OPTION(WaterRefraction, bool);
	OPTION(WaterReflection, bool);

	OPTION(ShadowAlphaFix, bool);
	OPTION(Particles, bool);
	OPTION(GPUSkinning, bool);
	OPTION(Silhouettes, bool);
	OPTION(SmoothLOS, bool);
	OPTION(PostProc, bool);
	OPTION(DisplayFrustum, bool);
	OPTION(DisplayShadowsFrustum, bool);

	OPTION(RenderActors, bool);

#undef OPTION_DEFAULT_SETTER
#undef OPTION_CUSTOM_SETTER
#undef OPTION_GETTER
#undef OPTION_DEF
#undef OPTION
#undef OPTION_WITH_SIDE_EFFECT

private:
	class ConfigHooks;
	std::unique_ptr<ConfigHooks> m_ConfigHooks; // Hide this via PImpl to avoid including ConfigDB.h here.
};

extern CRenderingOptions g_RenderingOptions;

#endif // INCLUDED_RENDERINGOPTIONS