TDME2  1.9.200
LightingShaderPBRTreeImplementation.cpp
Go to the documentation of this file.
2 
3 #include <string>
4 
5 #include <tdme/tdme.h>
8 #include <tdme/engine/Engine.h>
11 #include <tdme/engine/Timing.h>
14 
15 using std::string;
16 using std::to_string;
17 
27 
28 bool LightingShaderPBRTreeImplementation::isSupported(Renderer* renderer) {
29  return renderer->isPBRAvailable();
30 }
31 
33 {
34 }
35 
37  return "pbr-tree";
38 }
39 
41 {
42  auto shaderVersion = renderer->getShaderVersion();
43 
44  // lighting
45  // vertex shader
48  "shader/" + shaderVersion + "/lighting/pbr",
49  "render_vertexshader.vert",
50  string() +
51  "#define LIGHT_COUNT " + to_string(Engine::LIGHTS_MAX) + "\n#define USE_PUNCTUAL\n#define MATERIAL_METALLICROUGHNESS\n#define HAVE_TREE\n#define USE_IBL\n",
52  FileSystem::getInstance()->getContentAsString(
53  "shader/" + shaderVersion + "/functions",
54  "create_rotation_matrix.inc.glsl"
55  ) +
56  "\n\n" +
57  FileSystem::getInstance()->getContentAsString(
58  "shader/" + shaderVersion + "/functions",
59  "create_translation_matrix.inc.glsl"
60  ) +
61  "\n\n" +
62  FileSystem::getInstance()->getContentAsString(
63  "shader/" + shaderVersion + "/functions",
64  "create_tree_transform_matrix.inc.glsl"
65  ) + "\n\n"
66  );
67  if (vertexShaderId == 0) return;
68 
69  // fragment shader
72  "shader/" + shaderVersion + "/lighting/pbr",
73  "render_fragmentshader.frag",
74  string() +
75  "#define LIGHT_COUNT " + to_string(Engine::LIGHTS_MAX) + "\n#define USE_PUNCTUAL\n#define MATERIAL_METALLICROUGHNESS\n#define HAVE_TREE\n#define USE_IBL\n",
76  FileSystem::getInstance()->getContentAsString(
77  "shader/" + shaderVersion + "/functions/pbr",
78  "tonemapping.inc.glsl"
79  ) +
80  "\n\n" +
81  FileSystem::getInstance()->getContentAsString(
82  "shader/" + shaderVersion + "/functions/pbr",
83  "textures.inc.glsl"
84  ) +
85  "\n\n" +
86  FileSystem::getInstance()->getContentAsString(
87  "shader/" + shaderVersion + "/functions/pbr",
88  "functions.inc.glsl"
89  ) +
90  "\n\n" +
91  FileSystem::getInstance()->getContentAsString(
92  "shader/" + shaderVersion + "/functions/pbr",
93  "pbr_lighting.inc.glsl"
94  ) +
95  "\n\n"
96  );
97  if (fragmentShaderId == 0) return;
98 
99  // create, attach and link program
103 
104  //
106 
107  //
108  if (initialized == false) return;
109 
110  //
111  initialized = false;
112 
113  // uniforms
115  if (uniformSpeed == -1) return;
117  if (uniformTime == -1) return;
118 
119  //
120  initialized = true;
121 }
122 
125  Engine::ShaderType::SHADERTYPE_OBJECT,
126  getId(),
127  {
128  { "speed", ShaderParameter(1.0f), ShaderParameter(0.0f), ShaderParameter(20.0f), ShaderParameter(1.0f) }
129  }
130  );
131 }
132 
134 {
136 
137  // time
138  if (uniformTime != -1) renderer->setProgramUniformFloat(contextIdx, uniformTime, static_cast<float>(engine->getTiming()->getTotalTime()) / 1000.0f);
139 }
140 
142  const auto& shaderParameters = renderer->getShaderParameters(contextIdx);
143  if (uniformSpeed != -1) renderer->setProgramUniformFloat(contextIdx, uniformSpeed, shaderParameters.getShaderParameter("speed").getFloatValue());
144 }
Engine main class.
Definition: Engine.h:131
static void registerShader(ShaderType type, const string &shaderId, const vector< Shader::ParameterDefaults > &parameterDefaults={}, bool internal=false)
Register shader.
Definition: Engine.h:856
Timing * getTiming()
Definition: Engine.h:1064
TDME2 engine entity shader parameters.
Shader parameter model class.
Timing class.
Definition: Timing.h:16
int64_t getTotalTime()
Definition: Timing.h:63
virtual void useProgram(Engine *engine, int contextIdx) override
Use lighting program.
virtual void useProgram(Engine *engine, int contextIdx) override
Use lighting program.
virtual void updateShaderParameters(Renderer *renderer, int contextIdx) override
Update shader parameters.
virtual int32_t loadShader(int32_t type, const string &pathName, const string &fileName, const string &definitions=string(), const string &functions=string())=0
Loads a shader.
virtual int32_t createProgram(int type)=0
Creates a shader program.
const EntityShaderParameters & getShaderParameters(int contextIdx)
Get shader parameters.
Definition: Renderer.h:1209
virtual void attachShaderToProgram(int32_t programId, int32_t shaderId)=0
Attaches a shader to a program.
virtual int32_t getProgramUniformLocation(int32_t programId, const string &name)=0
Returns location of given uniform variable.
virtual void setProgramUniformFloat(int contextIdx, int32_t uniformId, float value)=0
Set up a float uniform value.
File system singleton class.
Definition: FileSystem.h:17