Sync changes from upstream repository

Co-authored-by: Alain <alain@mcneel.com>
Co-authored-by: Andrew Le Bihan <andy@mcneel.com>
Co-authored-by: croudyj <croudyj@gmail.com>
Co-authored-by: Dale Fugier <dale@mcneel.com>
Co-authored-by: Dale Lear <dalelear@mcneel.com>
Co-authored-by: David Eränen <david.eranen@mcneel.com>
Co-authored-by: Greg Arden <greg@mcneel.com>
Co-authored-by: Mikko Oksanen <mikko@mcneel.com>
Co-authored-by: piac <giulio@mcneel.com>
Co-authored-by: Steve Baer <steve@mcneel.com>
Co-authored-by: TimHemmelman <tim@mcneel.com>
Co-authored-by: Will Pearson <will@mcneel.com>
This commit is contained in:
Bozo The Builder
2023-04-23 04:06:52 -07:00
parent f3687d492e
commit ef4be960ca
80 changed files with 8798 additions and 3118 deletions

View File

@@ -36,145 +36,160 @@ static const wchar_t* XMLPath(void)
ON_LinearWorkflow::ON_LinearWorkflow()
{
m_impl = new CImpl;
_impl = new CImpl;
}
ON_LinearWorkflow::ON_LinearWorkflow(ON_XMLNode& model_node)
{
m_impl = new CImpl(model_node);
_impl = new CImpl(model_node);
}
ON_LinearWorkflow::ON_LinearWorkflow(const ON_LinearWorkflow& lw)
{
m_impl = new CImpl;
_impl = new CImpl;
operator = (lw);
}
ON_LinearWorkflow::~ON_LinearWorkflow()
{
delete m_impl;
m_impl = nullptr;
delete _impl;
_impl = nullptr;
}
const ON_LinearWorkflow& ON_LinearWorkflow::operator = (const ON_LinearWorkflow& lw)
{
if (this != &lw)
{
SetPreProcessTextures(lw.PreProcessTextures());
SetPreProcessColors (lw.PreProcessColors());
SetPreProcessGamma (lw.PreProcessGamma());
SetPostProcessGamma (lw.PostProcessGamma());
SetPostProcessGammaOn(lw.PostProcessGammaOn());
// When copying the object, we need to directly copy the underlying XML. So we can't allow
// virtual overrides to execute because they might shadow the real values we want to copy.
using LW = ON_LinearWorkflow;
LW::SetPreProcessTexturesOn (lw.LW::PreProcessTexturesOn());
LW::SetPreProcessColorsOn (lw.LW::PreProcessColorsOn());
LW::SetPostProcessFrameBufferOn(lw.LW::PostProcessFrameBufferOn());
LW::SetPreProcessGammaOn (lw.LW::PreProcessGammaOn());
LW::SetPostProcessGammaOn (lw.LW::PostProcessGammaOn());
LW::SetPreProcessGamma (lw.LW::PreProcessGamma());
LW::SetPostProcessGamma (lw.LW::PostProcessGamma());
}
return *this;
}
bool ON_LinearWorkflow::operator == (const ON_LinearWorkflow& lw)
bool ON_LinearWorkflow::operator == (const ON_LinearWorkflow& lw) const
{
if (PreProcessTextures() != lw.PreProcessTextures()) return false;
if (PreProcessColors() != lw.PreProcessColors()) return false;
if (PostProcessGammaOn() != lw.PostProcessGammaOn()) return false;
if (!IsFloatEqual(PreProcessGamma(), lw.PreProcessGamma())) return false;
if (!IsFloatEqual(PostProcessGamma(), lw.PostProcessGamma())) return false;
// When checking equality, we need to directly check the underlying XML. So we can't allow
// virtual overrides to execute because they might shadow the real values we want to check.
using LW = ON_LinearWorkflow;
if (LW::PreProcessTexturesOn() != lw.LW::PreProcessTexturesOn()) return false;
if (LW::PreProcessColorsOn() != lw.LW::PreProcessColorsOn()) return false;
if (LW::PostProcessFrameBufferOn() != lw.LW::PostProcessFrameBufferOn()) return false;
if (LW::PreProcessGammaOn() != lw.LW::PreProcessGammaOn()) return false;
if (LW::PostProcessGammaOn() != lw.LW::PostProcessGammaOn()) return false;
if (!IsFloatEqual(LW::PreProcessGamma(), lw.LW::PreProcessGamma())) return false;
if (!IsFloatEqual(LW::PostProcessGamma(), lw.LW::PostProcessGamma())) return false;
return true;
}
bool ON_LinearWorkflow::operator != (const ON_LinearWorkflow& sf)
bool ON_LinearWorkflow::operator != (const ON_LinearWorkflow& lw) const
{
return !(operator == (sf));
return !(operator == (lw));
}
bool ON_LinearWorkflow::PreProcessTextures(void) const
bool ON_LinearWorkflow::PreProcessTexturesOn(void) const
{
return m_impl->GetParameter(XMLPath(), ON_RDK_USE_LINEAR_WORKFLOW, false);
return _impl->GetParameter(XMLPath(), ON_RDK_PRE_PROCESS_GAMMA_ON, false);
}
void ON_LinearWorkflow::SetPreProcessTextures(bool b)
void ON_LinearWorkflow::SetPreProcessTexturesOn(bool b)
{
m_impl->SetParameter(XMLPath(), ON_RDK_USE_LINEAR_WORKFLOW, b);
_impl->SetParameter(XMLPath(), ON_RDK_PRE_PROCESS_GAMMA_ON, b);
}
bool ON_LinearWorkflow::PreProcessColors(void) const
bool ON_LinearWorkflow::PreProcessColorsOn(void) const
{
return PreProcessTextures();
return _impl->GetParameter(XMLPath(), ON_RDK_PRE_PROCESS_GAMMA_ON, false);
}
void ON_LinearWorkflow::SetPreProcessColors(bool b)
void ON_LinearWorkflow::SetPreProcessColorsOn(bool b)
{
return SetPreProcessTextures(b);
_impl->SetParameter(XMLPath(), ON_RDK_PRE_PROCESS_GAMMA_ON, b);
}
float ON_LinearWorkflow::PreProcessGamma(void) const
bool ON_LinearWorkflow::PreProcessGammaOn(void) const
{
const float f = m_impl->GetParameter(XMLPath(), ON_RDK_GAMMA, 2.2f).AsFloat();
return std::min(5.0f, std::max(0.2f, f));
return _impl->GetParameter(XMLPath(), ON_RDK_PRE_PROCESS_GAMMA_ON, true);
}
void ON_LinearWorkflow::SetPreProcessGamma(float gamma)
void ON_LinearWorkflow::SetPreProcessGammaOn(bool on)
{
const float f = std::min(5.0f, std::max(0.2f, gamma));
m_impl->SetParameter(XMLPath(), ON_RDK_GAMMA, f);
_impl->SetParameter(XMLPath(), ON_RDK_PRE_PROCESS_GAMMA_ON, on);
}
bool ON_LinearWorkflow::PostProcessGammaOn(void) const
{
return m_impl->GetParameter(XMLPath(), ON_RDK_USE_POST_PROCESS_GAMMA, true);
return _impl->GetParameter(XMLPath(), ON_RDK_POST_PROCESS_GAMMA_ON, true);
}
void ON_LinearWorkflow::SetPostProcessGammaOn(bool on)
{
m_impl->SetParameter(XMLPath(), ON_RDK_USE_POST_PROCESS_GAMMA, on);
_impl->SetParameter(XMLPath(), ON_RDK_POST_PROCESS_GAMMA_ON, on);
}
bool ON_LinearWorkflow::PostProcessFrameBuffer(void) const
bool ON_LinearWorkflow::PostProcessFrameBufferOn(void) const
{
return true; // Always on. For possible future use.
}
void ON_LinearWorkflow::SetPostProcessFrameBuffer(bool)
void ON_LinearWorkflow::SetPostProcessFrameBufferOn(bool)
{
// Always on. Ignore the call.
}
static float ClampGamma(float f) { return std::min(5.0f, std::max(0.2f, f)); }
float ON_LinearWorkflow::PreProcessGamma(void) const
{
return ON_LinearWorkflow::PostProcessGamma();
}
void ON_LinearWorkflow::SetPreProcessGamma(float gamma)
{
ON_LinearWorkflow::SetPostProcessGamma(gamma);
}
float ON_LinearWorkflow::PostProcessGamma(void) const
{
return PreProcessGamma();
return ClampGamma(_impl->GetParameter(XMLPath(), ON_RDK_POST_PROCESS_GAMMA, 2.2f));
}
void ON_LinearWorkflow::SetPostProcessGamma(float gamma)
{
SetPreProcessGamma(gamma);
}
float ON_LinearWorkflow::PostProcessGammaReciprocal(void) const
{
return 1.0f / PostProcessGamma();
_impl->SetParameter(XMLPath(), ON_RDK_POST_PROCESS_GAMMA, ClampGamma(gamma));
}
void ON_LinearWorkflow::ApplyPreProcessGamma(ON_4fColor& col, bool for_texture) const
{
const bool check = for_texture ? PreProcessTextures() : PreProcessColors();
const bool check = for_texture ? PreProcessTexturesOn() : PreProcessColorsOn();
if (!check)
return;
const float gamma = PreProcessGamma();
if (!IsFloatEqual(gamma, 1.0f))
{
float* f = col.FloatArray();
const float gamma = PreProcessGamma();
if (!IsFloatEqual(gamma, 1.0f))
{
float* f = col.FloatArray();
ON_ASSERT((f[0] >= 0.0) && (f[1] >= 0.0) && (f[2] >= 0.0));
ON_ASSERT((f[0] >= 0.0) && (f[1] >= 0.0) && (f[2] >= 0.0));
if (f[0] > 0.0) f[0] = powf(f[0], gamma);
if (f[1] > 0.0) f[1] = powf(f[1], gamma);
if (f[2] > 0.0) f[2] = powf(f[2], gamma);
}
if (f[0] > 0.0) f[0] = powf(f[0], gamma);
if (f[1] > 0.0) f[1] = powf(f[1], gamma);
if (f[2] > 0.0) f[2] = powf(f[2], gamma);
}
}
ON__UINT32 ON_LinearWorkflow::DataCRC(ON__UINT32 crc) const
{
bool b[] = { PreProcessTextures(), PostProcessGammaOn(), PreProcessColors() };
bool b[] = { PreProcessTexturesOn(), PreProcessColorsOn(), PostProcessFrameBufferOn(), PostProcessGammaOn() };
crc = ON_CRC32(crc, sizeof(b), b);
ON__INT64 f[] = { Integerize(PreProcessGamma()), Integerize(PostProcessGamma()) };
@@ -182,3 +197,17 @@ ON__UINT32 ON_LinearWorkflow::DataCRC(ON__UINT32 crc) const
return crc;
}
void ON_LinearWorkflow::SetXMLNode(ON_XMLNode& node) const
{
_impl->SetModelNode(node);
}
void* ON_LinearWorkflow::EVF(const wchar_t* func, void* data)
{
return nullptr;
}
void ON_LinearWorkflow::InvalidateCache(void)
{
}