ADD: Load Material to shader

This commit is contained in:
sebastian 2026-08-02 09:26:55 +02:00
parent 0b2f7ba60f
commit 86e15013d0
6 changed files with 27 additions and 6 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 367 B

View File

@ -3,8 +3,10 @@
in vec2 pass_textureCoords; in vec2 pass_textureCoords;
uniform sampler2D textureSampler; uniform sampler2D textureSampler;
uniform float opacity;
out vec4 fragColor; out vec4 fragColor;
void main() { void main() {
fragColor = texture(textureSampler, pass_textureCoords); vec4 texColor = texture(textureSampler, pass_textureCoords);
fragColor = vec4(texColor.rgb, texColor.a * opacity);
} }

View File

@ -49,4 +49,9 @@ void Model::drawSection(const std::string& name) const {
glDrawElements(GL_TRIANGLES, static_cast<GLsizei>(it->indexCount), GL_UNSIGNED_INT, glDrawElements(GL_TRIANGLES, static_cast<GLsizei>(it->indexCount), GL_UNSIGNED_INT,
reinterpret_cast<const void*>(it->indexOffset * sizeof(unsigned int))); reinterpret_cast<const void*>(it->indexOffset * sizeof(unsigned int)));
unbind(); unbind();
} }
void Model::drawSectionRange(unsigned int indexOffset, unsigned int indexCount) const {
glDrawElements(GL_TRIANGLES, static_cast<GLsizei>(indexCount), GL_UNSIGNED_INT,
reinterpret_cast<const void*>(indexOffset * sizeof(unsigned int)));
}

View File

@ -20,11 +20,13 @@ namespace engine {
void bind() const; void bind() const;
void unbind() const; void unbind() const;
void draw() const; void draw() const;
void drawSection(const std::string& name) const; // neu void drawSection(const std::string& name) const;
void drawSectionRange(unsigned int indexOffset, unsigned int indexCount) const;
[[nodiscard]] int getVertexCount() const { return m_vertexCount; } [[nodiscard]] int getVertexCount() const { return m_vertexCount; }
[[nodiscard]] bool isIndexed() const { return m_isIndexed; } [[nodiscard]] bool isIndexed() const { return m_isIndexed; }
[[nodiscard]] bool hasSections() const { return !m_sections.empty(); } [[nodiscard]] bool hasSections() const { return !m_sections.empty(); }
[[nodiscard]] const std::vector<MeshSection>& getSections() const { return m_sections; }
private: private:
std::unique_ptr<Vao> m_vao; std::unique_ptr<Vao> m_vao;

View File

@ -13,7 +13,11 @@ void engine::MeshRenderer::render(RenderQueue &queue, const Camera &camera) {
m_shader->loadTransformationMatrix(transformationMatrix); m_shader->loadTransformationMatrix(transformationMatrix);
mesh->bind(); mesh->bind();
mesh->draw(); for (const auto& section : mesh->getSections()) {
m_shader->loadMaterial(*section.material);
section.material->bind();
mesh->drawSectionRange(section.indexOffset, section.indexCount);
}
mesh->unbind(); mesh->unbind();
} }

View File

@ -6,6 +6,7 @@
#define COLORRACE_STATICSHADER_H #define COLORRACE_STATICSHADER_H
#include <functional> #include <functional>
#include "loader/models/Material.h"
#include "utils/openglWrapper/shader/ShaderProgram.h" #include "utils/openglWrapper/shader/ShaderProgram.h"
#include "utils/openglWrapper/shader/UniformValue.h" #include "utils/openglWrapper/shader/UniformValue.h"
@ -17,7 +18,8 @@ namespace engine {
storeAllUniformLocations({ storeAllUniformLocations({
std::ref(transformationMatrix), std::ref(transformationMatrix),
std::ref(projectionMatrix), std::ref(projectionMatrix),
std::ref(viewMatrix) std::ref(viewMatrix),
std::ref(opacity)
}); });
}; };
@ -32,11 +34,17 @@ namespace engine {
void loadViewMatrix(const glm::mat4& matrix) { void loadViewMatrix(const glm::mat4& matrix) {
viewMatrix.load(matrix); viewMatrix.load(matrix);
} }
void loadMaterial(const Material& material) {
//shininess.load(material.getShininess());
opacity.load(material.getOpacity());
}
private: private:
engine::UniformValue<glm::mat4> transformationMatrix{"transformationMatrix"}; engine::UniformValue<glm::mat4> transformationMatrix{"transformationMatrix"};
engine::UniformValue<glm::mat4> projectionMatrix{"projectionMatrix"}; engine::UniformValue<glm::mat4> projectionMatrix{"projectionMatrix"};
engine::UniformValue<glm::mat4> viewMatrix{"viewMatrix"}; engine::UniformValue<glm::mat4> viewMatrix{"viewMatrix"};
engine::UniformValue<float> shininess{"shininess"};
engine::UniformValue<float> opacity{"opacity"};
}; };
} }