mirror of
https://bitbucket.org/mfeemster/fractorium.git
synced 2025-01-21 21:20:07 -05:00
de613404de
--Add support for Exr files which use 32-bit floats for each RGBA channel. Seems to come out too washed out. --Allow for clearing an individual color curve. --Allow for saving multiple image types in EmberRender and EmberAnimate. All writes are threaded. --Remove --bpc command line argument. Add format png16 as a replacement. --Remove --enable_jpg_comments and --enable_png_comments command line arguments, and replace them with --enable_comments which applies to jpg, png and exr. --Add menu items to variations and affine spinners which allow for easy entry of specific numeric values like pi. --Make final render dialog be wider rather than so tall. Bug fixes: --Fix some OpenCL compile errors on Mac. --Remove ability to save bitmap files on all platforms but Windows. Code changes: --New dependency on OpenEXR. --Allow Curves class to interact with objects of a different template type. --Make m_Curves member of Ember always use float as template type. --Set the length of the curves array to always be 2^17 which should offer enough precision with new 32-bit float pixel types. --Set pixel types to always be 32-bit float. This results in a major reduction of code in the final accumulation part of Renderer.h/cpp. --Remove corresponding code from RendererCL and FinalAccumOpenCLKernelCreator. --Remove Transparency, NumChannels and BytesPerPixel setters from Renderer.h/cpp. --Add new global functions to format final image buffers and place all alpha calculation and scaling code in them. --Blending is no longer needed in OpenGLWidget because of the new pixel type. --Make new class, AffineDoubleSpinBox. --Attempt to make file save dialog code work the same on all OSes. --Remove some unused functions.
143 lines
4.6 KiB
C++
143 lines
4.6 KiB
C++
#pragma once
|
|
|
|
#include "ui_FinalRenderDialog.h"
|
|
#include "SpinBox.h"
|
|
#include "DoubleSpinBox.h"
|
|
#include "TwoButtonComboWidget.h"
|
|
#include "FractoriumSettings.h"
|
|
#include "FinalRenderEmberController.h"
|
|
|
|
/// <summary>
|
|
/// FractoriumFinalRenderDialog class.
|
|
/// </summary>
|
|
|
|
class Fractorium;//Forward declaration since Fractorium uses this dialog.
|
|
class FinalRenderEmberControllerBase;
|
|
template <typename T> class FinalRenderEmberController;
|
|
|
|
/// <summary>
|
|
/// The final render dialog is for when the user is satisfied with the parameters they've
|
|
/// set and they want to do a final render at a higher quality and at a specific resolution
|
|
/// and save it out to a file.
|
|
/// It supports rendering either the current ember, or all of them in the opened file.
|
|
/// If a single ember is rendered, it will be saved to a single output file.
|
|
/// If multiple embers are rendered, they will all be saved to a specified directory using
|
|
/// default names.
|
|
/// The user can optionally save the Xml file with each ember.
|
|
/// They can be treated as individual images, or as an animation sequence in which case
|
|
/// motion blurring with temporal samples will be applied.
|
|
/// It keeps a pointer to the main window and the global settings object for convenience.
|
|
/// The settings used here are saved to the /finalrender portion of the settings file.
|
|
/// It has its own OpenCLWrapper member for populating the combo boxes.
|
|
/// Upon running, it will delete the main window's renderer to save memory/GPU resources and restore it to its
|
|
/// original state upon exiting.
|
|
/// This class uses a controller-based design similar to the main window.
|
|
/// </summary>
|
|
class FractoriumFinalRenderDialog : public QDialog
|
|
{
|
|
Q_OBJECT
|
|
|
|
friend Fractorium;
|
|
friend FinalRenderEmberControllerBase;
|
|
friend FinalRenderEmberController<float>;
|
|
friend PreviewRenderer<float>;
|
|
friend FinalRenderPreviewRenderer<float>;
|
|
|
|
#ifdef DO_DOUBLE
|
|
friend FinalRenderEmberController<double>;
|
|
friend PreviewRenderer<double>;
|
|
friend FinalRenderPreviewRenderer<double>;
|
|
#endif
|
|
|
|
public:
|
|
FractoriumFinalRenderDialog(QWidget* p, Qt::WindowFlags f = 0);
|
|
void Show(bool fromSequence);
|
|
bool EarlyClip();
|
|
bool YAxisUp();
|
|
bool Transparency();
|
|
bool OpenCL();
|
|
bool Double();
|
|
bool SaveXml();
|
|
bool DoAll();
|
|
bool DoSequence();
|
|
bool Png16Bit();
|
|
bool KeepAspect();
|
|
bool ApplyToAll();
|
|
eScaleType Scale();
|
|
void Scale(eScaleType scale);
|
|
QString Ext();
|
|
QString Path();
|
|
void Path(const QString& s);
|
|
QString Prefix();
|
|
QString Suffix();
|
|
uint Current();
|
|
uint ThreadCount();
|
|
int ThreadPriority();
|
|
double WidthScale();
|
|
double HeightScale();
|
|
double Quality();
|
|
uint TemporalSamples();
|
|
uint Supersample();
|
|
uint Strips();
|
|
QList<QVariant> Devices();
|
|
FinalRenderGuiState State();
|
|
|
|
public slots:
|
|
void MoveCursorToEnd();
|
|
void OnEarlyClipCheckBoxStateChanged(int state);
|
|
void OnYAxisUpCheckBoxStateChanged(int state);
|
|
void OnTransparencyCheckBoxStateChanged(int state);
|
|
void OnOpenCLCheckBoxStateChanged(int state);
|
|
void OnDoublePrecisionCheckBoxStateChanged(int state);
|
|
void OnDoAllCheckBoxStateChanged(int state);
|
|
void OnDoSequenceCheckBoxStateChanged(int state);
|
|
void OnCurrentSpinChanged(int d);
|
|
void OnApplyAllCheckBoxStateChanged(int state);
|
|
void OnWidthScaleChanged(double d);
|
|
void OnHeightScaleChanged(double d);
|
|
void OnKeepAspectCheckBoxStateChanged(int state);
|
|
void OnScaleRadioButtonChanged(bool checked);
|
|
void OnDeviceTableCellChanged(int row, int col);
|
|
void OnDeviceTableRadioToggled(bool checked);
|
|
void OnQualityChanged(double d);
|
|
void OnTemporalSamplesChanged(int d);
|
|
void OnSupersampleChanged(int d);
|
|
void OnStripsChanged(int d);
|
|
void OnFileButtonClicked(bool checked);
|
|
void OnShowFolderButtonClicked(bool checked);
|
|
void OnExtIndexChanged(int d);
|
|
void OnPrefixChanged(const QString& s);
|
|
void OnSuffixChanged(const QString& s);
|
|
void OnRenderClicked(bool checked);
|
|
void OnCancelRenderClicked(bool checked);
|
|
virtual void reject() override;
|
|
|
|
protected:
|
|
virtual void showEvent(QShowEvent* e) override;
|
|
|
|
private:
|
|
bool CreateControllerFromGUI(bool createRenderer);
|
|
bool SetMemory();
|
|
|
|
bool m_FromSequence;
|
|
int m_MemoryCellIndex;
|
|
int m_ItersCellIndex;
|
|
int m_PathCellIndex;
|
|
Timing m_RenderTimer;
|
|
DoubleSpinBox* m_WidthScaleSpin;
|
|
DoubleSpinBox* m_HeightScaleSpin;
|
|
DoubleSpinBox* m_QualitySpin;
|
|
SpinBox* m_TemporalSamplesSpin;
|
|
SpinBox* m_SupersampleSpin;
|
|
SpinBox* m_StripsSpin;
|
|
TwoButtonComboWidget* m_Tbcw;
|
|
QLineEdit* m_PrefixEdit;
|
|
QLineEdit* m_SuffixEdit;
|
|
shared_ptr<FractoriumSettings> m_Settings;
|
|
Fractorium* m_Fractorium;
|
|
shared_ptr<OpenCLInfo> m_Info;
|
|
vector<OpenCLWrapper> m_Wrappers;
|
|
unique_ptr<FinalRenderEmberControllerBase> m_Controller;
|
|
Ui::FinalRenderDialog ui;
|
|
};
|