diff --git a/TheChef b/TheChef index 3a7b137..df0da96 160000 --- a/TheChef +++ b/TheChef @@ -1 +1 @@ -Subproject commit 3a7b1371655214dd54a249df8ae6eb6e7c29f621 +Subproject commit df0da96c38fb198869ad71ba15dd5e5af24661d2 diff --git a/destrum/CMakeLists.txt b/destrum/CMakeLists.txt index 15b371a..81bab6e 100644 --- a/destrum/CMakeLists.txt +++ b/destrum/CMakeLists.txt @@ -47,6 +47,8 @@ set(SRC_FILES "src/FS/AssetFS.cpp" "src/FS/Manifest.cpp" + + "src/Util/DeltaTime.cpp" ) add_library(destrum ${SRC_FILES}) diff --git a/destrum/assets_src/char.fbx b/destrum/assets_src/char.fbx index 5e9e9f4..e0b1760 100644 Binary files a/destrum/assets_src/char.fbx and b/destrum/assets_src/char.fbx differ diff --git a/destrum/assets_src/char2.fbx b/destrum/assets_src/char2.fbx index fd236d4..5647086 100644 Binary files a/destrum/assets_src/char2.fbx and b/destrum/assets_src/char2.fbx differ diff --git a/destrum/assets_src/shaders/skybox.frag b/destrum/assets_src/shaders/skybox.frag index 8db3bc0..e769719 100644 --- a/destrum/assets_src/shaders/skybox.frag +++ b/destrum/assets_src/shaders/skybox.frag @@ -4,26 +4,33 @@ #include "bindless.glsl" -layout(location = 0) in vec2 uv; // from fullscreen triangle: 0..2 range +layout(location = 0) in vec2 uv; layout(location = 0) out vec4 outColor; layout(push_constant) uniform SkyboxPC { - mat4 invViewProj; // inverse(Proj * View) (your current setup) - vec4 cameraPos; // xyz = camera world position - uint skyboxTextureId; // index into textureCubes[] + mat4 invViewProj; + vec4 skyboxRot[3]; + vec3 cameraPos; + uint skyboxTextureId; } pcs; void main() { vec2 ndcXY = uv * 2.0 - 1.0; - vec4 ndc = vec4(ndcXY, 1.0, 1.0); vec4 world = pcs.invViewProj * ndc; vec3 worldPos = world.xyz / world.w; - vec3 dir = normalize(worldPos - pcs.cameraPos.xyz); + vec3 dir = normalize(worldPos - pcs.cameraPos); dir.y *= -1.0; + mat3 skyboxRot = mat3( + pcs.skyboxRot[0].xyz, + pcs.skyboxRot[1].xyz, + pcs.skyboxRot[2].xyz + ); + dir = skyboxRot * dir; + outColor = sampleTextureCubeLinear(pcs.skyboxTextureId, dir); -} +} \ No newline at end of file diff --git a/destrum/include/destrum/Components/Animator.h b/destrum/include/destrum/Components/Animator.h index 0cbab24..068e656 100644 --- a/destrum/include/destrum/Components/Animator.h +++ b/destrum/include/destrum/Components/Animator.h @@ -14,27 +14,22 @@ class SkinningPipeline; -class Animator : public Component { +class Animator final: public Component { public: explicit Animator(GameObject& parent); - // Component interface void Update() override; void ImGuiInspector() override; - // Animation control void addClip(std::shared_ptr clip); void play(const std::string& name, float blendTime = 0.f); void stop(); - bool isPlaying() const { return m_current.clip != nullptr; } - const std::string& currentClipName() const { return m_currentClipName; } - float currentTime() const { return m_current.time; } + [[nodiscard]] bool isPlaying() const { return m_current.clip != nullptr; } + [[nodiscard]] const std::string& currentClipName() const { return m_currentClipName; } + [[nodiscard]] float currentTime() const { return m_current.time; } - // Called during draw command building - std::size_t uploadJointMatrices(SkinningPipeline& pipeline, - const Skeleton& skeleton, - std::size_t frameIndex); + std::size_t uploadJointMatrices(const RenderContext& ctx, const Skeleton& skeleton, std::size_t frameIndex); Skeleton* getSkeleton() { return &m_skeleton; } diff --git a/destrum/include/destrum/Graphics/Pipelines/SkyboxPipeline.h b/destrum/include/destrum/Graphics/Pipelines/SkyboxPipeline.h index 4e45918..4bb56ee 100644 --- a/destrum/include/destrum/Graphics/Pipelines/SkyboxPipeline.h +++ b/destrum/include/destrum/Graphics/Pipelines/SkyboxPipeline.h @@ -32,12 +32,15 @@ private: std::unique_ptr pipeline; ImageID skyboxTextureId{NULL_IMAGE_ID}; + glm::mat4 skyboxRotation{1.f}; struct SkyboxPushConstants { - glm::mat4 invViewProj; - glm::vec4 cameraPos; + glm::mat4 invViewProj; + glm::vec4 skyboxRot[3]; + glm::vec3 cameraPos; std::uint32_t skyboxTextureId; }; + }; #endif //SKYBOXPIPELINE_H diff --git a/destrum/include/destrum/Graphics/Skeleton.h b/destrum/include/destrum/Graphics/Skeleton.h index ce35083..d01c352 100644 --- a/destrum/include/destrum/Graphics/Skeleton.h +++ b/destrum/include/destrum/Graphics/Skeleton.h @@ -7,6 +7,7 @@ #include #include #include +#include #include @@ -28,6 +29,8 @@ struct Skeleton { std::vector joints; std::vector jointNames; std::vector parentIndex; // -1 = root, built once after loading + + glm::mat4 rootPreTransform{1.f}; }; inline void buildParentIndex(Skeleton& skeleton) { diff --git a/destrum/include/destrum/Util/DeltaTime.h b/destrum/include/destrum/Util/DeltaTime.h new file mode 100644 index 0000000..a566696 --- /dev/null +++ b/destrum/include/destrum/Util/DeltaTime.h @@ -0,0 +1,31 @@ +#ifndef DELTATIME_H +#define DELTATIME_H + +#include +#include + +class Time final: public Singleton