Terminus
terrain.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <memory>
4 
8 
9 namespace terminus
10 {
11 
12 class Level;
13 
24 {
25 public:
26  Terrain(World & world, const Level & level);
27 
28  virtual void localRender(QOpenGLFunctions& gl) const override;
29  virtual void localRenderSetup(QOpenGLFunctions & gl, Program & program) const override;
30  virtual void localRenderCleanup(QOpenGLFunctions & gl, Program & program) const override;
31 
36  void configureWith(const Level & level);
37 
38  Track & rightTrack() const;
39  Track & leftTrack() const;
40 
41 protected:
42  virtual void doForAllChildren(std::function<void(AbstractGraphicsObject &)> callback) override;
43 
44  void renderPatch(QOpenGLFunctions& gl, int iX, int iZ) const;
45 
46  void allocateTerrainMap(QOpenGLFunctions & gl) const;
47  void deallocateTerrainMap(QOpenGLFunctions & gl) const;
48 
49 protected:
51 
52  std::unique_ptr<Track> m_rightTrack;
53  std::unique_ptr<Track> m_leftTrack;
54 
55  std::unique_ptr<std::vector<GLfloat>> m_terrainMapData;
56  mutable bool m_terrainMapOnGPU;
57  mutable bool m_terrainMapValid;
58  mutable GLuint m_terrainMap;
59 
60  mutable int m_currentPatchX;
61  mutable int m_currentPatchZ;
62 };
63 
64 }
virtual void localRenderSetup(QOpenGLFunctions &gl, Program &program) const override
override this method to customize the rendering process
Definition: terrain.cpp:99
LevelConfiguration m_levelConfig
Definition: terrain.h:50
Track & rightTrack() const
Definition: terrain.cpp:54
std::unique_ptr< std::vector< GLfloat > > m_terrainMapData
Definition: terrain.h:55
void deallocateTerrainMap(QOpenGLFunctions &gl) const
Definition: terrain.cpp:155
The LevelConfiguration class contains all information necessary to configure a Level instance as well...
Definition: levelconfiguration.h:25
virtual void doForAllChildren(std::function< void(AbstractGraphicsObject &)> callback) override
override this method to make child objects known
Definition: terrain.cpp:66
The Level class is a generator for level data such as terrain geometry and track courses.
Definition: level.h:26
bool m_terrainMapOnGPU
Definition: terrain.h:56
virtual void localRenderCleanup(QOpenGLFunctions &gl, Program &program) const override
override this method to customize the rendering process
Definition: terrain.cpp:120
int m_currentPatchZ
Definition: terrain.h:61
virtual void localRender(QOpenGLFunctions &gl) const override
this method contains the default render code using m_geometry, m_program and m_material ...
Definition: terrain.cpp:78
std::unique_ptr< Track > m_leftTrack
Definition: terrain.h:53
std::unique_ptr< Track > m_rightTrack
Definition: terrain.h:52
The Terrain class renders the terrain using patches and a displacement texture. Patches that are too ...
Definition: terrain.h:23
The AbstractGraphicsObject class is the root of a class hierarchy of objects that contain independen ...
Definition: abstractgraphicsobject.h:27
bool m_terrainMapValid
Definition: terrain.h:57
int m_currentPatchX
Definition: terrain.h:60
The program class implements the basic functionality used for binding programs to openGL...
Definition: program.h:18
GLuint m_terrainMap
Definition: terrain.h:58
The World class represents a running game instance and contains all graphical (3D) elements of the sc...
Definition: world.h:46
void allocateTerrainMap(QOpenGLFunctions &gl) const
Definition: terrain.cpp:136
Definition: eventhandler.cpp:18
void configureWith(const Level &level)
sets the displacement texture and track courses according to level
Definition: terrain.cpp:126
void renderPatch(QOpenGLFunctions &gl, int iX, int iZ) const
Track & leftTrack() const
Definition: terrain.cpp:60
The Track class represents a track that a Train moves on. It is currently not rendered. The course is represented by a Polyline instance.
Definition: track.h:16
Terrain(World &world, const Level &level)
Definition: terrain.cpp:38