Fillwave  10.0.0
MeshTerrain.h
1 #pragma once
2 
3 /*
4  * The MIT License (MIT)
5  *
6  * Copyright (c) 2018 Filip Wasil and Fillwave community members
7  *
8  * Permission is hereby granted, free of charge, to any person
9  * obtaining a copy of this software and associated documentation files (the "Software"),
10  * to deal in the Software without restriction, including without limitation the rights
11  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
12  * and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
13  *
14  * The above copyright notice and this permission notice shall be included
15  * in all copies or substantial portions of the Software.
16  *
17  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
18  * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19  * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
20  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22  */
23 
24 #include <flw/flf/models/Mesh.h>
25 #include <flw/flf/models/base/Programmable.h>
26 
27 namespace flw {
28 class Engine;
29 namespace flf {
30 
35 class MeshTerrain : public Programmable {
36 public:
37  MeshTerrain(Engine *engine,
38  flc::Program *program,
39  std::function<float(float x, float y)> constructor,
40  const Material& material,
41  const std::string& diffuseMapPath,
42  const std::string& normalMapPath,
43  const std::string& specularMapPath,
44  GLuint radius,
45  GLuint density = 8);
46 
47  MeshTerrain(Engine *engine,
48  flc::Program *program,
49  std::function<float(float x, float y)> constructor,
50  const Material &material,
51  flc::Texture2D *diffuseMapPath,
52  flc::Texture2D *normalMapPath,
53  flc::Texture2D *specularMapPath,
54  GLuint radius,
55  GLuint density = 8);
56 
57  ~MeshTerrain() override;
58 
59  void initIBO(std::vector<GLuint> &indices, GLuint density);
60 
61  /* IDrawable */
62  void drawFR(ICamera &camera) override;
63  void drawPBRP(ICamera &camera) override;
64 
65  /* IRenderable */
66  void updateRenderer(flc::IRenderer &renderer) override;
67 
68 private:
69  LightSystem &mLights;
70  GLfloat mJumpStep;
71 
72  void distanceCheck(ICamera &camera);
73 };
74 
75 } /* flf */
76 } /* flw */
Definition: Aliases.h:30
Per mesh material info.
Definition: Material.h:32
Base for all renderers.
Definition: IRenderer.h:42
Programmable to provide mesh terrain functionality.
Definition: MeshTerrain.h:35
Single GLSL 2D Texture object.
Definition: Texture2D.h:36
Fillwave engine core.
Definition: Engine.h:85
Light system knows about all light related stuff.
Definition: LightSystem.h:40
Single GLSL program object.
Definition: Program.h:37
Stores camera view parameters.
Definition: ICamera.h:32
Entity for which is it possible to add/remove Effect objects.
Definition: Programmable.h:34