From 86e15013d04b9ccdff97a81ee28fc60c4848a17e Mon Sep 17 00:00:00 2001 From: sebastian Date: Sun, 2 Aug 2026 09:26:55 +0200 Subject: [PATCH] ADD: Load Material to shader --- assets/models/chess_blue.png | Bin 0 -> 367 bytes assets/shaders/basic.frag | 4 +++- engine/src/loader/models/Model.cpp | 7 ++++++- engine/src/loader/models/Model.h | 4 +++- engine/src/renderer/MeshRenderer.cpp | 6 +++++- engine/src/renderer/shader/StaticShader.h | 12 ++++++++++-- 6 files changed, 27 insertions(+), 6 deletions(-) create mode 100644 assets/models/chess_blue.png diff --git a/assets/models/chess_blue.png b/assets/models/chess_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..fb0b75ed962c8ff9095ff6ce2c719536749777ed GIT binary patch literal 367 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1SEZ8zRdwrjKx9jPK-BC>eK@{Ea{HEjtmSN z`?>!lvI6-E$sR$z3=CCjKus+S48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fg!CBxD zSlFzskrs_q9Y^F!UGOp^c6J? zEAA-0F{*MZp9-{<1L!CQ1)vuSXObiZ`2~x`(gfrx$o>(v~xIO*JaRwmpboFyt I=akR{0Bk@!-~a#s literal 0 HcmV?d00001 diff --git a/assets/shaders/basic.frag b/assets/shaders/basic.frag index dd4314c..8143310 100644 --- a/assets/shaders/basic.frag +++ b/assets/shaders/basic.frag @@ -3,8 +3,10 @@ in vec2 pass_textureCoords; uniform sampler2D textureSampler; +uniform float opacity; out vec4 fragColor; void main() { - fragColor = texture(textureSampler, pass_textureCoords); + vec4 texColor = texture(textureSampler, pass_textureCoords); + fragColor = vec4(texColor.rgb, texColor.a * opacity); } \ No newline at end of file diff --git a/engine/src/loader/models/Model.cpp b/engine/src/loader/models/Model.cpp index a0de1c0..ed681f3 100644 --- a/engine/src/loader/models/Model.cpp +++ b/engine/src/loader/models/Model.cpp @@ -49,4 +49,9 @@ void Model::drawSection(const std::string& name) const { glDrawElements(GL_TRIANGLES, static_cast(it->indexCount), GL_UNSIGNED_INT, reinterpret_cast(it->indexOffset * sizeof(unsigned int))); unbind(); -} \ No newline at end of file +} + +void Model::drawSectionRange(unsigned int indexOffset, unsigned int indexCount) const { + glDrawElements(GL_TRIANGLES, static_cast(indexCount), GL_UNSIGNED_INT, + reinterpret_cast(indexOffset * sizeof(unsigned int))); +} diff --git a/engine/src/loader/models/Model.h b/engine/src/loader/models/Model.h index 9299324..6d7896c 100644 --- a/engine/src/loader/models/Model.h +++ b/engine/src/loader/models/Model.h @@ -20,11 +20,13 @@ namespace engine { void bind() const; void unbind() 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]] bool isIndexed() const { return m_isIndexed; } [[nodiscard]] bool hasSections() const { return !m_sections.empty(); } + [[nodiscard]] const std::vector& getSections() const { return m_sections; } private: std::unique_ptr m_vao; diff --git a/engine/src/renderer/MeshRenderer.cpp b/engine/src/renderer/MeshRenderer.cpp index 03cb4bd..aff1fdb 100644 --- a/engine/src/renderer/MeshRenderer.cpp +++ b/engine/src/renderer/MeshRenderer.cpp @@ -13,7 +13,11 @@ void engine::MeshRenderer::render(RenderQueue &queue, const Camera &camera) { m_shader->loadTransformationMatrix(transformationMatrix); 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(); } diff --git a/engine/src/renderer/shader/StaticShader.h b/engine/src/renderer/shader/StaticShader.h index 3e2c3a2..067ce6a 100644 --- a/engine/src/renderer/shader/StaticShader.h +++ b/engine/src/renderer/shader/StaticShader.h @@ -6,6 +6,7 @@ #define COLORRACE_STATICSHADER_H #include +#include "loader/models/Material.h" #include "utils/openglWrapper/shader/ShaderProgram.h" #include "utils/openglWrapper/shader/UniformValue.h" @@ -17,7 +18,8 @@ namespace engine { storeAllUniformLocations({ std::ref(transformationMatrix), std::ref(projectionMatrix), - std::ref(viewMatrix) + std::ref(viewMatrix), + std::ref(opacity) }); }; @@ -32,11 +34,17 @@ namespace engine { void loadViewMatrix(const glm::mat4& matrix) { viewMatrix.load(matrix); } + + void loadMaterial(const Material& material) { + //shininess.load(material.getShininess()); + opacity.load(material.getOpacity()); + } private: engine::UniformValue transformationMatrix{"transformationMatrix"}; engine::UniformValue projectionMatrix{"projectionMatrix"}; engine::UniformValue viewMatrix{"viewMatrix"}; - + engine::UniformValue shininess{"shininess"}; + engine::UniformValue opacity{"opacity"}; }; }