--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:
mfeemster
2016-03-01 17:26:45 -08:00
parent 695b8fc823
commit 7c856c929c
70 changed files with 1300 additions and 4046 deletions

View File

@ -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() + '/';

View File

@ -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;
}
}

View File

@ -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));

View File

@ -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.

View File

@ -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"

View File

@ -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);

View File

@ -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);

View File

@ -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

View File

@ -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);

View File

@ -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.

View File

@ -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));

View File

@ -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)
{

View File

@ -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)

View File

@ -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