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;
return true;
}
case ShaderValue::light_direction_view_space:
{
*output = m_directionalLight->getViewSpaceLightDirection(m_viewport->getViewMatrix());
return true;
}
default:
break;
}

View File

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

View File

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

View File

@@ -61,12 +61,12 @@ std::string KRDirectionalLight::getElementName()
return "directional_light";
}
Vector3 KRDirectionalLight::getWorldLightDirection()
Vector3 KRDirectionalLight::getWorldLightDirection() const
{
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.
}
@@ -125,6 +125,19 @@ int KRDirectionalLight::configureShadowBufferViewports(const KRViewport& viewpor
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)
{
ri.reflectedObjects.push_back(this);
@@ -137,14 +150,6 @@ void KRDirectionalLight::render(RenderInfo& ri)
std::vector<KRDirectionalLight*> this_light;
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;
PipelineInfo info{};
@@ -159,13 +164,10 @@ void KRDirectionalLight::render(RenderInfo& ri)
info.modelFormat = ModelFormat::KRENGINE_MODEL_FORMAT_STRIP;
KRPipeline* pShader = getContext().getPipelineManager()->getPipeline(*ri.surface, info);
if (pShader) {
pShader->setPushConstant(ShaderValue::light_direction_view_space, light_direction_view_space);
if (pShader->bind(ri, getModelMatrix())) { // TODO: Need to pass in the light index to the shader
// Render a full screen quad
m_pContext->getMeshManager()->bindVBO(ri.commandBuffer, &vertices, 1.0f);
vkCmdDraw(ri.commandBuffer, 4, 1, 0, 0);
}
if (pShader && pShader->bind(ri, getModelMatrix())) { // TODO: Need to pass in the light index to the shader
// Render a full screen quad
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 std::string getElementName() override;
hydra::Vector3 getLocalLightDirection();
hydra::Vector3 getWorldLightDirection();
hydra::Vector3 getLocalLightDirection() const;
hydra::Vector3 getWorldLightDirection() const;
hydra::Vector3 getViewSpaceLightDirection(const hydra::Matrix4 & viewMatrix) const;
virtual void render(RenderInfo& ri) override;
virtual hydra::AABB getBounds() override;

View File

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

View File

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