diff --git a/kraken/KRContext.cpp b/kraken/KRContext.cpp index 6097be0..6d9ccb0 100755 --- a/kraken/KRContext.cpp +++ b/kraken/KRContext.cpp @@ -914,3 +914,17 @@ KrResult KRContext::getMappedResource(KrResourceMapIndex resourceHandle, KRResou } return KR_SUCCESS; } + + +bool KRContext::getShaderValue(const KRCamera* camera, ShaderValue value, float* output) const +{ + switch (value) + { + case ShaderValue::absolute_time: + *output = getAbsoluteTime(); + return true; + default: + break; + } + return KRReflectedObject::getShaderValue(camera, value, output); +} diff --git a/kraken/KRContext.h b/kraken/KRContext.h index eda00be..9aa0e2f 100755 --- a/kraken/KRContext.h +++ b/kraken/KRContext.h @@ -58,7 +58,7 @@ class KRUniformBufferManager; class KRSurfaceManager; class KRSamplerManager; -class KRContext +class KRContext : public KRReflectedObject { public: static int KRENGINE_MAX_PIPELINE_HANDLES; @@ -223,4 +223,6 @@ private: std::unique_ptr m_presentationThread; unordered_map m_surfaceHandleMap; + + virtual bool getShaderValue(const KRCamera* camera, ShaderValue value, float* output) const; }; diff --git a/kraken/KRPipeline.cpp b/kraken/KRPipeline.cpp index c4b7ec7..a075c75 100644 --- a/kraken/KRPipeline.cpp +++ b/kraken/KRPipeline.cpp @@ -628,6 +628,7 @@ void KRPipeline::setPushConstant(ShaderValue location, const Vector2& value) } } } + void KRPipeline::setPushConstant(ShaderValue location, const Vector3& value) { for (StageInfo& stageInfo : m_stages) { @@ -681,7 +682,6 @@ bool KRPipeline::updatePushConstants(KRNode::RenderInfo& ri, const Matrix4& matM if (!setPushConstants(ri.camera, ri.reflectedObjects)) { return false; } - setPushConstant(ShaderValue::absolute_time, getContext().getAbsoluteTime()); for (StageInfo& stageInfo : m_stages) { PushConstantInfo& pushConstants = stageInfo.pushConstants; diff --git a/kraken/KRRenderGraph.cpp b/kraken/KRRenderGraph.cpp index 05481fd..46f2a6f 100644 --- a/kraken/KRRenderGraph.cpp +++ b/kraken/KRRenderGraph.cpp @@ -161,6 +161,7 @@ KRRenderPass* KRRenderGraph::getFinalRenderPass() void KRRenderGraph::render(VkCommandBuffer &commandBuffer, KRSurface& surface, KRCamera* camera) { KRNode::RenderInfo ri(commandBuffer); + ri.reflectedObjects.push_back(&getContext()); ri.camera = camera; if (camera) { ri.viewport = camera->getViewport(); @@ -177,6 +178,7 @@ void KRRenderGraph::render(VkCommandBuffer &commandBuffer, KRSurface& surface, K } pass->end(commandBuffer); } + ri.reflectedObjects.pop_back(); } void KRRenderGraph::destroy(KRDevice& device)