@@ -135,19 +135,30 @@ class DemoApp : public system::BaseApp
135
135
engine::ConsoleLogger::Global ().LogInfo (" " , " main" , " Demo starting!" );
136
136
137
137
// Load & compile shaders.
138
- std::string vertShaderSrc = system ::FileSystem::Read (" ../../Content/GLSL/Unlit/RGBVertex.vert" ), fragShaderSrc = system ::FileSystem::Read (" ../../Content/GLSL/Unlit/RGBVertex.frag" );
138
+ std::string
139
+ vertShaderSrc = system ::FileSystem::Read (" ../../Content/GLSL/Unlit/RGBVertex.vert" ),
140
+ fragShaderSrc = system ::FileSystem::Read (" ../../Content/GLSL/Unlit/RGBVertex.frag" ),
141
+ vertShaderSrc2 = system ::FileSystem::Read (" ../../Content/GLSL/Unlit/SolidColour.vert" ),
142
+ fragShaderSrc2 = system ::FileSystem::Read (" ../../Content/GLSL/Unlit/SolidColour.frag" );
139
143
gfx::ShaderCompiledResult
140
144
vertShader = gfx::ShaderCompilerGLSL::Singleton ().CompileShader (vertShaderSrc.c_str (), vertShaderSrc.length (), gfx::VertexShader),
141
- fragShader = gfx::ShaderCompilerGLSL::Singleton ().CompileShader (fragShaderSrc.c_str (), fragShaderSrc.length (), gfx::FragmentShader);
145
+ fragShader = gfx::ShaderCompilerGLSL::Singleton ().CompileShader (fragShaderSrc.c_str (), fragShaderSrc.length (), gfx::FragmentShader),
146
+ vertShader2 = gfx::ShaderCompilerGLSL::Singleton ().CompileShader (vertShaderSrc2.c_str (), vertShaderSrc2.length (), gfx::VertexShader),
147
+ fragShader2 = gfx::ShaderCompilerGLSL::Singleton ().CompileShader (fragShaderSrc2.c_str (), fragShaderSrc2.length (), gfx::FragmentShader);
142
148
143
149
// Register shader with the API.
144
150
auto & api = engine.GetApi <gfx::GraphicsApiGL>();
145
151
api.GetSceneGraph ().SetCamera (&m_Camera);
146
152
147
- lepus::gfx::Material baseMaterial;
148
- lepus::gfx::GLShader baseShader (lepus::gfx::ShaderInfo (" RGBVertex" ));
153
+ lepus::gfx::Material baseMaterial, otherMaterial ;
154
+ lepus::gfx::GLShader baseShader (lepus::gfx::ShaderInfo (" RGBVertex" )), redShader ( lepus::gfx::ShaderInfo ( " SolidColour " )) ;
149
155
baseShader.SetGLProgram (gfx::ShaderCompilerGLSL::Singleton ().BuildProgram (vertShader, fragShader));
156
+ redShader.SetGLProgram (gfx::ShaderCompilerGLSL::Singleton ().BuildProgram (vertShader2, fragShader2));
150
157
baseMaterial.SetShader (&baseShader);
158
+ otherMaterial.SetShader (&redShader);
159
+
160
+ types::Vector3 baseColour (1 .f , 1 .f , 1 .f );
161
+ auto baseColourIndex = otherMaterial.Attributes ().Add <const types::Vector3&>(" colour" , baseColour);
151
162
152
163
// Set up engine for drawing.
153
164
engine.Setup ();
@@ -156,8 +167,8 @@ class DemoApp : public system::BaseApp
156
167
// Instantiate two Renderables in the scene graph, each with its own transform, using the same cube mesh data.
157
168
auto cubeMesh = lepus::gfx::GLMesh (lepus::utility::Primitives::Cube ());
158
169
auto cube = lepus::gfx::Renderable<lepus::gfx::GLMesh>(&cubeMesh, lepus::math::Transform (), baseMaterial);
159
- auto cube2 = lepus::gfx::Renderable<lepus::gfx::GLMesh>(&cubeMesh, lepus::math::Transform (), baseMaterial );
160
- auto cube3 = lepus::gfx::Renderable<lepus::gfx::GLMesh>(&cubeMesh, lepus::math::Transform (), baseMaterial );
170
+ auto cube2 = lepus::gfx::Renderable<lepus::gfx::GLMesh>(&cubeMesh, lepus::math::Transform (), otherMaterial );
171
+ auto cube3 = lepus::gfx::Renderable<lepus::gfx::GLMesh>(&cubeMesh, lepus::math::Transform (), otherMaterial );
161
172
auto cube4 = lepus::gfx::Renderable<lepus::gfx::GLMesh>(&cubeMesh, lepus::math::Transform (), baseMaterial);
162
173
163
174
cube.GetTransform ()->Origin (lepus::types::Vector3 (0 .f , 0 .f , -2 .f ));
@@ -176,14 +187,14 @@ class DemoApp : public system::BaseApp
176
187
177
188
auto cubeNode = api.GetSceneGraph ().AddChild (&cube);
178
189
190
+ auto window = static_cast <GLFWwindow*>(windowing->GetWindowPtr ());
191
+
179
192
// Initialise the FOV variable and set up a callback so we can let the user adjust it with the mouse scroll wheel.
180
193
m_FOV = m_Camera.FOV ();
181
- glfwSetScrollCallback (reinterpret_cast <GLFWwindow*>(windowing-> GetWindowPtr ()) , DemoAppGLFWCallbacks::scroll);
194
+ glfwSetScrollCallback (window , DemoAppGLFWCallbacks::scroll);
182
195
183
196
float runningTime = glfwGetTime ();
184
197
185
- GLFWwindow* window = reinterpret_cast <GLFWwindow*>(windowing->GetWindowPtr ());
186
-
187
198
// Set up mouse input for camera freelook.
188
199
glfwGetCursorPos (window, &m_MouseState.lastX , &m_MouseState.lastY );
189
200
glfwSetCursorPosCallback (reinterpret_cast <GLFWwindow*>(windowing->GetWindowPtr ()), DemoAppGLFWCallbacks::cursorPos);
@@ -220,6 +231,12 @@ class DemoApp : public system::BaseApp
220
231
Tick (deltaTime, keys);
221
232
UpdateUniforms (&api);
222
233
234
+ baseColour.x (sinf (runningTime));
235
+ baseColour.y (cosf (runningTime));
236
+ baseColour.z (baseColour.x () * baseColour.y ());
237
+
238
+ otherMaterial.Attributes ().Set <const types::Vector3&>(baseColourIndex, baseColour);
239
+
223
240
engine.Render <unsigned char , gfx::GraphicsEngine::PixelFormat::RGBA32>(100 , 149 , 237 );
224
241
225
242
float newRunningTime = glfwGetTime ();
0 commit comments