From 70c34597034a68c7938b8f747e096fbc5621f9d0 Mon Sep 17 00:00:00 2001 From: ugozapad Date: Thu, 5 Mar 2026 14:37:52 +0300 Subject: [PATCH] Update model.cpp --- src/render/model.cpp | 52 +++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 49 insertions(+), 3 deletions(-) diff --git a/src/render/model.cpp b/src/render/model.cpp index d133dbc..a5801d5 100644 --- a/src/render/model.cpp +++ b/src/render/model.cpp @@ -609,14 +609,60 @@ void Model::Draw(const glm::mat4& model, SkeletonInstance* instance /*= nullptr* g_renderDevice->SetCullFace(true); g_renderDevice->SetDepthTest(true); - { + g_renderDevice->SetDepthWrite(true); + bool isTransparent = false; + if (isTransparent) + { + // Enable blending + g_renderDevice->SetBlending(true); + g_renderDevice->SetBlendingFunction(BF_SRC_ALPHA, BF_ONE_MINUS_SRC_ALPHA); + + glm::vec4 color = glm::vec4(1.f, 1.f, 1.f, .5f); + g_shaderSystem->SetUniformFloat4(shader, UNIFORM_CUSTOM_COLOR, glm::value_ptr(color)); + } + else + { + g_renderDevice->SetBlending(false); + + //glm::vec4 color = glm::vec4(1.f, 1.f, 1.f, 1.f); + //g_shaderSystem->SetUniformFloat4(shader, UNIFORM_CUSTOM_COLOR, glm::value_ptr(color)); + } + + g_renderDevice->SetVerticesBuffer(m_data.vb); + if (m_data.ib) + g_renderDevice->SetIndicesBuffer(m_data.ib); + + g_shaderSystem->SetShader(shader); + g_shaderSystem->SetUniformMatrix(shader, UNIFORM_MODEL_MATRIX, &model[0]); + + g_shaderSystem->SetUniformMatrix(shader, UNIFORM_PROJ_MATRIX, &g_render->GetProjectionMatrix()[0]); + g_shaderSystem->SetUniformMatrix(shader, UNIFORM_VIEW_MATRIX, &g_render->GetViewMatrix()[0]); + + glm::mat4 mvp = glm::identity(); + mvp = g_render->GetProjectionMatrix() * g_render->GetViewMatrix() * model; + g_shaderSystem->SetUniformMatrix(shader, UNIFORM_MVP_MATRIX, &mvp[0]); + + + if (!m_AlbedoTexture) + m_AlbedoTexture = g_texturesManager->LoadTexture2D("asdfasdf"); + + g_texturesManager->SetTexture(0, m_AlbedoTexture); + g_shaderSystem->SetUniformSampler(shader, SAMPLER_ALBEDO, 0); + + if (instance) + g_shaderSystem->SetUniformMatrix(shader, UNIFORM_BONE_MATRICES, instance->m_finalMatrices.data(), instance->m_finalMatrices.size()); if (m_data.ib) - - g_renderDevice->DrawElements(PT_TRIANGLES, m_data.ibcount, 0, NULL); + else + g_renderDevice->DrawArrays(PT_TRIANGLES, 0, m_data.vbcount); + } + + // debug draw + if (instance) + { glm::mat4 worldMat; glm::mat4 worldMatParent; for (int i = 0; i < instance->m_jointMatrices.size(); i++)