Pioneer
GasGiantMaterial.h
Go to the documentation of this file.
1 // Copyright © 2008-2021 Pioneer Developers. See AUTHORS.txt for details
2 // Licensed under the terms of the GPL v3. See licenses/GPL-3.txt
3 
4 #ifndef _OGL_GASGIANTMATERIAL_H
5 #define _OGL_GASGIANTMATERIAL_H
6 /*
7  * Programs & Materials used by terrain
8  */
9 #include "MaterialGL.h"
10 #include "OpenGLLibs.h"
11 #include "Program.h"
12 
13 namespace Graphics {
14  namespace OGL {
15  class GasGiantProgram : public Program {
16  public:
17  GasGiantProgram(const std::string &filename, const std::string &defines);
18 
22  Uniform geosphereAtmosTopRad; // in planet radii
24  Uniform geosphereRadius; // planet radius
25  Uniform geosphereInvRadius; // 1.0 / (planet radius)
26 
33 
34  protected:
35  virtual void InitUniforms();
36  };
37 
39  public:
41  virtual Program *CreateProgram(const MaterialDescriptor &) override;
42  virtual void SetProgram(Program *p) override;
43  virtual void Apply() override;
44 
45  protected:
46  void SetGSUniforms();
47  // We actually have multiple programs at work here, one compiled for each of the number of shadows.
48  // They are chosen/created based on what the current parameters passed in by the specialParameter0 are.
49  void SwitchShadowVariant();
50  Program *m_programs[4]; // 0 to 3 shadows
52  };
53  } // namespace OGL
54 } // namespace Graphics
55 #endif
Definition: Material.h:57
Definition: GasGiantMaterial.h:15
Uniform geosphereCenter
Definition: GasGiantMaterial.h:23
Uniform geosphereAtmosTopRad
Definition: GasGiantMaterial.h:22
Uniform shadowCentreZ
Definition: GasGiantMaterial.h:29
Uniform lrad
Definition: GasGiantMaterial.h:31
Uniform geosphereInvRadius
Definition: GasGiantMaterial.h:25
Uniform geosphereAtmosInvScaleHeight
Definition: GasGiantMaterial.h:21
Uniform sdivlrad
Definition: GasGiantMaterial.h:32
virtual void InitUniforms()
Definition: GasGiantMaterial.cpp:25
Uniform geosphereRadius
Definition: GasGiantMaterial.h:24
Uniform atmosColor
Definition: GasGiantMaterial.h:19
Uniform srad
Definition: GasGiantMaterial.h:30
Uniform shadowCentreX
Definition: GasGiantMaterial.h:27
GasGiantProgram(const std::string &filename, const std::string &defines)
Definition: GasGiantMaterial.cpp:17
Uniform shadowCentreY
Definition: GasGiantMaterial.h:28
Uniform geosphereAtmosFogDensity
Definition: GasGiantMaterial.h:20
Definition: GasGiantMaterial.h:38
virtual void Apply() override
Definition: GasGiantMaterial.cpp:80
virtual void SetProgram(Program *p) override
Definition: GasGiantMaterial.cpp:74
Program * m_programs[4]
Definition: GasGiantMaterial.h:50
void SetGSUniforms()
Definition: GasGiantMaterial.cpp:86
void SwitchShadowVariant()
Definition: GasGiantMaterial.cpp:143
virtual Program * CreateProgram(const MaterialDescriptor &) override
Definition: GasGiantMaterial.cpp:52
Uint32 m_curNumShadows
Definition: GasGiantMaterial.h:51
GasGiantSurfaceMaterial()
Definition: GasGiantMaterial.cpp:45
Definition: MaterialGL.h:26
Definition: Program.h:23
Definition: Uniform.h:21
Definition: Background.h:13