Skip to content

Commit 7b2c4af

Browse files
committed
feat: made GraphicsApiVk render the scene graph
1 parent 984174d commit 7b2c4af

File tree

12 files changed

+824
-550
lines changed

12 files changed

+824
-550
lines changed

Content/GLSL/Unlit/RGBVertex_GL.frag

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
#version 330 core
2+
3+
out vec4 color;
4+
in vec3 vertColor;
5+
6+
void main()
7+
{
8+
color = vec4(vertColor, 1.0f);
9+
}

Content/GLSL/Unlit/RGBVertex_GL.vert

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
#version 330 core
2+
3+
layout (location = 0) in vec3 position;
4+
5+
uniform mat4 PROJ;
6+
uniform mat4 VIEW;
7+
uniform mat4 MODEL;
8+
9+
out vec3 vertColor;
10+
11+
void main()
12+
{
13+
gl_Position = PROJ * VIEW * MODEL * vec4(position, 1.0);
14+
15+
float normalisedIndex = mod(float(gl_VertexID), 3.0f);
16+
float r = step(normalisedIndex, 0.0f);
17+
float g = step(normalisedIndex, 1.0f);
18+
float b = step(normalisedIndex, 2.0f);
19+
vertColor = vec3(max(0.0f, r), max(0.0f, g - r), max(0.0f, b - g - r));
20+
}

src/examples/demo/DemoApp.h

+18-14
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#include "lepus/gfx/GraphicsEngine/Apis/ApiVk.h"
44

55
#include "lepus/gfx/GraphicsEngine/Apis/ApiGL/Types/GLShader.h"
6+
#include "lepus/gfx/GraphicsEngine/Apis/ApiVk/Types/VkMesh.h"
67

78
#include <lepus/gfx/GraphicsEngine/Apis/ApiGL.h>
89
#include <lepus/gfx/GraphicsEngine.h>
@@ -124,6 +125,8 @@ class DemoApp : public system::BaseApp
124125
options.mainViewport = {width, height};
125126
options.windowingPtr = windowing;
126127

128+
// windowing->SetAsCurrentContext();
129+
127130
// Create new graphics engine instance
128131
gfx::GraphicsEngine engine(&options, windowing);
129132

@@ -135,26 +138,27 @@ class DemoApp : public system::BaseApp
135138

136139
// Load & compile shaders.
137140
std::string
138-
vertShaderSrc = system::FileSystem::Read("../../Content/GLSL/Unlit/RGBVertex.vert"),
139-
fragShaderSrc = system::FileSystem::Read("../../Content/GLSL/Unlit/RGBVertex.frag"),
141+
vertShaderSrc = system::FileSystem::Read("../../Content/GLSL/Unlit/RGBVertex_GL.vert"),
142+
fragShaderSrc = system::FileSystem::Read("../../Content/GLSL/Unlit/RGBVertex_GL.frag"),
140143
vertShaderSrc2 = system::FileSystem::Read("../../Content/GLSL/Unlit/SolidColour.vert"),
141144
fragShaderSrc2 = system::FileSystem::Read("../../Content/GLSL/Unlit/SolidColour.frag");
142145
/*gfx::ShaderCompiledResult
143146
vertShader = gfx::ShaderCompilerGLSL::Singleton().CompileShader(vertShaderSrc.c_str(), vertShaderSrc.length(), gfx::VertexShader),
144147
fragShader = gfx::ShaderCompilerGLSL::Singleton().CompileShader(fragShaderSrc.c_str(), fragShaderSrc.length(), gfx::FragmentShader),
145148
vertShader2 = gfx::ShaderCompilerGLSL::Singleton().CompileShader(vertShaderSrc2.c_str(), vertShaderSrc2.length(), gfx::VertexShader),
146149
fragShader2 = gfx::ShaderCompilerGLSL::Singleton().CompileShader(fragShaderSrc2.c_str(), fragShaderSrc2.length(), gfx::FragmentShader);
147-
*/
150+
151+
*/
148152
// Register shader with the API.
149153
auto& api = engine.GetApi<gfx::GraphicsApiVk>();
150154
engine.GetSceneGraph().SetCamera(&m_Camera);
151155

152156
lepus::gfx::Material baseMaterial, otherMaterial;
153-
lepus::gfx::GLShader baseShader(lepus::gfx::ShaderInfo("RGBVertex")), redShader(lepus::gfx::ShaderInfo("SolidColour"));
154-
// baseShader.SetGLProgram(gfx::ShaderCompilerGLSL::Singleton().BuildProgram(vertShader, fragShader));
155-
// redShader.SetGLProgram(gfx::ShaderCompilerGLSL::Singleton().BuildProgram(vertShader2, fragShader2));
157+
// lepus::gfx::GLShader baseShader(lepus::gfx::ShaderInfo("RGBVertex")), redShader(lepus::gfx::ShaderInfo("SolidColour"));
158+
/*baseShader.SetGLProgram(gfx::ShaderCompilerGLSL::Singleton().BuildProgram(vertShader, fragShader));
159+
redShader.SetGLProgram(gfx::ShaderCompilerGLSL::Singleton().BuildProgram(vertShader2, fragShader2));
156160
baseMaterial.SetShader(&baseShader);
157-
otherMaterial.SetShader(&redShader);
161+
otherMaterial.SetShader(&redShader);*/
158162

159163
types::Vector3 baseColour(1.f, 1.f, 1.f);
160164
auto baseColourIndex = otherMaterial.Attributes().Add<const types::Vector3&>("colour", baseColour);
@@ -164,11 +168,11 @@ class DemoApp : public system::BaseApp
164168
m_Camera.Transform().Origin(m_Camera.Transform().Forward() * -2.f);
165169

166170
// Instantiate two Renderables in the scene graph, each with its own transform, using the same cube mesh data.
167-
auto cubeMesh = engine.CreateMesh(lepus::utility::Primitives::Cube());
168-
auto cube = lepus::gfx::Renderable(&cubeMesh, lepus::math::Transform(), baseMaterial);
169-
auto cube2 = lepus::gfx::Renderable(&cubeMesh, lepus::math::Transform(), otherMaterial);
170-
auto cube3 = lepus::gfx::Renderable(&cubeMesh, lepus::math::Transform(), otherMaterial);
171-
auto cube4 = lepus::gfx::Renderable(&cubeMesh, lepus::math::Transform(), baseMaterial);
171+
auto cubeMesh = static_cast<lepus::gfx::VkMesh*>(engine.CreateMesh(lepus::utility::Primitives::Cube()));
172+
auto cube = lepus::gfx::Renderable(cubeMesh, lepus::math::Transform(), baseMaterial);
173+
auto cube2 = lepus::gfx::Renderable(cubeMesh, lepus::math::Transform(), otherMaterial);
174+
auto cube3 = lepus::gfx::Renderable(cubeMesh, lepus::math::Transform(), otherMaterial);
175+
auto cube4 = lepus::gfx::Renderable(cubeMesh, lepus::math::Transform(), baseMaterial);
172176

173177
cube.GetTransform()->Origin(lepus::types::Vector3(0.f, 0.f, -2.f));
174178
cube2.GetTransform()->Origin(lepus::types::Vector3(2.f, 0.f, 0.f));
@@ -221,11 +225,11 @@ class DemoApp : public system::BaseApp
221225
cube.GetTransform()->Rotate(lepus::types::Quaternion(lepus::types::Vector3(0.f, 1.f, 0.f), PI * -0.25f));
222226
}
223227
cube.GetTransform()->Rotate(lepus::types::Quaternion(lepus::types::Vector3(0.f, 1.f, 0.f), -deltaTime));
224-
// cube2.GetTransform()->Rotate(lepus::types::Quaternion(lepus::types::Vector3(1.f, 0.f, 0.f), -deltaTime));
228+
cube2.GetTransform()->Rotate(lepus::types::Quaternion(lepus::types::Vector3(1.f, 0.f, 0.f), -deltaTime));
225229
cube3.GetTransform()->Rotate(lepus::types::Quaternion(lepus::types::Vector3(1.f, 1.f, 1.f), -deltaTime));
226230

227231
// Move the child cube back and forth along the parent's Z-axis
228-
// cube2.GetTransform()->Origin(lepus::types::Vector3(0.f, 0.f, -1.f + ((sinf(runningTime) + 1.f) * 0.5f) * -2.f));
232+
cube2.GetTransform()->Origin(lepus::types::Vector3(0.f, 0.f, -1.f + ((sinf(runningTime) + 1.f) * 0.5f) * -2.f));
229233

230234
Tick(deltaTime, keys);
231235
UpdateUniforms(&api);

0 commit comments

Comments
 (0)