Added KRCamera argument to getShaderValue calls, enabling viewport specific 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
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
Eliminated more direct setPushConstant calls
This commit is contained in:
@@ -37,7 +37,7 @@
|
|||||||
|
|
||||||
using namespace hydra;
|
using namespace hydra;
|
||||||
|
|
||||||
KRModelView::KRModelView(KRViewport* viewport, const hydra::Matrix4& matModel, KRDirectionalLight* directionalLight)
|
KRModelView::KRModelView(const KRViewport* viewport, const hydra::Matrix4& matModel, KRDirectionalLight* directionalLight)
|
||||||
: m_viewport(viewport)
|
: m_viewport(viewport)
|
||||||
, m_matModel(matModel)
|
, m_matModel(matModel)
|
||||||
, m_directionalLight(directionalLight)
|
, m_directionalLight(directionalLight)
|
||||||
@@ -53,7 +53,7 @@ KRModelView::~KRModelView()
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool KRModelView::getShaderValue(ShaderValue value, Vector3* output) const
|
bool KRModelView::getShaderValue(const KRCamera* camera, ShaderValue value, Vector3* output) const
|
||||||
{
|
{
|
||||||
if (m_directionalLight) {
|
if (m_directionalLight) {
|
||||||
switch (value) {
|
switch (value) {
|
||||||
@@ -95,7 +95,7 @@ bool KRModelView::getShaderValue(ShaderValue value, Vector3* output) const
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
bool KRModelView::getShaderValue(ShaderValue value, Matrix4* output) const
|
bool KRModelView::getShaderValue(const KRCamera* camera, ShaderValue value, Matrix4* output) const
|
||||||
{
|
{
|
||||||
if (m_directionalLight) {
|
if (m_directionalLight) {
|
||||||
switch (value) {
|
switch (value) {
|
||||||
|
|||||||
@@ -44,14 +44,14 @@ class KRModelView
|
|||||||
: public KRReflectedObject
|
: public KRReflectedObject
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
KRModelView(KRViewport* viewport, const hydra::Matrix4& matModel, KRDirectionalLight* directionalLight);
|
KRModelView(const KRViewport* viewport, const hydra::Matrix4& matModel, KRDirectionalLight* directionalLight);
|
||||||
~KRModelView();
|
~KRModelView();
|
||||||
|
|
||||||
bool getShaderValue(ShaderValue value, hydra::Vector3* output) const final;
|
bool getShaderValue(const KRCamera* camera, ShaderValue value, hydra::Vector3* output) const final;
|
||||||
bool getShaderValue(ShaderValue value, hydra::Matrix4* output) const final;
|
bool getShaderValue(const KRCamera* camera, ShaderValue value, hydra::Matrix4* output) const final;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
KRViewport* m_viewport;
|
const KRViewport* m_viewport;
|
||||||
hydra::Matrix4 m_matModel;
|
hydra::Matrix4 m_matModel;
|
||||||
KRDirectionalLight* m_directionalLight;
|
KRDirectionalLight* m_directionalLight;
|
||||||
|
|
||||||
|
|||||||
@@ -569,7 +569,7 @@ bool KRPipeline::setImageBindings(const std::vector<const KRReflectedObject*> ob
|
|||||||
return success;
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool KRPipeline::setPushConstants(const std::vector<const KRReflectedObject*> objects)
|
bool KRPipeline::setPushConstants(const KRCamera* camera, const std::vector<const KRReflectedObject*> objects)
|
||||||
{
|
{
|
||||||
bool success = true;
|
bool success = true;
|
||||||
for (StageInfo& stageInfo : m_stages) {
|
for (StageInfo& stageInfo : m_stages) {
|
||||||
@@ -580,7 +580,7 @@ bool KRPipeline::setPushConstants(const std::vector<const KRReflectedObject*> ob
|
|||||||
void* constant = (pushConstants.buffer + pushConstants.offset[static_cast<size_t>(i)]);
|
void* constant = (pushConstants.buffer + pushConstants.offset[static_cast<size_t>(i)]);
|
||||||
bool found = false;
|
bool found = false;
|
||||||
for (const KRReflectedObject* object : objects) {
|
for (const KRReflectedObject* object : objects) {
|
||||||
if (object->getShaderValue(static_cast<ShaderValue>(i), pushConstants.type[static_cast<size_t>(i)], constant)) {
|
if (object->getShaderValue(camera, static_cast<ShaderValue>(i), pushConstants.type[static_cast<size_t>(i)], constant)) {
|
||||||
found = true;
|
found = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -678,7 +678,7 @@ void KRPipeline::updateDescriptorBinding()
|
|||||||
|
|
||||||
bool KRPipeline::updatePushConstants(KRNode::RenderInfo& ri, const Matrix4& matModel)
|
bool KRPipeline::updatePushConstants(KRNode::RenderInfo& ri, const Matrix4& matModel)
|
||||||
{
|
{
|
||||||
if (!setPushConstants(ri.reflectedObjects)) {
|
if (!setPushConstants(ri.camera, ri.reflectedObjects)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
setPushConstant(ShaderValue::absolute_time, getContext().getAbsoluteTime());
|
setPushConstant(ShaderValue::absolute_time, getContext().getAbsoluteTime());
|
||||||
|
|||||||
@@ -222,7 +222,7 @@ public:
|
|||||||
static const size_t kPushConstantCount = static_cast<size_t>(ShaderValue::NUM_SHADER_VALUES);
|
static const size_t kPushConstantCount = static_cast<size_t>(ShaderValue::NUM_SHADER_VALUES);
|
||||||
|
|
||||||
bool setImageBindings(const std::vector<const KRReflectedObject*> objects);
|
bool setImageBindings(const std::vector<const KRReflectedObject*> objects);
|
||||||
bool setPushConstants(const std::vector<const KRReflectedObject*> objects);
|
bool setPushConstants(const KRCamera* camera, const std::vector<const KRReflectedObject*> objects);
|
||||||
bool hasPushConstant(ShaderValue location) const;
|
bool hasPushConstant(ShaderValue location) const;
|
||||||
void setPushConstant(ShaderValue location, float value);
|
void setPushConstant(ShaderValue location, float value);
|
||||||
void setPushConstant(ShaderValue location, int value);
|
void setPushConstant(ShaderValue location, int value);
|
||||||
|
|||||||
@@ -183,11 +183,12 @@ void KRRenderSettings::setViewportSize(const Vector2& size)
|
|||||||
m_viewportSize = size;
|
m_viewportSize = size;
|
||||||
}
|
}
|
||||||
|
|
||||||
float KRRenderSettings::getPerspectiveNearZ()
|
float KRRenderSettings::getPerspectiveNearZ() const
|
||||||
{
|
{
|
||||||
return perspective_nearz;
|
return perspective_nearz;
|
||||||
}
|
}
|
||||||
float KRRenderSettings::getPerspectiveFarZ()
|
|
||||||
|
float KRRenderSettings::getPerspectiveFarZ() const
|
||||||
{
|
{
|
||||||
return perspective_farz;
|
return perspective_farz;
|
||||||
}
|
}
|
||||||
@@ -225,7 +226,7 @@ void KRRenderSettings::setEnableRealtimeOcclusion(bool enable)
|
|||||||
m_enable_realtime_occlusion = enable;
|
m_enable_realtime_occlusion = enable;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool KRRenderSettings::getShaderValue(ShaderValue value, float* output) const
|
bool KRRenderSettings::getShaderValue(const KRCamera* camera, ShaderValue value, float* output) const
|
||||||
{
|
{
|
||||||
switch (value) {
|
switch (value) {
|
||||||
case ShaderValue::fog_near:
|
case ShaderValue::fog_near:
|
||||||
@@ -251,7 +252,7 @@ bool KRRenderSettings::getShaderValue(ShaderValue value, float* output) const
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool KRRenderSettings::getShaderValue(ShaderValue value, Vector3* output) const
|
bool KRRenderSettings::getShaderValue(const KRCamera* camera, ShaderValue value, Vector3* output) const
|
||||||
{
|
{
|
||||||
switch (value) {
|
switch (value) {
|
||||||
case ShaderValue::fog_color:
|
case ShaderValue::fog_color:
|
||||||
|
|||||||
@@ -48,8 +48,8 @@ public:
|
|||||||
const hydra::Vector2& getViewportSize();
|
const hydra::Vector2& getViewportSize();
|
||||||
void setViewportSize(const hydra::Vector2& size);
|
void setViewportSize(const hydra::Vector2& size);
|
||||||
|
|
||||||
float getPerspectiveNearZ();
|
float getPerspectiveNearZ() const;
|
||||||
float getPerspectiveFarZ();
|
float getPerspectiveFarZ() const;
|
||||||
void setPerspectiveNear(float v);
|
void setPerspectiveNear(float v);
|
||||||
void setPerpsectiveFarZ(float v);
|
void setPerpsectiveFarZ(float v);
|
||||||
|
|
||||||
@@ -137,6 +137,6 @@ private:
|
|||||||
float m_lodBias;
|
float m_lodBias;
|
||||||
bool m_enable_realtime_occlusion;
|
bool m_enable_realtime_occlusion;
|
||||||
|
|
||||||
bool getShaderValue(ShaderValue value, float* output) const final;
|
bool getShaderValue(const KRCamera* camera, ShaderValue value, float* output) const final;
|
||||||
bool getShaderValue(ShaderValue value, hydra::Vector3* output) const final;
|
bool getShaderValue(const KRCamera* camera, ShaderValue value, hydra::Vector3* output) const final;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -219,92 +219,92 @@ const char* getShaderValueName(int index)
|
|||||||
return SHADER_VALUE_NAMES[index];
|
return SHADER_VALUE_NAMES[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
bool KRReflectedObject::getShaderValue(ShaderValue value, ShaderValueType type, void* output) const
|
bool KRReflectedObject::getShaderValue(const KRCamera* camera, ShaderValue value, ShaderValueType type, void* output) const
|
||||||
{
|
{
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case ShaderValueType::type_bool:
|
case ShaderValueType::type_bool:
|
||||||
return getShaderValue(value, static_cast<bool*>(output));
|
return getShaderValue(camera, value, static_cast<bool*>(output));
|
||||||
case ShaderValueType::type_int32:
|
case ShaderValueType::type_int32:
|
||||||
return getShaderValue(value, static_cast<int32_t*>(output));
|
return getShaderValue(camera, value, static_cast<int32_t*>(output));
|
||||||
case ShaderValueType::type_int64:
|
case ShaderValueType::type_int64:
|
||||||
return getShaderValue(value, static_cast<int64_t*>(output));
|
return getShaderValue(camera, value, static_cast<int64_t*>(output));
|
||||||
case ShaderValueType::type_float32:
|
case ShaderValueType::type_float32:
|
||||||
return getShaderValue(value, static_cast<float*>(output));
|
return getShaderValue(camera, value, static_cast<float*>(output));
|
||||||
case ShaderValueType::type_float64:
|
case ShaderValueType::type_float64:
|
||||||
return getShaderValue(value, static_cast<double*>(output));
|
return getShaderValue(camera, value, static_cast<double*>(output));
|
||||||
case ShaderValueType::type_vector2:
|
case ShaderValueType::type_vector2:
|
||||||
return getShaderValue(value, static_cast<Vector2*>(output));
|
return getShaderValue(camera, value, static_cast<Vector2*>(output));
|
||||||
case ShaderValueType::type_vector3:
|
case ShaderValueType::type_vector3:
|
||||||
return getShaderValue(value, static_cast<Vector3*>(output));
|
return getShaderValue(camera, value, static_cast<Vector3*>(output));
|
||||||
case ShaderValueType::type_vector4:
|
case ShaderValueType::type_vector4:
|
||||||
return getShaderValue(value, static_cast<Vector4*>(output));
|
return getShaderValue(camera, value, static_cast<Vector4*>(output));
|
||||||
case ShaderValueType::type_matrix2:
|
case ShaderValueType::type_matrix2:
|
||||||
return getShaderValue(value, static_cast<Matrix2*>(output));
|
return getShaderValue(camera, value, static_cast<Matrix2*>(output));
|
||||||
case ShaderValueType::type_matrix2x3:
|
case ShaderValueType::type_matrix2x3:
|
||||||
return getShaderValue(value, static_cast<Matrix2x3*>(output));
|
return getShaderValue(camera, value, static_cast<Matrix2x3*>(output));
|
||||||
case ShaderValueType::type_matrix4:
|
case ShaderValueType::type_matrix4:
|
||||||
return getShaderValue(value, static_cast<Matrix4*>(output));
|
return getShaderValue(camera, value, static_cast<Matrix4*>(output));
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool KRReflectedObject::getShaderValue(ShaderValue value, bool* output) const
|
bool KRReflectedObject::getShaderValue(const KRCamera* camera, ShaderValue value, bool* output) const
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool KRReflectedObject::getShaderValue(ShaderValue value, int32_t* output) const
|
bool KRReflectedObject::getShaderValue(const KRCamera* camera, ShaderValue value, int32_t* output) const
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool KRReflectedObject::getShaderValue(ShaderValue value, int64_t* output) const
|
bool KRReflectedObject::getShaderValue(const KRCamera* camera, ShaderValue value, int64_t* output) const
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool KRReflectedObject::getShaderValue(ShaderValue value, float* output) const
|
bool KRReflectedObject::getShaderValue(const KRCamera* camera, ShaderValue value, float* output) const
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool KRReflectedObject::getShaderValue(ShaderValue value, double* output) const
|
bool KRReflectedObject::getShaderValue(const KRCamera* camera, ShaderValue value, double* output) const
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool KRReflectedObject::getShaderValue(ShaderValue value, hydra::Vector2* output) const
|
bool KRReflectedObject::getShaderValue(const KRCamera* camera, ShaderValue value, hydra::Vector2* output) const
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool KRReflectedObject::getShaderValue(ShaderValue value, hydra::Vector3* output) const
|
bool KRReflectedObject::getShaderValue(const KRCamera* camera, ShaderValue value, hydra::Vector3* output) const
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool KRReflectedObject::getShaderValue(ShaderValue value, hydra::Vector4* output) const
|
bool KRReflectedObject::getShaderValue(const KRCamera* camera, ShaderValue value, hydra::Vector4* output) const
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool KRReflectedObject::getShaderValue(ShaderValue value, hydra::Matrix2* output) const
|
bool KRReflectedObject::getShaderValue(const KRCamera* camera, ShaderValue value, hydra::Matrix2* output) const
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool KRReflectedObject::getShaderValue(ShaderValue value, hydra::Matrix2x3* output) const
|
bool KRReflectedObject::getShaderValue(const KRCamera* camera, ShaderValue value, hydra::Matrix2x3* output) const
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool KRReflectedObject::getShaderValue(ShaderValue value, hydra::Matrix4* output) const
|
bool KRReflectedObject::getShaderValue(const KRCamera* camera, ShaderValue value, hydra::Matrix4* output) const
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool KRReflectedObject::getShaderValue(ShaderValue value, KRResourceBinding* output) const
|
bool KRReflectedObject::getShaderValue(const KRCamera* camera, ShaderValue value, KRResourceBinding* output) const
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,6 +39,7 @@
|
|||||||
class KRResourceBinding;
|
class KRResourceBinding;
|
||||||
class KRSampler;
|
class KRSampler;
|
||||||
class KRTextureBinding;
|
class KRTextureBinding;
|
||||||
|
class KRCamera;
|
||||||
|
|
||||||
enum class ShaderValueType : uint8_t
|
enum class ShaderValueType : uint8_t
|
||||||
{
|
{
|
||||||
@@ -223,19 +224,19 @@ const char* getShaderValueName(int index);
|
|||||||
class KRReflectedObject
|
class KRReflectedObject
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
bool getShaderValue(ShaderValue value, ShaderValueType type, void* output) const;
|
bool getShaderValue(const KRCamera* camera, ShaderValue value, ShaderValueType type, void* output) const;
|
||||||
virtual bool getImageBinding(const std::string& name, const KRTextureBinding** binding, KRSampler** sample) const;
|
virtual bool getImageBinding(const std::string& name, const KRTextureBinding** binding, KRSampler** sample) const;
|
||||||
protected:
|
protected:
|
||||||
virtual bool getShaderValue(ShaderValue value, bool* output) const;
|
virtual bool getShaderValue(const KRCamera* camera, ShaderValue value, bool* output) const;
|
||||||
virtual bool getShaderValue(ShaderValue value, int32_t* output) const;
|
virtual bool getShaderValue(const KRCamera* camera, ShaderValue value, int32_t* output) const;
|
||||||
virtual bool getShaderValue(ShaderValue value, int64_t* output) const;
|
virtual bool getShaderValue(const KRCamera* camera, ShaderValue value, int64_t* output) const;
|
||||||
virtual bool getShaderValue(ShaderValue value, float* output) const;
|
virtual bool getShaderValue(const KRCamera* camera, ShaderValue value, float* output) const;
|
||||||
virtual bool getShaderValue(ShaderValue value, double* output) const;
|
virtual bool getShaderValue(const KRCamera* camera, ShaderValue value, double* output) const;
|
||||||
virtual bool getShaderValue(ShaderValue value, hydra::Vector2* output) const;
|
virtual bool getShaderValue(const KRCamera* camera, ShaderValue value, hydra::Vector2* output) const;
|
||||||
virtual bool getShaderValue(ShaderValue value, hydra::Vector3* output) const;
|
virtual bool getShaderValue(const KRCamera* camera, ShaderValue value, hydra::Vector3* output) const;
|
||||||
virtual bool getShaderValue(ShaderValue value, hydra::Vector4* output) const;
|
virtual bool getShaderValue(const KRCamera* camera, ShaderValue value, hydra::Vector4* output) const;
|
||||||
virtual bool getShaderValue(ShaderValue value, hydra::Matrix2* output) const;
|
virtual bool getShaderValue(const KRCamera* camera, ShaderValue value, hydra::Matrix2* output) const;
|
||||||
virtual bool getShaderValue(ShaderValue value, hydra::Matrix2x3* output) const;
|
virtual bool getShaderValue(const KRCamera* camera, ShaderValue value, hydra::Matrix2x3* output) const;
|
||||||
virtual bool getShaderValue(ShaderValue value, hydra::Matrix4* output) const;
|
virtual bool getShaderValue(const KRCamera* camera, ShaderValue value, hydra::Matrix4* output) const;
|
||||||
virtual bool getShaderValue(ShaderValue value, KRResourceBinding* output) const;
|
virtual bool getShaderValue(const KRCamera* camera, ShaderValue value, KRResourceBinding* output) const;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ KRViewport::KRViewport(const Vector2& size, const Matrix4& matView, const Matrix
|
|||||||
calculateDerivedValues();
|
calculateDerivedValues();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool KRViewport::getShaderValue(ShaderValue value, Matrix4* output) const
|
bool KRViewport::getShaderValue(const KRCamera* camera, ShaderValue value, Matrix4* output) const
|
||||||
{
|
{
|
||||||
switch (value) {
|
switch (value) {
|
||||||
case ShaderValue::projection_matrix:
|
case ShaderValue::projection_matrix:
|
||||||
@@ -69,7 +69,7 @@ bool KRViewport::getShaderValue(ShaderValue value, Matrix4* output) const
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool KRViewport::getShaderValue(ShaderValue value, Vector4* output) const
|
bool KRViewport::getShaderValue(const KRCamera* camera, ShaderValue value, Vector4* output) const
|
||||||
{
|
{
|
||||||
switch (value) {
|
switch (value) {
|
||||||
case ShaderValue::viewport:
|
case ShaderValue::viewport:
|
||||||
|
|||||||
@@ -47,8 +47,8 @@ public:
|
|||||||
KRViewport(const hydra::Vector2& size, const hydra::Matrix4& matView, const hydra::Matrix4& matProjection);
|
KRViewport(const hydra::Vector2& size, const hydra::Matrix4& matView, const hydra::Matrix4& matProjection);
|
||||||
~KRViewport();
|
~KRViewport();
|
||||||
|
|
||||||
bool getShaderValue(ShaderValue value, hydra::Vector4* output) const final;
|
bool getShaderValue(const KRCamera* camera, ShaderValue value, hydra::Vector4* output) const final;
|
||||||
bool getShaderValue(ShaderValue value, hydra::Matrix4* output) const final;
|
bool getShaderValue(const KRCamera* camera, ShaderValue value, hydra::Matrix4* output) const final;
|
||||||
|
|
||||||
const hydra::Vector2& getSize() const;
|
const hydra::Vector2& getSize() const;
|
||||||
const hydra::Matrix4& getViewMatrix() const;
|
const hydra::Matrix4& getViewMatrix() const;
|
||||||
|
|||||||
@@ -823,11 +823,16 @@ std::string KRCamera::getDebugText()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
KRViewport* KRCamera::getViewport()
|
const KRViewport* KRCamera::getViewport() const
|
||||||
{
|
{
|
||||||
return &m_viewport;
|
return &m_viewport;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const KRRenderSettings* KRCamera::getSettings() const
|
||||||
|
{
|
||||||
|
return &settings;
|
||||||
|
}
|
||||||
|
|
||||||
void KRCamera::setFadeColor(const Vector4& fade_color)
|
void KRCamera::setFadeColor(const Vector4& fade_color)
|
||||||
{
|
{
|
||||||
m_fade_color = fade_color;
|
m_fade_color = fade_color;
|
||||||
@@ -838,14 +843,14 @@ Vector4 KRCamera::getFadeColor()
|
|||||||
return m_fade_color;
|
return m_fade_color;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool KRCamera::getShaderValue(ShaderValue value, hydra::Vector4* output) const
|
bool KRCamera::getShaderValue(const KRCamera* camera, ShaderValue value, hydra::Vector4* output) const
|
||||||
{
|
{
|
||||||
switch (value) {
|
switch (value) {
|
||||||
case ShaderValue::fade_color:
|
case ShaderValue::fade_color:
|
||||||
*output = m_fade_color;
|
*output = m_fade_color;
|
||||||
return true;
|
return true;
|
||||||
default:
|
default:
|
||||||
return KRNode::getShaderValue(value, output);
|
return KRNode::getShaderValue(camera, value, output);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -66,9 +66,9 @@ public:
|
|||||||
bool alwaysStreamResources() override;
|
bool alwaysStreamResources() override;
|
||||||
|
|
||||||
KRRenderSettings settings;
|
KRRenderSettings settings;
|
||||||
|
const KRRenderSettings* getSettings() const;
|
||||||
|
|
||||||
KRViewport* getViewport();
|
const KRViewport* getViewport() const;
|
||||||
|
|
||||||
|
|
||||||
virtual std::string getElementName() override;
|
virtual std::string getElementName() override;
|
||||||
virtual tinyxml2::XMLElement* saveXML(tinyxml2::XMLNode* parent) override;
|
virtual tinyxml2::XMLElement* saveXML(tinyxml2::XMLNode* parent) override;
|
||||||
@@ -85,7 +85,7 @@ public:
|
|||||||
const std::string getSkyBox() const;
|
const std::string getSkyBox() const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
bool getShaderValue(ShaderValue value, hydra::Vector4* output) const override;
|
bool getShaderValue(const KRCamera* camera, ShaderValue value, hydra::Vector4* output) const override;
|
||||||
bool getImageBinding(const std::string& name, const KRTextureBinding** binding, KRSampler** sample) const override;
|
bool getImageBinding(const std::string& name, const KRTextureBinding** binding, KRSampler** sample) const override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|||||||
@@ -171,6 +171,31 @@ void KRLight::getResourceBindings(std::list<KRResourceBinding*>& bindings)
|
|||||||
bindings.push_back(&m_flareTexture.val);
|
bindings.push_back(&m_flareTexture.val);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Matrix4 KRLight::getParticleModelMatrix(const KRViewport& viewport) const
|
||||||
|
{
|
||||||
|
Matrix4 particleModelMatrix;
|
||||||
|
particleModelMatrix.scale(KRLIGHT_PARTICLE_RANGE); // Scale the box symetrically to ensure that we don't have an uneven distribution of particles for different angles of the view frustrum
|
||||||
|
particleModelMatrix.translate(viewport.getCameraPosition());
|
||||||
|
|
||||||
|
return particleModelMatrix;
|
||||||
|
}
|
||||||
|
|
||||||
|
int KRLight::getParticleCount() const
|
||||||
|
{
|
||||||
|
int particle_count = (int)(m_dust_particle_density * pow(KRLIGHT_PARTICLE_RANGE, 3));
|
||||||
|
if (particle_count > KRMeshManager::KRENGINE_MAX_RANDOM_PARTICLES) {
|
||||||
|
particle_count = KRMeshManager::KRENGINE_MAX_RANDOM_PARTICLES;
|
||||||
|
}
|
||||||
|
|
||||||
|
return particle_count;
|
||||||
|
}
|
||||||
|
|
||||||
|
int KRLight::getSliceCount(const KRCamera* camera) const
|
||||||
|
{
|
||||||
|
int slice_count = (int)(camera->getSettings()->volumetric_environment_quality * 495.0) + 5;
|
||||||
|
return slice_count;
|
||||||
|
}
|
||||||
|
|
||||||
void KRLight::render(RenderInfo& ri)
|
void KRLight::render(RenderInfo& ri)
|
||||||
{
|
{
|
||||||
KRNode::render(ri);
|
KRNode::render(ri);
|
||||||
@@ -187,17 +212,6 @@ void KRLight::render(RenderInfo& ri)
|
|||||||
|
|
||||||
if (ri.viewport->visible(getBounds()) || true) { // FINDME, HACK need to remove "|| true"?
|
if (ri.viewport->visible(getBounds()) || true) { // FINDME, HACK need to remove "|| true"?
|
||||||
|
|
||||||
float particle_range = 600.0f;
|
|
||||||
|
|
||||||
int particle_count = (int)(m_dust_particle_density * pow(particle_range, 3));
|
|
||||||
if (particle_count > KRMeshManager::KRENGINE_MAX_RANDOM_PARTICLES) {
|
|
||||||
particle_count = KRMeshManager::KRENGINE_MAX_RANDOM_PARTICLES;
|
|
||||||
}
|
|
||||||
|
|
||||||
Matrix4 particleModelMatrix;
|
|
||||||
particleModelMatrix.scale(particle_range); // Scale the box symetrically to ensure that we don't have an uneven distribution of particles for different angles of the view frustrum
|
|
||||||
particleModelMatrix.translate(ri.viewport->getCameraPosition());
|
|
||||||
|
|
||||||
std::vector<KRDirectionalLight*> this_directional_light;
|
std::vector<KRDirectionalLight*> this_directional_light;
|
||||||
std::vector<KRSpotLight*> this_spot_light;
|
std::vector<KRSpotLight*> this_spot_light;
|
||||||
std::vector<KRPointLight*> this_point_light;
|
std::vector<KRPointLight*> this_point_light;
|
||||||
@@ -227,15 +241,9 @@ void KRLight::render(RenderInfo& ri)
|
|||||||
info.vertexAttributes = (1 << KRMesh::KRENGINE_ATTRIB_VERTEX) | (1 << KRMesh::KRENGINE_ATTRIB_TEXUVA);
|
info.vertexAttributes = (1 << KRMesh::KRENGINE_ATTRIB_VERTEX) | (1 << KRMesh::KRENGINE_ATTRIB_TEXUVA);
|
||||||
info.modelFormat = ModelFormat::KRENGINE_MODEL_FORMAT_TRIANGLES;
|
info.modelFormat = ModelFormat::KRENGINE_MODEL_FORMAT_TRIANGLES;
|
||||||
KRPipeline* pParticleShader = m_pContext->getPipelineManager()->getPipeline(*ri.surface, info);
|
KRPipeline* pParticleShader = m_pContext->getPipelineManager()->getPipeline(*ri.surface, info);
|
||||||
if (pParticleShader) {
|
if (pParticleShader && pParticleShader->bind(ri, getParticleModelMatrix(*ri.viewport))) { // TODO: Pass light index to shader
|
||||||
pParticleShader->setPushConstant(ShaderValue::dust_particle_color, m_color.val * ri.camera->settings.dust_particle_intensity * m_dust_particle_intensity * m_intensity);
|
|
||||||
pParticleShader->setPushConstant(ShaderValue::particle_origin, Matrix4::DotWDiv(Matrix4::Invert(particleModelMatrix), Vector3::Zero()));
|
|
||||||
if (pParticleShader->bind(ri, particleModelMatrix)) { // TODO: Pass light index to shader
|
|
||||||
|
|
||||||
m_pContext->getMeshManager()->bindVBO(ri.commandBuffer, &m_pContext->getMeshManager()->KRENGINE_VBO_DATA_RANDOM_PARTICLES, 1.0f);
|
m_pContext->getMeshManager()->bindVBO(ri.commandBuffer, &m_pContext->getMeshManager()->KRENGINE_VBO_DATA_RANDOM_PARTICLES, 1.0f);
|
||||||
|
vkCmdDraw(ri.commandBuffer, getParticleCount() *3, 1, 0, 0);
|
||||||
vkCmdDraw(ri.commandBuffer, particle_count * 3, 1, 0, 0);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -261,12 +269,6 @@ void KRLight::render(RenderInfo& ri)
|
|||||||
this_point_light.push_back(point_light);
|
this_point_light.push_back(point_light);
|
||||||
}
|
}
|
||||||
|
|
||||||
int slice_count = (int)(ri.camera->settings.volumetric_environment_quality * 495.0) + 5;
|
|
||||||
|
|
||||||
float slice_near = -ri.camera->settings.getPerspectiveNearZ();
|
|
||||||
float slice_far = -ri.camera->settings.volumetric_environment_max_distance;
|
|
||||||
float slice_spacing = (slice_far - slice_near) / slice_count;
|
|
||||||
|
|
||||||
PipelineInfo info{};
|
PipelineInfo info{};
|
||||||
info.shader_name = &shader_name;
|
info.shader_name = &shader_name;
|
||||||
info.pCamera = ri.camera;
|
info.pCamera = ri.camera;
|
||||||
@@ -281,11 +283,9 @@ void KRLight::render(RenderInfo& ri)
|
|||||||
|
|
||||||
KRPipeline* pFogShader = m_pContext->getPipelineManager()->getPipeline(*ri.surface, info);
|
KRPipeline* pFogShader = m_pContext->getPipelineManager()->getPipeline(*ri.surface, info);
|
||||||
if (pFogShader) {
|
if (pFogShader) {
|
||||||
pFogShader->setPushConstant(ShaderValue::slice_depth_scale, Vector2::Create(slice_near, slice_spacing));
|
|
||||||
pFogShader->setPushConstant(ShaderValue::light_color, (m_color.val * ri.camera->settings.volumetric_environment_intensity * m_intensity * -slice_spacing / 10.0f));
|
|
||||||
if (pFogShader->bind(ri, Matrix4())) { // TODO: Pass indexes of lights to shader
|
if (pFogShader->bind(ri, Matrix4())) { // TODO: Pass indexes of lights to shader
|
||||||
m_pContext->getMeshManager()->bindVBO(ri.commandBuffer, &m_pContext->getMeshManager()->KRENGINE_VBO_DATA_VOLUMETRIC_LIGHTING, 1.0f);
|
m_pContext->getMeshManager()->bindVBO(ri.commandBuffer, &m_pContext->getMeshManager()->KRENGINE_VBO_DATA_VOLUMETRIC_LIGHTING, 1.0f);
|
||||||
vkCmdDraw(ri.commandBuffer, slice_count * 6, 1, 0, 0);
|
vkCmdDraw(ri.commandBuffer, getSliceCount(ri.camera) * 6, 1, 0, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -447,7 +447,7 @@ int KRLight::configureShadowBufferViewports(const KRViewport& viewport)
|
|||||||
|
|
||||||
void KRLight::renderShadowBuffers(RenderInfo& ri)
|
void KRLight::renderShadowBuffers(RenderInfo& ri)
|
||||||
{
|
{
|
||||||
KRViewport* prevViewport = ri.viewport;
|
const KRViewport* prevViewport = ri.viewport;
|
||||||
for (int iShadow = 0; iShadow < m_cShadowBuffers; iShadow++) {
|
for (int iShadow = 0; iShadow < m_cShadowBuffers; iShadow++) {
|
||||||
if (!shadowValid[iShadow]) {
|
if (!shadowValid[iShadow]) {
|
||||||
shadowValid[iShadow] = true;
|
shadowValid[iShadow] = true;
|
||||||
@@ -515,7 +515,7 @@ KRViewport* KRLight::getShadowViewports()
|
|||||||
return m_shadowViewports;
|
return m_shadowViewports;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool KRLight::getShaderValue(ShaderValue value, float* output) const
|
bool KRLight::getShaderValue(const KRCamera* camera, ShaderValue value, float* output) const
|
||||||
{
|
{
|
||||||
switch (value) {
|
switch (value) {
|
||||||
case ShaderValue::light_intensity:
|
case ShaderValue::light_intensity:
|
||||||
@@ -534,11 +534,34 @@ bool KRLight::getShaderValue(ShaderValue value, float* output) const
|
|||||||
*output = m_dust_particle_size;
|
*output = m_dust_particle_size;
|
||||||
return true;
|
return true;
|
||||||
default:
|
default:
|
||||||
return KRNode::getShaderValue(value, output);
|
return KRNode::getShaderValue(camera, value, output);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool KRLight::getShaderValue(ShaderValue value, hydra::Vector3* output) const
|
bool KRLight::getShaderValue(const KRCamera* camera, ShaderValue value, hydra::Vector2* output) const
|
||||||
|
{
|
||||||
|
if (camera) {
|
||||||
|
switch (value) {
|
||||||
|
case ShaderValue::slice_depth_scale:
|
||||||
|
{
|
||||||
|
int slice_count = getSliceCount(camera);
|
||||||
|
|
||||||
|
float slice_near = -camera->getSettings()->getPerspectiveNearZ();
|
||||||
|
float slice_far = -camera->getSettings()->volumetric_environment_max_distance;
|
||||||
|
float slice_spacing = (slice_far - slice_near) / slice_count;
|
||||||
|
*output = Vector2::Create(slice_near, slice_spacing);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return KRNode::getShaderValue(camera, value, output);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool KRLight::getShaderValue(const KRCamera* camera, ShaderValue value, hydra::Vector3* output) const
|
||||||
{
|
{
|
||||||
switch (value) {
|
switch (value) {
|
||||||
case ShaderValue::light_position:
|
case ShaderValue::light_position:
|
||||||
@@ -547,12 +570,17 @@ bool KRLight::getShaderValue(ShaderValue value, hydra::Vector3* output) const
|
|||||||
case ShaderValue::light_color:
|
case ShaderValue::light_color:
|
||||||
*output = m_color;
|
*output = m_color;
|
||||||
return true;
|
return true;
|
||||||
|
case ShaderValue::particle_origin:
|
||||||
|
*output = Matrix4::DotWDiv(Matrix4::Invert(getParticleModelMatrix(*camera->getViewport())), Vector3::Zero());
|
||||||
|
return true;
|
||||||
|
case ShaderValue::dust_particle_color:
|
||||||
|
*output = m_color.val * m_dust_particle_intensity * m_intensity * camera->settings.dust_particle_intensity;
|
||||||
|
return true;
|
||||||
default:
|
default:
|
||||||
return KRNode::getShaderValue(value, output);
|
return KRNode::getShaderValue(camera, value, output);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool KRLight::getImageBinding(const std::string& name, const KRTextureBinding** binding, KRSampler** sample) const
|
bool KRLight::getImageBinding(const std::string& name, const KRTextureBinding** binding, KRSampler** sample) const
|
||||||
{
|
{
|
||||||
if (name == "flareTexture") {
|
if (name == "flareTexture") {
|
||||||
|
|||||||
@@ -36,6 +36,7 @@
|
|||||||
#include "resources/texture/KRTextureBinding.h"
|
#include "resources/texture/KRTextureBinding.h"
|
||||||
|
|
||||||
static const float KRLIGHT_MIN_INFLUENCE = 0.15f; // 0.05f
|
static const float KRLIGHT_MIN_INFLUENCE = 0.15f; // 0.05f
|
||||||
|
static const float KRLIGHT_PARTICLE_RANGE = 600.0f;
|
||||||
|
|
||||||
// KRENGINE_MAX_SHADOW_BUFFERS must be at least 6 to allow omni-directional lights to render cube maps
|
// KRENGINE_MAX_SHADOW_BUFFERS must be at least 6 to allow omni-directional lights to render cube maps
|
||||||
|
|
||||||
@@ -76,8 +77,9 @@ public:
|
|||||||
protected:
|
protected:
|
||||||
KRLight(KRScene& scene, std::string name);
|
KRLight(KRScene& scene, std::string name);
|
||||||
|
|
||||||
bool getShaderValue(ShaderValue value, float* output) const override;
|
bool getShaderValue(const KRCamera* camera, ShaderValue value, float* output) const override;
|
||||||
bool getShaderValue(ShaderValue value, hydra::Vector3* output) const override;
|
bool getShaderValue(const KRCamera* camera, ShaderValue value, hydra::Vector2* output) const override;
|
||||||
|
bool getShaderValue(const KRCamera* camera, ShaderValue value, hydra::Vector3* output) const override;
|
||||||
bool getImageBinding(const std::string& name, const KRTextureBinding** binding, KRSampler** sample) const final;
|
bool getImageBinding(const std::string& name, const KRTextureBinding** binding, KRSampler** sample) const final;
|
||||||
|
|
||||||
// Properties
|
// Properties
|
||||||
@@ -107,4 +109,9 @@ protected:
|
|||||||
|
|
||||||
virtual int configureShadowBufferViewports(const KRViewport& viewport);
|
virtual int configureShadowBufferViewports(const KRViewport& viewport);
|
||||||
void renderShadowBuffers(RenderInfo& ri);
|
void renderShadowBuffers(RenderInfo& ri);
|
||||||
|
|
||||||
|
private:
|
||||||
|
hydra::Matrix4 getParticleModelMatrix(const KRViewport& viewport) const;
|
||||||
|
int getParticleCount() const;
|
||||||
|
int getSliceCount(const KRCamera* camera) const;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -354,25 +354,25 @@ AABB KRModel::getBounds()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool KRModel::getShaderValue(ShaderValue value, hydra::Vector3* output) const
|
bool KRModel::getShaderValue(const KRCamera* camera, ShaderValue value, hydra::Vector3* output) const
|
||||||
{
|
{
|
||||||
switch (value) {
|
switch (value) {
|
||||||
case ShaderValue::rim_color:
|
case ShaderValue::rim_color:
|
||||||
*output = m_rim_color;
|
*output = m_rim_color;
|
||||||
return true;
|
return true;
|
||||||
default:
|
default:
|
||||||
return KRNode::getShaderValue(value, output);
|
return KRNode::getShaderValue(camera, value, output);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool KRModel::getShaderValue(ShaderValue value, float* output) const
|
bool KRModel::getShaderValue(const KRCamera* camera, ShaderValue value, float* output) const
|
||||||
{
|
{
|
||||||
switch (value) {
|
switch (value) {
|
||||||
case ShaderValue::rim_power:
|
case ShaderValue::rim_power:
|
||||||
*output = m_rim_power;
|
*output = m_rim_power;
|
||||||
return true;
|
return true;
|
||||||
default:
|
default:
|
||||||
return KRNode::getShaderValue(value, output);
|
return KRNode::getShaderValue(camera, value, output);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -96,6 +96,6 @@ private:
|
|||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool getShaderValue(ShaderValue value, hydra::Vector3* output) const override;
|
bool getShaderValue(const KRCamera* camera, ShaderValue value, hydra::Vector3* output) const override;
|
||||||
bool getShaderValue(ShaderValue value, float* output) const override;
|
bool getShaderValue(const KRCamera* camera, ShaderValue value, float* output) const override;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -116,7 +116,7 @@ public:
|
|||||||
std::vector<KRPointLight*> point_lights;
|
std::vector<KRPointLight*> point_lights;
|
||||||
std::vector<KRDirectionalLight*> directional_lights;
|
std::vector<KRDirectionalLight*> directional_lights;
|
||||||
std::vector<KRSpotLight*> spot_lights;
|
std::vector<KRSpotLight*> spot_lights;
|
||||||
KRViewport* viewport;
|
const KRViewport* viewport;
|
||||||
KRRenderPass* renderPass;
|
KRRenderPass* renderPass;
|
||||||
KRPipeline* pipeline;
|
KRPipeline* pipeline;
|
||||||
|
|
||||||
|
|||||||
@@ -111,14 +111,14 @@ void KRParticleSystemNewtonian::render(RenderInfo& ri)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool KRParticleSystemNewtonian::getShaderValue(ShaderValue value, float* output) const
|
bool KRParticleSystemNewtonian::getShaderValue(const KRCamera* camera, ShaderValue value, float* output) const
|
||||||
{
|
{
|
||||||
switch (value) {
|
switch (value) {
|
||||||
case ShaderValue::dust_particle_size:
|
case ShaderValue::dust_particle_size:
|
||||||
*output = 1.0f;
|
*output = 1.0f;
|
||||||
return true;
|
return true;
|
||||||
default:
|
default:
|
||||||
return KRParticleSystem::getShaderValue(value, output);
|
return KRParticleSystem::getShaderValue(camera, value, output);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ public:
|
|||||||
virtual void physicsUpdate(float deltaTime) override;
|
virtual void physicsUpdate(float deltaTime) override;
|
||||||
virtual bool hasPhysics() override;
|
virtual bool hasPhysics() override;
|
||||||
protected:
|
protected:
|
||||||
bool getShaderValue(ShaderValue value, float* output) const override;
|
bool getShaderValue(const KRCamera* camera, ShaderValue value, float* output) const override;
|
||||||
private:
|
private:
|
||||||
float m_particlesAbsoluteTime;
|
float m_particlesAbsoluteTime;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -137,14 +137,14 @@ void KRPointLight::render(RenderInfo& ri)
|
|||||||
ri.reflectedObjects.pop_back();
|
ri.reflectedObjects.pop_back();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool KRPointLight::getShaderValue(ShaderValue value, float* output) const
|
bool KRPointLight::getShaderValue(const KRCamera* camera, ShaderValue value, float* output) const
|
||||||
{
|
{
|
||||||
return KRLight::getShaderValue(value, output);
|
return KRLight::getShaderValue(camera, value, output);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool KRPointLight::getShaderValue(ShaderValue value, hydra::Vector3* output) const
|
bool KRPointLight::getShaderValue(const KRCamera* camera, ShaderValue value, hydra::Vector3* output) const
|
||||||
{
|
{
|
||||||
return KRLight::getShaderValue(value, output);
|
return KRLight::getShaderValue(camera, value, output);
|
||||||
}
|
}
|
||||||
|
|
||||||
void KRPointLight::generateMesh()
|
void KRPointLight::generateMesh()
|
||||||
|
|||||||
@@ -46,8 +46,8 @@ public:
|
|||||||
virtual void render(RenderInfo& ri) override;
|
virtual void render(RenderInfo& ri) override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
bool getShaderValue(ShaderValue value, float* output) const override;
|
bool getShaderValue(const KRCamera* camera, ShaderValue value, float* output) const override;
|
||||||
bool getShaderValue(ShaderValue value, hydra::Vector3* output) const override;
|
bool getShaderValue(const KRCamera* camera, ShaderValue value, hydra::Vector3* output) const override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void generateMesh();
|
void generateMesh();
|
||||||
|
|||||||
@@ -145,11 +145,11 @@ void KRSprite::render(RenderInfo& ri)
|
|||||||
ri.reflectedObjects.pop_back();
|
ri.reflectedObjects.pop_back();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool KRSprite::getShaderValue(ShaderValue value, float* output) const
|
bool KRSprite::getShaderValue(const KRCamera* camera, ShaderValue value, float* output) const
|
||||||
{
|
{
|
||||||
switch (value) {
|
switch (value) {
|
||||||
default:
|
default:
|
||||||
return KRNode::getShaderValue(value, output);
|
return KRNode::getShaderValue(camera, value, output);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ public:
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
bool getShaderValue(ShaderValue value, float* output) const override;
|
bool getShaderValue(const KRCamera* camera, ShaderValue value, float* output) const override;
|
||||||
bool getImageBinding(const std::string& name, const KRTextureBinding** binding, KRSampler** sample) const final;
|
bool getImageBinding(const std::string& name, const KRTextureBinding** binding, KRSampler** sample) const final;
|
||||||
|
|
||||||
KRNODE_PROPERTY(KRTextureBinding, m_spriteTexture, KRTexture::TEXTURE_USAGE_SPRITE, "sprite_texture");
|
KRNODE_PROPERTY(KRTextureBinding, m_spriteTexture, KRTexture::TEXTURE_USAGE_SPRITE, "sprite_texture");
|
||||||
|
|||||||
@@ -834,7 +834,7 @@ bool KRMaterial::bind(KRNode::RenderInfo& ri, ModelFormat modelFormat, __uint32_
|
|||||||
return success;
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool KRMaterial::getShaderValue(ShaderValue value, float* output) const
|
bool KRMaterial::getShaderValue(const KRCamera* camera, ShaderValue value, float* output) const
|
||||||
{
|
{
|
||||||
switch (value) {
|
switch (value) {
|
||||||
case ShaderValue::material_baseColor_map_rotation:
|
case ShaderValue::material_baseColor_map_rotation:
|
||||||
@@ -933,7 +933,7 @@ bool KRMaterial::getShaderValue(ShaderValue value, float* output) const
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool KRMaterial::getShaderValue(ShaderValue value, hydra::Vector2* output) const
|
bool KRMaterial::getShaderValue(const KRCamera* camera, ShaderValue value, hydra::Vector2* output) const
|
||||||
{
|
{
|
||||||
switch (value) {
|
switch (value) {
|
||||||
case ShaderValue::material_baseColor_map_scale:
|
case ShaderValue::material_baseColor_map_scale:
|
||||||
@@ -1020,7 +1020,7 @@ bool KRMaterial::getShaderValue(ShaderValue value, hydra::Vector2* output) const
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool KRMaterial::getShaderValue(ShaderValue value, hydra::Vector3* output) const
|
bool KRMaterial::getShaderValue(const KRCamera* camera, ShaderValue value, hydra::Vector3* output) const
|
||||||
{
|
{
|
||||||
switch (value) {
|
switch (value) {
|
||||||
case ShaderValue::material_emissive_factor:
|
case ShaderValue::material_emissive_factor:
|
||||||
@@ -1038,7 +1038,7 @@ bool KRMaterial::getShaderValue(ShaderValue value, hydra::Vector3* output) const
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool KRMaterial::getShaderValue(ShaderValue value, hydra::Vector4* output) const
|
bool KRMaterial::getShaderValue(const KRCamera* camera, ShaderValue value, hydra::Vector4* output) const
|
||||||
{
|
{
|
||||||
switch (value) {
|
switch (value) {
|
||||||
case ShaderValue::material_baseColor_factor:
|
case ShaderValue::material_baseColor_factor:
|
||||||
@@ -1049,7 +1049,7 @@ bool KRMaterial::getShaderValue(ShaderValue value, hydra::Vector4* output) const
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool KRMaterial::getShaderValue(ShaderValue value, KRResourceBinding* output) const
|
bool KRMaterial::getShaderValue(const KRCamera* camera, ShaderValue value, KRResourceBinding* output) const
|
||||||
{
|
{
|
||||||
switch (value) {
|
switch (value) {
|
||||||
case ShaderValue::material_baseColor_map_texture:
|
case ShaderValue::material_baseColor_map_texture:
|
||||||
@@ -1096,7 +1096,7 @@ bool KRMaterial::getShaderValue(ShaderValue value, KRResourceBinding* output) co
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool KRMaterial::getShaderValue(ShaderValue value, int64_t* output) const
|
bool KRMaterial::getShaderValue(const KRCamera* camera, ShaderValue value, int64_t* output) const
|
||||||
{
|
{
|
||||||
switch (value) {
|
switch (value) {
|
||||||
case ShaderValue::material_shadingModel:
|
case ShaderValue::material_shadingModel:
|
||||||
@@ -1146,7 +1146,7 @@ bool KRMaterial::getShaderValue(ShaderValue value, int64_t* output) const
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool KRMaterial::getShaderValue(ShaderValue value, bool* output) const
|
bool KRMaterial::getShaderValue(const KRCamera* camera, ShaderValue value, bool* output) const
|
||||||
{
|
{
|
||||||
switch (value) {
|
switch (value) {
|
||||||
case ShaderValue::material_doubleSided:
|
case ShaderValue::material_doubleSided:
|
||||||
|
|||||||
@@ -183,12 +183,12 @@ public:
|
|||||||
float m_transmissionFactor = 0.f;
|
float m_transmissionFactor = 0.f;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool getShaderValue(ShaderValue value, float* output) const final;
|
bool getShaderValue(const KRCamera* camera, ShaderValue value, float* output) const final;
|
||||||
bool getShaderValue(ShaderValue value, hydra::Vector2* output) const final;
|
bool getShaderValue(const KRCamera* camera, ShaderValue value, hydra::Vector2* output) const final;
|
||||||
bool getShaderValue(ShaderValue value, hydra::Vector3* output) const final;
|
bool getShaderValue(const KRCamera* camera, ShaderValue value, hydra::Vector3* output) const final;
|
||||||
bool getShaderValue(ShaderValue value, hydra::Vector4* output) const final;
|
bool getShaderValue(const KRCamera* camera, ShaderValue value, hydra::Vector4* output) const final;
|
||||||
bool getShaderValue(ShaderValue value, KRResourceBinding* output) const final;
|
bool getShaderValue(const KRCamera* camera, ShaderValue value, KRResourceBinding* output) const final;
|
||||||
bool getShaderValue(ShaderValue value, int64_t* output) const final;
|
bool getShaderValue(const KRCamera* camera, ShaderValue value, int64_t* output) const final;
|
||||||
bool getShaderValue(ShaderValue value, bool* output) const final;
|
bool getShaderValue(const KRCamera* camera, ShaderValue value, bool* output) const final;
|
||||||
bool getImageBinding(const std::string& name, const KRTextureBinding** binding, KRSampler** sample) const final;
|
bool getImageBinding(const std::string& name, const KRTextureBinding** binding, KRSampler** sample) const final;
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user