Added shader reflection to KRContext
Some checks failed
CMake on multiple platforms / build (Release, cl, cl, windows-latest) (push) Has been cancelled
CMake on multiple platforms / build (Release, clang, clang++, macos-latest) (push) Has been cancelled
CMake on multiple platforms / build (Release, clang, clang++, ubuntu-latest) (push) Has been cancelled
CMake on multiple platforms / build (Release, gcc, g++, ubuntu-latest) (push) Has been cancelled
Some checks failed
CMake on multiple platforms / build (Release, cl, cl, windows-latest) (push) Has been cancelled
CMake on multiple platforms / build (Release, clang, clang++, macos-latest) (push) Has been cancelled
CMake on multiple platforms / build (Release, clang, clang++, ubuntu-latest) (push) Has been cancelled
CMake on multiple platforms / build (Release, gcc, g++, ubuntu-latest) (push) Has been cancelled
ShaderValue::absolute_time is now reflected by KRContext, eliminating the explicit setPushConstant call
This commit is contained in:
@@ -914,3 +914,17 @@ KrResult KRContext::getMappedResource(KrResourceMapIndex resourceHandle, KRResou
|
|||||||
}
|
}
|
||||||
return KR_SUCCESS;
|
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);
|
||||||
|
}
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ class KRUniformBufferManager;
|
|||||||
class KRSurfaceManager;
|
class KRSurfaceManager;
|
||||||
class KRSamplerManager;
|
class KRSamplerManager;
|
||||||
|
|
||||||
class KRContext
|
class KRContext : public KRReflectedObject
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
static int KRENGINE_MAX_PIPELINE_HANDLES;
|
static int KRENGINE_MAX_PIPELINE_HANDLES;
|
||||||
@@ -223,4 +223,6 @@ private:
|
|||||||
std::unique_ptr<KRPresentationThread> m_presentationThread;
|
std::unique_ptr<KRPresentationThread> m_presentationThread;
|
||||||
|
|
||||||
unordered_map<KrSurfaceMapIndex, KrSurfaceHandle> m_surfaceHandleMap;
|
unordered_map<KrSurfaceMapIndex, KrSurfaceHandle> m_surfaceHandleMap;
|
||||||
|
|
||||||
|
virtual bool getShaderValue(const KRCamera* camera, ShaderValue value, float* output) const;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -628,6 +628,7 @@ void KRPipeline::setPushConstant(ShaderValue location, const Vector2& value)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void KRPipeline::setPushConstant(ShaderValue location, const Vector3& value)
|
void KRPipeline::setPushConstant(ShaderValue location, const Vector3& value)
|
||||||
{
|
{
|
||||||
for (StageInfo& stageInfo : m_stages) {
|
for (StageInfo& stageInfo : m_stages) {
|
||||||
@@ -681,7 +682,6 @@ bool KRPipeline::updatePushConstants(KRNode::RenderInfo& ri, const Matrix4& matM
|
|||||||
if (!setPushConstants(ri.camera, ri.reflectedObjects)) {
|
if (!setPushConstants(ri.camera, ri.reflectedObjects)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
setPushConstant(ShaderValue::absolute_time, getContext().getAbsoluteTime());
|
|
||||||
|
|
||||||
for (StageInfo& stageInfo : m_stages) {
|
for (StageInfo& stageInfo : m_stages) {
|
||||||
PushConstantInfo& pushConstants = stageInfo.pushConstants;
|
PushConstantInfo& pushConstants = stageInfo.pushConstants;
|
||||||
|
|||||||
@@ -161,6 +161,7 @@ KRRenderPass* KRRenderGraph::getFinalRenderPass()
|
|||||||
void KRRenderGraph::render(VkCommandBuffer &commandBuffer, KRSurface& surface, KRCamera* camera)
|
void KRRenderGraph::render(VkCommandBuffer &commandBuffer, KRSurface& surface, KRCamera* camera)
|
||||||
{
|
{
|
||||||
KRNode::RenderInfo ri(commandBuffer);
|
KRNode::RenderInfo ri(commandBuffer);
|
||||||
|
ri.reflectedObjects.push_back(&getContext());
|
||||||
ri.camera = camera;
|
ri.camera = camera;
|
||||||
if (camera) {
|
if (camera) {
|
||||||
ri.viewport = camera->getViewport();
|
ri.viewport = camera->getViewport();
|
||||||
@@ -177,6 +178,7 @@ void KRRenderGraph::render(VkCommandBuffer &commandBuffer, KRSurface& surface, K
|
|||||||
}
|
}
|
||||||
pass->end(commandBuffer);
|
pass->end(commandBuffer);
|
||||||
}
|
}
|
||||||
|
ri.reflectedObjects.pop_back();
|
||||||
}
|
}
|
||||||
|
|
||||||
void KRRenderGraph::destroy(KRDevice& device)
|
void KRRenderGraph::destroy(KRDevice& device)
|
||||||
|
|||||||
Reference in New Issue
Block a user