mirror of
https://bitbucket.org/mfeemster/fractorium.git
synced 2025-07-01 13:56:06 -04:00
--Bug fixes
-Really fix locking of affine scale. --Code changes -Remove dependency projects from the solution. Move to a project design where they are built once via command line and stored in a /Deps folder. --Because of this, libpng is built as a static lib instead of a dll because that's what its command line makefile supports. --Remove libpng16.dll from Wix installer. -Remove all configs except for debug and release. -Remove all platforms except for x64. -Add #define __TBB_NO_IMPLICIT_LINKAGE 1 to prevent tbb from locking for tbb_debug.lib by default on debug builds. -Put Ember.rc in a filter folder in the project. -Place pragma warning disable statements in PCH files rather than in projects. This makes it easier when using Qt Creator. -Move all resource files to the MSVC folder. -Set all targets in QtCreator project to their lowercase names to be more *nix friendly. Set -l link statements to use these new lowercase names for ember and embercl. -Rework projects to favor shadow builds. -Remove the symlinks.sh file and all references to it. It was never needed. Instead, just specify multiple include and link paths in the .pro files. -Change WIN32 to _WIN32. -Fix a few code warnings.
This commit is contained in:
@ -106,8 +106,6 @@ public:
|
||||
/// </summary>
|
||||
void MakeNamesUnique()
|
||||
{
|
||||
int x = 0;
|
||||
|
||||
for (size_t i = 0; i < m_Embers.size(); i++)
|
||||
{
|
||||
for (size_t j = 0; j < m_Embers.size(); j++)
|
||||
@ -169,7 +167,6 @@ public:
|
||||
if (!QFile::exists(filename))
|
||||
return filename;
|
||||
|
||||
int counter = 2;
|
||||
QString newPath;
|
||||
QFileInfo original(filename);
|
||||
QString path = original.absolutePath() + '/';
|
||||
|
@ -17,7 +17,6 @@ FractoriumFinalRenderDialog::FractoriumFinalRenderDialog(FractoriumSettings* set
|
||||
int row = 0, spinHeight = 20;
|
||||
double dmax = numeric_limits<double>::max();
|
||||
QTableWidget* table = ui.FinalRenderParamsTable;
|
||||
QTableWidgetItem* item = nullptr;
|
||||
m_Info = OpenCLInfo::Instance();
|
||||
m_Fractorium = qobject_cast<Fractorium*>(p);
|
||||
m_Settings = settings;
|
||||
@ -532,14 +531,12 @@ void FractoriumFinalRenderDialog::OnStripsChanged(int d)
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// If a single ember is being rendered, show the save file dialog.
|
||||
/// If a more than one is being rendered, show the save folder dialog.
|
||||
/// Show the save folder dialog.
|
||||
/// Called when the ... file button is clicked.
|
||||
/// </summary>
|
||||
/// <param name="checked">Ignored</param>
|
||||
void FractoriumFinalRenderDialog::OnFileButtonClicked(bool checked)
|
||||
{
|
||||
bool doAll = ui.FinalRenderDoAllCheckBox->isChecked();
|
||||
QString s = m_Fractorium->SetupSaveFolderDialog();
|
||||
|
||||
if (Exists(s))
|
||||
@ -684,7 +681,6 @@ void FractoriumFinalRenderDialog::reject()
|
||||
/// <returns>True if successful, else false.</returns>
|
||||
bool FractoriumFinalRenderDialog::CreateControllerFromGUI(bool createRenderer)
|
||||
{
|
||||
bool ok = true;
|
||||
int index = Current() - 1;
|
||||
#ifdef DO_DOUBLE
|
||||
size_t elementSize = Double() ? sizeof(double) : sizeof(float);
|
||||
@ -767,4 +763,4 @@ bool FractoriumFinalRenderDialog::SetMemory()
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@ -460,7 +460,6 @@ template <typename T>
|
||||
bool FinalRenderEmberController<T>::CreateRenderer(eRendererType renderType, const vector<pair<size_t, size_t>>& devices, bool shared)
|
||||
{
|
||||
bool ok = true;
|
||||
bool deviceDiff = false;
|
||||
//uint channels = m_FinalRenderDialog->Ext().endsWith("png", Qt::CaseInsensitive) ? 4 : 3;
|
||||
bool renderTypeMismatch = (m_Renderer.get() && (m_Renderer->RendererType() != renderType)) ||
|
||||
(!m_Renderers.empty() && (m_Renderers[0]->RendererType() != renderType));
|
||||
|
@ -17,7 +17,7 @@
|
||||
Fractorium::Fractorium(QWidget* p)
|
||||
: QMainWindow(p)
|
||||
{
|
||||
int spinHeight = 20, iconSize_ = 9;
|
||||
int iconSize_ = 9;
|
||||
size_t i = 0;
|
||||
string s;
|
||||
Timing t;
|
||||
|
Binary file not shown.
@ -376,7 +376,7 @@ static QString BaseStyle()
|
||||
"This is needed to deal with the large tabs in the fusion theme which is the default on Linux, and optional on Windows.\n"
|
||||
"It's not needed for other themes."
|
||||
"You should keep this at the top of whatever custom style you make to ensure the tabs aren't unusually large.*/\n"
|
||||
#ifndef WIN32
|
||||
#ifndef _WIN32
|
||||
"QTabBar::tab { height: 3ex; }\n\n"
|
||||
#else
|
||||
"QTabBar::tab { height: 5ex; }\n\n"
|
||||
|
@ -480,7 +480,6 @@ void FractoriumEmberController<T>::CopyAllXml()
|
||||
{
|
||||
ostringstream os;
|
||||
EmberToXml<T> emberToXml;
|
||||
auto settings = m_Fractorium->m_Settings;
|
||||
os << "<flames>\n";
|
||||
|
||||
for (auto& e : m_EmberFile.m_Embers)
|
||||
@ -693,7 +692,6 @@ void Fractorium::OnActionResetWorkspace(bool checked)
|
||||
template <typename T>
|
||||
void FractoriumEmberController<T>::AddReflectiveSymmetry()
|
||||
{
|
||||
auto combo = m_Fractorium->ui.CurrentXformCombo;
|
||||
Update([&]()
|
||||
{
|
||||
m_Ember.AddSymmetry(-1, m_Rand);
|
||||
@ -711,7 +709,6 @@ void Fractorium::OnActionAddReflectiveSymmetry(bool checked) { m_Controller->Add
|
||||
template <typename T>
|
||||
void FractoriumEmberController<T>::AddRotationalSymmetry()
|
||||
{
|
||||
auto combo = m_Fractorium->ui.CurrentXformCombo;
|
||||
Update([&]()
|
||||
{
|
||||
m_Ember.AddSymmetry(2, m_Rand);
|
||||
@ -729,7 +726,6 @@ void Fractorium::OnActionAddRotationalSymmetry(bool checked) { m_Controller->Add
|
||||
template <typename T>
|
||||
void FractoriumEmberController<T>::AddBothSymmetry()
|
||||
{
|
||||
auto combo = m_Fractorium->ui.CurrentXformCombo;
|
||||
Update([&]()
|
||||
{
|
||||
m_Ember.AddSymmetry(-2, m_Rand);
|
||||
|
@ -81,7 +81,6 @@ bool FractoriumEmberController<T>::FillPaletteTable(const string& s)
|
||||
if (!s.empty())//This occasionally seems to get called with an empty string for reasons unknown.
|
||||
{
|
||||
auto paletteTable = m_Fractorium->ui.PaletteListTable;
|
||||
auto palettePreviewTable = m_Fractorium->ui.PalettePreviewTable;
|
||||
m_CurrentPaletteFilePath = m_Fractorium->ui.PaletteFilenameCombo->property("path").toString().toStdString() + "/" + s;
|
||||
|
||||
if (int paletteSize = int(m_PaletteList.Size(m_CurrentPaletteFilePath)))
|
||||
@ -139,7 +138,6 @@ void Fractorium::OnPaletteFilenameComboChanged(const QString& text)
|
||||
template <typename T>
|
||||
void FractoriumEmberController<T>::ApplyPaletteToEmber()
|
||||
{
|
||||
int rot = 0;
|
||||
uint blur = m_Fractorium->m_PaletteBlurSpin->value();
|
||||
uint freq = m_Fractorium->m_PaletteFrequencySpin->value();
|
||||
double sat = double(m_Fractorium->m_PaletteSaturationSpin->value() / 100.0);
|
||||
|
@ -1,14 +1,15 @@
|
||||
#ifndef FRACTORIUM_PCH
|
||||
#define FRACTORIUM_PCH
|
||||
#ifndef FRACTORIUM_PCH_H
|
||||
#define FRACTORIUM_PCH_H//GCC doesn't like #pragma once
|
||||
|
||||
#define GL_GLEXT_PROTOTYPES 1
|
||||
#define XFORM_COLOR_COUNT 14
|
||||
|
||||
#undef QT_OPENGL_ES_2//Make absolutely sure OpenGL ES is not used.
|
||||
#define QT_NO_OPENGL_ES_2
|
||||
#ifdef _WIN32
|
||||
#pragma warning(disable : 4251; disable : 4661; disable : 4100)
|
||||
#endif
|
||||
|
||||
#ifndef WIN32
|
||||
#include <QtWidgets>
|
||||
//Has to come first on non-Windows platforms due to some weird naming collisions on *nix.
|
||||
#ifndef _WIN32
|
||||
#include <QtWidgets>
|
||||
#endif
|
||||
|
||||
#include "Renderer.h"
|
||||
@ -21,8 +22,8 @@
|
||||
#include "JpegUtils.h"
|
||||
#include "EmberCommon.h"
|
||||
|
||||
#ifdef WIN32
|
||||
#include <QtWidgets>
|
||||
#ifdef _WIN32
|
||||
#include <QtWidgets>
|
||||
#endif
|
||||
|
||||
#include <deque>
|
||||
@ -77,12 +78,11 @@
|
||||
#include "glm/gtc/matrix_transform.hpp"
|
||||
#include "glm/gtc/type_ptr.hpp"
|
||||
|
||||
#ifndef WIN32
|
||||
#undef Bool
|
||||
#ifndef _WIN32
|
||||
#undef Bool
|
||||
#endif
|
||||
|
||||
using namespace std;
|
||||
using namespace EmberNs;
|
||||
using namespace EmberCLns;
|
||||
|
||||
#endif
|
||||
|
@ -651,7 +651,6 @@ bool Fractorium::CreateRendererFromOptions()
|
||||
/// <returns>True if successful, else false.</returns>
|
||||
bool Fractorium::CreateControllerFromOptions()
|
||||
{
|
||||
bool ok = true;
|
||||
size_t elementSize =
|
||||
#ifdef DO_DOUBLE
|
||||
m_Settings->Double() ? sizeof(double) :
|
||||
@ -666,6 +665,7 @@ bool Fractorium::CreateControllerFromOptions()
|
||||
auto con = m_PaletteContrastSpin->value();
|
||||
auto blur = m_PaletteBlurSpin->value();
|
||||
auto freq = m_PaletteFrequencySpin->value();
|
||||
double scale;
|
||||
#ifdef DO_DOUBLE
|
||||
Ember<double> ed;
|
||||
EmberFile<double> efd;
|
||||
@ -680,6 +680,7 @@ bool Fractorium::CreateControllerFromOptions()
|
||||
//First check if a controller has already been created, and if so, save its embers and gracefully shut it down.
|
||||
if (m_Controller.get())
|
||||
{
|
||||
scale = m_Controller->LockedScale();
|
||||
m_Controller->StopPreviewRender();//Must stop any previews first, else changing controllers will crash the program.
|
||||
m_Controller->CopyTempPalette(tempPalette);//Convert float to double or save double verbatim;
|
||||
//Replace below with this once LLVM fixes a crash in their compiler with default lambda parameters.//TODO
|
||||
@ -709,6 +710,7 @@ bool Fractorium::CreateControllerFromOptions()
|
||||
ed.m_Palette = tempPalette;//Restore base temp palette. Adjustments will be then be applied and stored back in in m_Ember.m_Palette below.
|
||||
m_Controller->SetEmber(ed);//Convert float to double or set double verbatim. This will assign m_Ember.m_Palette (which was just tempPalette) to m_TempPalette.
|
||||
m_Controller->SetEmberFile(efd);
|
||||
m_Controller->LockedScale(scale);
|
||||
//Setting these and updating the GUI overwrites the work of clearing them done in SetEmber() above.
|
||||
//It's a corner case, but doesn't seem to matter.
|
||||
m_PaletteHueSpin->SetValueStealth(hue);
|
||||
|
@ -28,7 +28,7 @@ void Fractorium::InitXformsUI()
|
||||
ui.XformWeightNameTable->setItem(0, 1, new QTableWidgetItem());
|
||||
connect(ui.XformWeightNameTable, SIGNAL(cellChanged(int, int)), this, SLOT(OnXformNameChanged(int, int)), Qt::QueuedConnection);
|
||||
ui.CurrentXformCombo->setProperty("soloxform", -1);
|
||||
#ifndef WIN32
|
||||
#ifndef _WIN32
|
||||
//For some reason linux makes these 24x24, even though the designer explicitly says 16x16.
|
||||
ui.AddXformButton->setIconSize(QSize(16, 16));
|
||||
ui.DuplicateXformButton->setIconSize(QSize(16, 16));
|
||||
@ -173,8 +173,6 @@ void FractoriumEmberController<T>::DuplicateXform()
|
||||
}, eXformUpdate::UPDATE_SELECTED_EXCEPT_FINAL, false);
|
||||
Update([&]()
|
||||
{
|
||||
auto combo = m_Fractorium->ui.CurrentXformCombo;
|
||||
|
||||
for (auto& it : vec)
|
||||
m_Ember.AddXform(it);
|
||||
|
||||
@ -213,7 +211,7 @@ void Fractorium::OnClearXformButtonClicked(bool checked) { m_Controller->ClearXf
|
||||
template <typename T>
|
||||
void FractoriumEmberController<T>::DeleteXforms()
|
||||
{
|
||||
int i = 0, offset = 0, current = 0, checked = 0;
|
||||
int offset = 0, current = 0, checked = 0;
|
||||
bool haveFinal = false;
|
||||
size_t count;
|
||||
auto combo = m_Fractorium->ui.CurrentXformCombo;
|
||||
@ -281,7 +279,6 @@ void FractoriumEmberController<T>::AddFinalXform()
|
||||
Update([&]()
|
||||
{
|
||||
Xform<T> final;
|
||||
auto combo = m_Fractorium->ui.CurrentXformCombo;
|
||||
final.AddVariation(m_VariationList.GetVariationCopy(eVariationId::VAR_LINEAR));//Just a placeholder so other parts of the code don't see it as being empty.
|
||||
m_Ember.SetFinalXform(final);
|
||||
int index = int(m_Ember.TotalXformCount() - 1);//Set index to the last item.
|
||||
|
@ -6,7 +6,7 @@
|
||||
/// </summary>
|
||||
void Fractorium::InitXformsAffineUI()
|
||||
{
|
||||
int row = 0, affinePrec = 6, spinHeight = 20;
|
||||
int affinePrec = 6, spinHeight = 20;
|
||||
double affineStep = 0.01, affineMin = std::numeric_limits<double>::lowest(), affineMax = std::numeric_limits<double>::max();
|
||||
auto table = ui.PreAffineTable;
|
||||
connect(ui.LockAffineCheckBox, SIGNAL(stateChanged(int)), this, SLOT(OnLockAffineScaleCheckBoxStateChanged(int)), Qt::QueuedConnection);
|
||||
@ -95,7 +95,7 @@ void Fractorium::InitXformsAffineUI()
|
||||
connect(ui.ShowPostAffineAllRadio, SIGNAL(toggled(bool)), this, SLOT(OnAffineDrawAllCurrentRadioButtonToggled(bool)), Qt::QueuedConnection);
|
||||
connect(ui.ShowPostAffineCurrentRadio, SIGNAL(toggled(bool)), this, SLOT(OnAffineDrawAllCurrentRadioButtonToggled(bool)), Qt::QueuedConnection);
|
||||
connect(ui.PolarAffineCheckBox, SIGNAL(stateChanged(int)), this, SLOT(OnPolarAffineCheckBoxStateChanged(int)), Qt::QueuedConnection);
|
||||
#ifndef WIN32
|
||||
#ifndef _WIN32
|
||||
//For some reason linux makes these 24x24, even though the designer explicitly says 16x16.
|
||||
//Also, in order to get 4 pixels of spacing between elements in the grid layout, 0 must be specified.
|
||||
ui.PreFlipHorizontalButton->setIconSize(QSize(16, 16));
|
||||
|
@ -201,7 +201,6 @@ void FractoriumEmberController<T>::VariationSpinBoxValueChanged(double d)//Would
|
||||
auto objSender = m_Fractorium->sender();
|
||||
auto tree = m_Fractorium->ui.VariationsTree;
|
||||
auto sender = dynamic_cast<VariationTreeDoubleSpinBox*>(objSender);
|
||||
auto xform = m_Ember.GetTotalXform(m_Fractorium->ui.CurrentXformCombo->currentIndex());//Will retrieve normal xform or final if needed.
|
||||
|
||||
if (sender)
|
||||
{
|
||||
|
@ -59,7 +59,6 @@ void GLWidget::InitGL()
|
||||
/// </summary>
|
||||
void GLWidget::DrawQuad()
|
||||
{
|
||||
GLint texWidth = 0, texHeight = 0;
|
||||
glEnable(GL_TEXTURE_2D);
|
||||
glEnable(GL_BLEND);
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
@ -417,9 +416,7 @@ void GLEmberController<T>::MousePress(QMouseEvent* e)
|
||||
{
|
||||
v3T mouseFlipped(e->x() * m_GL->devicePixelRatio(), m_Viewport[3] - e->y() * m_GL->devicePixelRatio(), 0);//Must flip y because in OpenGL, 0,0 is bottom left, but in windows, it's top left.
|
||||
auto ember = m_FractoriumEmberController->CurrentEmber();
|
||||
auto xforms = ember->TotalXformCount();
|
||||
auto renderer = m_FractoriumEmberController->Renderer();
|
||||
size_t i = 0;
|
||||
|
||||
//Ensure everything has been initialized.
|
||||
if (!renderer)
|
||||
|
@ -8,28 +8,24 @@
|
||||
/// <param name="argc">The number of command line arguments passed</param>
|
||||
/// <param name="argv">The command line arguments passed</param>
|
||||
/// <returns>0 if successful, else 1.</returns>
|
||||
int main(int argc, char *argv[])
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
QApplication a(argc, argv);
|
||||
|
||||
#ifdef TEST_CL
|
||||
QMessageBox::critical(QApplication::desktop(), "Error", "Fractorium cannot be run in test mode, undefine TEST_CL first.");
|
||||
return 1;
|
||||
#endif
|
||||
|
||||
#ifdef ISAAC_FLAM3_DEBUG
|
||||
QMessageBox::critical(QApplication::desktop(), "Error", "Fractorium cannot be run in test mode, undefine ISAAC_FLAM3_DEBUG first.");
|
||||
return 1;
|
||||
#endif
|
||||
|
||||
//Required for large allocs, else GPU memory usage will be severely limited to small sizes.
|
||||
//This must be done in the application and not in the EmberCL DLL.
|
||||
#ifdef WIN32
|
||||
#ifdef _WIN32
|
||||
_putenv_s("GPU_MAX_ALLOC_PERCENT", "100");
|
||||
#else
|
||||
putenv(const_cast<char*>("GPU_MAX_ALLOC_PERCENT=100"));
|
||||
#endif
|
||||
|
||||
int rv = -1;
|
||||
|
||||
try
|
||||
|
Reference in New Issue
Block a user