Moved ShaderValue::light_direction_view_space from KRDirectionalLight to KRModelView shader reflection
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

Made many members const
This commit is contained in:
2026-06-01 01:17:25 -07:00
parent 1592087065
commit 1b2703b902
8 changed files with 110 additions and 106 deletions

View File

@@ -68,6 +68,11 @@ bool KRModelView::getShaderValue(ShaderValue value, Vector3* output) const
*output = lightDirObject; *output = lightDirObject;
return true; return true;
} }
case ShaderValue::light_direction_view_space:
{
*output = m_directionalLight->getViewSpaceLightDirection(m_viewport->getViewMatrix());
return true;
}
default: default:
break; break;
} }

View File

@@ -170,7 +170,7 @@ KROctreeNode* KROctreeNode::stripChild()
} }
KROctreeNode* KROctreeNode::getParent() KROctreeNode* KROctreeNode::getParent() const
{ {
return m_parent; return m_parent;
} }

View File

@@ -52,7 +52,7 @@ public:
hydra::AABB getBounds(); hydra::AABB getBounds();
KROctreeNode* getParent(); KROctreeNode* getParent() const;
void setChildNode(int iChild, KROctreeNode* pChild); void setChildNode(int iChild, KROctreeNode* pChild);
int getChildIndex(KRNode* pNode); int getChildIndex(KRNode* pNode);
hydra::AABB getChildBounds(int iChild); hydra::AABB getChildBounds(int iChild);

View File

@@ -61,12 +61,12 @@ std::string KRDirectionalLight::getElementName()
return "directional_light"; return "directional_light";
} }
Vector3 KRDirectionalLight::getWorldLightDirection() Vector3 KRDirectionalLight::getWorldLightDirection() const
{ {
return Matrix4::Dot(getWorldRotation().rotationMatrix(), getLocalLightDirection()); return Matrix4::Dot(getWorldRotation().rotationMatrix(), getLocalLightDirection());
} }
Vector3 KRDirectionalLight::getLocalLightDirection() Vector3 KRDirectionalLight::getLocalLightDirection() const
{ {
return Vector3::Up(); //&KRF HACK changed from Vector3::Forward(); - to compensate for the way Maya handles post rotation. return Vector3::Up(); //&KRF HACK changed from Vector3::Forward(); - to compensate for the way Maya handles post rotation.
} }
@@ -125,6 +125,19 @@ int KRDirectionalLight::configureShadowBufferViewports(const KRViewport& viewpor
return 1; return 1;
} }
Vector3 KRDirectionalLight::getViewSpaceLightDirection(const Matrix4& viewMatrix) const
{
Matrix4 matModelViewInverseTranspose = viewMatrix * getModelMatrix();
matModelViewInverseTranspose.transpose();
matModelViewInverseTranspose.invert();
Vector3 light_direction_view_space = getWorldLightDirection();
light_direction_view_space = Matrix4::Dot(matModelViewInverseTranspose, light_direction_view_space);
light_direction_view_space.normalize();
return light_direction_view_space;
}
void KRDirectionalLight::render(RenderInfo& ri) void KRDirectionalLight::render(RenderInfo& ri)
{ {
ri.reflectedObjects.push_back(this); ri.reflectedObjects.push_back(this);
@@ -137,14 +150,6 @@ void KRDirectionalLight::render(RenderInfo& ri)
std::vector<KRDirectionalLight*> this_light; std::vector<KRDirectionalLight*> this_light;
this_light.push_back(this); this_light.push_back(this);
Matrix4 matModelViewInverseTranspose = ri.viewport->getViewMatrix() * getModelMatrix();
matModelViewInverseTranspose.transpose();
matModelViewInverseTranspose.invert();
Vector3 light_direction_view_space = getWorldLightDirection();
light_direction_view_space = Matrix4::Dot(matModelViewInverseTranspose, light_direction_view_space);
light_direction_view_space.normalize();
KRMeshManager::KRVBOData& vertices = getContext().getMeshManager()->KRENGINE_VBO_DATA_2D_SQUARE_VERTICES; KRMeshManager::KRVBOData& vertices = getContext().getMeshManager()->KRENGINE_VBO_DATA_2D_SQUARE_VERTICES;
PipelineInfo info{}; PipelineInfo info{};
@@ -159,13 +164,10 @@ void KRDirectionalLight::render(RenderInfo& ri)
info.modelFormat = ModelFormat::KRENGINE_MODEL_FORMAT_STRIP; info.modelFormat = ModelFormat::KRENGINE_MODEL_FORMAT_STRIP;
KRPipeline* pShader = getContext().getPipelineManager()->getPipeline(*ri.surface, info); KRPipeline* pShader = getContext().getPipelineManager()->getPipeline(*ri.surface, info);
if (pShader) { if (pShader && pShader->bind(ri, getModelMatrix())) { // TODO: Need to pass in the light index to the shader
pShader->setPushConstant(ShaderValue::light_direction_view_space, light_direction_view_space); // Render a full screen quad
if (pShader->bind(ri, getModelMatrix())) { // TODO: Need to pass in the light index to the shader m_pContext->getMeshManager()->bindVBO(ri.commandBuffer, &vertices, 1.0f);
// Render a full screen quad vkCmdDraw(ri.commandBuffer, 4, 1, 0, 0);
m_pContext->getMeshManager()->bindVBO(ri.commandBuffer, &vertices, 1.0f);
vkCmdDraw(ri.commandBuffer, 4, 1, 0, 0);
}
} }
} }

View File

@@ -43,8 +43,9 @@ public:
virtual ~KRDirectionalLight(); virtual ~KRDirectionalLight();
virtual std::string getElementName() override; virtual std::string getElementName() override;
hydra::Vector3 getLocalLightDirection(); hydra::Vector3 getLocalLightDirection() const;
hydra::Vector3 getWorldLightDirection(); hydra::Vector3 getWorldLightDirection() const;
hydra::Vector3 getViewSpaceLightDirection(const hydra::Matrix4 & viewMatrix) const;
virtual void render(RenderInfo& ri) override; virtual void render(RenderInfo& ri) override;
virtual hydra::AABB getBounds() override; virtual hydra::AABB getBounds() override;

View File

@@ -189,7 +189,7 @@ void KRNode::setScaleCompensation(bool scale_compensation)
invalidateBindPoseMatrix(); invalidateBindPoseMatrix();
} }
} }
bool KRNode::getScaleCompensation() bool KRNode::getScaleCompensation() const
{ {
return m_scale_compensation; return m_scale_compensation;
} }
@@ -510,87 +510,87 @@ void KRNode::setPostRotation(const Vector3& v, bool set_original)
invalidateModelMatrix(); invalidateModelMatrix();
} }
const Vector3& KRNode::getRotationOffset() const Vector3& KRNode::getRotationOffset() const
{ {
return m_rotationOffset; return m_rotationOffset;
} }
const Vector3& KRNode::getScalingOffset() const Vector3& KRNode::getScalingOffset() const
{ {
return m_scalingOffset; return m_scalingOffset;
} }
const Vector3& KRNode::getRotationPivot() const Vector3& KRNode::getRotationPivot() const
{ {
return m_rotationPivot; return m_rotationPivot;
} }
const Vector3& KRNode::getScalingPivot() const Vector3& KRNode::getScalingPivot() const
{ {
return m_scalingPivot; return m_scalingPivot;
} }
const Vector3& KRNode::getPreRotation() const Vector3& KRNode::getPreRotation() const
{ {
return m_preRotation; return m_preRotation;
} }
const Vector3& KRNode::getPostRotation() const Vector3& KRNode::getPostRotation() const
{ {
return m_postRotation; return m_postRotation;
} }
const Vector3& KRNode::getInitialRotationOffset() const Vector3& KRNode::getInitialRotationOffset() const
{ {
return m_initialRotationOffset; return m_initialRotationOffset;
} }
const Vector3& KRNode::getInitialScalingOffset() const Vector3& KRNode::getInitialScalingOffset() const
{ {
return m_initialScalingOffset; return m_initialScalingOffset;
} }
const Vector3& KRNode::getInitialRotationPivot() const Vector3& KRNode::getInitialRotationPivot() const
{ {
return m_initialRotationPivot; return m_initialRotationPivot;
} }
const Vector3& KRNode::getInitialScalingPivot() const Vector3& KRNode::getInitialScalingPivot() const
{ {
return m_initialScalingPivot; return m_initialScalingPivot;
} }
const Vector3& KRNode::getInitialPreRotation() const Vector3& KRNode::getInitialPreRotation() const
{ {
return m_initialPreRotation; return m_initialPreRotation;
} }
const Vector3& KRNode::getInitialPostRotation() const Vector3& KRNode::getInitialPostRotation() const
{ {
return m_initialPostRotation; return m_initialPostRotation;
} }
const Vector3& KRNode::getLocalTranslation() const Vector3& KRNode::getLocalTranslation() const
{ {
return m_localTranslation; return m_localTranslation;
} }
const Vector3& KRNode::getLocalScale() const Vector3& KRNode::getLocalScale() const
{ {
return m_localScale; return m_localScale;
} }
const Vector3& KRNode::getLocalRotation() const Vector3& KRNode::getLocalRotation() const
{ {
return m_localRotation; return m_localRotation;
} }
const Vector3& KRNode::getInitialLocalTranslation() const Vector3& KRNode::getInitialLocalTranslation() const
{ {
return m_initialLocalTranslation; return m_initialLocalTranslation;
} }
const Vector3& KRNode::getInitialLocalScale() const Vector3& KRNode::getInitialLocalScale() const
{ {
return m_initialLocalScale; return m_initialLocalScale;
} }
const Vector3& KRNode::getInitialLocalRotation() const Vector3& KRNode::getInitialLocalRotation() const
{ {
return m_initialLocalRotation; return m_initialLocalRotation;
} }
const Vector3 KRNode::getWorldTranslation() const Vector3 KRNode::getWorldTranslation() const
{ {
return localToWorld(Vector3::Zero()); return localToWorld(Vector3::Zero());
} }
const Vector3 KRNode::getWorldScale() const Vector3 KRNode::getWorldScale() const
{ {
return Matrix4::DotNoTranslate(getModelMatrix(), m_localScale); return Matrix4::DotNoTranslate(getModelMatrix(), m_localScale);
} }
@@ -683,7 +683,7 @@ void KRNode::render(RenderInfo& ri)
m_lastRenderFrame = getContext().getCurrentFrame(); m_lastRenderFrame = getContext().getCurrentFrame();
} }
KRNode* KRNode::getParent() KRNode* KRNode::getParent() const
{ {
return m_parentNode; return m_parentNode;
} }
@@ -741,7 +741,7 @@ void KRNode::invalidateBindPoseMatrix()
} }
} }
const Matrix4& KRNode::getModelMatrix() const Matrix4& KRNode::getModelMatrix() const
{ {
if (!m_modelMatrixValid) { if (!m_modelMatrixValid) {
@@ -802,7 +802,7 @@ const Matrix4& KRNode::getModelMatrix()
return m_modelMatrix; return m_modelMatrix;
} }
const Matrix4& KRNode::getBindPoseMatrix() const Matrix4& KRNode::getBindPoseMatrix() const
{ {
if (!m_bindPoseMatrixValid) { if (!m_bindPoseMatrixValid) {
m_bindPoseMatrix = Matrix4(); m_bindPoseMatrix = Matrix4();
@@ -861,7 +861,7 @@ const Matrix4& KRNode::getBindPoseMatrix()
return m_bindPoseMatrix; return m_bindPoseMatrix;
} }
const Matrix4& KRNode::getActivePoseMatrix() const Matrix4& KRNode::getActivePoseMatrix() const
{ {
if (!m_activePoseMatrixValid) { if (!m_activePoseMatrixValid) {
@@ -919,7 +919,7 @@ const Matrix4& KRNode::getActivePoseMatrix()
} }
const Quaternion KRNode::getWorldRotation() const Quaternion KRNode::getWorldRotation() const
{ {
Quaternion world_rotation = Quaternion::Create(m_postRotation) * Quaternion::Create(m_localRotation) * Quaternion::Create(m_preRotation); Quaternion world_rotation = Quaternion::Create(m_postRotation) * Quaternion::Create(m_localRotation) * Quaternion::Create(m_preRotation);
if (m_parentNode) { if (m_parentNode) {
@@ -928,7 +928,7 @@ const Quaternion KRNode::getWorldRotation()
return world_rotation; return world_rotation;
} }
const Quaternion KRNode::getBindPoseWorldRotation() const Quaternion KRNode::getBindPoseWorldRotation() const
{ {
Quaternion world_rotation = Quaternion::Create(m_initialPostRotation) * Quaternion::Create(m_initialLocalRotation) * Quaternion::Create(m_initialPreRotation); Quaternion world_rotation = Quaternion::Create(m_initialPostRotation) * Quaternion::Create(m_initialLocalRotation) * Quaternion::Create(m_initialPreRotation);
if (dynamic_cast<KRBone*>(m_parentNode)) { if (dynamic_cast<KRBone*>(m_parentNode)) {
@@ -937,7 +937,7 @@ const Quaternion KRNode::getBindPoseWorldRotation()
return world_rotation; return world_rotation;
} }
const Quaternion KRNode::getActivePoseWorldRotation() const Quaternion KRNode::getActivePoseWorldRotation() const
{ {
Quaternion world_rotation = Quaternion::Create(m_postRotation) * Quaternion::Create(m_localRotation) * Quaternion::Create(m_preRotation); Quaternion world_rotation = Quaternion::Create(m_postRotation) * Quaternion::Create(m_localRotation) * Quaternion::Create(m_preRotation);
if (dynamic_cast<KRBone*>(m_parentNode)) { if (dynamic_cast<KRBone*>(m_parentNode)) {
@@ -946,7 +946,7 @@ const Quaternion KRNode::getActivePoseWorldRotation()
return world_rotation; return world_rotation;
} }
const Matrix4& KRNode::getInverseModelMatrix() const Matrix4& KRNode::getInverseModelMatrix() const
{ {
if (!m_inverseModelMatrixValid) { if (!m_inverseModelMatrixValid) {
m_inverseModelMatrix = Matrix4::Invert(getModelMatrix()); m_inverseModelMatrix = Matrix4::Invert(getModelMatrix());
@@ -954,7 +954,7 @@ const Matrix4& KRNode::getInverseModelMatrix()
return m_inverseModelMatrix; return m_inverseModelMatrix;
} }
const Matrix4& KRNode::getInverseBindPoseMatrix() const Matrix4& KRNode::getInverseBindPoseMatrix() const
{ {
if (!m_inverseBindPoseMatrixValid) { if (!m_inverseBindPoseMatrixValid) {
m_inverseBindPoseMatrix = Matrix4::Invert(getBindPoseMatrix()); m_inverseBindPoseMatrix = Matrix4::Invert(getBindPoseMatrix());
@@ -1142,12 +1142,12 @@ KRNode::LodVisibility KRNode::getLODVisibility()
return m_lod_visible; return m_lod_visible;
} }
const Vector3 KRNode::localToWorld(const Vector3& local_point) const Vector3 KRNode::localToWorld(const Vector3& local_point) const
{ {
return Matrix4::Dot(getModelMatrix(), local_point); return Matrix4::Dot(getModelMatrix(), local_point);
} }
const Vector3 KRNode::worldToLocal(const Vector3& world_point) const Vector3 KRNode::worldToLocal(const Vector3& world_point) const
{ {
return Matrix4::Dot(getInverseModelMatrix(), world_point); return Matrix4::Dot(getInverseModelMatrix(), world_point);
} }
@@ -1175,7 +1175,7 @@ kraken_stream_level KRNode::getStreamLevel(const KRViewport& viewport)
return stream_level; return stream_level;
} }
void KRNode::invalidateBounds() const void KRNode::invalidateBounds()
{ {
m_boundsValid = false; m_boundsValid = false;
if (m_parentNode) { if (m_parentNode) {

View File

@@ -142,7 +142,7 @@ public:
void prependChild(KRNode* child); void prependChild(KRNode* child);
void insertBefore(KRNode* child); void insertBefore(KRNode* child);
void insertAfter(KRNode* child); void insertAfter(KRNode* child);
KRNode* getParent(); KRNode* getParent() const;
void setLocalTranslation(const hydra::Vector3& v, bool set_original = false); void setLocalTranslation(const hydra::Vector3& v, bool set_original = false);
void setLocalScale(const hydra::Vector3& v, bool set_original = false); void setLocalScale(const hydra::Vector3& v, bool set_original = false);
@@ -156,50 +156,50 @@ public:
void setPreRotation(const hydra::Vector3& v, bool set_original = false); void setPreRotation(const hydra::Vector3& v, bool set_original = false);
void setPostRotation(const hydra::Vector3& v, bool set_original = false); void setPostRotation(const hydra::Vector3& v, bool set_original = false);
const hydra::Vector3& getRotationOffset(); const hydra::Vector3& getRotationOffset() const;
const hydra::Vector3& getScalingOffset(); const hydra::Vector3& getScalingOffset() const;
const hydra::Vector3& getRotationPivot(); const hydra::Vector3& getRotationPivot() const;
const hydra::Vector3& getScalingPivot(); const hydra::Vector3& getScalingPivot() const;
const hydra::Vector3& getPreRotation(); const hydra::Vector3& getPreRotation() const;
const hydra::Vector3& getPostRotation(); const hydra::Vector3& getPostRotation() const;
const hydra::Vector3& getInitialRotationOffset(); const hydra::Vector3& getInitialRotationOffset() const;
const hydra::Vector3& getInitialScalingOffset(); const hydra::Vector3& getInitialScalingOffset() const;
const hydra::Vector3& getInitialRotationPivot(); const hydra::Vector3& getInitialRotationPivot() const;
const hydra::Vector3& getInitialScalingPivot(); const hydra::Vector3& getInitialScalingPivot() const;
const hydra::Vector3& getInitialPreRotation(); const hydra::Vector3& getInitialPreRotation() const;
const hydra::Vector3& getInitialPostRotation(); const hydra::Vector3& getInitialPostRotation() const;
const hydra::Vector3& getLocalTranslation(); const hydra::Vector3& getLocalTranslation() const;
const hydra::Vector3& getLocalScale(); const hydra::Vector3& getLocalScale() const;
const hydra::Vector3& getLocalRotation(); const hydra::Vector3& getLocalRotation() const;
const hydra::Vector3& getInitialLocalTranslation(); const hydra::Vector3& getInitialLocalTranslation() const;
const hydra::Vector3& getInitialLocalScale(); const hydra::Vector3& getInitialLocalScale() const;
const hydra::Vector3& getInitialLocalRotation(); const hydra::Vector3& getInitialLocalRotation() const;
const hydra::Vector3 getWorldTranslation(); const hydra::Vector3 getWorldTranslation() const;
const hydra::Vector3 getWorldScale(); const hydra::Vector3 getWorldScale() const;
const hydra::Quaternion getWorldRotation(); const hydra::Quaternion getWorldRotation() const;
const hydra::Quaternion getBindPoseWorldRotation(); const hydra::Quaternion getBindPoseWorldRotation() const;
const hydra::Quaternion getActivePoseWorldRotation(); const hydra::Quaternion getActivePoseWorldRotation() const;
const hydra::Vector3 localToWorld(const hydra::Vector3& local_point); const hydra::Vector3 localToWorld(const hydra::Vector3& local_point) const;
const hydra::Vector3 worldToLocal(const hydra::Vector3& world_point); const hydra::Vector3 worldToLocal(const hydra::Vector3& world_point) const;
void setWorldTranslation(const hydra::Vector3& v); void setWorldTranslation(const hydra::Vector3& v);
void setWorldScale(const hydra::Vector3& v); void setWorldScale(const hydra::Vector3& v);
void setWorldRotation(const hydra::Vector3& v); void setWorldRotation(const hydra::Vector3& v);
virtual hydra::AABB getBounds(); virtual hydra::AABB getBounds();
void invalidateBounds() const; void invalidateBounds();
const hydra::Matrix4& getModelMatrix(); const hydra::Matrix4& getModelMatrix() const;
const hydra::Matrix4& getInverseModelMatrix(); const hydra::Matrix4& getInverseModelMatrix() const;
const hydra::Matrix4& getBindPoseMatrix(); const hydra::Matrix4& getBindPoseMatrix() const;
const hydra::Matrix4& getActivePoseMatrix(); const hydra::Matrix4& getActivePoseMatrix() const;
const hydra::Matrix4& getInverseBindPoseMatrix(); const hydra::Matrix4& getInverseBindPoseMatrix() const;
enum node_attribute_type enum node_attribute_type
{ {
@@ -250,7 +250,7 @@ public:
LodVisibility getLODVisibility(); LodVisibility getLODVisibility();
void setScaleCompensation(bool scale_compensation); void setScaleCompensation(bool scale_compensation);
bool getScaleCompensation(); bool getScaleCompensation() const;
void setAnimationEnabled(node_attribute_type attrib, bool enable); void setAnimationEnabled(node_attribute_type attrib, bool enable);
bool getAnimationEnabled(node_attribute_type attrib) const; bool getAnimationEnabled(node_attribute_type attrib) const;
@@ -299,24 +299,23 @@ private:
long m_lastRenderFrame; long m_lastRenderFrame;
void invalidateModelMatrix(); void invalidateModelMatrix();
void invalidateBindPoseMatrix(); void invalidateBindPoseMatrix();
hydra::Matrix4 m_modelMatrix; // Members are mutable to enable lazy calculation from const accessors
hydra::Matrix4 m_inverseModelMatrix; mutable hydra::Matrix4 m_modelMatrix;
hydra::Matrix4 m_bindPoseMatrix; mutable hydra::Matrix4 m_inverseModelMatrix;
hydra::Matrix4 m_activePoseMatrix; mutable hydra::Matrix4 m_bindPoseMatrix;
hydra::Matrix4 m_inverseBindPoseMatrix; mutable hydra::Matrix4 m_activePoseMatrix;
bool m_modelMatrixValid; mutable hydra::Matrix4 m_inverseBindPoseMatrix;
bool m_inverseModelMatrixValid; mutable bool m_modelMatrixValid;
bool m_bindPoseMatrixValid; mutable bool m_inverseModelMatrixValid;
bool m_activePoseMatrixValid; mutable bool m_bindPoseMatrixValid;
bool m_inverseBindPoseMatrixValid; mutable bool m_activePoseMatrixValid;
mutable bool m_inverseBindPoseMatrixValid;
mutable hydra::AABB m_bounds; hydra::AABB m_bounds;
mutable bool m_boundsValid; bool m_boundsValid;
std::string m_name; std::string m_name;
KRScene* m_pScene; KRScene* m_pScene;
std::set<KROctreeNode*> m_octree_nodes; std::set<KROctreeNode*> m_octree_nodes;

View File

@@ -236,10 +236,7 @@ void KRMesh::render(KRNode::RenderInfo& ri, const std::string& object_name, cons
{ {
//fprintf(stderr, "Rendering model: %s\n", m_name.c_str()); //fprintf(stderr, "Rendering model: %s\n", m_name.c_str());
if (ri.renderPass->getType() != RenderPassType::RENDER_PASS_ADDITIVE_PARTICLES && ri.renderPass->getType() != RenderPassType::RENDER_PASS_PARTICLE_OCCLUSION && ri.renderPass->getType() != RenderPassType::RENDER_PASS_VOLUMETRIC_EFFECTS_ADDITIVE) { if (ri.renderPass->getType() != RenderPassType::RENDER_PASS_ADDITIVE_PARTICLES && ri.renderPass->getType() != RenderPassType::RENDER_PASS_PARTICLE_OCCLUSION && ri.renderPass->getType() != RenderPassType::RENDER_PASS_VOLUMETRIC_EFFECTS_ADDITIVE) {
if (getStreamLevel() == kraken_stream_level::STREAM_LEVEL_OUT) { if (getStreamLevel() > kraken_stream_level::STREAM_LEVEL_OUT) {
} else {
getSubmeshes(); getSubmeshes();
getMaterials(); getMaterials();