mirror of
https://bitbucket.org/mfeemster/fractorium.git
synced 2025-07-16 21:24:55 -04:00
--User changes
-Add animation sequence creation to Fractorium. -Add two new options to EmberGenome which are used when generating an animation sequence.: --startcount: Add this number to the filename of each flame. --padding: Override the automatically calculated amount of padding zeroes added to each filename. --Bug fixes -Prevent filenames in command line programs from using scientific notation when rendering a large number of frames. -Fix tab orders to match newer GUI items which were overlooked in previous releases. -Re-render previews if transparency value in the options dialog was changed. Re-rendering was previously only done if early clip or y axis up was changed. -Use transparency when rendering thumbnail previews. --Code changes -Wrap EmberCommon.h in a namespace called EmberCommon. -Move FormatName() from EmberGenome to EmberCommon.h/cpp -Add a prefix parameter to EmberFile::DefaultFilename() to allow for creating a default filename for sequences. -When showing the final render dialog, allow specifying where it came from: the toolbar or the render sequence button. -Refactor all preview rendering code out into its own class hierarchy with overrides for the main window and the final render dialog. -Remove all preview render cancelling functions, they are now built into the new class hierarchy and a new render will not start until the previous one is stopped. -Add two new function ConstrainLow() and ConstrainHigh() which wrap constraining two min/max spinboxes to each others' values. -Add a bool to FractoriumEmberControllerBase::CopyEmberFile() to specify whether to copy the main file or the sequence file. This is somewhat of a hack and was done in a rush. -Add a bool to FractoriumEmberControllerBase::SetEmberFile() to specify whether to move the file rather than copy. This is used in FinalRenderEmberController and improves efficiency. -Add wrapper functions for variations filter dialog settings.
This commit is contained in:
@ -13,6 +13,7 @@
|
||||
/// </summary>
|
||||
class Fractorium;
|
||||
class FractoriumFinalRenderDialog;
|
||||
template <typename T> class FinalRenderPreviewRenderer;
|
||||
|
||||
/// <summary>
|
||||
/// Used to hold the options specified in the current state of the Gui for performing the final render.
|
||||
@ -74,19 +75,16 @@ public:
|
||||
|
||||
protected:
|
||||
bool m_Run = false;
|
||||
bool m_PreviewRun = false;
|
||||
size_t m_ImageCount = 0;
|
||||
std::atomic<size_t> m_FinishedImageCount;
|
||||
|
||||
QFuture<void> m_Result;
|
||||
QFuture<void> m_FinalPreviewResult;
|
||||
std::function<void (void)> m_FinalRenderFunc;
|
||||
std::function<void (void)> m_FinalPreviewRenderFunc;
|
||||
|
||||
FractoriumSettings* m_Settings;
|
||||
FractoriumFinalRenderDialog* m_FinalRenderDialog;
|
||||
FinalRenderGuiState m_GuiState;
|
||||
std::recursive_mutex m_PreviewCs, m_ProgressCs;
|
||||
std::recursive_mutex m_ProgressCs;
|
||||
Timing m_RenderTimer;
|
||||
Timing m_TotalTimer;
|
||||
};
|
||||
@ -98,16 +96,18 @@ protected:
|
||||
template<typename T>
|
||||
class FinalRenderEmberController : public FinalRenderEmberControllerBase
|
||||
{
|
||||
friend FinalRenderPreviewRenderer<T>;
|
||||
|
||||
public:
|
||||
FinalRenderEmberController(FractoriumFinalRenderDialog* finalRender);
|
||||
virtual ~FinalRenderEmberController() { }
|
||||
|
||||
//Virtual functions overridden from FractoriumEmberControllerBase.
|
||||
virtual void SetEmberFile(const EmberFile<float>& emberFile) override;
|
||||
virtual void CopyEmberFile(EmberFile<float>& emberFile, std::function<void(Ember<float>& ember)> perEmberOperation/* = [&](Ember<float>& ember) { }*/) override;
|
||||
virtual void SetEmberFile(const EmberFile<float>& emberFile, bool move) override;
|
||||
virtual void CopyEmberFile(EmberFile<float>& emberFile, bool sequence, std::function<void(Ember<float>& ember)> perEmberOperation/* = [&](Ember<float>& ember) { }*/) override;
|
||||
#ifdef DO_DOUBLE
|
||||
virtual void SetEmberFile(const EmberFile<double>& emberFile) override;
|
||||
virtual void CopyEmberFile(EmberFile<double>& emberFile, std::function<void(Ember<double>& ember)> perEmberOperation/* = [&](Ember<double>& ember) { }*/) override;
|
||||
virtual void SetEmberFile(const EmberFile<double>& emberFile, bool move) override;
|
||||
virtual void CopyEmberFile(EmberFile<double>& emberFile, bool sequence, std::function<void(Ember<double>& ember)> perEmberOperation/* = [&](Ember<double>& ember) { }*/) override;
|
||||
#endif
|
||||
virtual void SetEmber(size_t index, bool verbatim) override;
|
||||
virtual bool Render() override;
|
||||
@ -132,7 +132,6 @@ public:
|
||||
EmberNs::Renderer<T, float>* FirstOrDefaultRenderer();
|
||||
|
||||
protected:
|
||||
void CancelPreviewRender();
|
||||
void HandleFinishedProgress();
|
||||
void SaveCurrentRender(Ember<T>& ember);
|
||||
void SaveCurrentRender(Ember<T>& ember, const EmberImageComments& comments, vector<byte>& pixels, size_t width, size_t height, size_t channels, size_t bpc);
|
||||
@ -143,10 +142,32 @@ protected:
|
||||
void SetProgressComplete(int val);
|
||||
|
||||
Ember<T>* m_Ember;
|
||||
Ember<T> m_PreviewEmber;
|
||||
EmberFile<T> m_EmberFile;
|
||||
EmberToXml<T> m_XmlWriter;
|
||||
unique_ptr<EmberNs::Renderer<T, float>> m_FinalPreviewRenderer;
|
||||
unique_ptr<FinalRenderPreviewRenderer<T>> m_FinalPreviewRenderer;
|
||||
vector<unique_ptr<EmberNs::Renderer<T, float>>> m_Renderers;
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// Thin derivation to handle preview rendering that is specific to the final render dialog.
|
||||
/// This differs from the preview renderers on the main window because they render multiple embers
|
||||
/// to a tree, whereas this renders a single preview.
|
||||
/// </summary>
|
||||
template <typename T>
|
||||
class FinalRenderPreviewRenderer : public PreviewRenderer<T>
|
||||
{
|
||||
public:
|
||||
using PreviewRenderer<T>::m_PreviewRun;
|
||||
using PreviewRenderer<T>::m_PreviewEmber;
|
||||
using PreviewRenderer<T>::m_PreviewRenderer;
|
||||
using PreviewRenderer<T>::m_PreviewFinalImage;
|
||||
|
||||
FinalRenderPreviewRenderer(FinalRenderEmberController<T>* controller) : m_Controller(controller)
|
||||
{
|
||||
}
|
||||
|
||||
virtual void PreviewRenderFunc(uint start, uint end) override;
|
||||
|
||||
private:
|
||||
FinalRenderEmberController<T>* m_Controller;
|
||||
};
|
||||
|
Reference in New Issue
Block a user