mirror of
https://bitbucket.org/mfeemster/fractorium.git
synced 2025-07-01 13:56:06 -04:00
Affine2D: Remove * operator, it's unused.
RendererBase: Add ComputeCamera() as a virtual function. Add strips parameter to TotalIterCount(). Renderer: Implement ComputeCamera() as an override. SpatialFilter: Ensure filters that are too small are made large enough to create. FinalRenderDialog: Add estimated iters table row and populate on all UI updates. FractoriumParams: Zoom was not being saved, loaded. Fixed. GLWidget: Prevent mouse wheel event from being passed to the scroll bars. It should only affect the scale.
This commit is contained in:
@ -101,28 +101,6 @@ bool Affine2D<T>::operator == (const Affine2D<T>& affine)
|
||||
IsClose(F(), affine.F());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// * operator to multiply this affine transform by another and return the result.
|
||||
/// </summary>
|
||||
/// <param name="affine">The Affine2D to multiply by</param>
|
||||
/// <returns>A new Affine2D which is the product of the multiplication</returns>
|
||||
template <typename T>
|
||||
Affine2D<T>& Affine2D<T>::operator * (const Affine2D<T>& affine)
|
||||
{
|
||||
v2T x = affine.X();
|
||||
v2T y = affine.Y();
|
||||
v2T o = affine.O();
|
||||
v2T tx = TransformNormal(x);
|
||||
v2T ty = TransformNormal(y);
|
||||
v2T to = TransformNormal(o);
|
||||
|
||||
X(tx);
|
||||
Y(ty);
|
||||
O(to);
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// * operator to multiply this affine transform by a vec2 and return the result as a vec2.
|
||||
/// </summary>
|
||||
@ -277,7 +255,7 @@ template <typename T>
|
||||
typename m2T Affine2D<T>::ToMat2ColMajor() const
|
||||
{
|
||||
return m2T(A(), B(),//Col0...
|
||||
D(), E());//1
|
||||
D(), E());//1
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -288,7 +266,7 @@ template <typename T>
|
||||
typename m2T Affine2D<T>::ToMat2RowMajor() const
|
||||
{
|
||||
return m2T(A(), D(),//Col0...
|
||||
B(), E());//1
|
||||
B(), E());//1
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -299,10 +277,10 @@ typename m2T Affine2D<T>::ToMat2RowMajor() const
|
||||
template <typename T>
|
||||
typename m4T Affine2D<T>::ToMat4ColMajor(bool center) const
|
||||
{
|
||||
m4T mat(A(), B(), 0, center ? 0 : C(),//Col0...
|
||||
D(), E(), 0, center ? 0 : F(),//1
|
||||
0, 0, 1, 0,//2
|
||||
0, 0, 0, 1);//3
|
||||
m4T mat(A(), B(), 0, center ? 0 : C(), //Col0...
|
||||
D(), E(), 0, center ? 0 : F(), //1
|
||||
0, 0, 1, 0, //2
|
||||
0, 0, 0, 1);//3
|
||||
|
||||
return mat;
|
||||
}
|
||||
@ -316,9 +294,9 @@ template <typename T>
|
||||
typename m4T Affine2D<T>::ToMat4RowMajor(bool center) const
|
||||
{
|
||||
m4T mat(A(), D(), 0, 0,
|
||||
B(), E(), 0, 0,
|
||||
0, 0, 1, 0,
|
||||
center ? 0 : C(), center ? 0 : F(), 0, 1);
|
||||
B(), E(), 0, 0,
|
||||
0, 0, 1, 0,
|
||||
center ? 0 : C(), center ? 0 : F(), 0, 1);
|
||||
|
||||
return mat;
|
||||
}
|
||||
|
@ -69,7 +69,6 @@ public:
|
||||
}
|
||||
|
||||
bool operator == (const Affine2D<T>& affine);
|
||||
Affine2D<T>& operator * (const Affine2D<T>& affine);
|
||||
v2T operator * (const v2T& v);
|
||||
|
||||
void MakeID();
|
||||
|
@ -50,12 +50,12 @@ public:
|
||||
virtual ~Renderer();
|
||||
|
||||
//Non-virtual processing functions.
|
||||
void ComputeCamera();
|
||||
void AddEmber(Ember<T>& ember);
|
||||
bool AssignIterator();
|
||||
|
||||
//Virtual processing functions overriden from RendererBase.
|
||||
virtual void ComputeBounds() override;
|
||||
virtual void ComputeCamera() override;
|
||||
virtual void SetEmber(Ember<T>& ember, eProcessAction action = FULL_RENDER) override;
|
||||
virtual void SetEmber(vector<Ember<T>>& embers) override;
|
||||
virtual bool CreateDEFilter(bool& newAlloc) override;
|
||||
|
@ -273,20 +273,20 @@ size_t RendererBase::MemoryAvailable()
|
||||
/// Non-virtual renderer properties, getters only.
|
||||
/// </summary>
|
||||
|
||||
size_t RendererBase::SuperRasW() const { return m_SuperRasW; }
|
||||
size_t RendererBase::SuperRasH() const { return m_SuperRasH; }
|
||||
size_t RendererBase::SuperSize() const { return m_SuperSize; }
|
||||
size_t RendererBase::FinalRowSize() const { return FinalRasW() * PixelSize(); }
|
||||
size_t RendererBase::FinalDimensions() const { return FinalRasW() * FinalRasH(); }
|
||||
size_t RendererBase::FinalBufferSize() const { return FinalRowSize() * FinalRasH(); }
|
||||
size_t RendererBase::PixelSize() const { return NumChannels() * BytesPerChannel(); }
|
||||
size_t RendererBase::GutterWidth() const { return m_GutterWidth; }
|
||||
size_t RendererBase::DensityFilterOffset() const { return m_DensityFilterOffset; }
|
||||
size_t RendererBase::TotalIterCount() const { return (size_t)((size_t)Round(ScaledQuality()) * FinalRasW() * FinalRasH()); }//Use Round() because there can be some roundoff error when interpolating.
|
||||
size_t RendererBase::ItersPerTemporalSample() const { return (size_t)ceil(double(TotalIterCount()) / double(Passes() * TemporalSamples())); }
|
||||
eProcessState RendererBase::ProcessState() const { return m_ProcessState; }
|
||||
eProcessAction RendererBase::ProcessAction() const { return m_ProcessAction; }
|
||||
EmberStats RendererBase::Stats() const { return m_Stats; }
|
||||
size_t RendererBase::SuperRasW() const { return m_SuperRasW; }
|
||||
size_t RendererBase::SuperRasH() const { return m_SuperRasH; }
|
||||
size_t RendererBase::SuperSize() const { return m_SuperSize; }
|
||||
size_t RendererBase::FinalRowSize() const { return FinalRasW() * PixelSize(); }
|
||||
size_t RendererBase::FinalDimensions() const { return FinalRasW() * FinalRasH(); }
|
||||
size_t RendererBase::FinalBufferSize() const { return FinalRowSize() * FinalRasH(); }
|
||||
size_t RendererBase::PixelSize() const { return NumChannels() * BytesPerChannel(); }
|
||||
size_t RendererBase::GutterWidth() const { return m_GutterWidth; }
|
||||
size_t RendererBase::DensityFilterOffset() const { return m_DensityFilterOffset; }
|
||||
size_t RendererBase::TotalIterCount(size_t strips) const { return (size_t)((size_t)Round(ScaledQuality()) * FinalRasW() * FinalRasH() * strips); }//Use Round() because there can be some roundoff error when interpolating.
|
||||
size_t RendererBase::ItersPerTemporalSample() const { return (size_t)ceil(double(TotalIterCount(1)) / double(Passes() * TemporalSamples())); }//Temporal samples is used with animation, which doesn't support strips, so pass 1.
|
||||
eProcessState RendererBase::ProcessState() const { return m_ProcessState; }
|
||||
eProcessAction RendererBase::ProcessAction() const { return m_ProcessAction; }
|
||||
EmberStats RendererBase::Stats() const { return m_Stats; }
|
||||
|
||||
/// <summary>
|
||||
/// Non-virtual render properties, getters and setters.
|
||||
|
@ -115,25 +115,26 @@ public:
|
||||
virtual bool CreateSpatialFilter(bool& newAlloc) = 0;
|
||||
virtual bool CreateTemporalFilter(bool& newAlloc) = 0;
|
||||
virtual void ComputeBounds() = 0;
|
||||
virtual void ComputeCamera() = 0;
|
||||
virtual eRenderStatus Run(vector<unsigned char>& finalImage, double time = 0, size_t subBatchCountOverride = 0, bool forceOutput = false, size_t finalOffset = 0) = 0;
|
||||
virtual EmberImageComments ImageComments(EmberStats& stats, size_t printEditDepth = 0, bool intPalette = false, bool hexPalette = true) = 0;
|
||||
virtual DensityFilterBase* GetDensityFilter() = 0;
|
||||
|
||||
//Non-virtual renderer properties, getters only.
|
||||
size_t SuperRasW() const;
|
||||
size_t SuperRasH() const;
|
||||
size_t SuperSize() const;
|
||||
size_t FinalRowSize() const;
|
||||
size_t FinalDimensions() const;
|
||||
size_t FinalBufferSize() const;
|
||||
size_t PixelSize() const;
|
||||
size_t GutterWidth() const;
|
||||
size_t DensityFilterOffset() const;
|
||||
size_t TotalIterCount() const;
|
||||
size_t ItersPerTemporalSample() const;
|
||||
eProcessState ProcessState() const;
|
||||
eProcessAction ProcessAction() const;
|
||||
EmberStats Stats() const;
|
||||
size_t SuperRasW() const;
|
||||
size_t SuperRasH() const;
|
||||
size_t SuperSize() const;
|
||||
size_t FinalRowSize() const;
|
||||
size_t FinalDimensions() const;
|
||||
size_t FinalBufferSize() const;
|
||||
size_t PixelSize() const;
|
||||
size_t GutterWidth() const;
|
||||
size_t DensityFilterOffset() const;
|
||||
size_t TotalIterCount(size_t strips) const;
|
||||
size_t ItersPerTemporalSample() const;
|
||||
eProcessState ProcessState() const;
|
||||
eProcessAction ProcessAction() const;
|
||||
EmberStats Stats() const;
|
||||
|
||||
//Non-virtual render getters and setters.
|
||||
bool LockAccum() const;
|
||||
|
@ -142,7 +142,7 @@ public:
|
||||
}
|
||||
|
||||
//Attempt to normalize, and increase the filter width if the values were too small.
|
||||
if (!Normalize())
|
||||
if (Normalize())
|
||||
{
|
||||
m_FinalFilterWidth = fwidth;
|
||||
break;
|
||||
|
Reference in New Issue
Block a user