Pyrogenesis
13997
Main Page
Related Pages
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Pages
source
renderer
WaterManager.h
Go to the documentation of this file.
1
/* Copyright (C) 2012 Wildfire Games.
2
* This file is part of 0 A.D.
3
*
4
* 0 A.D. is free software: you can redistribute it and/or modify
5
* it under the terms of the GNU General Public License as published by
6
* the Free Software Foundation, either version 2 of the License, or
7
* (at your option) any later version.
8
*
9
* 0 A.D. is distributed in the hope that it will be useful,
10
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
* GNU General Public License for more details.
13
*
14
* You should have received a copy of the GNU General Public License
15
* along with 0 A.D. If not, see <http://www.gnu.org/licenses/>.
16
*/
17
18
/*
19
* Water settings (speed, height) and texture management
20
*/
21
22
#ifndef INCLUDED_WATERMANAGER
23
#define INCLUDED_WATERMANAGER
24
25
#include "
graphics/Texture.h
"
26
#include "
lib/ogl.h
"
27
#include "
maths/Matrix3D.h
"
28
#include "
ps/Overlay.h
"
29
#include "
renderer/VertexBufferManager.h
"
30
31
class
CSimulation2
;
32
33
struct
SWavesVertex
{
34
// vertex position
35
CVector3D
m_Position
;
36
u8
m_UV
[2];
37
};
38
cassert
(
sizeof
(
SWavesVertex
) == 16);
39
40
41
42
/**
43
* Class WaterManager: Maintain water settings and textures.
44
*
45
* This could be extended to provide more advanced water rendering effects
46
* (refractive/reflective water) in the future.
47
*/
48
49
class
WaterManager
50
{
51
public
:
52
CTexturePtr
m_WaterTexture
[60];
53
CTexturePtr
m_NormalMap
[60];
54
CTexturePtr
m_Foam
;
55
CTexturePtr
m_Wave
;
56
float
*
m_WaveX
;
57
float
*
m_WaveZ
;
58
float
*
m_DistanceToShore
;
59
float
*
m_FoamFactor
;
60
61
size_t
m_MapSize
;
62
ssize_t
m_TexSize
;
63
64
GLuint
m_depthTT
;
65
GLuint
m_waveTT
;
66
67
// used to know what to update when updating parts of the terrain only.
68
i32
m_updatei0
;
69
i32
m_updatej0
;
70
i32
m_updatei1
;
71
i32
m_updatej1
;
72
73
int
m_WaterCurrentTex
;
74
CColor
m_WaterColor
;
75
bool
m_RenderWater
;
76
77
// Those variables register the current quality level. If there is a change, I have to recompile the shader.
78
bool
m_WaterNormal
;
79
bool
m_WaterRealDepth
;
80
bool
m_WaterFoam
;
81
bool
m_WaterCoastalWaves
;
82
bool
m_WaterRefraction
;
83
bool
m_WaterReflection
;
84
bool
m_WaterShadows
;
85
86
bool
m_NeedsReloading
;
87
// requires also recreating the super fancy information.
88
bool
m_NeedInfoUpdate
;
89
90
bool
m_WaterScroll
;
91
float
m_WaterHeight
;
92
float
m_WaterMaxAlpha
;
93
float
m_WaterFullDepth
;
94
float
m_WaterAlphaOffset
;
95
96
float
m_SWaterSpeed
;
97
float
m_TWaterSpeed
;
98
float
m_SWaterTrans
;
99
float
m_TWaterTrans
;
100
float
m_SWaterScrollCounter
;
101
float
m_TWaterScrollCounter
;
102
double
m_WaterTexTimer
;
103
104
// Reflection and refraction textures for fancy water
105
GLuint
m_ReflectionTexture
;
106
GLuint
m_RefractionTexture
;
107
size_t
m_ReflectionTextureSize
;
108
size_t
m_RefractionTextureSize
;
109
110
// Model-view-projection matrices for reflected & refracted cameras
111
// (used to let the vertex shader do projective texturing)
112
CMatrix3D
m_ReflectionMatrix
;
113
CMatrix3D
m_RefractionMatrix
;
114
115
// Shader parameters for fancy water
116
CColor
m_WaterTint
;
117
float
m_RepeatPeriod
;
118
float
m_Shininess
;
119
float
m_SpecularStrength
;
120
float
m_Waviness
;
121
float
m_Murkiness
;
122
CColor
m_ReflectionTint
;
123
float
m_ReflectionTintStrength
;
124
125
// Waves
126
// see the struct above.
127
CVertexBuffer::VBChunk
*
m_VBWaves
;
128
CVertexBuffer::VBChunk
*
m_VBWavesIndices
;
129
130
public
:
131
WaterManager
();
132
~WaterManager
();
133
134
/**
135
* LoadWaterTextures: Load water textures from within the
136
* progressive load framework.
137
*
138
* @return 0 if loading has completed, a value from 1 to 100 (in percent of completion)
139
* if more textures need to be loaded and a negative error value on failure.
140
*/
141
int
LoadWaterTextures
();
142
143
/**
144
* UnloadWaterTextures: Free any loaded water textures and reset the internal state
145
* so that another call to LoadWaterTextures will begin progressive loading.
146
*/
147
void
UnloadWaterTextures
();
148
149
/**
150
* CreateSuperfancyInfo: creates textures and wave vertices for superfancy water
151
*/
152
void
CreateSuperfancyInfo
(
CSimulation2
* simulation);
153
154
/**
155
* Updates the map size. Will trigger a complete recalculation of fancy water information the next turn.
156
*/
157
void
SetMapSize
(
size_t
size);
158
159
/**
160
* Updates the settings to the one from the renderer, and sets m_NeedsReloading.
161
*/
162
void
UpdateQuality
();
163
164
/**
165
* Returns true if fancy water shaders will be used (i.e. the hardware is capable
166
* and it hasn't been configured off)
167
*/
168
bool
WillRenderFancyWater
();
169
};
170
171
172
#endif // INCLUDED_WATERMANAGER
WaterManager::m_WaterTexture
CTexturePtr m_WaterTexture[60]
Definition:
WaterManager.h:52
WaterManager::m_WaterScroll
bool m_WaterScroll
Definition:
WaterManager.h:90
u8
#define u8
Definition:
types.h:39
WaterManager::m_updatej0
i32 m_updatej0
Definition:
WaterManager.h:69
WaterManager::m_NeedInfoUpdate
bool m_NeedInfoUpdate
Definition:
WaterManager.h:88
WaterManager::m_updatei1
i32 m_updatei1
Definition:
WaterManager.h:70
WaterManager::m_RepeatPeriod
float m_RepeatPeriod
Definition:
WaterManager.h:117
WaterManager::m_Shininess
float m_Shininess
Definition:
WaterManager.h:118
SWavesVertex
Definition:
WaterManager.h:33
WaterManager::m_WaterMaxAlpha
float m_WaterMaxAlpha
Definition:
WaterManager.h:92
Texture.h
WaterManager::m_SWaterTrans
float m_SWaterTrans
Definition:
WaterManager.h:98
WaterManager::m_depthTT
GLuint m_depthTT
Definition:
WaterManager.h:64
Overlay.h
CColor
Definition:
Overlay.h:34
i32
#define i32
Definition:
types.h:36
WaterManager::m_WaterRealDepth
bool m_WaterRealDepth
Definition:
WaterManager.h:79
WaterManager::m_RefractionTextureSize
size_t m_RefractionTextureSize
Definition:
WaterManager.h:108
WaterManager::m_updatej1
i32 m_updatej1
Definition:
WaterManager.h:71
WaterManager::m_VBWaves
CVertexBuffer::VBChunk * m_VBWaves
Definition:
WaterManager.h:127
WaterManager::m_Waviness
float m_Waviness
Definition:
WaterManager.h:120
WaterManager::m_WaterShadows
bool m_WaterShadows
Definition:
WaterManager.h:84
WaterManager::m_WaterNormal
bool m_WaterNormal
Definition:
WaterManager.h:78
CVector3D
Definition:
Vector3D.h:28
WaterManager::m_ReflectionTextureSize
size_t m_ReflectionTextureSize
Definition:
WaterManager.h:107
WaterManager::m_NormalMap
CTexturePtr m_NormalMap[60]
Definition:
WaterManager.h:53
WaterManager::m_RefractionTexture
GLuint m_RefractionTexture
Definition:
WaterManager.h:106
WaterManager::m_WaterCurrentTex
int m_WaterCurrentTex
Definition:
WaterManager.h:73
WaterManager::m_TWaterScrollCounter
float m_TWaterScrollCounter
Definition:
WaterManager.h:101
WaterManager::~WaterManager
~WaterManager()
Definition:
WaterManager.cpp:111
WaterManager::m_TWaterTrans
float m_TWaterTrans
Definition:
WaterManager.h:99
CVertexBuffer::VBChunk
VBChunk: describes a portion of this vertex buffer.
Definition:
VertexBuffer.h:47
WaterManager::m_WaterHeight
float m_WaterHeight
Definition:
WaterManager.h:91
WaterManager::m_TWaterSpeed
float m_TWaterSpeed
Definition:
WaterManager.h:97
WaterManager::m_WaterFoam
bool m_WaterFoam
Definition:
WaterManager.h:80
WaterManager::m_WaveX
float * m_WaveX
Definition:
WaterManager.h:56
WaterManager::m_ReflectionMatrix
CMatrix3D m_ReflectionMatrix
Definition:
WaterManager.h:112
CSimulation2
Public API for simulation system.
Definition:
Simulation2.h:46
WaterManager::m_Foam
CTexturePtr m_Foam
Definition:
WaterManager.h:54
WaterManager::SetMapSize
void SetMapSize(size_t size)
Updates the map size.
Definition:
WaterManager.cpp:603
WaterManager::m_FoamFactor
float * m_FoamFactor
Definition:
WaterManager.h:59
CMatrix3D
Definition:
Matrix3D.h:33
WaterManager::m_WaterAlphaOffset
float m_WaterAlphaOffset
Definition:
WaterManager.h:94
WaterManager::m_NeedsReloading
bool m_NeedsReloading
Definition:
WaterManager.h:86
WaterManager::m_Murkiness
float m_Murkiness
Definition:
WaterManager.h:121
WaterManager::UpdateQuality
void UpdateQuality()
Updates the settings to the one from the renderer, and sets m_NeedsReloading.
Definition:
WaterManager.cpp:621
WaterManager::m_RenderWater
bool m_RenderWater
Definition:
WaterManager.h:75
WaterManager::m_waveTT
GLuint m_waveTT
Definition:
WaterManager.h:65
WaterManager::m_RefractionMatrix
CMatrix3D m_RefractionMatrix
Definition:
WaterManager.h:113
WaterManager::m_WaterTint
CColor m_WaterTint
Definition:
WaterManager.h:116
WaterManager::LoadWaterTextures
int LoadWaterTextures()
LoadWaterTextures: Load water textures from within the progressive load framework.
Definition:
WaterManager.cpp:131
WaterManager::m_SWaterScrollCounter
float m_SWaterScrollCounter
Definition:
WaterManager.h:100
WaterManager::m_WaterRefraction
bool m_WaterRefraction
Definition:
WaterManager.h:82
WaterManager::m_updatei0
i32 m_updatei0
Definition:
WaterManager.h:68
WaterManager::WaterManager
WaterManager()
Definition:
WaterManager.cpp:52
WaterManager::UnloadWaterTextures
void UnloadWaterTextures()
UnloadWaterTextures: Free any loaded water textures and reset the internal state so that another call...
Definition:
WaterManager.cpp:224
Matrix3D.h
WaterManager::m_SpecularStrength
float m_SpecularStrength
Definition:
WaterManager.h:119
ssize_t
intptr_t ssize_t
Definition:
wposix_types.h:82
WaterManager::CreateSuperfancyInfo
void CreateSuperfancyInfo(CSimulation2 *simulation)
CreateSuperfancyInfo: creates textures and wave vertices for superfancy water.
Definition:
WaterManager.cpp:240
WaterManager::WillRenderFancyWater
bool WillRenderFancyWater()
Returns true if fancy water shaders will be used (i.e.
Definition:
WaterManager.cpp:655
WaterManager::m_WaveZ
float * m_WaveZ
Definition:
WaterManager.h:57
WaterManager::m_ReflectionTintStrength
float m_ReflectionTintStrength
Definition:
WaterManager.h:123
WaterManager::m_ReflectionTexture
GLuint m_ReflectionTexture
Definition:
WaterManager.h:105
WaterManager::m_VBWavesIndices
CVertexBuffer::VBChunk * m_VBWavesIndices
Definition:
WaterManager.h:128
WaterManager::m_Wave
CTexturePtr m_Wave
Definition:
WaterManager.h:55
WaterManager::m_WaterReflection
bool m_WaterReflection
Definition:
WaterManager.h:83
WaterManager::m_WaterColor
CColor m_WaterColor
Definition:
WaterManager.h:74
WaterManager::m_SWaterSpeed
float m_SWaterSpeed
Definition:
WaterManager.h:96
SWavesVertex::m_UV
u8 m_UV[2]
Definition:
WaterManager.h:36
VertexBufferManager.h
WaterManager::m_WaterTexTimer
double m_WaterTexTimer
Definition:
WaterManager.h:102
cassert
#define cassert(expr)
Compile-time assertion.
Definition:
code_annotation.h:193
WaterManager::m_WaterFullDepth
float m_WaterFullDepth
Definition:
WaterManager.h:93
WaterManager::m_DistanceToShore
float * m_DistanceToShore
Definition:
WaterManager.h:58
ogl.h
WaterManager::m_MapSize
size_t m_MapSize
Definition:
WaterManager.h:61
WaterManager::m_TexSize
ssize_t m_TexSize
Definition:
WaterManager.h:62
SWavesVertex::m_Position
CVector3D m_Position
Definition:
WaterManager.h:35
WaterManager::m_WaterCoastalWaves
bool m_WaterCoastalWaves
Definition:
WaterManager.h:81
WaterManager
Class WaterManager: Maintain water settings and textures.
Definition:
WaterManager.h:49
CTexturePtr
shared_ptr< CTexture > CTexturePtr
Definition:
Texture.h:22
WaterManager::m_ReflectionTint
CColor m_ReflectionTint
Definition:
WaterManager.h:122
Generated on Mon Oct 14 2013 00:58:08 for Pyrogenesis by
1.8.5