From 09bb42b3f45aeb26133be0773f517b5019fc9f7e Mon Sep 17 00:00:00 2001 From: viktorljung Date: Wed, 10 Feb 2016 11:00:44 +0100 Subject: [PATCH] Importer animation fix --- assets | 2 +- resources/Schema/Entities/AnimationTests2.xml | 2 +- src/Engine/Rendering/DrawFinalPass.cpp | 7 +++++++ src/Engine/Rendering/PickingPass.cpp | 4 ++++ src/Engine/Rendering/RawModelCustom.cpp | 9 ++++----- 5 files changed, 17 insertions(+), 7 deletions(-) diff --git a/assets b/assets index c2847a65..6ae43521 160000 --- a/assets +++ b/assets @@ -1 +1 @@ -Subproject commit c2847a658ef603cf5c0ee993c4133bdf9c879d1c +Subproject commit 6ae43521b000345bd52bf92c06c5353d14b726ae diff --git a/resources/Schema/Entities/AnimationTests2.xml b/resources/Schema/Entities/AnimationTests2.xml index adb38d8d..3c482c61 100644 --- a/resources/Schema/Entities/AnimationTests2.xml +++ b/resources/Schema/Entities/AnimationTests2.xml @@ -45,7 +45,7 @@ Aim - Models/AssaultAnims.mesh + Models/Characters/Assault/HelloCube.mesh true diff --git a/src/Engine/Rendering/DrawFinalPass.cpp b/src/Engine/Rendering/DrawFinalPass.cpp index 46a47e7e..abc00b89 100644 --- a/src/Engine/Rendering/DrawFinalPass.cpp +++ b/src/Engine/Rendering/DrawFinalPass.cpp @@ -210,6 +210,7 @@ void DrawFinalPass::DrawModelRenderQueues(std::list>& } else { frameBones = explosionEffectJob->Skeleton->GetFrameBones(explosionEffectJob->Animations); } + glUniformMatrix4fv(glGetUniformLocation(explosionSkinnedHandle, "Bones"), frameBones.size(), GL_FALSE, glm::value_ptr(frameBones[0])); } else { m_ExplosionEffectProgram->Bind(); @@ -237,6 +238,8 @@ void DrawFinalPass::DrawModelRenderQueues(std::list>& } else { frameBones = explosionEffectJob->Skeleton->GetFrameBones(explosionEffectJob->Animations); } + glUniformMatrix4fv(glGetUniformLocation(explosionSplatMapSkinnedHandle, "Bones"), frameBones.size(), GL_FALSE, glm::value_ptr(frameBones[0])); + } else { m_ExplosionEffectSplatMapProgram->Bind(); @@ -281,6 +284,8 @@ void DrawFinalPass::DrawModelRenderQueues(std::list>& } else { frameBones = modelJob->Skeleton->GetFrameBones(modelJob->Animations); } + glUniformMatrix4fv(glGetUniformLocation(forwardSkinnedHandle, "Bones"), frameBones.size(), GL_FALSE, glm::value_ptr(frameBones[0])); + } else { m_ForwardPlusProgram->Bind(); GLERROR("Bind ForwardPlusProgram"); @@ -307,6 +312,8 @@ void DrawFinalPass::DrawModelRenderQueues(std::list>& } else { frameBones = modelJob->Skeleton->GetFrameBones(modelJob->Animations); } + glUniformMatrix4fv(glGetUniformLocation(forwardSplatMapSkinnedHandle, "Bones"), frameBones.size(), GL_FALSE, glm::value_ptr(frameBones[0])); + } else { m_ForwardPlusSplatMapProgram->Bind(); GLERROR("Bind SplatMap program"); diff --git a/src/Engine/Rendering/PickingPass.cpp b/src/Engine/Rendering/PickingPass.cpp index 9d911325..41850698 100644 --- a/src/Engine/Rendering/PickingPass.cpp +++ b/src/Engine/Rendering/PickingPass.cpp @@ -110,6 +110,8 @@ void PickingPass::Draw(RenderScene& scene) } else { frameBones = modelJob->Skeleton->GetFrameBones(modelJob->Animations); } + glUniformMatrix4fv(glGetUniformLocation(shaderSkinnedHandle, "Bones"), frameBones.size(), GL_FALSE, glm::value_ptr(frameBones[0])); + } } else { m_PickingProgram->Bind(); @@ -190,6 +192,8 @@ void PickingPass::Draw(RenderScene& scene) } else { frameBones = modelJob->Skeleton->GetFrameBones(modelJob->Animations); } + glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "Bones"), frameBones.size(), GL_FALSE, glm::value_ptr(frameBones[0])); + } glBindVertexArray(modelJob->Model->VAO); diff --git a/src/Engine/Rendering/RawModelCustom.cpp b/src/Engine/Rendering/RawModelCustom.cpp index 7eb58fd4..4ebf80b6 100644 --- a/src/Engine/Rendering/RawModelCustom.cpp +++ b/src/Engine/Rendering/RawModelCustom.cpp @@ -288,12 +288,11 @@ void RawModelCustom::ReadAnimationFile(std::string filePath) std::ifstream in(filePath.c_str(), std::ios_base::binary | std::ios_base::ate); if (!in.is_open()) { - //throw Resource::FailedLoadingException("Open animation file failed"); + if (hasSkin) { + throw Resource::FailedLoadingException("Open animation file for a skinned mesh failed, unknown stuff will happen"); + } return; - } else if (hasSkin) { - throw Resource::FailedLoadingException("Open animation file for a skinned mesh failed, unknown stuff will happen"); - return; - } + } unsigned int fileByteSize = static_cast(in.tellg()); in.seekg(0, std::ios_base::beg);