summaryrefslogtreecommitdiff
path: root/gfx
diff options
context:
space:
mode:
authorDan Goodliffe <dan@randomdan.homeip.net>2023-03-05 01:59:16 +0000
committerDan Goodliffe <dan@randomdan.homeip.net>2023-03-05 01:59:16 +0000
commitd4c073a18adaed73973f34c6c39fc15664d9211d (patch)
tree44536af3af0284ab75eae79ef81a5e4452019269 /gfx
parentAdd helper operator to perform vec3*mat4 and perspective divide (diff)
parentRemove old hard coded asset factory test, run entirely from XML load and rend... (diff)
downloadilt-d4c073a18adaed73973f34c6c39fc15664d9211d.tar.bz2
ilt-d4c073a18adaed73973f34c6c39fc15664d9211d.tar.xz
ilt-d4c073a18adaed73973f34c6c39fc15664d9211d.zip
Merge branch 'model-factory'
Diffstat (limited to 'gfx')
-rw-r--r--gfx/gl/shaders/basicShader.fs3
-rw-r--r--gfx/gl/shaders/basicShader.vs3
-rw-r--r--gfx/gl/shaders/landmassShader.vs3
-rw-r--r--gfx/gl/shadowMapper.cpp7
-rw-r--r--gfx/gl/shadowMapper.h1
-rw-r--r--gfx/models/mesh.cpp2
-rw-r--r--gfx/models/vertex.hpp5
7 files changed, 20 insertions, 4 deletions
diff --git a/gfx/gl/shaders/basicShader.fs b/gfx/gl/shaders/basicShader.fs
index 9c4945b..93f0a3f 100644
--- a/gfx/gl/shaders/basicShader.fs
+++ b/gfx/gl/shaders/basicShader.fs
@@ -3,6 +3,7 @@
in vec3 FragPos;
in vec2 TexCoords;
in vec3 Normal;
+in vec4 Colour;
out vec4 gPosition;
out vec4 gNormal;
@@ -16,5 +17,5 @@ main()
float clear = round(texture(texture0, TexCoords).a);
gPosition = vec4(FragPos, clear);
gNormal = vec4(Normal, clear);
- gAlbedoSpec = texture(texture0, TexCoords);
+ gAlbedoSpec = mix(texture(texture0, TexCoords), vec4(Colour.rgb, 1), Colour.a);
}
diff --git a/gfx/gl/shaders/basicShader.vs b/gfx/gl/shaders/basicShader.vs
index bc7ea5d..ff9a401 100644
--- a/gfx/gl/shaders/basicShader.vs
+++ b/gfx/gl/shaders/basicShader.vs
@@ -3,10 +3,12 @@
in vec3 position;
in vec2 texCoord;
in vec3 normal;
+in vec4 colour;
out vec3 FragPos;
out vec2 TexCoords;
out vec3 Normal;
+out vec4 Colour;
uniform mat4 viewProjection;
uniform mat4 model;
@@ -19,6 +21,7 @@ main()
FragPos = worldPos.xyz;
TexCoords = texCoord;
Normal = (model * vec4(normal, 0.0)).xyz;
+ Colour = colour;
gl_Position = viewProjection * worldPos;
}
diff --git a/gfx/gl/shaders/landmassShader.vs b/gfx/gl/shaders/landmassShader.vs
index 6bf39b0..30c4ef4 100644
--- a/gfx/gl/shaders/landmassShader.vs
+++ b/gfx/gl/shaders/landmassShader.vs
@@ -3,10 +3,12 @@
in vec3 position;
in vec2 texCoord;
in vec3 normal;
+in vec4 colour;
out vec3 FragPos;
out vec2 TexCoords;
out vec3 Normal;
+out vec4 Colour;
uniform mat4 viewProjection;
@@ -16,6 +18,7 @@ main()
FragPos = position;
TexCoords = texCoord;
Normal = normal;
+ Colour = colour;
gl_Position = viewProjection * vec4(position, 1.0);
}
diff --git a/gfx/gl/shadowMapper.cpp b/gfx/gl/shadowMapper.cpp
index 1787ee6..7649a54 100644
--- a/gfx/gl/shadowMapper.cpp
+++ b/gfx/gl/shadowMapper.cpp
@@ -184,6 +184,13 @@ void
ShadowMapper::DynamicPoint::use(const Location & location) const
{
glUseProgram(*this);
+ setModel(location);
+ const auto model = glm::translate(location.pos) * rotate_ypr(location.rot);
+ glUniformMatrix4fv(modelLoc, 1, GL_FALSE, glm::value_ptr(model));
+}
+void
+ShadowMapper::DynamicPoint::setModel(const Location & location) const
+{
const auto model = glm::translate(location.pos) * rotate_ypr(location.rot);
glUniformMatrix4fv(modelLoc, 1, GL_FALSE, glm::value_ptr(model));
}
diff --git a/gfx/gl/shadowMapper.h b/gfx/gl/shadowMapper.h
index b4793ed..a5c2c7b 100644
--- a/gfx/gl/shadowMapper.h
+++ b/gfx/gl/shadowMapper.h
@@ -34,6 +34,7 @@ public:
DynamicPoint();
void setViewProjection(const glm::mat4 &) const;
void use(const Location &) const;
+ void setModel(const Location &) const;
private:
RequiredUniformLocation viewProjectionLoc;
diff --git a/gfx/models/mesh.cpp b/gfx/models/mesh.cpp
index 85be84c..3db1ad5 100644
--- a/gfx/models/mesh.cpp
+++ b/gfx/models/mesh.cpp
@@ -7,7 +7,7 @@
Mesh::Mesh(const std::span<const Vertex> vertices, const std::span<const unsigned int> indices, GLenum m) :
m_numIndices {static_cast<GLsizei>(indices.size())}, mode {m}
{
- VertexArrayObject<Vertex>::configure<&Vertex::pos, &Vertex::texCoord, &Vertex::normal>(
+ VertexArrayObject<Vertex>::configure<&Vertex::pos, &Vertex::texCoord, &Vertex::normal, &Vertex::colour>(
m_vertexArrayObject, m_vertexArrayBuffers[0], m_vertexArrayBuffers[1], vertices, indices);
}
diff --git a/gfx/models/vertex.hpp b/gfx/models/vertex.hpp
index 095c82f..325aab1 100644
--- a/gfx/models/vertex.hpp
+++ b/gfx/models/vertex.hpp
@@ -4,12 +4,13 @@
class Vertex {
public:
- constexpr Vertex(glm::vec3 pos, glm::vec2 texCoord, glm::vec3 normal) :
- pos {std::move(pos)}, texCoord {std::move(texCoord)}, normal {std::move(normal)}
+ constexpr Vertex(glm::vec3 pos, glm::vec2 texCoord, glm::vec3 normal, glm::vec4 colour = {}) :
+ pos {std::move(pos)}, texCoord {std::move(texCoord)}, normal {std::move(normal)}, colour {std::move(colour)}
{
}
glm::vec3 pos;
glm::vec2 texCoord;
glm::vec3 normal;
+ glm::vec4 colour;
};