1.0.0.2 12/05/2016

--User changes
 -Add many tooltips to help clarify functionality.
 -Select multiple flames in library for del/move. Still only one allowed to be set as the current.
 -Show checkbox for current flame. Remember this is not necessarily what's selected.
 -User can now drag a square to select xforms, which keeps in sync with checkboxes.
 -Remove --nframes from command line. Replace with new params: --loopframes, --interpframes, --interploops.
 -Add two new options to EmberGenome: --cwloops --cwinterploops to specify whether rotation should go clockwise instead of the default counter clockwise.
 -Add these to Fractorium as checkboxes.
 -Apply All now also works for toggling animate flag on xforms.
 -Options dialog now allows user to set whether double click toggles spinners, or right click does.

--Bug fixes
 -Selecting final and non-final xforms, and then dragging the non-final did not drag the final with it.
 -Selecting all xforms when a final was present, then deleting crashed the program.
 -Remove support for ppm files in the command line programs, it's an outdated format.
 -Switching between SP and DP kept reapplying the palette adjustments.

--Code changes
 -Move build system to Visual Studio 2015 and Qt 5.6.
 -SSE used during addition of points to the histogram.
 -Remove last remnants of old flam3 C code and replace with C++.
 -Remove unused code involving tbb::task_group.
 -Make settings object a global shared_ptr singleton, so it doesn't have to be passed around.
This commit is contained in:
Person 2016-12-05 19:04:33 -08:00
parent 53ec438a25
commit 5cdfe0b6b9
83 changed files with 4892 additions and 1156 deletions

22
.gitignore vendored
View File

@ -27,9 +27,24 @@
*.msi *.msi
*.idb *.idb
*.flam3 *.flam3
*.flame
*.bmp
*.jpg
*.png
*.zip
*.avi
*.ini
*.bin
*.aps
*.db
*.opendb
*moc_* *moc_*
*GeneratedFiles* *GeneratedFiles*
*.unsuccessfulbuild *.unsuccessfulbuild
*~*
*-pre1
Makefile.Debug
Makefile.Release
*\Obj\* *\Obj\*
Builds/MSVC/VS2013/Obj/x64/Debug/EmberCL_manifest.rc Builds/MSVC/VS2013/Obj/x64/Debug/EmberCL_manifest.rc
Builds/MSVC/VS2013/Obj/EmberTester/x64/Debug/EmberTester_manifest.rc Builds/MSVC/VS2013/Obj/EmberTester/x64/Debug/EmberTester_manifest.rc
@ -38,8 +53,12 @@ Builds/MSVC/VS2013/Obj/EmberGenome/x64/Debug/EmberGenome_manifest.rc
Builds/MSVC/VS2013/Obj/EmberAnimate/x64/Debug/EmberAnimate_manifest.rc Builds/MSVC/VS2013/Obj/EmberAnimate/x64/Debug/EmberAnimate_manifest.rc
Builds/MSVC/VS2013/Obj/Ember/x64/Debug/Ember_manifest.rc Builds/MSVC/VS2013/Obj/Ember/x64/Debug/Ember_manifest.rc
Builds/MSVC/Installer/obj/ Builds/MSVC/Installer/obj/
Builds/MSVC/VS2015/GeneratedFiles
Builds/MSVC/VS2015/ipch
Builds/MSVC/VS2015/Obj
Bin/x64/Release/testallvarsout.flame Bin/x64/Release/testallvarsout.flame
Data/~$Bench.xlsx fractorium.com/
Site/
*.ps1 *.ps1
*.o *.o
ui_*.h ui_*.h
@ -65,3 +84,4 @@ Builds/QtCreator/Fractorium/Makefile
Builds/lib/libOpenCL.so Builds/lib/libOpenCL.so
Builds/include/CL Builds/include/CL
Builds/include/GL Builds/include/GL
/Data/Variations Bench.xlsx

View File

@ -6,7 +6,7 @@
<ProductVersion>3.7</ProductVersion> <ProductVersion>3.7</ProductVersion>
<ProjectGuid>{c8096c47-e358-438c-a520-146d46b0637d}</ProjectGuid> <ProjectGuid>{c8096c47-e358-438c-a520-146d46b0637d}</ProjectGuid>
<SchemaVersion>2.0</SchemaVersion> <SchemaVersion>2.0</SchemaVersion>
<OutputName>Fractorium_1.0.0.1</OutputName> <OutputName>Fractorium_1.0.0.2</OutputName>
<OutputType>Package</OutputType> <OutputType>Package</OutputType>
<WixTargetsPath Condition=" '$(WixTargetsPath)' == '' AND '$(MSBuildExtensionsPath32)' != '' ">$(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\Wix.targets</WixTargetsPath> <WixTargetsPath Condition=" '$(WixTargetsPath)' == '' AND '$(MSBuildExtensionsPath32)' != '' ">$(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\Wix.targets</WixTargetsPath>
<WixTargetsPath Condition=" '$(WixTargetsPath)' == '' ">$(MSBuildExtensionsPath)\Microsoft\WiX\v3.x\Wix.targets</WixTargetsPath> <WixTargetsPath Condition=" '$(WixTargetsPath)' == '' ">$(MSBuildExtensionsPath)\Microsoft\WiX\v3.x\Wix.targets</WixTargetsPath>

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<?define ProductVersion="1.0.0.1" ?> <?define ProductVersion="1.0.0.2" ?>
<?define ProductName="Fractorium $(var.ProductVersion) ($(var.GpuType))" ?> <?define ProductName="Fractorium $(var.ProductVersion) ($(var.GpuType))" ?>
<?define UpgradeCode="{4714cd15-bfba-44f6-8059-9e1466ebfa6e}"?> <?define UpgradeCode="{4714cd15-bfba-44f6-8059-9e1466ebfa6e}"?>
<?define Manufacturer="Fractorium"?> <?define Manufacturer="Fractorium"?>
@ -13,7 +13,7 @@
<!-- <!--
Change this for every release. Change this for every release.
--> -->
<?define ProductCode="{93E17CD3-46AA-4AD6-8531-3DF61721B48D}"?> <?define ProductCode="{08AE2B75-565F-4E0D-A1A0-C7A5ED1CA2C1}"?>
<Product Id="$(var.ProductCode)" Name="$(var.ProductName)" Language="1033" Version="$(var.ProductVersion)" Manufacturer="$(var.Manufacturer)" UpgradeCode="$(var.UpgradeCode)"> <Product Id="$(var.ProductCode)" Name="$(var.ProductName)" Language="1033" Version="$(var.ProductVersion)" Manufacturer="$(var.Manufacturer)" UpgradeCode="$(var.UpgradeCode)">
<Package <Package
@ -146,14 +146,17 @@
<Component Id="tbb.dll" Guid="ffa1b2ec-32d5-41aa-9380-fb04d8139103"> <Component Id="tbb.dll" Guid="ffa1b2ec-32d5-41aa-9380-fb04d8139103">
<File Id="tbb.dll" Source="$(var.SolutionDir)..\..\..\Bin\$(var.Platform)\Release\tbb.dll" KeyPath="yes" Checksum="yes" ProcessorArchitecture="x64"/> <File Id="tbb.dll" Source="$(var.SolutionDir)..\..\..\Bin\$(var.Platform)\Release\tbb.dll" KeyPath="yes" Checksum="yes" ProcessorArchitecture="x64"/>
</Component> </Component>
<Component Id="msvcp120.dll" Guid="8f1ffde7-c1bd-45fb-8bc8-26dde552eafd"> <Component Id="msvcp140.dll" Guid="8f1ffde7-c1bd-45fb-8bc8-26dde552eafd">
<File Id="msvcp120.dll" Source="$(env.VS120COMNTOOLS)..\..\VC\redist\x64\Microsoft.VC120.CRT\msvcp120.dll" KeyPath="yes" Checksum="yes" /> <File Id="msvcp140.dll" Source="$(env.VS140COMNTOOLS)..\..\VC\redist\x64\Microsoft.VC140.CRT\msvcp140.dll" KeyPath="yes" Checksum="yes" />
</Component> </Component>
<Component Id="msvcr120.dll" Guid="50c9bc27-c547-4a03-9f6c-cd416f449dd8"> <Component Id="vcruntime140.dll" Guid="50c9bc27-c547-4a03-9f6c-cd416f449dd8">
<File Id="msvcr120.dll" Source="$(env.VS120COMNTOOLS)..\..\VC\redist\x64\Microsoft.VC120.CRT\msvcr120.dll" KeyPath="yes" Checksum="yes" /> <File Id="vcruntime140.dll" Source="$(env.VS140COMNTOOLS)..\..\VC\redist\x64\Microsoft.VC140.CRT\vcruntime140.dll" KeyPath="yes" Checksum="yes" />
</Component> </Component>
<Component Id="vccorlib120.dll" Guid="affe33e7-1e64-4bb0-a062-2b56f77459b4"> <Component Id="vccorlib140.dll" Guid="affe33e7-1e64-4bb0-a062-2b56f77459b4">
<File Id="vccorlib120.dll" Source="$(env.VS120COMNTOOLS)..\..\VC\redist\x64\Microsoft.VC120.CRT\vccorlib120.dll" KeyPath="yes" Checksum="yes" /> <File Id="vccorlib140.dll" Source="$(env.VS140COMNTOOLS)..\..\VC\redist\x64\Microsoft.VC140.CRT\vccorlib140.dll" KeyPath="yes" Checksum="yes" />
</Component>
<Component Id="concrt140.dll" Guid="7fb716a1-1b4f-42fb-89c7-4d216ebd6e2e">
<File Id="concrt140.dll" Source="$(env.VS140COMNTOOLS)..\..\VC\redist\x64\Microsoft.VC140.CRT\concrt140.dll" KeyPath="yes" Checksum="yes" />
</Component> </Component>
<Component Id="flam3palettes.xml" Guid="d3adb0bb-14ef-4923-99d9-a5784b7ef04e"> <Component Id="flam3palettes.xml" Guid="d3adb0bb-14ef-4923-99d9-a5784b7ef04e">
<File Id="flam3palettes.xml" Source="$(var.SolutionDir)..\..\..\Data\flam3-palettes.xml" KeyPath="yes" Checksum="yes" /> <File Id="flam3palettes.xml" Source="$(var.SolutionDir)..\..\..\Data\flam3-palettes.xml" KeyPath="yes" Checksum="yes" />

BIN
Builds/MSVC/VS2015/Ember.rc Normal file

Binary file not shown.

View File

@ -0,0 +1,166 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{2BDB7A54-BB1A-476B-A6E5-F81E90AD4E67}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>EmberNs</RootNamespace>
<ProjectName>Ember</ProjectName>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>MultiByte</CharacterSet>
<WholeProgramOptimization>false</WholeProgramOptimization>
<PlatformToolset>v140</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>false</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>v140</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
<OutDir>$(SolutionDir)..\..\..\Bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)Obj\$(TargetName)\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
<OutDir>$(SolutionDir)..\..\..\Bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)Obj\$(TargetName)\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;BUILDING_EMBER;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ProgramDataBaseFileName>$(TargetDir)$(TargetName).pdb</ProgramDataBaseFileName>
<DisableSpecificWarnings>
</DisableSpecificWarnings>
<AdditionalIncludeDirectories>$(ProjectDir)..\..\..\..\glm;$(ProjectDir)..\..\..\..\libxml2\include;$(ProjectDir)..\..\..\..\tbb\include</AdditionalIncludeDirectories>
<StructMemberAlignment>Default</StructMemberAlignment>
<PrecompiledHeaderFile>EmberPch.h</PrecompiledHeaderFile>
<FloatingPointModel>Precise</FloatingPointModel>
<AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
<StringPooling>true</StringPooling>
<FloatingPointExceptions>false</FloatingPointExceptions>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<MinimalRebuild>false</MinimalRebuild>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>libxml2.lib;tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>$(ProjectDir)..\..\..\Deps;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>Use</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;BUILDING_EMBER;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ProgramDataBaseFileName>$(TargetDir)$(TargetName).pdb</ProgramDataBaseFileName>
<DisableSpecificWarnings>
</DisableSpecificWarnings>
<AdditionalIncludeDirectories>$(ProjectDir)..\..\..\..\glm;$(ProjectDir)..\..\..\..\libxml2\include;$(ProjectDir)..\..\..\..\tbb\include</AdditionalIncludeDirectories>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<PrecompiledHeaderFile>EmberPch.h</PrecompiledHeaderFile>
<StringPooling>true</StringPooling>
<AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
<FloatingPointModel>Precise</FloatingPointModel>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<FloatingPointExceptions>false</FloatingPointExceptions>
<BufferSecurityCheck>false</BufferSecurityCheck>
<MinimalRebuild>false</MinimalRebuild>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalDependencies>libxml2.lib;tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>$(ProjectDir)..\..\..\Deps;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClInclude Include="..\..\..\Source\Ember\Affine2D.h" />
<ClInclude Include="..\..\..\Source\Ember\CarToRas.h" />
<ClInclude Include="..\..\..\Source\Ember\Curves.h" />
<ClInclude Include="..\..\..\Source\Ember\EmberDefines.h" />
<ClInclude Include="..\..\..\Source\Ember\EmberMotion.h" />
<ClInclude Include="..\..\..\Source\Ember\EmberPch.h" />
<ClInclude Include="..\..\..\Source\Ember\Ember.h" />
<ClInclude Include="..\..\..\Source\Ember\DensityFilter.h" />
<ClInclude Include="..\..\..\Source\Ember\Interpolate.h" />
<ClInclude Include="..\..\..\Source\Ember\VarFuncs.h" />
<ClInclude Include="..\..\..\Source\Ember\PaletteList.h" />
<ClInclude Include="..\..\..\Source\Ember\Renderer.h" />
<ClInclude Include="..\..\..\Source\Ember\RendererBase.h" />
<ClInclude Include="..\..\..\Source\Ember\SpatialFilter.h" />
<ClInclude Include="..\..\..\Source\Ember\Iterator.h" />
<ClInclude Include="..\..\..\Source\Ember\Palette.h" />
<ClInclude Include="..\..\..\Source\Ember\Point.h" />
<ClInclude Include="..\..\..\Source\Ember\TemporalFilter.h" />
<ClInclude Include="..\..\..\Source\Ember\EmberToXml.h" />
<ClInclude Include="..\..\..\Source\Ember\SheepTools.h" />
<ClInclude Include="..\..\..\Source\Ember\Utils.h" />
<ClInclude Include="..\..\..\Source\Ember\Variation.h" />
<ClInclude Include="..\..\..\Source\Ember\VariationList.h" />
<ClInclude Include="..\..\..\Source\Ember\Variations01.h" />
<ClInclude Include="..\..\..\Source\Ember\Variations02.h" />
<ClInclude Include="..\..\..\Source\Ember\Variations03.h" />
<ClInclude Include="..\..\..\Source\Ember\Variations04.h" />
<ClInclude Include="..\..\..\Source\Ember\Variations05.h" />
<ClInclude Include="..\..\..\Source\Ember\Variations06.h" />
<ClInclude Include="..\..\..\Source\Ember\Variations07.h" />
<ClInclude Include="..\..\..\Source\Ember\VariationsDC.h" />
<ClInclude Include="..\..\..\Source\Ember\Xform.h" />
<ClInclude Include="..\..\..\Source\Ember\Isaac.h" />
<ClInclude Include="..\..\..\Source\Ember\Timing.h" />
<ClInclude Include="..\..\..\Source\Ember\XmlToEmber.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\..\Source\Ember\Affine2D.cpp" />
<ClCompile Include="..\..\..\Source\Ember\DllMain.cpp" />
<ClCompile Include="..\..\..\Source\Ember\Ember.cpp" />
<ClCompile Include="..\..\..\Source\Ember\EmberPch.cpp">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
</ClCompile>
<ClCompile Include="..\..\..\Source\Ember\Renderer.cpp" />
<ClCompile Include="..\..\..\Source\Ember\RendererBase.cpp" />
<ClCompile Include="..\..\..\Source\Ember\VariationList.cpp" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="Ember.rc" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View File

@ -0,0 +1,160 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
<Filter Include="Header Files\Xml">
<UniqueIdentifier>{bc119dca-b280-4071-b72d-f8c377b2e192}</UniqueIdentifier>
</Filter>
<Filter Include="Header Files\Filters">
<UniqueIdentifier>{39f9b624-d25e-4af7-9f76-3b1a36a8a0f5}</UniqueIdentifier>
</Filter>
<Filter Include="Header Files\Variations">
<UniqueIdentifier>{1ae77918-b5ee-4186-9fec-802fed55144e}</UniqueIdentifier>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{782f9ed7-c2d4-4cad-9676-f707ccde10a6}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\..\Source\Ember\Timing.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\Ember\Isaac.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\Ember\EmberPch.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\Ember\Interpolate.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\Ember\Iterator.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\Ember\Palette.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\Ember\PaletteList.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\Ember\Point.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\Ember\Renderer.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\Ember\Utils.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\Ember\Xform.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\Ember\DensityFilter.h">
<Filter>Header Files\Filters</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\Ember\SpatialFilter.h">
<Filter>Header Files\Filters</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\Ember\TemporalFilter.h">
<Filter>Header Files\Filters</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\Ember\EmberToXml.h">
<Filter>Header Files\Xml</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\Ember\XmlToEmber.h">
<Filter>Header Files\Xml</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\Ember\CarToRas.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\Ember\EmberDefines.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\Ember\Ember.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\Ember\Affine2D.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\Ember\SheepTools.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\Ember\Variation.h">
<Filter>Header Files\Variations</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\Ember\VariationList.h">
<Filter>Header Files\Variations</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\Ember\Variations01.h">
<Filter>Header Files\Variations</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\Ember\Variations02.h">
<Filter>Header Files\Variations</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\Ember\Variations03.h">
<Filter>Header Files\Variations</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\Ember\Variations04.h">
<Filter>Header Files\Variations</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\Ember\Variations05.h">
<Filter>Header Files\Variations</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\Ember\VariationsDC.h">
<Filter>Header Files\Variations</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\Ember\RendererBase.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\Ember\Curves.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\Ember\EmberMotion.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\Ember\Variations06.h">
<Filter>Header Files\Variations</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\Ember\VarFuncs.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\Ember\Variations07.h">
<Filter>Header Files\Variations</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\..\Source\Ember\DllMain.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\Ember\Ember.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\Ember\EmberPch.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\Ember\Affine2D.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\Ember\Renderer.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\Ember\RendererBase.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\Ember\VariationList.cpp">
<Filter>Header Files\Variations</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="Ember.rc">
<Filter>Resource Files</Filter>
</ResourceCompile>
</ItemGroup>
</Project>

View File

@ -0,0 +1,98 @@
// Microsoft Visual C++ generated resource script.
//
#include <windows.h>
#include "resource.h"
/////////////////////////////////////////////////////////////////////////////
// English (United States) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252)
/////////////////////////////////////////////////////////////////////////////
//
// Icon
//
// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
IDI_ICON1 ICON "..\\..\\..\\Source\\Fractorium\\Icons\\Fractorium.ico"
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE
BEGIN
"resource.h\0"
END
2 TEXTINCLUDE
BEGIN
"\0"
END
3 TEXTINCLUDE
BEGIN
"\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Version
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1, 0, 0, 2
PRODUCTVERSION 1, 0, 0, 2
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x40004L
FILETYPE 0x0L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904b0"
BEGIN
VALUE "CompanyName", "Open Source"
VALUE "FileDescription", "Renders fractal flames as animations with motion blur"
VALUE "FileVersion", "1.0.0.2"
VALUE "InternalName", "EmberAnimate.exe"
VALUE "LegalCopyright", "Copyright (C) Matt Feemster 2016, GPL v3"
VALUE "OriginalFilename", "EmberAnimate.exe"
VALUE "ProductName", "Ember Animate"
VALUE "ProductVersion", "1.0.0.2"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1200
END
END
#endif // English (United States) resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED

View File

@ -0,0 +1,149 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{35285FCF-6FA8-410E-841B-70AE744D38B8}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>EmberAnimate</RootNamespace>
<ProjectName>EmberAnimate</ProjectName>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>MultiByte</CharacterSet>
<WholeProgramOptimization>false</WholeProgramOptimization>
<PlatformToolset>v140</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>false</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>v140</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
<OutDir>$(SolutionDir)..\..\..\Bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)Obj\$(TargetName)\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
<OutDir>$(SolutionDir)..\..\..\Bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)Obj\$(TargetName)\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ProgramDataBaseFileName>$(TargetDir)$(TargetName).pdb</ProgramDataBaseFileName>
<AdditionalIncludeDirectories>$(ProjectDir)..\..\..\Source\Ember;$(ProjectDir)..\..\..\Source\EmberCommon;$(ProjectDir)..\..\..\Source\EmberCL;$(ProjectDir)..\..\..\..\glm;$(ProjectDir)..\..\..\..\tbb\include;$(ProjectDir)..\..\..\..\libjpeg;$(ProjectDir)..\..\..\..\libpng;$(ProjectDir)..\..\..\..\libxml2\include;$(AMDAPPSDKROOT)\include;$(CUDA_PATH)\include</AdditionalIncludeDirectories>
<DisableSpecificWarnings>
</DisableSpecificWarnings>
<PrecompiledHeaderFile>EmberCommonPch.h</PrecompiledHeaderFile>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<MinimalRebuild>false</MinimalRebuild>
<StringPooling>true</StringPooling>
<FloatingPointExceptions>false</FloatingPointExceptions>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>libjpeg.lib;libpng.lib;libxml2.lib;tbb.lib;zlib.lib;opencl.lib;Ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>$(ProjectDir)..\..\..\Deps;$(AMDAPPSDKROOT)\lib\x86_64;$(CUDA_PATH)\lib\$(PlatformName)</AdditionalLibraryDirectories>
</Link>
<PostBuildEvent>
<Command>xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Deps\*.dll" "$(OutDir)"
xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\flam3-palettes.xml" "$(OutDir)"
</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>Use</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ProgramDataBaseFileName>$(TargetDir)$(TargetName).pdb</ProgramDataBaseFileName>
<AdditionalIncludeDirectories>$(ProjectDir)..\..\..\Source\Ember;$(ProjectDir)..\..\..\Source\EmberCommon;$(ProjectDir)..\..\..\Source\EmberCL;$(ProjectDir)..\..\..\..\glm;$(ProjectDir)..\..\..\..\tbb\include;$(ProjectDir)..\..\..\..\libjpeg;$(ProjectDir)..\..\..\..\libpng;$(ProjectDir)..\..\..\..\libxml2\include;$(AMDAPPSDKROOT)\include;$(CUDA_PATH)\include</AdditionalIncludeDirectories>
<DisableSpecificWarnings>
</DisableSpecificWarnings>
<PrecompiledHeaderFile>EmberCommonPch.h</PrecompiledHeaderFile>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<StringPooling>true</StringPooling>
<FloatingPointExceptions>false</FloatingPointExceptions>
<BufferSecurityCheck>false</BufferSecurityCheck>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalDependencies>libjpeg.lib;libpng.lib;libxml2.lib;tbb.lib;zlib.lib;opencl.lib;Ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>$(ProjectDir)..\..\..\Deps;$(AMDAPPSDKROOT)\lib\x86_64;$(CUDA_PATH)\lib\$(PlatformName)</AdditionalLibraryDirectories>
</Link>
<PostBuildEvent>
<Command>xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Deps\*.dll" "$(OutDir)"
xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\flam3-palettes.xml" "$(OutDir)"
</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemGroup>
<None Include="..\..\..\Source\Fractorium\Icons\Fractorium.ico" />
<None Include="ReadMe.txt" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="Ember.vcxproj">
<Project>{2bdb7a54-bb1a-476b-a6e5-f81e90ad4e67}</Project>
</ProjectReference>
<ProjectReference Include="EmberCL.vcxproj">
<Project>{f6a9102c-69a9-48fb-bc4b-49e49af43236}</Project>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\..\Source\EmberAnimate\EmberAnimate.h" />
<ClInclude Include="..\..\..\Source\EmberAnimate\resource.h" />
<ClInclude Include="..\..\..\Source\EmberCommon\EmberCommon.h" />
<ClInclude Include="..\..\..\Source\EmberCommon\EmberCommonPch.h" />
<ClInclude Include="..\..\..\Source\EmberCommon\EmberOptions.h" />
<ClInclude Include="..\..\..\Source\EmberCommon\JpegUtils.h" />
<ClInclude Include="..\..\..\Source\EmberCommon\SimpleGlob.h" />
<ClInclude Include="..\..\..\Source\EmberCommon\SimpleOpt.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\..\Source\EmberAnimate\EmberAnimate.cpp" />
<ClCompile Include="..\..\..\Source\EmberCommon\EmberCommonPch.cpp">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="EmberAnimate.rc" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View File

@ -0,0 +1,62 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<None Include="ReadMe.txt" />
<None Include="..\..\..\Source\Fractorium\Icons\Fractorium.ico">
<Filter>Resource Files</Filter>
</None>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\..\Source\EmberCommon\EmberCommonPch.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\EmberCommon\JpegUtils.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\EmberCommon\SimpleGlob.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\EmberCommon\SimpleOpt.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\EmberCommon\EmberCommon.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\EmberCommon\EmberOptions.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\EmberAnimate\EmberAnimate.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\EmberAnimate\resource.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\..\Source\EmberCommon\EmberCommonPch.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\EmberAnimate\EmberAnimate.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="EmberAnimate.rc">
<Filter>Resource Files</Filter>
</ResourceCompile>
</ItemGroup>
</Project>

Binary file not shown.

View File

@ -0,0 +1,151 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{F6A9102C-69A9-48FB-BC4B-49E49AF43236}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>EmberCLns</RootNamespace>
<ProjectName>EmberCL</ProjectName>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>MultiByte</CharacterSet>
<WholeProgramOptimization>false</WholeProgramOptimization>
<PlatformToolset>v140</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>false</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>v140</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
<OutDir>$(SolutionDir)..\..\..\Bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)Obj\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
<OutDir>$(SolutionDir)..\..\..\Bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)Obj\$(TargetName)\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;BUILDING_EMBERCL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ProgramDataBaseFileName>$(TargetDir)$(TargetName).pdb</ProgramDataBaseFileName>
<DisableSpecificWarnings>
</DisableSpecificWarnings>
<AdditionalIncludeDirectories>$(ProjectDir)..\..\..\Source\Ember\;$(ProjectDir)..\..\..\..\glm;$(ProjectDir)..\..\..\..\tbb\include;$(ProjectDir)..\..\..\..\libxml2\include;$(AMDAPPSDKROOT)\include;$(CUDA_PATH)\include</AdditionalIncludeDirectories>
<StructMemberAlignment>Default</StructMemberAlignment>
<PrecompiledHeaderFile>EmberCLPch.h</PrecompiledHeaderFile>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<MinimalRebuild>false</MinimalRebuild>
<StringPooling>true</StringPooling>
<FloatingPointExceptions>false</FloatingPointExceptions>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>libxml2.lib;tbb.lib;opencl.lib;Opengl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>$(ProjectDir)..\..\..\Deps;$(AMDAPPSDKROOT)\lib\x86_64;$(CUDA_PATH)\lib\$(PlatformName)</AdditionalLibraryDirectories>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>Use</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;BUILDING_EMBERCL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ProgramDataBaseFileName>$(TargetDir)$(TargetName).pdb</ProgramDataBaseFileName>
<DisableSpecificWarnings>
</DisableSpecificWarnings>
<AdditionalIncludeDirectories>$(ProjectDir)..\..\..\Source\Ember\;$(ProjectDir)..\..\..\..\glm;$(ProjectDir)..\..\..\..\tbb\include;$(ProjectDir)..\..\..\..\libxml2\include;$(AMDAPPSDKROOT)\include;$(CUDA_PATH)\include</AdditionalIncludeDirectories>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<PrecompiledHeaderFile>EmberCLPch.h</PrecompiledHeaderFile>
<AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
<FloatingPointModel>Precise</FloatingPointModel>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<FloatingPointExceptions>false</FloatingPointExceptions>
<StringPooling>true</StringPooling>
<BufferSecurityCheck>false</BufferSecurityCheck>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalDependencies>libxml2.lib;tbb.lib;opencl.lib;Opengl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>$(ProjectDir)..\..\..\Deps;$(AMDAPPSDKROOT)\lib\x86_64;$(CUDA_PATH)\lib\$(PlatformName)</AdditionalLibraryDirectories>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ProjectReference Include="Ember.vcxproj">
<Project>{2bdb7a54-bb1a-476b-a6e5-f81e90ad4e67}</Project>
<Private>true</Private>
<ReferenceOutputAssembly>true</ReferenceOutputAssembly>
<CopyLocalSatelliteAssemblies>false</CopyLocalSatelliteAssemblies>
<LinkLibraryDependencies>true</LinkLibraryDependencies>
<UseLibraryDependencyInputs>false</UseLibraryDependencyInputs>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\..\Source\EmberCL\DllMain.cpp">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
</ClCompile>
<ClCompile Include="..\..\..\Source\EmberCL\FinalAccumOpenCLKernelCreator.cpp" />
<ClCompile Include="..\..\..\Source\EmberCL\DEOpenCLKernelCreator.cpp" />
<ClCompile Include="..\..\..\Source\EmberCL\FunctionMapper.cpp" />
<ClCompile Include="..\..\..\Source\EmberCL\IterOpenCLKernelCreator.cpp" />
<ClCompile Include="..\..\..\Source\EmberCL\OpenCLInfo.cpp" />
<ClCompile Include="..\..\..\Source\EmberCL\OpenCLWrapper.cpp" />
<ClCompile Include="..\..\..\Source\EmberCL\RendererCL.cpp" />
<ClCompile Include="..\..\..\Source\EmberCL\RendererClDevice.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\..\Source\EmberCL\EmberCLFunctions.h" />
<ClInclude Include="..\..\..\Source\EmberCL\EmberCLStructs.h" />
<ClInclude Include="..\..\..\Source\EmberCL\DEOpenCLKernelCreator.h" />
<ClInclude Include="..\..\..\Source\EmberCL\FinalAccumOpenCLKernelCreator.h" />
<ClInclude Include="..\..\..\Source\EmberCL\FunctionMapper.h" />
<ClInclude Include="..\..\..\Source\EmberCL\IterOpenCLKernelCreator.h" />
<ClInclude Include="..\..\..\Source\EmberCL\OpenCLInfo.h" />
<ClInclude Include="..\..\..\Source\EmberCL\OpenCLWrapper.h" />
<ClInclude Include="..\..\..\Source\EmberCL\RendererCL.h" />
<ClInclude Include="..\..\..\Source\EmberCL\EmberCLPch.h" />
<ClInclude Include="..\..\..\Source\EmberCL\RendererClDevice.h" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="EmberCL.rc" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View File

@ -0,0 +1,89 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
<Filter Include="Kernel Creators">
<UniqueIdentifier>{d66f35ca-a4cd-470a-9c56-653b0665b598}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\..\Source\EmberCL\DllMain.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\EmberCL\OpenCLWrapper.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\EmberCL\RendererCL.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\EmberCL\DEOpenCLKernelCreator.cpp">
<Filter>Kernel Creators</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\EmberCL\FinalAccumOpenCLKernelCreator.cpp">
<Filter>Kernel Creators</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\EmberCL\IterOpenCLKernelCreator.cpp">
<Filter>Kernel Creators</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\EmberCL\RendererClDevice.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\EmberCL\OpenCLInfo.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\EmberCL\FunctionMapper.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\..\Source\EmberCL\OpenCLWrapper.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\EmberCL\RendererCL.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\EmberCL\EmberCLStructs.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\EmberCL\EmberCLPch.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\EmberCL\EmberCLFunctions.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\EmberCL\DEOpenCLKernelCreator.h">
<Filter>Kernel Creators</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\EmberCL\FinalAccumOpenCLKernelCreator.h">
<Filter>Kernel Creators</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\EmberCL\IterOpenCLKernelCreator.h">
<Filter>Kernel Creators</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\EmberCL\RendererClDevice.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\EmberCL\OpenCLInfo.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\EmberCL\FunctionMapper.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="EmberCL.rc">
<Filter>Resource Files</Filter>
</ResourceCompile>
</ItemGroup>
</Project>

View File

@ -0,0 +1,98 @@
// Microsoft Visual C++ generated resource script.
//
#include <windows.h>
#include "resource.h"
/////////////////////////////////////////////////////////////////////////////
// English (United States) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252)
/////////////////////////////////////////////////////////////////////////////
//
// Icon
//
// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
IDI_ICON1 ICON "..\\..\\..\\Source\\Fractorium\\Icons\\Fractorium.ico"
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE
BEGIN
"resource.h\0"
END
2 TEXTINCLUDE
BEGIN
"\0"
END
3 TEXTINCLUDE
BEGIN
"\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Version
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1, 0, 0, 2
PRODUCTVERSION 1, 0, 0, 2
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x40004L
FILETYPE 0x0L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904b0"
BEGIN
VALUE "CompanyName", "Open Source"
VALUE "FileDescription", "Manipulates fractal flames parameter files"
VALUE "FileVersion", "1.0.0.2"
VALUE "InternalName", "EmberGenome.exe"
VALUE "LegalCopyright", "Copyright (C) Matt Feemster 2016, GPL v3"
VALUE "OriginalFilename", "EmberGenome.exe"
VALUE "ProductName", "Ember Genome"
VALUE "ProductVersion", "1.0.0.2"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1200
END
END
#endif // English (United States) resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED

View File

@ -0,0 +1,148 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{7930CAAC-9FC4-4202-B6A3-E760F73F88B7}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>EmberGenome</RootNamespace>
<ProjectName>EmberGenome</ProjectName>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>MultiByte</CharacterSet>
<WholeProgramOptimization>false</WholeProgramOptimization>
<PlatformToolset>v140</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>false</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>v140</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
<OutDir>$(SolutionDir)..\..\..\Bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)Obj\$(TargetName)\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
<OutDir>$(SolutionDir)..\..\..\Bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)Obj\$(TargetName)\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ProgramDataBaseFileName>$(TargetDir)$(TargetName).pdb</ProgramDataBaseFileName>
<AdditionalIncludeDirectories>$(ProjectDir)..\..\..\Source\Ember;$(ProjectDir)..\..\..\Source\EmberCommon;$(ProjectDir)..\..\..\Source\EmberCL;$(ProjectDir)..\..\..\..\glm;$(ProjectDir)..\..\..\..\tbb\include;$(ProjectDir)..\..\..\..\libjpeg;$(ProjectDir)..\..\..\..\libpng;$(ProjectDir)..\..\..\..\libxml2\include;$(AMDAPPSDKROOT)\include;$(CUDA_PATH)\include</AdditionalIncludeDirectories>
<DisableSpecificWarnings>
</DisableSpecificWarnings>
<PrecompiledHeaderFile>EmberCommonPch.h</PrecompiledHeaderFile>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<MinimalRebuild>false</MinimalRebuild>
<StringPooling>true</StringPooling>
<FloatingPointExceptions>false</FloatingPointExceptions>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>libjpeg.lib;libpng.lib;libxml2.lib;tbb.lib;zlib.lib;opencl.lib;Ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>$(ProjectDir)..\..\..\Deps;$(AMDAPPSDKROOT)\lib\x86_64;$(CUDA_PATH)\lib\$(PlatformName)</AdditionalLibraryDirectories>
</Link>
<PostBuildEvent>
<Command>xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Deps\*.dll" "$(OutDir)"
xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\flam3-palettes.xml" "$(OutDir)"
</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>Use</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ProgramDataBaseFileName>$(TargetDir)$(TargetName).pdb</ProgramDataBaseFileName>
<AdditionalIncludeDirectories>$(ProjectDir)..\..\..\Source\Ember;$(ProjectDir)..\..\..\Source\EmberCommon;$(ProjectDir)..\..\..\Source\EmberCL;$(ProjectDir)..\..\..\..\glm;$(ProjectDir)..\..\..\..\tbb\include;$(ProjectDir)..\..\..\..\libjpeg;$(ProjectDir)..\..\..\..\libpng;$(ProjectDir)..\..\..\..\libxml2\include;$(AMDAPPSDKROOT)\include;$(CUDA_PATH)\include</AdditionalIncludeDirectories>
<DisableSpecificWarnings>
</DisableSpecificWarnings>
<PrecompiledHeaderFile>EmberCommonPch.h</PrecompiledHeaderFile>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<StringPooling>true</StringPooling>
<FloatingPointExceptions>false</FloatingPointExceptions>
<BufferSecurityCheck>false</BufferSecurityCheck>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalDependencies>libjpeg.lib;libpng.lib;libxml2.lib;tbb.lib;zlib.lib;opencl.lib;Ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>$(ProjectDir)..\..\..\Deps;$(AMDAPPSDKROOT)\lib\x86_64;$(CUDA_PATH)\lib\$(PlatformName)</AdditionalLibraryDirectories>
</Link>
<PostBuildEvent>
<Command>xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Deps\*.dll" "$(OutDir)"
xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\flam3-palettes.xml" "$(OutDir)"
</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemGroup>
<None Include="..\..\..\Source\Fractorium\Icons\Fractorium.ico" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="Ember.vcxproj">
<Project>{2bdb7a54-bb1a-476b-a6e5-f81e90ad4e67}</Project>
</ProjectReference>
<ProjectReference Include="EmberCL.vcxproj">
<Project>{f6a9102c-69a9-48fb-bc4b-49e49af43236}</Project>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\..\Source\EmberCommon\EmberCommon.h" />
<ClInclude Include="..\..\..\Source\EmberCommon\EmberCommonPch.h" />
<ClInclude Include="..\..\..\Source\EmberCommon\EmberOptions.h" />
<ClInclude Include="..\..\..\Source\EmberCommon\JpegUtils.h" />
<ClInclude Include="..\..\..\Source\EmberCommon\SimpleGlob.h" />
<ClInclude Include="..\..\..\Source\EmberCommon\SimpleOpt.h" />
<ClInclude Include="..\..\..\Source\EmberGenome\EmberGenome.h" />
<ClInclude Include="..\..\..\Source\EmberGenome\resource.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\..\Source\EmberCommon\EmberCommonPch.cpp">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
</ClCompile>
<ClCompile Include="..\..\..\Source\EmberGenome\EmberGenome.cpp" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="EmberGenome.rc" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View File

@ -0,0 +1,61 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<None Include="..\..\..\Source\Fractorium\Icons\Fractorium.ico">
<Filter>Resource Files</Filter>
</None>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\..\Source\EmberCommon\EmberCommonPch.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\EmberCommon\JpegUtils.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\EmberCommon\SimpleGlob.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\EmberCommon\SimpleOpt.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\EmberCommon\EmberCommon.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\EmberCommon\EmberOptions.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\EmberGenome\EmberGenome.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\EmberGenome\resource.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\..\Source\EmberCommon\EmberCommonPch.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\EmberGenome\EmberGenome.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="EmberGenome.rc">
<Filter>Resource Files</Filter>
</ResourceCompile>
</ItemGroup>
</Project>

View File

@ -0,0 +1,98 @@
// Microsoft Visual C++ generated resource script.
//
#include <windows.h>
#include "resource.h"
/////////////////////////////////////////////////////////////////////////////
// English (United States) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252)
/////////////////////////////////////////////////////////////////////////////
//
// Icon
//
// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
IDI_ICON1 ICON "..\\..\\..\\Source\\Fractorium\\Icons\\Fractorium.ico"
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE
BEGIN
"resource.h\0"
END
2 TEXTINCLUDE
BEGIN
"\0"
END
3 TEXTINCLUDE
BEGIN
"\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Version
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1, 0, 0, 2
PRODUCTVERSION 1, 0, 0, 2
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x40004L
FILETYPE 0x0L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904b0"
BEGIN
VALUE "CompanyName", "Open Source"
VALUE "FileDescription", "Renders fractal flames as single images"
VALUE "FileVersion", "1.0.0.2"
VALUE "InternalName", "EmberRender.exe"
VALUE "LegalCopyright", "Copyright (C) Matt Feemster 2016, GPL v3"
VALUE "OriginalFilename", "EmberRender.exe"
VALUE "ProductName", "Ember Render"
VALUE "ProductVersion", "1.0.0.2"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1200
END
END
#endif // English (United States) resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED

View File

@ -0,0 +1,149 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{4A191F4C-03AC-4F1B-AFFD-F5483ECEBD29}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>EmberRender</RootNamespace>
<ProjectName>EmberRender</ProjectName>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>MultiByte</CharacterSet>
<WholeProgramOptimization>false</WholeProgramOptimization>
<PlatformToolset>v140</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>false</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>v140</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
<OutDir>$(SolutionDir)..\..\..\Bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)Obj\$(TargetName)\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
<OutDir>$(SolutionDir)..\..\..\Bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)Obj\$(TargetName)\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ProgramDataBaseFileName>$(TargetDir)$(TargetName).pdb</ProgramDataBaseFileName>
<AdditionalIncludeDirectories>$(ProjectDir)..\..\..\Source\Ember;$(ProjectDir)..\..\..\Source\EmberCommon;$(ProjectDir)..\..\..\Source\EmberCL;$(ProjectDir)..\..\..\..\glm;$(ProjectDir)..\..\..\..\tbb\include;$(ProjectDir)..\..\..\..\libjpeg;$(ProjectDir)..\..\..\..\libpng;$(ProjectDir)..\..\..\..\libxml2\include;$(AMDAPPSDKROOT)\include;$(CUDA_PATH)\include</AdditionalIncludeDirectories>
<DisableSpecificWarnings>
</DisableSpecificWarnings>
<PrecompiledHeaderFile>EmberCommonPch.h</PrecompiledHeaderFile>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<MinimalRebuild>false</MinimalRebuild>
<StringPooling>true</StringPooling>
<FloatingPointExceptions>false</FloatingPointExceptions>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>libjpeg.lib;libpng.lib;libxml2.lib;tbb.lib;zlib.lib;opencl.lib;Ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>$(ProjectDir)..\..\..\Deps;$(AMDAPPSDKROOT)\lib\x86_64;$(CUDA_PATH)\lib\$(PlatformName)</AdditionalLibraryDirectories>
</Link>
<PostBuildEvent>
<Command>xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Deps\*.dll" "$(OutDir)"
xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\flam3-palettes.xml" "$(OutDir)"
</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>Use</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ProgramDataBaseFileName>$(TargetDir)$(TargetName).pdb</ProgramDataBaseFileName>
<AdditionalIncludeDirectories>$(ProjectDir)..\..\..\Source\Ember;$(ProjectDir)..\..\..\Source\EmberCommon;$(ProjectDir)..\..\..\Source\EmberCL;$(ProjectDir)..\..\..\..\glm;$(ProjectDir)..\..\..\..\tbb\include;$(ProjectDir)..\..\..\..\libjpeg;$(ProjectDir)..\..\..\..\libpng;$(ProjectDir)..\..\..\..\libxml2\include;$(AMDAPPSDKROOT)\include;$(CUDA_PATH)\include</AdditionalIncludeDirectories>
<DisableSpecificWarnings>
</DisableSpecificWarnings>
<PrecompiledHeaderFile>EmberCommonPch.h</PrecompiledHeaderFile>
<FloatingPointModel>Precise</FloatingPointModel>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<FloatingPointExceptions>false</FloatingPointExceptions>
<StringPooling>true</StringPooling>
<BufferSecurityCheck>false</BufferSecurityCheck>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalDependencies>libjpeg.lib;libpng.lib;libxml2.lib;tbb.lib;zlib.lib;opencl.lib;Ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>$(ProjectDir)..\..\..\Deps;$(AMDAPPSDKROOT)\lib\x86_64;$(CUDA_PATH)\lib\$(PlatformName)</AdditionalLibraryDirectories>
</Link>
<PostBuildEvent>
<Command>xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Deps\*.dll" "$(OutDir)"
xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\flam3-palettes.xml" "$(OutDir)"
</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemGroup>
<None Include="..\..\..\Source\Fractorium\Icons\Fractorium.ico" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="Ember.vcxproj">
<Project>{2bdb7a54-bb1a-476b-a6e5-f81e90ad4e67}</Project>
</ProjectReference>
<ProjectReference Include="EmberCL.vcxproj">
<Project>{f6a9102c-69a9-48fb-bc4b-49e49af43236}</Project>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\..\Source\EmberCommon\EmberCommon.h" />
<ClInclude Include="..\..\..\Source\EmberCommon\EmberCommonPch.h" />
<ClInclude Include="..\..\..\Source\EmberCommon\EmberOptions.h" />
<ClInclude Include="..\..\..\Source\EmberCommon\JpegUtils.h" />
<ClInclude Include="..\..\..\Source\EmberCommon\SimpleGlob.h" />
<ClInclude Include="..\..\..\Source\EmberCommon\SimpleOpt.h" />
<ClInclude Include="..\..\..\Source\EmberRender\EmberRender.h" />
<ClInclude Include="..\..\..\Source\EmberRender\resource.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\..\Source\EmberCommon\EmberCommonPch.cpp">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
</ClCompile>
<ClCompile Include="..\..\..\Source\EmberRender\EmberRender.cpp" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="EmberRender.rc" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View File

@ -0,0 +1,61 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<None Include="..\..\..\Source\Fractorium\Icons\Fractorium.ico">
<Filter>Resource Files</Filter>
</None>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\..\Source\EmberCommon\EmberCommonPch.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\EmberCommon\JpegUtils.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\EmberCommon\SimpleGlob.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\EmberCommon\SimpleOpt.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\EmberCommon\EmberCommon.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\EmberCommon\EmberOptions.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\EmberRender\EmberRender.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\EmberRender\resource.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\..\Source\EmberCommon\EmberCommonPch.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\EmberRender\EmberRender.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="EmberRender.rc">
<Filter>Resource Files</Filter>
</ResourceCompile>
</ItemGroup>
</Project>

View File

@ -0,0 +1,141 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{320F611A-F9CE-4196-A8DC-FA24B2E8A320}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>EmberTester</RootNamespace>
<ProjectName>EmberTester</ProjectName>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>MultiByte</CharacterSet>
<WholeProgramOptimization>false</WholeProgramOptimization>
<PlatformToolset>v140</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>false</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>v140</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
<OutDir>$(SolutionDir)..\..\..\Bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)Obj\$(TargetName)\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
<OutDir>$(SolutionDir)..\..\..\Bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)Obj\$(TargetName)\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ProgramDataBaseFileName>$(TargetDir)$(TargetName).pdb</ProgramDataBaseFileName>
<AdditionalIncludeDirectories>$(ProjectDir)..\..\..\Source\Ember;$(ProjectDir)..\..\..\Source\EmberCommon;$(ProjectDir)..\..\..\Source\EmberCL;$(ProjectDir)..\..\..\..\glm;$(ProjectDir)..\..\..\..\tbb\include;$(ProjectDir)..\..\..\..\libjpeg;$(ProjectDir)..\..\..\..\libpng;$(ProjectDir)..\..\..\..\libxml2\include;$(AMDAPPSDKROOT)\include;$(CUDA_PATH)\include</AdditionalIncludeDirectories>
<DisableSpecificWarnings>
</DisableSpecificWarnings>
<PrecompiledHeaderFile>EmberCommonPch.h</PrecompiledHeaderFile>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<MinimalRebuild>false</MinimalRebuild>
<StringPooling>true</StringPooling>
<FloatingPointExceptions>false</FloatingPointExceptions>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>libjpeg.lib;libpng.lib;libxml2.lib;tbb.lib;zlib.lib;opencl.lib;opencl.lib;Ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>$(ProjectDir)..\..\..\Deps;$(AMDAPPSDKROOT)\lib\x86_64;$(CUDA_PATH)\lib\$(PlatformName)</AdditionalLibraryDirectories>
</Link>
<PostBuildEvent>
<Command>xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Deps\*.dll" "$(OutDir)"
xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\flam3-palettes.xml" "$(OutDir)"
</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>Use</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ProgramDataBaseFileName>$(TargetDir)$(TargetName).pdb</ProgramDataBaseFileName>
<AdditionalIncludeDirectories>$(ProjectDir)..\..\..\Source\Ember;$(ProjectDir)..\..\..\Source\EmberCommon;$(ProjectDir)..\..\..\Source\EmberCL;$(ProjectDir)..\..\..\..\glm;$(ProjectDir)..\..\..\..\tbb\include;$(ProjectDir)..\..\..\..\libjpeg;$(ProjectDir)..\..\..\..\libpng;$(ProjectDir)..\..\..\..\libxml2\include;$(AMDAPPSDKROOT)\include;$(CUDA_PATH)\include</AdditionalIncludeDirectories>
<DisableSpecificWarnings>
</DisableSpecificWarnings>
<PrecompiledHeaderFile>EmberCommonPch.h</PrecompiledHeaderFile>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<StringPooling>true</StringPooling>
<FloatingPointExceptions>false</FloatingPointExceptions>
<BufferSecurityCheck>false</BufferSecurityCheck>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalDependencies>libjpeg.lib;libpng.lib;libxml2.lib;tbb.lib;zlib.lib;opencl.lib;opencl.lib;Ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>$(ProjectDir)..\..\..\Deps;$(AMDAPPSDKROOT)\lib\x86_64;$(CUDA_PATH)\lib\$(PlatformName)</AdditionalLibraryDirectories>
</Link>
<PostBuildEvent>
<Command>xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Deps\*.dll" "$(OutDir)"
xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\flam3-palettes.xml" "$(OutDir)"
</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemGroup>
<ProjectReference Include="Ember.vcxproj">
<Project>{2bdb7a54-bb1a-476b-a6e5-f81e90ad4e67}</Project>
</ProjectReference>
<ProjectReference Include="EmberCL.vcxproj">
<Project>{f6a9102c-69a9-48fb-bc4b-49e49af43236}</Project>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\..\Source\EmberCommon\EmberCommon.h" />
<ClInclude Include="..\..\..\Source\EmberCommon\EmberCommonPch.h" />
<ClInclude Include="..\..\..\Source\EmberCommon\EmberOptions.h" />
<ClInclude Include="..\..\..\Source\EmberCommon\JpegUtils.h" />
<ClInclude Include="..\..\..\Source\EmberCommon\SimpleGlob.h" />
<ClInclude Include="..\..\..\Source\EmberCommon\SimpleOpt.h" />
<ClInclude Include="..\..\..\Source\EmberTester\EmberTester.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\..\Source\EmberCommon\EmberCommonPch.cpp">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
</ClCompile>
<ClCompile Include="..\..\..\Source\EmberTester\EmberTester.cpp" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View File

@ -0,0 +1,48 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\..\Source\EmberCommon\EmberCommon.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\EmberCommon\EmberCommonPch.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\EmberCommon\EmberOptions.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\EmberCommon\JpegUtils.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\EmberCommon\SimpleGlob.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\EmberCommon\SimpleOpt.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\EmberTester\EmberTester.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\..\Source\EmberTester\EmberTester.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\EmberCommon\EmberCommonPch.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
</Project>

Binary file not shown.

View File

@ -0,0 +1,76 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2013
VisualStudioVersion = 12.0.31101.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Ember", "Ember.vcxproj", "{2BDB7A54-BB1A-476B-A6E5-F81E90AD4E67}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EmberTester", "EmberTester.vcxproj", "{320F611A-F9CE-4196-A8DC-FA24B2E8A320}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Fractorium", "Fractorium.vcxproj", "{6547D5FA-64CE-44BA-9D3C-B6E217456445}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EmberRender", "EmberRender.vcxproj", "{4A191F4C-03AC-4F1B-AFFD-F5483ECEBD29}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EmberAnimate", "EmberAnimate.vcxproj", "{35285FCF-6FA8-410E-841B-70AE744D38B8}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EmberGenome", "EmberGenome.vcxproj", "{7930CAAC-9FC4-4202-B6A3-E760F73F88B7}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EmberCL", "EmberCL.vcxproj", "{F6A9102C-69A9-48FB-BC4B-49E49AF43236}"
EndProject
Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "FractoriumInstaller", "..\Installer\FractoriumInstaller.wixproj", "{C8096C47-E358-438C-A520-146D46B0637D}"
ProjectSection(ProjectDependencies) = postProject
{F6A9102C-69A9-48FB-BC4B-49E49AF43236} = {F6A9102C-69A9-48FB-BC4B-49E49AF43236}
{4A191F4C-03AC-4F1B-AFFD-F5483ECEBD29} = {4A191F4C-03AC-4F1B-AFFD-F5483ECEBD29}
{2BDB7A54-BB1A-476B-A6E5-F81E90AD4E67} = {2BDB7A54-BB1A-476B-A6E5-F81E90AD4E67}
{7930CAAC-9FC4-4202-B6A3-E760F73F88B7} = {7930CAAC-9FC4-4202-B6A3-E760F73F88B7}
{35285FCF-6FA8-410E-841B-70AE744D38B8} = {35285FCF-6FA8-410E-841B-70AE744D38B8}
{6547D5FA-64CE-44BA-9D3C-B6E217456445} = {6547D5FA-64CE-44BA-9D3C-B6E217456445}
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{5CD06D80-903E-45D6-90F3-3C3EB4FFE46F}"
ProjectSection(SolutionItems) = preProject
..\..\..\Data\Version History.txt = ..\..\..\Data\Version History.txt
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x64 = Debug|x64
Release|x64 = Release|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{2BDB7A54-BB1A-476B-A6E5-F81E90AD4E67}.Debug|x64.ActiveCfg = Debug|x64
{2BDB7A54-BB1A-476B-A6E5-F81E90AD4E67}.Debug|x64.Build.0 = Debug|x64
{2BDB7A54-BB1A-476B-A6E5-F81E90AD4E67}.Release|x64.ActiveCfg = Release|x64
{2BDB7A54-BB1A-476B-A6E5-F81E90AD4E67}.Release|x64.Build.0 = Release|x64
{320F611A-F9CE-4196-A8DC-FA24B2E8A320}.Debug|x64.ActiveCfg = Debug|x64
{320F611A-F9CE-4196-A8DC-FA24B2E8A320}.Debug|x64.Build.0 = Debug|x64
{320F611A-F9CE-4196-A8DC-FA24B2E8A320}.Release|x64.ActiveCfg = Release|x64
{320F611A-F9CE-4196-A8DC-FA24B2E8A320}.Release|x64.Build.0 = Release|x64
{6547D5FA-64CE-44BA-9D3C-B6E217456445}.Debug|x64.ActiveCfg = Debug|x64
{6547D5FA-64CE-44BA-9D3C-B6E217456445}.Debug|x64.Build.0 = Debug|x64
{6547D5FA-64CE-44BA-9D3C-B6E217456445}.Release|x64.ActiveCfg = Release|x64
{6547D5FA-64CE-44BA-9D3C-B6E217456445}.Release|x64.Build.0 = Release|x64
{4A191F4C-03AC-4F1B-AFFD-F5483ECEBD29}.Debug|x64.ActiveCfg = Debug|x64
{4A191F4C-03AC-4F1B-AFFD-F5483ECEBD29}.Debug|x64.Build.0 = Debug|x64
{4A191F4C-03AC-4F1B-AFFD-F5483ECEBD29}.Release|x64.ActiveCfg = Release|x64
{4A191F4C-03AC-4F1B-AFFD-F5483ECEBD29}.Release|x64.Build.0 = Release|x64
{35285FCF-6FA8-410E-841B-70AE744D38B8}.Debug|x64.ActiveCfg = Debug|x64
{35285FCF-6FA8-410E-841B-70AE744D38B8}.Debug|x64.Build.0 = Debug|x64
{35285FCF-6FA8-410E-841B-70AE744D38B8}.Release|x64.ActiveCfg = Release|x64
{35285FCF-6FA8-410E-841B-70AE744D38B8}.Release|x64.Build.0 = Release|x64
{7930CAAC-9FC4-4202-B6A3-E760F73F88B7}.Debug|x64.ActiveCfg = Debug|x64
{7930CAAC-9FC4-4202-B6A3-E760F73F88B7}.Debug|x64.Build.0 = Debug|x64
{7930CAAC-9FC4-4202-B6A3-E760F73F88B7}.Release|x64.ActiveCfg = Release|x64
{7930CAAC-9FC4-4202-B6A3-E760F73F88B7}.Release|x64.Build.0 = Release|x64
{F6A9102C-69A9-48FB-BC4B-49E49AF43236}.Debug|x64.ActiveCfg = Debug|x64
{F6A9102C-69A9-48FB-BC4B-49E49AF43236}.Debug|x64.Build.0 = Debug|x64
{F6A9102C-69A9-48FB-BC4B-49E49AF43236}.Release|x64.ActiveCfg = Release|x64
{F6A9102C-69A9-48FB-BC4B-49E49AF43236}.Release|x64.Build.0 = Release|x64
{C8096C47-E358-438C-A520-146D46B0637D}.Debug|x64.ActiveCfg = Debug|x64
{C8096C47-E358-438C-A520-146D46B0637D}.Release|x64.ActiveCfg = Release|x64
{C8096C47-E358-438C-A520-146D46B0637D}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

View File

@ -0,0 +1,632 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{6547D5FA-64CE-44BA-9D3C-B6E217456445}</ProjectGuid>
<Keyword>Qt4VSv1.0</Keyword>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>v140</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>v140</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\Bin\$(Platform)\$(Configuration)\</OutDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\Bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)Obj\$(TargetName)\$(Platform)\$(Configuration)\</IntDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)Obj\$(TargetName)\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<PreprocessorDefinitions>UNICODE;WIN32;QT_DLL;QT_CORE_LIB;QT_GUI_LIB;QT_MULTIMEDIA_LIB;QT_HELP_LIB;QT_OPENGL_LIB;QT_WIDGETS_LIB;QT_XML_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>.;$(QTDIR)\include;$(ProjectDir)..\..\..\Fractorium\GeneratedFiles;$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName;$(QTDIR)\..\qtmultimedia\include\QtMultimedia;$(QTDIR)\..\qtmultimedia\include;$(QTDIR)\..\qttools\include;$(QTDIR)\..\qttools\include\QtHelp;$(QTDIR)\include\QtConcurrent;$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtOpenGL;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtXml;.\GeneratedFiles;$(ProjectDir)..\..\..\Source\Ember;$(ProjectDir)..\..\..\Source\EmberCL;$(ProjectDir)..\..\..\Source\EmberCommon;$(ProjectDir)..\..\..\..\glm;$(ProjectDir)..\..\..\..\tbb\include;$(ProjectDir)..\..\..\..\libjpeg;$(ProjectDir)..\..\..\..\libpng;$(ProjectDir)..\..\..\..\libxml2\include;$(AMDAPPSDKROOT)\include;$(CUDA_PATH)\include;.\GeneratedFiles\$(ConfigurationName);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<Optimization>Disabled</Optimization>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
<TreatWChar_tAsBuiltInType>false</TreatWChar_tAsBuiltInType>
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>FractoriumPch.h</PrecompiledHeaderFile>
<PrecompiledHeaderOutputFile>$(IntDir)$(TargetName).pch</PrecompiledHeaderOutputFile>
<ProgramDataBaseFileName>$(TargetDir)$(TargetName).pdb</ProgramDataBaseFileName>
<DisableSpecificWarnings>
</DisableSpecificWarnings>
<AdditionalOptions>/bigobj -Zm150 %(AdditionalOptions)</AdditionalOptions>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<StringPooling>true</StringPooling>
<FloatingPointExceptions>false</FloatingPointExceptions>
<WarningLevel>Level3</WarningLevel>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<OutputFile>$(OutDir)\$(ProjectName).exe</OutputFile>
<AdditionalLibraryDirectories>$(ProjectDir)..\..\..\Deps;$(QTDIR)\lib;$(AMDAPPSDKROOT)\lib\x86_64;$(CUDA_PATH)\lib\$(PlatformName);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>qtmaind.lib;Qt5Cored.lib;Qt5Guid.lib;Qt5OpenGLd.lib;opengl32.lib;glu32.lib;opencl.lib;Qt5Widgetsd.lib;Qt5Xmld.lib;Ws2_32.lib;libjpeg.lib;libpng.lib;libxml2.lib;tbb.lib;zlib.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
<PostBuildEvent>
<Command>xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Deps\*.dll" "$(OutDir)"
xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\flam3-palettes.xml" "$(OutDir)"
xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\dark.qss" "$(OutDir)"
xcopy /F /Y /R /D "$(QTDIR)\bin\Qt5Cored.dll" "$(OutDir)"
xcopy /F /Y /R /D "$(QTDIR)\bin\Qt5Guid.dll" "$(OutDir)"
xcopy /F /Y /R /D "$(QTDIR)\bin\Qt5Widgetsd.dll" "$(OutDir)"
xcopy /F /Y /R /D "$(QTDIR)\plugins\platforms\qwindowsd.dll" "$(OutDir)\platforms\"
</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<PreprocessorDefinitions>UNICODE;WIN32;QT_DLL;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_GUI_LIB;QT_MULTIMEDIA_LIB;QT_HELP_LIB;QT_OPENGL_LIB;QT_WIDGETS_LIB;QT_XML_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>.;$(QTDIR)\include;$(ProjectDir)..\..\..\Fractorium\GeneratedFiles;$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName;$(QTDIR)\..\qtmultimedia\include\QtMultimedia;$(QTDIR)\..\qtmultimedia\include;$(QTDIR)\..\qttools\include;$(QTDIR)\..\qttools\include\QtHelp;$(QTDIR)\include\QtConcurrent;$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtOpenGL;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtXml;.\GeneratedFiles;$(ProjectDir)..\..\..\Source\Ember;$(ProjectDir)..\..\..\Source\EmberCL;$(ProjectDir)..\..\..\Source\EmberCommon;$(ProjectDir)..\..\..\..\glm;$(ProjectDir)..\..\..\..\tbb\include;$(ProjectDir)..\..\..\..\libjpeg;$(ProjectDir)..\..\..\..\libpng;$(ProjectDir)..\..\..\..\libxml2\include;$(AMDAPPSDKROOT)\include;$(CUDA_PATH)\include;.\GeneratedFiles\$(ConfigurationName);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<TreatWChar_tAsBuiltInType>false</TreatWChar_tAsBuiltInType>
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>FractoriumPch.h</PrecompiledHeaderFile>
<PrecompiledHeaderOutputFile>$(IntDir)$(TargetName).pch</PrecompiledHeaderOutputFile>
<ProgramDataBaseFileName>$(TargetDir)$(TargetName).pdb</ProgramDataBaseFileName>
<DisableSpecificWarnings>
</DisableSpecificWarnings>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<StringPooling>true</StringPooling>
<FloatingPointExceptions>false</FloatingPointExceptions>
<AdditionalOptions>/bigobj -Zm150 %(AdditionalOptions)</AdditionalOptions>
<BufferSecurityCheck>false</BufferSecurityCheck>
<WarningLevel>Level3</WarningLevel>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<OutputFile>$(OutDir)\$(ProjectName).exe</OutputFile>
<AdditionalLibraryDirectories>$(ProjectDir)..\..\..\Deps;$(QTDIR)\lib;$(AMDAPPSDKROOT)\lib\x86_64;$(CUDA_PATH)\lib\$(PlatformName);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>qtmain.lib;Qt5Core.lib;Qt5Gui.lib;Qt5OpenGL.lib;opengl32.lib;glu32.lib;opencl.lib;Qt5Widgets.lib;Ws2_32.lib;libjpeg.lib;libpng.lib;libxml2.lib;tbb.lib;zlib.lib;%(AdditionalDependencies)</AdditionalDependencies>
<Version>0.1</Version>
</Link>
<PostBuildEvent>
<Command>xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Deps\*.dll" "$(OutDir)"
xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\flam3-palettes.xml" "$(OutDir)"
xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\dark.qss" "$(OutDir)"
xcopy /F /Y /R /D "$(QTDIR)\bin\Qt5Core.dll" "$(OutDir)"
xcopy /F /Y /R /D "$(QTDIR)\bin\Qt5Gui.dll" "$(OutDir)"
xcopy /F /Y /R /D "$(QTDIR)\bin\Qt5Widgets.dll" "$(OutDir)"
xcopy /F /Y /R /D "$(QTDIR)\plugins\platforms\qwindows.dll" "$(OutDir)\platforms\"</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="..\..\..\Source\Fractorium\AboutDialog.cpp">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Use</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Use</PrecompiledHeader>
</ClCompile>
<ClCompile Include="..\..\..\Source\Fractorium\csshighlighter.cpp" />
<ClCompile Include="..\..\..\Source\Fractorium\CurvesGraphicsView.cpp" />
<ClCompile Include="..\..\..\Source\Fractorium\FinalRenderDialog.cpp" />
<ClCompile Include="..\..\..\Source\Fractorium\FinalRenderEmberController.cpp" />
<ClCompile Include="..\..\..\Source\Fractorium\Fractorium.cpp">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Use</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Use</PrecompiledHeader>
</ClCompile>
<ClCompile Include="..\..\..\Source\Fractorium\FractoriumEmberController.cpp" />
<ClCompile Include="..\..\..\Source\Fractorium\FractoriumInfo.cpp" />
<ClCompile Include="..\..\..\Source\Fractorium\FractoriumLibrary.cpp" />
<ClCompile Include="..\..\..\Source\Fractorium\FractoriumMenus.cpp" />
<ClCompile Include="..\..\..\Source\Fractorium\FractoriumPalette.cpp" />
<ClCompile Include="..\..\..\Source\Fractorium\FractoriumParams.cpp" />
<ClCompile Include="..\..\..\Source\Fractorium\FractoriumRender.cpp" />
<ClCompile Include="..\..\..\Source\Fractorium\FractoriumSettings.cpp" />
<ClCompile Include="..\..\..\Source\Fractorium\FractoriumToolbar.cpp" />
<ClCompile Include="..\..\..\Source\Fractorium\FractoriumXforms.cpp" />
<ClCompile Include="..\..\..\Source\Fractorium\FractoriumXformsAffine.cpp" />
<ClCompile Include="..\..\..\Source\Fractorium\FractoriumXformsColor.cpp" />
<ClCompile Include="..\..\..\Source\Fractorium\FractoriumXformsSelect.cpp" />
<ClCompile Include="..\..\..\Source\Fractorium\FractoriumXformsVariations.cpp" />
<ClCompile Include="..\..\..\Source\Fractorium\FractoriumXaos.cpp" />
<ClCompile Include="..\..\..\Source\Fractorium\GLEmberController.cpp" />
<ClCompile Include="..\..\..\Source\Fractorium\GLWidget.cpp" />
<ClCompile Include="..\..\..\Source\Fractorium\LibraryTreeWidget.cpp" />
<ClCompile Include="..\..\..\Source\Fractorium\main.cpp" />
<ClCompile Include="..\..\..\Source\Fractorium\DoubleSpinBox.cpp" />
<ClCompile Include="..\..\..\Source\Fractorium\OptionsDialog.cpp" />
<ClCompile Include="..\..\..\Source\Fractorium\qcssparser.cpp" />
<ClCompile Include="..\..\..\Source\Fractorium\qcssscanner.cpp" />
<ClCompile Include="..\..\..\Source\Fractorium\QssDialog.cpp" />
<ClCompile Include="..\..\..\Source\Fractorium\QssTextEdit.cpp" />
<ClCompile Include="..\..\..\Source\Fractorium\SpinBox.cpp" />
<ClCompile Include="..\..\..\Source\Fractorium\FractoriumPch.cpp">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
</ClCompile>
<ClCompile Include="..\..\..\Source\Fractorium\VariationsDialog.cpp" />
<ClCompile Include="GeneratedFiles\Debug\moc_AboutDialog.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="GeneratedFiles\Debug\moc_csshighlighter.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="GeneratedFiles\Debug\moc_CurvesGraphicsView.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="GeneratedFiles\Debug\moc_DoubleSpinBox.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="GeneratedFiles\Debug\moc_DoubleSpinBoxTableItemDelegate.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="GeneratedFiles\Debug\moc_FinalRenderDialog.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="GeneratedFiles\Debug\moc_Fractorium.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="GeneratedFiles\Debug\moc_FractoriumSettings.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="GeneratedFiles\Debug\moc_GLWidget.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="GeneratedFiles\Debug\moc_LibraryTreeWidget.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="GeneratedFiles\Debug\moc_OptionsDialog.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="GeneratedFiles\Debug\moc_QssDialog.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="GeneratedFiles\Debug\moc_QssTextEdit.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="GeneratedFiles\Debug\moc_SpinBox.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="GeneratedFiles\Debug\moc_StealthComboBox.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="GeneratedFiles\Debug\moc_TableWidget.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="GeneratedFiles\Debug\moc_TwoButtonComboWidget.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="GeneratedFiles\Debug\moc_VariationsDialog.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="GeneratedFiles\qrc_Fractorium.cpp">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
</PrecompiledHeader>
</ClCompile>
<ClCompile Include="GeneratedFiles\Release\moc_AboutDialog.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="GeneratedFiles\Release\moc_csshighlighter.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="GeneratedFiles\Release\moc_CurvesGraphicsView.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="GeneratedFiles\Release\moc_DoubleSpinBox.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="GeneratedFiles\Release\moc_DoubleSpinBoxTableItemDelegate.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="GeneratedFiles\Release\moc_FinalRenderDialog.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="GeneratedFiles\Release\moc_Fractorium.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="GeneratedFiles\Release\moc_FractoriumSettings.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="GeneratedFiles\Release\moc_GLWidget.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="GeneratedFiles\Release\moc_LibraryTreeWidget.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="GeneratedFiles\Release\moc_OptionsDialog.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="GeneratedFiles\Release\moc_QssDialog.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="GeneratedFiles\Release\moc_QssTextEdit.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="GeneratedFiles\Release\moc_SpinBox.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="GeneratedFiles\Release\moc_StealthComboBox.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="GeneratedFiles\Release\moc_TableWidget.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="GeneratedFiles\Release\moc_TwoButtonComboWidget.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="GeneratedFiles\Release\moc_VariationsDialog.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
</ClCompile>
</ItemGroup>
<ItemGroup>
<CustomBuild Include="..\..\..\Source\Fractorium\VariationsDialog.h">
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing VariationsDialog.h...</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/VariationsDialog.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(AMDAPPSDKROOT)\include" "-I$(CUDA_PATH)\include" "-I.\GeneratedFiles\$(ConfigurationName)\."</Command>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Moc%27ing VariationsDialog.h...</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/VariationsDialog.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(AMDAPPSDKROOT)\include" "-I$(CUDA_PATH)\include" "-I.\GeneratedFiles\$(ConfigurationName)\."</Command>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
</CustomBuild>
<CustomBuild Include="..\..\..\Source\Fractorium\QssDialog.h">
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing QssDialog.h...</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/QssDialog.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(AMDAPPSDKROOT)\include" "-I$(CUDA_PATH)\include" "-I.\GeneratedFiles\$(ConfigurationName)\."</Command>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Moc%27ing QssDialog.h...</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/QssDialog.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(AMDAPPSDKROOT)\include" "-I$(CUDA_PATH)\include" "-I.\GeneratedFiles\$(ConfigurationName)\."</Command>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
</CustomBuild>
<CustomBuild Include="..\..\..\Source\Fractorium\csshighlighter.h">
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing csshighlighter.h...</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/csshighlighter.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(AMDAPPSDKROOT)\include" "-I$(CUDA_PATH)\include" "-I.\GeneratedFiles\$(ConfigurationName)\."</Command>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Moc%27ing csshighlighter.h...</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/csshighlighter.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(AMDAPPSDKROOT)\include" "-I$(CUDA_PATH)\include" "-I.\GeneratedFiles\$(ConfigurationName)\."</Command>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
</CustomBuild>
<CustomBuild Include="..\..\..\Source\Fractorium\LibraryTreeWidget.h">
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing LibraryTreeWidget.h...</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/LibraryTreeWidget.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(AMDAPPSDKROOT)\include" "-I$(CUDA_PATH)\include" "-I.\GeneratedFiles\$(ConfigurationName)\."</Command>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Moc%27ing LibraryTreeWidget.h...</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/LibraryTreeWidget.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(AMDAPPSDKROOT)\include" "-I$(CUDA_PATH)\include" "-I.\GeneratedFiles\$(ConfigurationName)\."</Command>
</CustomBuild>
<ClInclude Include="..\..\..\Source\Fractorium\qcssparser.h" />
<ClInclude Include="..\..\..\Source\Fractorium\qfunctions.h" />
<CustomBuild Include="..\..\..\Source\Fractorium\QssTextEdit.h">
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing QssTextEdit.h...</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/QssTextEdit.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(AMDAPPSDKROOT)\include" "-I$(CUDA_PATH)\include" "-I.\GeneratedFiles\$(ConfigurationName)\."</Command>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Moc%27ing QssTextEdit.h...</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/QssTextEdit.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(AMDAPPSDKROOT)\include" "-I$(CUDA_PATH)\include" "-I.\GeneratedFiles\$(ConfigurationName)\."</Command>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
</CustomBuild>
<ClInclude Include="GeneratedFiles\ui_QssDialog.h" />
<ClInclude Include="GeneratedFiles\ui_VariationsDialog.h" />
<CustomBuild Include="..\..\..\Source\Fractorium\OptionsDialog.h">
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing OptionsDialog.h...</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/OptionsDialog.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(AMDAPPSDKROOT)\include" "-I$(CUDA_PATH)\include" "-I.\GeneratedFiles\$(ConfigurationName)\."</Command>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Moc%27ing OptionsDialog.h...</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/OptionsDialog.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(AMDAPPSDKROOT)\include" "-I$(CUDA_PATH)\include" "-I.\GeneratedFiles\$(ConfigurationName)\."</Command>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
</CustomBuild>
<CustomBuild Include="..\..\..\Source\Fractorium\AboutDialog.h">
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing AboutDialog.h...</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/AboutDialog.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(AMDAPPSDKROOT)\include" "-I$(CUDA_PATH)\include" "-I.\GeneratedFiles\$(ConfigurationName)\."</Command>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Moc%27ing AboutDialog.h...</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/AboutDialog.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(AMDAPPSDKROOT)\include" "-I$(CUDA_PATH)\include" "-I.\GeneratedFiles\$(ConfigurationName)\."</Command>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
</CustomBuild>
<CustomBuild Include="..\..\..\Source\Fractorium\FinalRenderDialog.h">
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing FinalRenderDialog.h...</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/FinalRenderDialog.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(AMDAPPSDKROOT)\include" "-I$(CUDA_PATH)\include" "-I.\GeneratedFiles\$(ConfigurationName)\."</Command>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Moc%27ing FinalRenderDialog.h...</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/FinalRenderDialog.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(AMDAPPSDKROOT)\include" "-I$(CUDA_PATH)\include" "-I.\GeneratedFiles\$(ConfigurationName)\."</Command>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
</CustomBuild>
<CustomBuild Include="..\..\..\Source\Fractorium\EmberTreeWidgetItem.h">
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalInputs)</AdditionalInputs>
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
</Command>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalInputs)</AdditionalInputs>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
</Command>
</CustomBuild>
<CustomBuild Include="..\..\..\Source\Fractorium\FractoriumSettings.h">
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing FractoriumSettings.h...</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/FractoriumSettings.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(AMDAPPSDKROOT)\include" "-I$(CUDA_PATH)\include" "-I.\GeneratedFiles\$(ConfigurationName)\."</Command>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Moc%27ing FractoriumSettings.h...</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/FractoriumSettings.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(AMDAPPSDKROOT)\include" "-I$(CUDA_PATH)\include" "-I.\GeneratedFiles\$(ConfigurationName)\."</Command>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
</CustomBuild>
<CustomBuild Include="..\..\..\Source\Fractorium\TwoButtonComboWidget.h">
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing TwoButtonComboWidget.h...</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/TwoButtonComboWidget.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(AMDAPPSDKROOT)\include" "-I$(CUDA_PATH)\include" "-I.\GeneratedFiles\$(ConfigurationName)\."</Command>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Moc%27ing TwoButtonComboWidget.h...</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/TwoButtonComboWidget.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(AMDAPPSDKROOT)\include" "-I$(CUDA_PATH)\include" "-I.\GeneratedFiles\$(ConfigurationName)\."</Command>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
</CustomBuild>
<ClInclude Include="..\..\..\Source\EmberCommon\EmberCommon.h" />
<CustomBuild Include="..\..\..\Source\Fractorium\CurvesGraphicsView.h">
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing CurvesGraphicsView.h...</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/CurvesGraphicsView.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(AMDAPPSDKROOT)\include" "-I$(CUDA_PATH)\include" "-I.\GeneratedFiles\$(ConfigurationName)\."</Command>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Moc%27ing CurvesGraphicsView.h...</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/CurvesGraphicsView.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(AMDAPPSDKROOT)\include" "-I$(CUDA_PATH)\include" "-I.\GeneratedFiles\$(ConfigurationName)\."</Command>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
</CustomBuild>
<CustomBuild Include="..\..\..\Source\Fractorium\DoubleSpinBoxTableItemDelegate.h">
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing DoubleSpinBoxTableItemDelegate.h...</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/DoubleSpinBoxTableItemDelegate.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(AMDAPPSDKROOT)\include" "-I$(CUDA_PATH)\include" "-I.\GeneratedFiles\$(ConfigurationName)\."</Command>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Moc%27ing DoubleSpinBoxTableItemDelegate.h...</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/DoubleSpinBoxTableItemDelegate.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(AMDAPPSDKROOT)\include" "-I$(CUDA_PATH)\include" "-I.\GeneratedFiles\$(ConfigurationName)\."</Command>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
</CustomBuild>
<ClInclude Include="..\..\..\Source\Fractorium\FinalRenderEmberController.h" />
<ClInclude Include="..\..\..\Source\Fractorium\FractoriumCommon.h" />
<ClInclude Include="..\..\..\Source\Fractorium\FractoriumEmberController.h" />
<ClInclude Include="..\..\..\Source\Fractorium\GLEmberController.h" />
<ClInclude Include="..\..\..\Source\Fractorium\PaletteTableWidgetItem.h" />
<ClInclude Include="..\..\..\Source\Fractorium\resource.h" />
<ClInclude Include="GeneratedFiles\ui_AboutDialog.h" />
<ClInclude Include="GeneratedFiles\ui_FinalRenderDialog.h" />
<ClInclude Include="GeneratedFiles\ui_OptionsDialog.h" />
<CustomBuild Include="..\..\..\Source\Fractorium\GLWidget.h">
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing GLWidget.h...</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/GLWidget.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(AMDAPPSDKROOT)\include" "-I$(CUDA_PATH)\include" "-I.\GeneratedFiles\$(ConfigurationName)\."</Command>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Moc%27ing GLWidget.h...</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/GLWidget.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(AMDAPPSDKROOT)\include" "-I$(CUDA_PATH)\include" "-I.\GeneratedFiles\$(ConfigurationName)\."</Command>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
</CustomBuild>
<ClInclude Include="..\..\..\..\glm\glm\glm.hpp" />
<CustomBuild Include="..\..\..\Source\Fractorium\DoubleSpinBox.h">
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing DoubleSpinBox.h...</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/DoubleSpinBox.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(AMDAPPSDKROOT)\include" "-I$(CUDA_PATH)\include" "-I.\GeneratedFiles\$(ConfigurationName)\."</Command>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Moc%27ing DoubleSpinBox.h...</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/DoubleSpinBox.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(AMDAPPSDKROOT)\include" "-I$(CUDA_PATH)\include" "-I.\GeneratedFiles\$(ConfigurationName)\."</Command>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
</CustomBuild>
<CustomBuild Include="..\..\..\Source\Fractorium\SpinBox.h">
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing SpinBox.h...</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/SpinBox.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(AMDAPPSDKROOT)\include" "-I$(CUDA_PATH)\include" "-I.\GeneratedFiles\$(ConfigurationName)\."</Command>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Moc%27ing SpinBox.h...</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/SpinBox.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(AMDAPPSDKROOT)\include" "-I$(CUDA_PATH)\include" "-I.\GeneratedFiles\$(ConfigurationName)\."</Command>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
</CustomBuild>
<CustomBuild Include="..\..\..\Source\Fractorium\StealthComboBox.h">
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing StealthComboBox.h...</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/StealthComboBox.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(AMDAPPSDKROOT)\include" "-I$(CUDA_PATH)\include" "-I.\GeneratedFiles\$(ConfigurationName)\."</Command>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Moc%27ing StealthComboBox.h...</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/StealthComboBox.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(AMDAPPSDKROOT)\include" "-I$(CUDA_PATH)\include" "-I.\GeneratedFiles\$(ConfigurationName)\."</Command>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
</CustomBuild>
<ClInclude Include="..\..\..\Source\Fractorium\EmberFile.h" />
<CustomBuild Include="..\..\..\Source\Fractorium\VariationTreeWidgetItem.h">
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalInputs)</AdditionalInputs>
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
</Command>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalInputs)</AdditionalInputs>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
</Command>
</CustomBuild>
<CustomBuild Include="..\..\..\Source\Fractorium\TableWidget.h">
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing TableWidget.h...</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/TableWidget.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(AMDAPPSDKROOT)\include" "-I$(CUDA_PATH)\include" "-I.\GeneratedFiles\$(ConfigurationName)\."</Command>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Moc%27ing TableWidget.h...</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/TableWidget.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(AMDAPPSDKROOT)\include" "-I$(CUDA_PATH)\include" "-I.\GeneratedFiles\$(ConfigurationName)\."</Command>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
</CustomBuild>
<ClInclude Include="GeneratedFiles\ui_Fractorium.h" />
<CustomBuild Include="..\..\..\Source\Fractorium\Fractorium.h">
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing Fractorium.h...</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/Fractorium.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(AMDAPPSDKROOT)\include" "-I$(CUDA_PATH)\include" "-I.\GeneratedFiles\$(ConfigurationName)\."</Command>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Moc%27ing Fractorium.h...</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/Fractorium.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(AMDAPPSDKROOT)\include" "-I$(CUDA_PATH)\include" "-I.\GeneratedFiles\$(ConfigurationName)\."</Command>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
</CustomBuild>
<ClInclude Include="..\..\..\Source\Fractorium\FractoriumPch.h" />
</ItemGroup>
<ItemGroup>
<CustomBuild Include="..\..\..\Source\Fractorium\Fractorium.qrc">
<FileType>Document</FileType>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(FullPath);%(AdditionalInputs)</AdditionalInputs>
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Rcc%27ing %(Identity)...</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles\qrc_%(Filename).cpp;%(Outputs)</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">"$(QTDIR)\bin\rcc.exe" -name "%(Filename)" -no-compress "%(FullPath)" -o .\GeneratedFiles\qrc_%(Filename).cpp</Command>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(FullPath);%(AdditionalInputs)</AdditionalInputs>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Rcc%27ing %(Identity)...</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles\qrc_%(Filename).cpp;%(Outputs)</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">"$(QTDIR)\bin\rcc.exe" -name "%(Filename)" -no-compress "%(FullPath)" -o .\GeneratedFiles\qrc_%(Filename).cpp</Command>
<SubType>Designer</SubType>
</CustomBuild>
</ItemGroup>
<ItemGroup>
<CustomBuild Include="..\..\..\Source\Fractorium\Fractorium.ui">
<FileType>Document</FileType>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(QTDIR)\bin\uic.exe;%(AdditionalInputs)</AdditionalInputs>
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Uic%27ing %(Identity)...</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles\ui_%(Filename).h;%(Outputs)</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">"$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)"</Command>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(QTDIR)\bin\uic.exe;%(AdditionalInputs)</AdditionalInputs>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Uic%27ing %(Identity)...</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles\ui_%(Filename).h;%(Outputs)</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">"$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)"</Command>
<SubType>Designer</SubType>
</CustomBuild>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="Ember.vcxproj">
<Project>{2bdb7a54-bb1a-476b-a6e5-f81e90ad4e67}</Project>
</ProjectReference>
<ProjectReference Include="EmberCL.vcxproj">
<Project>{f6a9102c-69a9-48fb-bc4b-49e49af43236}</Project>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<CustomBuild Include="..\..\..\Source\Fractorium\OptionsDialog.ui">
<FileType>Document</FileType>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(QTDIR)\bin\uic.exe;%(AdditionalInputs)</AdditionalInputs>
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Uic%27ing %(Identity)...</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles\ui_%(Filename).h;%(Outputs)</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">"$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)"</Command>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(QTDIR)\bin\uic.exe;%(AdditionalInputs)</AdditionalInputs>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Uic%27ing %(Identity)...</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles\ui_%(Filename).h;%(Outputs)</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">"$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)"</Command>
</CustomBuild>
</ItemGroup>
<ItemGroup>
<CustomBuild Include="..\..\..\Source\Fractorium\AboutDialog.ui">
<FileType>Document</FileType>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(QTDIR)\bin\uic.exe;%(AdditionalInputs)</AdditionalInputs>
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Uic%27ing %(Identity)...</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles\ui_%(Filename).h;%(Outputs)</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">"$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)"</Command>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(QTDIR)\bin\uic.exe;%(AdditionalInputs)</AdditionalInputs>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Uic%27ing %(Identity)...</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles\ui_%(Filename).h;%(Outputs)</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">"$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)"</Command>
<SubType>Designer</SubType>
</CustomBuild>
</ItemGroup>
<ItemGroup>
<CustomBuild Include="..\..\..\Source\Fractorium\FinalRenderDialog.ui">
<FileType>Document</FileType>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(QTDIR)\bin\uic.exe;%(AdditionalInputs)</AdditionalInputs>
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Uic%27ing %(Identity)...</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles\ui_%(Filename).h;%(Outputs)</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">"$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)"</Command>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(QTDIR)\bin\uic.exe;%(AdditionalInputs)</AdditionalInputs>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Uic%27ing %(Identity)...</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles\ui_%(Filename).h;%(Outputs)</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">"$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)"</Command>
</CustomBuild>
</ItemGroup>
<ItemGroup>
<None Include="..\..\..\Source\Fractorium\Icons\Fractorium.ico" />
<CustomBuild Include="..\..\..\Source\Fractorium\VariationsDialog.ui">
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(QTDIR)\bin\uic.exe;%(AdditionalInputs)</AdditionalInputs>
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Uic%27ing %(Identity)...</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles\ui_%(Filename).h;%(Outputs)</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">"$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)"</Command>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(QTDIR)\bin\uic.exe;%(AdditionalInputs)</AdditionalInputs>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Uic%27ing %(Identity)...</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles\ui_%(Filename).h;%(Outputs)</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">"$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)"</Command>
</CustomBuild>
<CustomBuild Include="..\..\..\Source\Fractorium\QssDialog.ui">
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(QTDIR)\bin\uic.exe;%(AdditionalInputs)</AdditionalInputs>
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Uic%27ing %(Identity)...</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles\ui_%(Filename).h;%(Outputs)</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">"$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)"</Command>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(QTDIR)\bin\uic.exe;%(AdditionalInputs)</AdditionalInputs>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Uic%27ing %(Identity)...</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles\ui_%(Filename).h;%(Outputs)</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">"$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)"</Command>
</CustomBuild>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="Fractorium.rc" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
<ProjectExtensions>
<VisualStudio>
<UserProperties MocDir=".\GeneratedFiles\$(ConfigurationName)" UicDir=".\GeneratedFiles" RccDir=".\GeneratedFiles" lupdateOptions="" lupdateOnBuild="0" lreleaseOptions="" Qt5Version_x0020_x64="Qt5" MocOptions="" />
</VisualStudio>
</ProjectExtensions>
</Project>

View File

@ -0,0 +1,417 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;cxx;c;def</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h</Extensions>
</Filter>
<Filter Include="Form Files">
<UniqueIdentifier>{99349809-55BA-4b9d-BF79-8FDBB0286EB3}</UniqueIdentifier>
<Extensions>ui</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{D9D6E242-F8AF-46E4-B9FD-80ECBC20BA3E}</UniqueIdentifier>
<Extensions>qrc;*</Extensions>
<ParseFiles>false</ParseFiles>
</Filter>
<Filter Include="Generated Files">
<UniqueIdentifier>{71ED8ED8-ACB9-4CE9-BBE1-E00B30144E11}</UniqueIdentifier>
<Extensions>moc;h;cpp</Extensions>
<SourceControlFiles>False</SourceControlFiles>
</Filter>
<Filter Include="Generated Files\Debug">
<UniqueIdentifier>{44a6e761-1e1f-46ce-820d-b80d1c0265ae}</UniqueIdentifier>
<Extensions>cpp;moc</Extensions>
<SourceControlFiles>False</SourceControlFiles>
</Filter>
<Filter Include="Generated Files\Release">
<UniqueIdentifier>{cc25f297-1a73-4c08-9b5f-8dad7c7c7452}</UniqueIdentifier>
<Extensions>cpp;moc</Extensions>
<SourceControlFiles>False</SourceControlFiles>
</Filter>
<Filter Include="Glm">
<UniqueIdentifier>{d61ea4d8-e7a6-4d86-934e-992611e1c181}</UniqueIdentifier>
</Filter>
<Filter Include="Widgets">
<UniqueIdentifier>{84e24710-0e4f-4aa3-9f74-82cd2a3b39a7}</UniqueIdentifier>
</Filter>
<Filter Include="Dialogs">
<UniqueIdentifier>{5555e39d-b8d2-4bac-bf6c-6763228b15bc}</UniqueIdentifier>
</Filter>
<Filter Include="MainWindows">
<UniqueIdentifier>{26fa32d9-268c-4021-8398-d40d46344dff}</UniqueIdentifier>
</Filter>
<Filter Include="Controllers">
<UniqueIdentifier>{811962f9-51c1-48ba-a9da-f5ce981aea71}</UniqueIdentifier>
</Filter>
<Filter Include="Dialogs\Qss">
<UniqueIdentifier>{5ba9fccd-8922-4037-956f-d57177a43700}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\..\Source\Fractorium\main.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="GeneratedFiles\qrc_Fractorium.cpp">
<Filter>Generated Files</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\Fractorium\FractoriumPch.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\Fractorium\DoubleSpinBox.cpp">
<Filter>Widgets</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\Fractorium\SpinBox.cpp">
<Filter>Widgets</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\Fractorium\AboutDialog.cpp">
<Filter>Dialogs</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\Fractorium\FinalRenderDialog.cpp">
<Filter>Dialogs</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\Fractorium\OptionsDialog.cpp">
<Filter>Dialogs</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\Fractorium\Fractorium.cpp">
<Filter>MainWindows</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\Fractorium\GLWidget.cpp">
<Filter>MainWindows</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\Fractorium\FractoriumParams.cpp">
<Filter>MainWindows</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\Fractorium\FractoriumXforms.cpp">
<Filter>MainWindows</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\Fractorium\FractoriumXformsColor.cpp">
<Filter>MainWindows</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\Fractorium\FractoriumXformsAffine.cpp">
<Filter>MainWindows</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\Fractorium\FractoriumXformsVariations.cpp">
<Filter>MainWindows</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\Fractorium\FractoriumPalette.cpp">
<Filter>MainWindows</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\Fractorium\FractoriumLibrary.cpp">
<Filter>MainWindows</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\Fractorium\FractoriumInfo.cpp">
<Filter>MainWindows</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\Fractorium\FractoriumMenus.cpp">
<Filter>MainWindows</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\Fractorium\FractoriumRender.cpp">
<Filter>MainWindows</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\Fractorium\FractoriumSettings.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\Fractorium\FractoriumToolbar.cpp">
<Filter>MainWindows</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\Fractorium\FinalRenderEmberController.cpp">
<Filter>Controllers</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\Fractorium\FractoriumEmberController.cpp">
<Filter>Controllers</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\Fractorium\GLEmberController.cpp">
<Filter>Controllers</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\Fractorium\CurvesGraphicsView.cpp">
<Filter>Widgets</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\Fractorium\FractoriumXaos.cpp">
<Filter>MainWindows</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\Fractorium\FractoriumXformsSelect.cpp">
<Filter>MainWindows</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\Fractorium\VariationsDialog.cpp">
<Filter>Dialogs</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\Fractorium\QssDialog.cpp">
<Filter>Dialogs\Qss</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\Fractorium\csshighlighter.cpp">
<Filter>Dialogs\Qss</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\Fractorium\qcssparser.cpp">
<Filter>Dialogs\Qss</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\Fractorium\QssTextEdit.cpp">
<Filter>Dialogs\Qss</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\Fractorium\qcssscanner.cpp">
<Filter>Dialogs\Qss</Filter>
</ClCompile>
<ClCompile Include="GeneratedFiles\Debug\moc_VariationsDialog.cpp">
<Filter>Generated Files\Debug</Filter>
</ClCompile>
<ClCompile Include="GeneratedFiles\Release\moc_VariationsDialog.cpp">
<Filter>Generated Files\Release</Filter>
</ClCompile>
<ClCompile Include="GeneratedFiles\Debug\moc_TwoButtonComboWidget.cpp">
<Filter>Generated Files\Debug</Filter>
</ClCompile>
<ClCompile Include="GeneratedFiles\Release\moc_TwoButtonComboWidget.cpp">
<Filter>Generated Files\Release</Filter>
</ClCompile>
<ClCompile Include="GeneratedFiles\Debug\moc_TableWidget.cpp">
<Filter>Generated Files\Debug</Filter>
</ClCompile>
<ClCompile Include="GeneratedFiles\Release\moc_TableWidget.cpp">
<Filter>Generated Files\Release</Filter>
</ClCompile>
<ClCompile Include="GeneratedFiles\Debug\moc_StealthComboBox.cpp">
<Filter>Generated Files\Debug</Filter>
</ClCompile>
<ClCompile Include="GeneratedFiles\Release\moc_StealthComboBox.cpp">
<Filter>Generated Files\Release</Filter>
</ClCompile>
<ClCompile Include="GeneratedFiles\Debug\moc_SpinBox.cpp">
<Filter>Generated Files\Debug</Filter>
</ClCompile>
<ClCompile Include="GeneratedFiles\Release\moc_SpinBox.cpp">
<Filter>Generated Files\Release</Filter>
</ClCompile>
<ClCompile Include="GeneratedFiles\Debug\moc_QssTextEdit.cpp">
<Filter>Generated Files\Debug</Filter>
</ClCompile>
<ClCompile Include="GeneratedFiles\Release\moc_QssTextEdit.cpp">
<Filter>Generated Files\Release</Filter>
</ClCompile>
<ClCompile Include="GeneratedFiles\Debug\moc_QssDialog.cpp">
<Filter>Generated Files\Debug</Filter>
</ClCompile>
<ClCompile Include="GeneratedFiles\Release\moc_QssDialog.cpp">
<Filter>Generated Files\Release</Filter>
</ClCompile>
<ClCompile Include="GeneratedFiles\Debug\moc_OptionsDialog.cpp">
<Filter>Generated Files\Debug</Filter>
</ClCompile>
<ClCompile Include="GeneratedFiles\Release\moc_OptionsDialog.cpp">
<Filter>Generated Files\Release</Filter>
</ClCompile>
<ClCompile Include="GeneratedFiles\Debug\moc_GLWidget.cpp">
<Filter>Generated Files\Debug</Filter>
</ClCompile>
<ClCompile Include="GeneratedFiles\Release\moc_GLWidget.cpp">
<Filter>Generated Files\Release</Filter>
</ClCompile>
<ClCompile Include="GeneratedFiles\Debug\moc_FractoriumSettings.cpp">
<Filter>Generated Files\Debug</Filter>
</ClCompile>
<ClCompile Include="GeneratedFiles\Release\moc_FractoriumSettings.cpp">
<Filter>Generated Files\Release</Filter>
</ClCompile>
<ClCompile Include="GeneratedFiles\Debug\moc_Fractorium.cpp">
<Filter>Generated Files\Debug</Filter>
</ClCompile>
<ClCompile Include="GeneratedFiles\Release\moc_Fractorium.cpp">
<Filter>Generated Files\Release</Filter>
</ClCompile>
<ClCompile Include="GeneratedFiles\Debug\moc_FinalRenderDialog.cpp">
<Filter>Generated Files\Debug</Filter>
</ClCompile>
<ClCompile Include="GeneratedFiles\Release\moc_FinalRenderDialog.cpp">
<Filter>Generated Files\Release</Filter>
</ClCompile>
<ClCompile Include="GeneratedFiles\Debug\moc_DoubleSpinBoxTableItemDelegate.cpp">
<Filter>Generated Files\Debug</Filter>
</ClCompile>
<ClCompile Include="GeneratedFiles\Release\moc_DoubleSpinBoxTableItemDelegate.cpp">
<Filter>Generated Files\Release</Filter>
</ClCompile>
<ClCompile Include="GeneratedFiles\Debug\moc_DoubleSpinBox.cpp">
<Filter>Generated Files\Debug</Filter>
</ClCompile>
<ClCompile Include="GeneratedFiles\Release\moc_DoubleSpinBox.cpp">
<Filter>Generated Files\Release</Filter>
</ClCompile>
<ClCompile Include="GeneratedFiles\Debug\moc_CurvesGraphicsView.cpp">
<Filter>Generated Files\Debug</Filter>
</ClCompile>
<ClCompile Include="GeneratedFiles\Release\moc_CurvesGraphicsView.cpp">
<Filter>Generated Files\Release</Filter>
</ClCompile>
<ClCompile Include="GeneratedFiles\Debug\moc_csshighlighter.cpp">
<Filter>Generated Files\Debug</Filter>
</ClCompile>
<ClCompile Include="GeneratedFiles\Release\moc_csshighlighter.cpp">
<Filter>Generated Files\Release</Filter>
</ClCompile>
<ClCompile Include="GeneratedFiles\Debug\moc_AboutDialog.cpp">
<Filter>Generated Files\Debug</Filter>
</ClCompile>
<ClCompile Include="GeneratedFiles\Release\moc_AboutDialog.cpp">
<Filter>Generated Files\Release</Filter>
</ClCompile>
<ClCompile Include="GeneratedFiles\Debug\moc_LibraryTreeWidget.cpp">
<Filter>Generated Files\Debug</Filter>
</ClCompile>
<ClCompile Include="GeneratedFiles\Release\moc_LibraryTreeWidget.cpp">
<Filter>Generated Files\Release</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\Fractorium\LibraryTreeWidget.cpp">
<Filter>Widgets</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="GeneratedFiles\ui_Fractorium.h">
<Filter>Generated Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\glm\glm\glm.hpp">
<Filter>Glm</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\Fractorium\EmberFile.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\Fractorium\FractoriumPch.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="GeneratedFiles\ui_OptionsDialog.h">
<Filter>Generated Files</Filter>
</ClInclude>
<ClInclude Include="GeneratedFiles\ui_AboutDialog.h">
<Filter>Generated Files</Filter>
</ClInclude>
<ClInclude Include="GeneratedFiles\ui_FinalRenderDialog.h">
<Filter>Generated Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\Fractorium\resource.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\Fractorium\FinalRenderEmberController.h">
<Filter>Controllers</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\Fractorium\FractoriumEmberController.h">
<Filter>Controllers</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\Fractorium\GLEmberController.h">
<Filter>Controllers</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\EmberCommon\EmberCommon.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\Fractorium\FractoriumCommon.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\Fractorium\PaletteTableWidgetItem.h">
<Filter>Widgets</Filter>
</ClInclude>
<ClInclude Include="GeneratedFiles\ui_VariationsDialog.h">
<Filter>Generated Files</Filter>
</ClInclude>
<ClInclude Include="GeneratedFiles\ui_QssDialog.h">
<Filter>Generated Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\Fractorium\qcssparser.h">
<Filter>Dialogs\Qss</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\Fractorium\qfunctions.h">
<Filter>Dialogs\Qss</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<CustomBuild Include="..\..\..\Source\Fractorium\Fractorium.qrc">
<Filter>Resource Files</Filter>
</CustomBuild>
<CustomBuild Include="..\..\..\Source\Fractorium\Fractorium.ui">
<Filter>Form Files</Filter>
</CustomBuild>
<CustomBuild Include="..\..\..\Source\Fractorium\OptionsDialog.ui">
<Filter>Form Files</Filter>
</CustomBuild>
<CustomBuild Include="..\..\..\Source\Fractorium\AboutDialog.ui">
<Filter>Form Files</Filter>
</CustomBuild>
<CustomBuild Include="..\..\..\Source\Fractorium\FinalRenderDialog.ui">
<Filter>Form Files</Filter>
</CustomBuild>
<CustomBuild Include="..\..\..\Source\Fractorium\DoubleSpinBox.h">
<Filter>Widgets</Filter>
</CustomBuild>
<CustomBuild Include="..\..\..\Source\Fractorium\TableWidget.h">
<Filter>Widgets</Filter>
</CustomBuild>
<CustomBuild Include="..\..\..\Source\Fractorium\VariationTreeWidgetItem.h">
<Filter>Widgets</Filter>
</CustomBuild>
<CustomBuild Include="..\..\..\Source\Fractorium\AboutDialog.h">
<Filter>Dialogs</Filter>
</CustomBuild>
<CustomBuild Include="..\..\..\Source\Fractorium\FinalRenderDialog.h">
<Filter>Dialogs</Filter>
</CustomBuild>
<CustomBuild Include="..\..\..\Source\Fractorium\OptionsDialog.h">
<Filter>Dialogs</Filter>
</CustomBuild>
<CustomBuild Include="..\..\..\Source\Fractorium\SpinBox.h">
<Filter>Widgets</Filter>
</CustomBuild>
<CustomBuild Include="..\..\..\Source\Fractorium\GLWidget.h">
<Filter>MainWindows</Filter>
</CustomBuild>
<CustomBuild Include="..\..\..\Source\Fractorium\Fractorium.h">
<Filter>MainWindows</Filter>
</CustomBuild>
<CustomBuild Include="..\..\..\Source\Fractorium\EmberTreeWidgetItem.h">
<Filter>Widgets</Filter>
</CustomBuild>
<CustomBuild Include="..\..\..\Source\Fractorium\StealthComboBox.h">
<Filter>Widgets</Filter>
</CustomBuild>
<CustomBuild Include="..\..\..\Source\Fractorium\FractoriumSettings.h">
<Filter>Header Files</Filter>
</CustomBuild>
<CustomBuild Include="..\..\..\Source\Fractorium\TwoButtonComboWidget.h">
<Filter>Widgets</Filter>
</CustomBuild>
<CustomBuild Include="..\..\..\Source\Fractorium\CurvesGraphicsView.h">
<Filter>Widgets</Filter>
</CustomBuild>
<CustomBuild Include="..\..\..\Source\Fractorium\DoubleSpinBoxTableItemDelegate.h">
<Filter>Widgets</Filter>
</CustomBuild>
<CustomBuild Include="..\..\..\Source\Fractorium\VariationsDialog.ui">
<Filter>Form Files</Filter>
</CustomBuild>
<CustomBuild Include="..\..\..\Source\Fractorium\VariationsDialog.h">
<Filter>Dialogs</Filter>
</CustomBuild>
<CustomBuild Include="..\..\..\Source\Fractorium\QssDialog.ui">
<Filter>Form Files</Filter>
</CustomBuild>
<CustomBuild Include="..\..\..\Source\Fractorium\QssDialog.h">
<Filter>Dialogs\Qss</Filter>
</CustomBuild>
<CustomBuild Include="..\..\..\Source\Fractorium\QssTextEdit.h">
<Filter>Dialogs\Qss</Filter>
</CustomBuild>
<CustomBuild Include="..\..\..\Source\Fractorium\csshighlighter.h">
<Filter>Dialogs\Qss</Filter>
</CustomBuild>
<CustomBuild Include="..\..\..\Source\Fractorium\LibraryTreeWidget.h">
<Filter>Widgets</Filter>
</CustomBuild>
</ItemGroup>
<ItemGroup>
<None Include="..\..\..\Source\Fractorium\Icons\Fractorium.ico" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="Fractorium.rc">
<Filter>Resource Files</Filter>
</ResourceCompile>
</ItemGroup>
</Project>

View File

@ -0,0 +1,14 @@
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by EmberCL.rc
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 101
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1001
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif

View File

@ -0,0 +1,14 @@
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by Ember.rc
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 101
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1001
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif

View File

@ -0,0 +1,37 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
* zlib.props - location of zlib source
*
* libpng version 1.5.12 - July 11, 2012
*
* Copyright (c) 1998-2011 Glenn Randers-Pehrson
*
* This code is released under the libpng license.
* For conditions of distribution and use, see the disclaimer
* and license in png.h
* You must edit this file to record the location of the zlib
* source code.
-->
<Project ToolsVersion="4.0"
xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Label="Globals">
<!-- Place the name of the directory containing the source of zlib used for
debugging in this property.
The directory need only contain the '.c' and '.h' files from the
source.
If you use a relative directory name (as below) then it must be
relative to the project directories; these are one level deepers than
the directories containing this file.
If the version of zlib you use does not match that used when the
distribution was built you will get warnings from pngtest that the zlib
versions do not match. The zlib version used in this build is recorded
below:
-->
<ZLibSrcDir>..\..\..\..\zlib</ZLibSrcDir>
</PropertyGroup>
</Project>

491
Builds/MSVC/WIN32.MAK Normal file
View File

@ -0,0 +1,491 @@
# =========================================================================
# WIN32.MAK - Win32 application master NMAKE definitions file for the
# Microsoft Plaform SDK for Win32 programming samples
# Copyright 1991 - 1998 Microsoft Corporation
# -------------------------------------------------------------------------
# This files should be included at the top of all MAKEFILEs as follows:
# !include <win32.mak>
# -------------------------------------------------------------------------
#
# Define APPVER = [ 4.0 | 5.0 ] prior to including win32.mak to get
# build time checking for version dependencies and to mark the executable
# with version information.
#
# Define TARGETOS = [ WIN95 | WINNT | BOTH ] prior to including win32.mak
# to get some build time checking for platform dependencies.
#
# Define TARGETLANG = [ LANG_JAPANESE | LANG_CHINESE | LANG_KOREAN ] prior
# to including win32.mak to getcompile & link flags for building
# applications to run on Far-East Windows. (This is an optional parameter.
# The system locale is the default.)
#
# Define _WIN32_IE = [ 0x0300 | 0x0400 ] prior to including win32.mak to
# get compile and link flags for building applications and components to
# run on Internet Explorer. (This is an optional parameter. IE 4.0 is
# the default.)
#
# -------------------------------------------------------------------------
# NMAKE Options
#
# Use the table below to determine the additional options for NMAKE to
# generate various application debugging, profiling and performance tuning
# information.
#
# Application Information Type Invoke NMAKE
# ---------------------------- ------------
# For No Debugging Info nmake nodebug=1
# For Working Set Tuner Info nmake tune=1
# For Call Attributed Profiling Info nmake profile=1
#
# Note: The three options above are mutually exclusive (you may use only
# one to compile/link the application).
#
# Note: creating the environment variables NODEBUG, TUNE, and PROFILE is an
# alternate method to setting these options via the nmake command line.
#
# Additional NMAKE Options Invoke NMAKE
# ---------------------------- ------------
# For No ANSI NULL Compliance nmake no_ansi=1
# (ANSI NULL is defined as PVOID 0)
#
# =========================================================================
!IFNDEF _WIN32_MAK_
_WIN32_MAK_ = 1
# -------------------------------------------------------------------------
# Get CPU Type - exit if CPU environment variable is not defined
# -------------------------------------------------------------------------
# Win95 does not define PROCESSOR_ARCHITECTURE - default to i386
!IF "$(PROCESSOR_ARCHITECTURE)" == ""
CPU=i386
PROCESSOR_ARCHITECTURE=x86
!endif
!IF !DEFINED(CPU) || "$(CPU)" == ""
CPU = $(PROCESSOR_ARCHITECTURE)
!ENDIF # CPU
# if PROCESSOR_ARCHITECTURE was x86 or X86 change CPU to i386
!IF ( "$(CPU)" == "X86" ) || ( "$(CPU)" == "x86" )
CPU = i386
!ENDIF # CPU == X86
!IF "$(CPU)" != "i386"
!IF "$(CPU)" != "ALPHA"
!ERROR Must specify CPU environment variable ( CPU=i386, CPU=ALPHA)
!ENDIF
!ENDIF
# -------------------------------------------------------------------------
# Get Target Operating System - Default to WINNT
# -------------------------------------------------------------------------
!IFNDEF TARGETOS
TARGETOS = WINNT
!ENDIF
!IF "$(TARGETOS)" != "WINNT"
!IF "$(TARGETOS)" != "WIN95"
!IF "$(TARGETOS)" != "BOTH"
!ERROR Must specify TARGETOS environment variable (BOTH, WIN95, WINNT)
!ENDIF
!ENDIF
!ENDIF
# default to APPVER of 4.0
!IFNDEF APPVER
APPVER = 4.0
!ENDIF
!IF "$(APPVER)" != "5.0"
!IF "$(APPVER)" != "4.0"
!ERROR Must specify APPVER environment variable (4.0, 5.0)
!ENDIF
!ENDIF
!IF "$(APPVER)" =="5.0"
!IFNDEF _WIN32_IE
_WIN32_IE = 0x0400
!ENDIF # _WIN32_IE
!ENDIF # APPVER == 5.0
!IFNDEF _WIN32_IE
_WIN32_IE = 0x0300
!ENDIF
# binary declarations common to all platforms
cc = cl
rc = rc
link = link
implib = lib
hc = hcrtf -xn
# for compatibility with older-style makefiles
cvtobj = REM !!! CVTOBJ is no longer necessary - please remove !!!
cvtres = REM !!! CVTRES is no longer necessary - please remove !!!
# -------------------------------------------------------------------------
# Platform Dependent Compile Flags - must be specified after $(cc)
#
# Note: Debug switches are on by default for current release
#
# These switches allow for source level debugging with WinDebug for local
# and global variables.
#
# Both compilers now use the same front end - you must still define either
# _X86_ or _ALPHA_. These have replaced the i386 and ALPHA definitions
# which are not ANSI compliant.
#
# Common compiler flags:
# -c - compile without linking
# -W3 - Set warning level to level 3
# -Zi - generate debugging information
# -Od - disable all optimizations
# -Ox - use maximum optimizations
# -Zd - generate only public symbols and line numbers for debugging
#
# i386 specific compiler flags:
# -Gz - stdcall
#
# -------------------------------------------------------------------------
# declarations common to all compiler options
ccommon = -c -W3 -DCRTAPI1=_cdecl -DCRTAPI2=_cdecl -nologo
# for compatibility with old source code, map {try, except, leave, finally}
# to their proper names (i.e. prefaced by "__")
!IFDEF SEHMAP
ccommon = $(ccommon) -FIsehmap.h
!ENDIF
!IF "$(TARGETLANG)" == "LANG_JAPANESE"
ccommon = $(ccommon) -DJAPAN -DDBCS -DFE_IME
!ENDIF
!IF "$(TARGETLANG)" == "LANG_CHINESE"
ccommon = $(ccommon) -DDBCS -DFE_IME
!ENDIF
!IF "$(TARGETLANG)" == "LANG_KOREAN"
ccommon = $(ccommon) -DDBCS -DFE_IME
!ENDIF
!IF "$(CPU)" == "i386"
cflags = $(ccommon) -D_X86_=1
scall = -Gz
!ELSE
!IF "$(CPU)" == "ALPHA"
cflags = $(ccommon) -D_ALPHA_=1
scall =
!ENDIF
!ENDIF
!IF "$(APPVER)" == "4.0"
NMAKE_WINVER = 0x0400
! IFNDEF _WIN32_IE
_WIN32_IE = 0x0300
! ENDIF
!ELSEIF "$(APPVER)" == "5.0"
NMAKE_WINVER = 0x0500
! IFNDEF _WIN32_IE
_WIN32_IE = 0x0400
! ENDIF
!ENDIF
!IF "$(TARGETOS)" == "WINNT"
cflags = $(cflags) -D_WINNT -D_WIN32_WINNT=$(NMAKE_WINVER)
!ENDIF
!IF "$(TARGETOS)" == "WIN95"
cflags = $(cflags) -D_WIN95 -D_WIN32_WINDOWS=$(NMAKE_WINVER)
!ENDIF
# regardless of the TARGET OS, define compile time WINVER to match APPVER macro
cflags = $(cflags) -D_WIN32_IE=$(_WIN32_IE) -DWINVER=$(NMAKE_WINVER)
!IFDEF NODEBUG
cdebug = -Ox
!ELSE
!IFDEF PROFILE
cdebug = -Gh -Zd -Ox
!ELSE
!IFDEF TUNE
cdebug = -Gh -Zd -Ox
!ELSE
cdebug = -Z7 -Od
!ENDIF
!ENDIF
!ENDIF
# -------------------------------------------------------------------------
# Target Module & Subsystem Dependent Compile Defined Variables - must be
# specified after $(cc)
#
# The following table indicates the various acceptable combinations of
# the C Run-Time libraries LIBC, LIBCMT, and CRTDLL respect to the creation
# of a EXE and/or DLL target object. The appropriate compiler flag macros
# that should be used for each combination are also listed.
#
# Link EXE Create Exe Link DLL Create DLL
# with Using with Using
# ----------------------------------------------------
# LIBC CVARS None None *
# LIBC CVARS LIBC CVARS
# LIBC CVARS LIBCMT CVARSMT
# LIBCMT CVARSMT None None *
# LIBCMT CVARSMT LIBC CVARS
# LIBCMT CVARSMT LIBCMT CVARSMT
# CRTDLL CVARSDLL None None *
# CRTDLL CVARSDLL LIBC CVARS
# CRTDLL CVARSDLL LIBCMT CVARSMT
# CRTDLL CVARSDLL CRTDLL CVARSDLL *
#
# * - Denotes the Recommended Configuration
#
# When building single-threaded applications you can link your executable
# with either LIBC, LIBCMT, or CRTDLL, although LIBC will provide the best
# performance.
#
# When building multi-threaded applications, either LIBCMT or CRTDLL can
# be used as the C-Runtime library, as both are multi-thread safe.
#
# Note: Any executable which accesses a DLL linked with CRTDLL.LIB must
# also link with CRTDLL.LIB instead of LIBC.LIB or LIBCMT.LIB.
# When using DLLs, it is recommended that all of the modules be
# linked with CRTDLL.LIB.
#
# Note: The macros of the form xDLL are used when linking the object with
# the DLL version of the C Run-Time (that is, CRTDLL.LIB). They are
# not used when the target object is itself a DLL.
#
# -------------------------------------------------------------------------
!IFDEF NO_ANSI
noansi = -DNULL=0
!ENDIF
# for Windows applications that use the C Run-Time libraries
cvars = -DWIN32 $(noansi) -D_WIN32
cvarsmt = $(cvars) -D_MT -MT
cvarsdll = $(cvars) -D_MT -D_DLL -MD
# for compatibility with older-style makefiles
cvarsmtdll = $(cvarsmt) -D_DLL
# for POSIX applications
psxvars = -D_POSIX_
# resource compiler
rcflags = /r
rcvars = -DWIN32 -D_WIN32 -DWINVER=$(NMAKE_WINVER) $(noansi)
!IF "$(TARGETLANG)" == "LANG_JAPANESE"
rcflags = $(rcflags) /c932
rcvars = $(rcvars) -DJAPAN -DDBCS -DFE_IME
!ENDIF
!IF "$(TARGETLANG)" == "LANG_CHINESE"
rcvars = $(rcvars) -DDBCS -DFE_IME
!ENDIF
!IF "$(TARGETLANG)" == "LANG_KOREAN"
rcvars = $(rcvars) -DDBCS -DFE_IME
!ENDIF
# -------------------------------------------------------------------------
# Platform Dependent Link Flags - must be specified after $(link)
#
# Note: $(DLLENTRY) should be appended to each -entry: flag on the link
# line.
#
# Note: When creating a DLL that uses C Run-Time functions it is
# recommended to include the entry point function of the name DllMain
# in the DLL's source code. Also, the MAKEFILE should include the
# -entry:_DllMainCRTStartup$(DLLENTRY) option for the creation of
# this DLL. (The C Run-Time entry point _DllMainCRTStartup in turn
# calls the DLL defined DllMain entry point.)
#
# -------------------------------------------------------------------------
# declarations common to all linker options
lflags = /NODEFAULTLIB /INCREMENTAL:NO /PDB:NONE /RELEASE /NOLOGO
# declarations for use on Intel i386, i486, and Pentium systems
!IF "$(CPU)" == "i386"
DLLENTRY = @12
!ENDIF
# declarations for use on self hosted Digital Alpha AXP systems
!IF "$(CPU)" == "ALPHA"
DLLENTRY =
!ENDIF
# -------------------------------------------------------------------------
# Target Module Dependent Link Debug Flags - must be specified after $(link)
#
# These switches allow the inclusion of the necessary symbolic information
# for source level debugging with WinDebug, profiling and/or performance
# tuning.
#
# Note: Debug switches are on by default.
# -------------------------------------------------------------------------
!IFDEF NODEBUG
ldebug = /RELEASE
!ELSE
!IFDEF PROFILE
ldebug = -debug:mapped,partial -debugtype:coff
!ELSE
!IFDEF TUNE
ldebug = -debug:mapped,partial -debugtype:coff
!ELSE
ldebug = -debug:full -debugtype:cv
!ENDIF
!ENDIF
!ENDIF
# for compatibility with older-style makefiles
linkdebug = $(ldebug)
# -------------------------------------------------------------------------
# Subsystem Dependent Link Flags - must be specified after $(link)
#
# These switches allow for source level debugging with WinDebug for local
# and global variables. They also provide the standard application type and
# entry point declarations.
#
# Note that on x86 screensavers have a WinMain entrypoint, but on RISC
# platforms it is main. This is a Win95 compatibility issue.
#
# -------------------------------------------------------------------------
# for Windows applications that use the C Run-Time libraries
conlflags = $(lflags) -subsystem:console,$(APPVER)
guilflags = $(lflags) -subsystem:windows,$(APPVER)
dlllflags = $(lflags) -entry:_DllMainCRTStartup$(DLLENTRY) -dll
!IF "$(CPU)" == "i386"
savlflags = $(lflags) -subsystem:windows,$(APPVER) -entry:WinMainCRTStartup
!ELSE
savlflags = $(lflags) -subsystem:windows,$(APPVER) -entry:mainCRTStartup
!ENDIF
# for POSIX applications
psxlflags = $(lflags) -subsystem:posix -entry:__PosixProcessStartup
# for compatibility with older-style makefiles
conflags = $(conlflags)
guiflags = $(guilflags)
psxflags = $(psxlflags)
# -------------------------------------------------------------------------
# C Run-Time Target Module Dependent Link Libraries
#
# Below is a table which describes which libraries to use depending on the
# target module type, although the table specifically refers to Graphical
# User Interface apps, the exact same dependencies apply to Console apps.
# That is, you could replace all occurrences of 'GUI' with 'CON' in the
# following:
#
# Desired CRT Libraries Desired CRT Libraries
# Library to link Library to link
# for EXE with EXE for DLL with DLL
# ----------------------------------------------------
# LIBC GUILIBS None None *
# LIBC GUILIBS LIBC GUILIBS
# LIBC GUILIBS LIBCMT GUILIBSMT
# LIBCMT GUILIBSMT None None *
# LIBCMT GUILIBSMT LIBC GUILIBS
# LIBCMT GUILIBSMT LIBCMT GUILIBSMT
# CRTDLL GUILIBSDLL None None *
# CRTDLL GUILIBSDLL LIBC GUILIBS
# CRTDLL GUILIBSDLL LIBCMT GUILIBSMT
# CRTDLL GUILIBSDLL CRTDLL GUILIBSDLL *
#
# * - Recommended Configurations.
#
# Note: Any executable which accesses a DLL linked with CRTDLL.LIB must
# also link with CRTDLL.LIB instead of LIBC.LIB or LIBCMT.LIB.
#
# Note: For POSIX applications, link with $(psxlibs).
#
# -------------------------------------------------------------------------
# These CRT Libraries assume the use of Microsoft Visual C++. If you are
# using another Compiler product, change the libc* variable to correspond
# to your import library names.
libc = libc.lib oldnames.lib
libcmt = libcmt.lib oldnames.lib
libcdll = msvcrt.lib oldnames.lib
# for POSIX applications
psxlibs = libcpsx.lib psxdll.lib psxrtl.lib oldnames.lib
# optional profiling and tuning libraries
!IFDEF PROFILE
optlibs = cap.lib
!ELSE
!IFDEF TUNE
optlibs = wst.lib
!ELSE
optlibs =
!ENDIF
!ENDIF
# if building for basic Windows 95, use WinSock1, else use WinSock2
!IF "$(TARGETOS)" == "WIN95"
!IF "$(APPVER)" == "4.0"
winsocklibs = wsock32.lib
!ELSE
winsocklibs = ws2_32.lib mswsock.lib
!ENDIF
!ELSE
winsocklibs = ws2_32.lib mswsock.lib
!ENDIF
# basic subsystem specific libraries, less the C Run-Time
baselibs = kernel32.lib $(optlibs) $(winsocklibs) advapi32.lib
winlibs = $(baselibs) user32.lib gdi32.lib comdlg32.lib winspool.lib
# for Windows applications that use the C Run-Time libraries
conlibs = $(libc) $(baselibs)
conlibsmt = $(libcmt) $(baselibs)
conlibsdll = $(libcdll) $(baselibs)
guilibs = $(libc) $(winlibs)
guilibsmt = $(libcmt) $(winlibs)
guilibsdll = $(libcdll) $(winlibs)
# for OLE applications
olelibs = ole32.lib uuid.lib oleaut32.lib $(guilibs)
olelibsmt = ole32.lib uuid.lib oleaut32.lib $(guilibsmt)
olelibsdll = ole32.lib uuid.lib oleaut32.lib $(guilibsdll)
# for backward compatibility
ole2libs = $(olelibs)
ole2libsmt = $(olelibsmt)
ole2libsdll = $(olelibsdll)
#ENDIF _WIN32_MAK_
!ENDIF

View File

@ -1,4 +1,4 @@
VERSION = 0.9.9.5 VERSION = 1.0.0.2
win32:CONFIG += skip_target_version_ext win32:CONFIG += skip_target_version_ext
#message(PWD: $$absolute_path($$PWD)) #message(PWD: $$absolute_path($$PWD))
@ -61,10 +61,16 @@ win32 {
LIBS = "" LIBS = ""
LIBS += OpenGL32.lib LIBS += OpenGL32.lib
LIBS += WS2_32.lib LIBS += WS2_32.lib
LIBS += $$(AMDAPPSDKROOT)/lib/x86_64/OpenCL.lib _AMDAPPSDK = $$(AMDAPPSDKROOT)
isEmpty(_AMDAPPSDK) {
LIBS += $$(CUDA_PATH)/lib/x64/OpenCL.lib LIBS += $$(CUDA_PATH)/lib/x64/OpenCL.lib
}
else {
LIBS += $$(AMDAPPSDKROOT)/lib/x86_64/OpenCL.lib
}
LIBS += $$absolute_path($$EXTERNAL_LIB)/libjpeg.lib LIBS += $$absolute_path($$EXTERNAL_LIB)/libjpeg.lib
LIBS += $$absolute_path($$EXTERNAL_LIB)/libpng.lib /NODEFAULTLIB:LIBCMT LIBS += $$absolute_path($$EXTERNAL_LIB)/libpng.lib
LIBS += $$absolute_path($$EXTERNAL_LIB)/libxml2.lib LIBS += $$absolute_path($$EXTERNAL_LIB)/libxml2.lib
LIBS += $$absolute_path($$EXTERNAL_LIB)/tbb.lib LIBS += $$absolute_path($$EXTERNAL_LIB)/tbb.lib
LIBS += $$absolute_path($$EXTERNAL_LIB)/zlib.lib LIBS += $$absolute_path($$EXTERNAL_LIB)/zlib.lib

View File

@ -1,3 +1,28 @@
1.0.0.2 12/05/2016
--User changes
-Add many tooltips to help clarify functionality.
-Select multiple flames in library for del/move. Still only one allowed to be set as the current.
-Show checkbox for current flame. Remember this is not necessarily what's selected.
-User can now drag a square to select xforms, which keeps in sync with checkboxes.
-Remove --nframes from command line. Replace with new params: --loopframes, --interpframes, --interploops.
-Add two new options to EmberGenome: --cwloops --cwinterploops to specify whether rotation should go clockwise instead of the default counter clockwise.
-Add these to Fractorium as checkboxes.
-Apply All now also works for toggling animate flag on xforms.
-Options dialog now allows user to set whether double click toggles spinners, or right click does.
--Bug fixes
-Selecting final and non-final xforms, and then dragging the non-final did not drag the final with it.
-Selecting all xforms when a final was present, then deleting crashed the program.
-Remove support for ppm files in the command line programs, it's an outdated format.
-Switching between SP and DP kept reapplying the palette adjustments.
--Code changes
-Move build system to Visual Studio 2015 and Qt 5.6.
-SSE used during addition of points to the histogram.
-Remove last remnants of old flam3 C code and replace with C++.
-Remove unused code involving tbb::task_group.
-Make settings object a global shared_ptr singleton, so it doesn't have to be passed around.
1.0.0.1 06/21/2016 1.0.0.1 06/21/2016
--Bug fixes --Bug fixes
-Highlight power values less than 0 were accidentally disabled on the UI. -Highlight power values less than 0 were accidentally disabled on the UI.

View File

@ -18,9 +18,6 @@
#define _stat stat #define _stat stat
#define _fstat fstat #define _fstat fstat
#define _stricmp strcmp #define _stricmp strcmp
#define sscanf_s sscanf
#define sprintf_s snprintf
#define snprintf_s snprintf
typedef int errno_t; typedef int errno_t;
#endif #endif
@ -40,7 +37,7 @@ static void sincos(float x, float* s, float* c)
namespace EmberNs namespace EmberNs
{ {
#define EMBER_VERSION "1.0.0.1" #define EMBER_VERSION "1.0.0.2"
#define EPS6 T(1e-6) #define EPS6 T(1e-6)
#define EPS std::numeric_limits<T>::epsilon()//Apoplugin.h uses -20, but it's more mathematically correct to do it this way. #define EPS std::numeric_limits<T>::epsilon()//Apoplugin.h uses -20, but it's more mathematically correct to do it this way.
#define ISAAC_SIZE 4 #define ISAAC_SIZE 4

View File

@ -13,8 +13,6 @@
#ifdef _WIN32 #ifdef _WIN32
#pragma warning(disable : 4251; disable : 4661; disable : 4100) #pragma warning(disable : 4251; disable : 4661; disable : 4100)
#define basename(x) _strdup(x) #define basename(x) _strdup(x)
#define snprintf _snprintf
#define snprintf_s _snprintf_s
#define WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN
#define EMBER_OS "WIN" #define EMBER_OS "WIN"
@ -69,11 +67,12 @@
#endif #endif
//Intel's Threading Building Blocks is what's used for all threading. //Intel's Threading Building Blocks is what's used for all threading.
#include <tbb/task_group.h>
#include <tbb/parallel_for.h> #include <tbb/parallel_for.h>
#include <tbb/task_scheduler_init.h> #include <tbb/task_scheduler_init.h>
#define GLM_FORCE_RADIANS 1 #define GLM_FORCE_RADIANS 1
#define GLM_ENABLE_EXPERIMENTAL 1
#ifndef __APPLE__ #ifndef __APPLE__
#define GLM_FORCE_INLINE 1 #define GLM_FORCE_INLINE 1
#endif #endif

View File

@ -121,9 +121,6 @@ public:
b = false; b = false;
} }
if (f.is_open())
f.close();
return b; return b;
} }

View File

@ -145,7 +145,7 @@ public:
throw "Out of bounds xform index in selection distribution."; throw "Out of bounds xform index in selection distribution.";
#endif #endif
//printf("offset = %d, xform = %d, running sum = %f\n", j, i, tempDensity); //cout << "offset = " << j << ", xform = " << i << ", running sum = " << tempDensity << "\n";
m_XformDistributions[(distrib * CHOOSE_XFORM_GRAIN) + j] = byte(i); m_XformDistributions[(distrib * CHOOSE_XFORM_GRAIN) + j] = byte(i);
tempDensity += densityPerElement; tempDensity += densityPerElement;
j++; j++;

View File

@ -241,7 +241,6 @@ private:
/// <param name="palettes">The vector to store the paresed palettes associated with this file in.</param> /// <param name="palettes">The vector to store the paresed palettes associated with this file in.</param>
void ParsePalettes(xmlNode* node, const shared_ptr<string>& filename, vector<Palette<T>>& palettes) void ParsePalettes(xmlNode* node, const shared_ptr<string>& filename, vector<Palette<T>>& palettes)
{ {
bool hexError = false;
char* val; char* val;
const char* loc = __FUNCTION__; const char* loc = __FUNCTION__;
xmlAttrPtr attr; xmlAttrPtr attr;
@ -259,33 +258,31 @@ private:
if (!Compare(attr->name, "data")) if (!Compare(attr->name, "data"))
{ {
int colorIndex = 0; string s1, s;
uint r, g, b; size_t tmp, colorCount = 0, colorIndex = 0;
int colorCount = 0; stringstream ss, temp(val); ss >> std::hex;
hexError = false; s.reserve(2048);
do while (temp >> s1)
{ s += s1;
int ret = sscanf_s(static_cast<char*>(&(val[colorIndex])), "00%2x%2x%2x", &r, &g, &b);
if (ret != 3) auto length = s.size();
for (size_t strIndex = 0; strIndex < length;)
{ {
AddToReport(string(loc) + " : Problem reading hexadecimal color data " + string(&val[colorIndex])); strIndex += 2;//Skip past the 00 at the beginning of each RGB.
hexError = true;
break; for (glm::length_t i = 0; i < 3 && colorCount < palette.Size(); i++)
{
const char tmpStr[3] = { s[strIndex++], s[strIndex++], 0 };//Read out and convert the string two characters at a time.
ss.clear();//Reset and fill the string stream.
ss.str(tmpStr);
ss >> tmp;//Do the conversion.
palette.m_Entries[colorCount][i] = T(tmp) / T(255);//Hex palette is [0..255], convert to [0..1].
} }
colorIndex += 8;
while (isspace(int(val[colorIndex])))
colorIndex++;
palette[colorCount].r = T(r) / T(255);//Store as normalized colors in the range of 0-1.
palette[colorCount].g = T(g) / T(255);
palette[colorCount].b = T(b) / T(255);
colorCount++; colorCount++;
} }
while (colorCount < COLORMAP_LENGTH);
} }
else if (!Compare(attr->name, "number")) else if (!Compare(attr->name, "number"))
{ {
@ -300,12 +297,9 @@ private:
attr = attr->next; attr = attr->next;
} }
if (!hexError)
{
palette.m_Filename = filename; palette.m_Filename = filename;
palettes.push_back(palette); palettes.push_back(palette);
} }
}
else else
{ {
ParsePalettes(node->children, filename, palettes); ParsePalettes(node->children, filename, palettes);

View File

@ -354,9 +354,6 @@ eRenderStatus Renderer<T, bucketT>::Run(vector<byte>& finalImage, double time, s
size_t i, temporalSample = 0; size_t i, temporalSample = 0;
T deTime; T deTime;
auto success = eRenderStatus::RENDER_OK; auto success = eRenderStatus::RENDER_OK;
//double iterationTime = 0;
//double accumulationTime = 0;
//Timing it;
//Reset timers and progress percent if: Beginning anew or only filtering and/or accumulating. //Reset timers and progress percent if: Beginning anew or only filtering and/or accumulating.
if (!resume || accumOnly || filterAndAccumOnly) if (!resume || accumOnly || filterAndAccumOnly)
@ -1294,6 +1291,7 @@ EmberStats Renderer<T, bucketT>::Iterate(size_t iterCount, size_t temporalSample
size_t totalItersPerThread = size_t(ceil(double(iterCount) / double(m_ThreadsToUse))); size_t totalItersPerThread = size_t(ceil(double(iterCount) / double(m_ThreadsToUse)));
double percent, etaMs; double percent, etaMs;
EmberStats stats; EmberStats stats;
//vector<double> accumTimes(4);
//Do this every iteration for an animation, or else do it once for a single image. CPU only. //Do this every iteration for an animation, or else do it once for a single image. CPU only.
if (!m_LastIter) if (!m_LastIter)
@ -1302,18 +1300,8 @@ EmberStats Renderer<T, bucketT>::Iterate(size_t iterCount, size_t temporalSample
m_ThreadEmbers.insert(m_ThreadEmbers.begin(), m_ThreadsToUse, m_Ember); m_ThreadEmbers.insert(m_ThreadEmbers.begin(), m_ThreadsToUse, m_Ember);
} }
#ifdef TG
size_t threadIndex;
for (size_t i = 0; i < m_ThreadsToUse; i++)
{
threadIndex = i;
m_TaskGroup.run([&, threadIndex] ()
{
#else
parallel_for(size_t(0), m_ThreadsToUse, [&] (size_t threadIndex) parallel_for(size_t(0), m_ThreadsToUse, [&] (size_t threadIndex)
{ {
#endif
#if defined(_WIN32) #if defined(_WIN32)
SetThreadPriority(GetCurrentThread(), int(m_Priority)); SetThreadPriority(GetCurrentThread(), int(m_Priority));
#elif defined(__APPLE__) #elif defined(__APPLE__)
@ -1357,8 +1345,8 @@ EmberStats Renderer<T, bucketT>::Iterate(size_t iterCount, size_t temporalSample
//t.Tic(); //t.Tic();
//Map temp buffer samples into the histogram using the palette for color. //Map temp buffer samples into the histogram using the palette for color.
Accumulate(m_Rand[threadIndex], m_Samples[threadIndex].data(), params.m_Count, &m_Dmap); Accumulate(m_Rand[threadIndex], m_Samples[threadIndex].data(), params.m_Count, &m_Dmap);
//accumTimes[threadIndex] += t.Toc();
//accumulationTime += t.Toc();
if (m_LockAccum) if (m_LockAccum)
m_AccumCs.unlock(); m_AccumCs.unlock();
@ -1393,15 +1381,10 @@ EmberStats Renderer<T, bucketT>::Iterate(size_t iterCount, size_t temporalSample
} }
} }
}); });
#ifdef TG
}
m_TaskGroup.wait();
#endif
stats.m_Iters = std::accumulate(m_SubBatch.begin(), m_SubBatch.end(), 0ULL);//Sum of iter count of all threads. stats.m_Iters = std::accumulate(m_SubBatch.begin(), m_SubBatch.end(), 0ULL);//Sum of iter count of all threads.
stats.m_Badvals = std::accumulate(m_BadVals.begin(), m_BadVals.end(), 0ULL); stats.m_Badvals = std::accumulate(m_BadVals.begin(), m_BadVals.end(), 0ULL);
stats.m_IterMs = m_IterTimer.Toc(); stats.m_IterMs = m_IterTimer.Toc();
//cout << "Accum time: " << std::accumulate(accumTimes.begin(), accumTimes.end(), 0.0) << endl;
//t2.Toc(__FUNCTION__); //t2.Toc(__FUNCTION__);
return stats; return stats;
} }
@ -1609,19 +1592,49 @@ void Renderer<T, bucketT>::Accumulate(QTIsaac<ISAAC_SIZE, ISAAC_INT>& rand, Poin
colorIndexFrac = colorIndex - bucketT(intColorIndex);//Interpolate between intColorIndex and intColorIndex + 1. colorIndexFrac = colorIndex - bucketT(intColorIndex);//Interpolate between intColorIndex and intColorIndex + 1.
} }
bucketT* __restrict hist = glm::value_ptr(m_HistBuckets[histIndex]);//Vectorizer can't tell these point to different locations.
const bucketT* __restrict pal = glm::value_ptr(palette->m_Entries[intColorIndex]);
const bucketT* __restrict pal2 = glm::value_ptr(palette->m_Entries[intColorIndex + 1]);
auto cifm1 = bucketT(1) - colorIndexFrac;
//Loops are unrolled to allow auto vectorization.
if (p.m_VizAdjusted == 1) if (p.m_VizAdjusted == 1)
m_HistBuckets[histIndex] += ((dmap[intColorIndex] * (1 - colorIndexFrac)) + (dmap[intColorIndex + 1] * colorIndexFrac)); {
hist[0] += (pal[0] * cifm1) + (pal2[0] * colorIndexFrac);
hist[1] += (pal[1] * cifm1) + (pal2[1] * colorIndexFrac);
hist[2] += (pal[2] * cifm1) + (pal2[2] * colorIndexFrac);
hist[3] += (pal[3] * cifm1) + (pal2[3] * colorIndexFrac);
}
else else
m_HistBuckets[histIndex] += (((dmap[intColorIndex] * (1 - colorIndexFrac)) + (dmap[intColorIndex + 1] * colorIndexFrac)) * bucketT(p.m_VizAdjusted)); {
auto va = bucketT(p.m_VizAdjusted);
hist[0] += ((pal[0] * cifm1) + (pal2[0] * colorIndexFrac)) * va;
hist[1] += ((pal[1] * cifm1) + (pal2[1] * colorIndexFrac)) * va;
hist[2] += ((pal[2] * cifm1) + (pal2[2] * colorIndexFrac)) * va;
hist[3] += ((pal[3] * cifm1) + (pal2[3] * colorIndexFrac)) * va;
}
} }
else if (PaletteMode() == ePaletteMode::PALETTE_STEP) else if (PaletteMode() == ePaletteMode::PALETTE_STEP)
{ {
intColorIndex = Clamp<size_t>(size_t(p.m_ColorX * COLORMAP_LENGTH), 0, COLORMAP_LENGTH_MINUS_1); intColorIndex = Clamp<size_t>(size_t(p.m_ColorX * COLORMAP_LENGTH), 0, COLORMAP_LENGTH_MINUS_1);
bucketT* __restrict hist = glm::value_ptr(m_HistBuckets[histIndex]);//Vectorizer can't tell these point to different locations.
const bucketT* __restrict pal = glm::value_ptr(palette->m_Entries[intColorIndex]);
if (p.m_VizAdjusted == 1) if (p.m_VizAdjusted == 1)
m_HistBuckets[histIndex] += dmap[intColorIndex]; {
hist[0] += pal[0];
hist[1] += pal[1];
hist[2] += pal[2];
hist[3] += pal[3];
}
else else
m_HistBuckets[histIndex] += (dmap[intColorIndex] * bucketT(p.m_VizAdjusted)); {
auto va = bucketT(p.m_VizAdjusted);
hist[0] += pal[0] * va;
hist[1] += pal[1] * va;
hist[2] += pal[2] * va;
hist[3] += pal[3] * va;
}
} }
} }
} }

View File

@ -229,7 +229,6 @@ protected:
vector<size_t> m_SubBatch; vector<size_t> m_SubBatch;
vector<size_t> m_BadVals; vector<size_t> m_BadVals;
vector<QTIsaac<ISAAC_SIZE, ISAAC_INT>> m_Rand; vector<QTIsaac<ISAAC_SIZE, ISAAC_INT>> m_Rand;
unique_ptr<tbb::task_group> m_TaskGroup = make_unique<tbb::task_group>();
std::recursive_mutex m_RenderingCs, m_AccumCs, m_FinalAccumCs, m_ResizeCs; std::recursive_mutex m_RenderingCs, m_AccumCs, m_FinalAccumCs, m_ResizeCs;
Timing m_RenderTimer, m_IterTimer, m_ProgressTimer; Timing m_RenderTimer, m_IterTimer, m_ProgressTimer;
}; };

View File

@ -424,7 +424,6 @@ public:
size_t i; size_t i;
T t; T t;
ostringstream os; ostringstream os;
char ministr[32];
if (crossMode == eCrossMode::CROSS_NOT_SPECIFIED) if (crossMode == eCrossMode::CROSS_NOT_SPECIFIED)
{ {
@ -463,8 +462,7 @@ public:
for (i = 0; i < emberOut.TotalXformCount(); i++) for (i = 0; i < emberOut.TotalXformCount(); i++)
emberOut.GetTotalXform(i)->DeleteMotionElements(); emberOut.GetTotalXform(i)->DeleteMotionElements();
sprintf_s(ministr, 32, "%7.5g", t); os << "cross interpolate " << std::to_string(t);
os << "cross interpolate " << ministr;
} }
else//Alternate mode. else//Alternate mode.
{ {
@ -953,7 +951,8 @@ public:
/// <param name="ember">The ember to rotate</param> /// <param name="ember">The ember to rotate</param>
/// <param name="rotated">The rotated xform</param> /// <param name="rotated">The rotated xform</param>
/// <param name="blend">The time percentage value which dictates how much of a percentage of 360 degrees it should be rotated and the time position for the motion elements</param> /// <param name="blend">The time percentage value which dictates how much of a percentage of 360 degrees it should be rotated and the time position for the motion elements</param>
void Loop(Ember<T>& ember, Ember<T>& rotated, T blend) /// <param name="cw">True to rotate clockwise, else rotate counter clockwise. Ignored if rotations is 0.</param>
void Loop(Ember<T>& ember, Ember<T>& rotated, T blend, bool cw)
{ {
rotated = ember; rotated = ember;
@ -970,7 +969,7 @@ public:
} }
rotated.ApplyFlameMotion(blend); rotated.ApplyFlameMotion(blend);
rotated.RotateAffines(-blend * 360);//Rotate the affines. rotated.RotateAffines((cw ? blend : -blend) * 360);//Rotate the affines.
rotated.DeleteMotionElements();//Delete all motion elements from the looped ember, at the xform level and at the parent ember level. rotated.DeleteMotionElements();//Delete all motion elements from the looped ember, at the xform level and at the parent ember level.
} }
@ -981,8 +980,10 @@ public:
/// <param name="embers">The embers to interpolate</param> /// <param name="embers">The embers to interpolate</param>
/// <param name="result">The result of the interpolation</param> /// <param name="result">The result of the interpolation</param>
/// <param name="blend">The interpolation time</param> /// <param name="blend">The interpolation time</param>
/// <param name="rotations">The number of times to rotate within the interpolation</param>
/// <param name="cw">True to rotate clockwise, else rotate counter clockwise. Ignored if rotations is 0.</param>
/// <param name="seqFlag">True if embers points to the first or last ember in the entire sequence, else false.</param> /// <param name="seqFlag">True if embers points to the first or last ember in the entire sequence, else false.</param>
void Edge(Ember<T>* embers, Ember<T>& result, T blend, bool seqFlag) void Edge(Ember<T>* embers, Ember<T>& result, T blend, size_t rotations, bool cw, bool seqFlag)
{ {
size_t i, si; size_t i, si;
@ -1016,9 +1017,15 @@ public:
m_EdgeSpun[1].m_Time = 1; m_EdgeSpun[1].m_Time = 1;
//Call this first to establish the asymmetric reference angles. //Call this first to establish the asymmetric reference angles.
Interpolater<T>::AsymmetricRefAngles(m_EdgeSpun, 2); Interpolater<T>::AsymmetricRefAngles(m_EdgeSpun, 2);
//Rotate the aligned xforms. //Rotate the aligned xforms.
m_EdgeSpun[0].RotateAffines(-blend * 360); if (rotations)
m_EdgeSpun[1].RotateAffines(-blend * 360); {
auto cwblend = cw ? blend : -blend;
m_EdgeSpun[0].RotateAffines(cwblend * (360 * rotations));
m_EdgeSpun[1].RotateAffines(cwblend * (360 * rotations));
}
m_Interpolater.Interpolate(m_EdgeSpun, 2, m_Smooth ? Interpolater<T>::Smoother(blend) : blend, m_Stagger, result); m_Interpolater.Interpolate(m_EdgeSpun, 2, m_Smooth ? Interpolater<T>::Smoother(blend) : blend, m_Stagger, result);
} }
@ -1037,11 +1044,13 @@ public:
/// <param name="result">The result of the spin</param> /// <param name="result">The result of the spin</param>
/// <param name="frame">The frame in the sequence to be stored in the m_Time member of result</param> /// <param name="frame">The frame in the sequence to be stored in the m_Time member of result</param>
/// <param name="blend">The interpolation time</param> /// <param name="blend">The interpolation time</param>
void Spin(Ember<T>& parent, Ember<T>* templ, Ember<T>& result, size_t frame, T blend) /// <param name="cw">True to rotate clockwise, else rotate counter clockwise. Ignored if rotations is 0.</param>
void Spin(Ember<T>& parent, Ember<T>* templ, Ember<T>& result, size_t frame, T blend, bool cw)
{ {
char temp[50]; auto cwblend = cw ? blend : -blend;
string temp = "rotate " + std::to_string(cwblend * 360.0);
//Spin the parent blend degrees. //Spin the parent blend degrees.
Loop(parent, result, blend); Loop(parent, result, blend, cw);
//Apply the template if necessary. //Apply the template if necessary.
if (templ) if (templ)
@ -1052,14 +1061,12 @@ public:
result.m_Interp = eInterp::EMBER_INTERP_LINEAR; result.m_Interp = eInterp::EMBER_INTERP_LINEAR;
result.m_PaletteInterp = ePaletteInterp::INTERP_HSV; result.m_PaletteInterp = ePaletteInterp::INTERP_HSV;
//Create the edit doc xml. //Create the edit doc xml.
sprintf_s(temp, 50, "rotate %g", blend * 360.0);
result.ClearEdit(); result.ClearEdit();
result.m_Edits = m_EmberToXml.CreateNewEditdoc(&parent, nullptr, temp, m_Nick, m_Url, m_Id, m_Comment, m_SheepGen, m_SheepId); result.m_Edits = m_EmberToXml.CreateNewEditdoc(&parent, nullptr, temp, m_Nick, m_Url, m_Id, m_Comment, m_SheepGen, m_SheepId);
//Subpixel jitter. //Subpixel jitter.
Offset(result, m_OffsetX, m_OffsetY); Offset(result, m_OffsetX, m_OffsetY);
//Make the name of the flame the time. //Make the name of the flame the time.
sprintf_s(temp, 50, "%f", result.m_Time); result.m_Name = std::to_string(result.m_Time);
result.m_Name = string(temp);
} }
/// <summary> /// <summary>
@ -1074,11 +1081,14 @@ public:
/// <param name="frame">The frame in the sequence to be stored in the m_Time member of result</param> /// <param name="frame">The frame in the sequence to be stored in the m_Time member of result</param>
/// <param name="seqFlag">True if embers points to the first or last ember in the entire sequence, else false.</param> /// <param name="seqFlag">True if embers points to the first or last ember in the entire sequence, else false.</param>
/// <param name="blend">The interpolation time</param> /// <param name="blend">The interpolation time</param>
void SpinInter(Ember<T>* parents, Ember<T>* templ, Ember<T>& result, size_t frame, bool seqFlag, T blend) /// <param name="rotations">The number of times to rotate within the interpolation</param>
/// <param name="cw">True to rotate clockwise, else rotate counter clockwise. Ignored if rotations is 0.</param>
void SpinInter(Ember<T>* parents, Ember<T>* templ, Ember<T>& result, size_t frame, bool seqFlag, T blend, size_t rotations, bool cw)
{ {
char temp[50]; auto cwblend = cw ? blend : -blend;
string temp = "interpolate " + std::to_string(cwblend * 360.0);
//Interpolate between spun parents. //Interpolate between spun parents.
Edge(parents, result, blend, seqFlag); Edge(parents, result, blend, rotations, cw, seqFlag);
//Original did an interpolated palette hack here for random palettes, but it was never used anywhere so ember omits it.//ORIG //Original did an interpolated palette hack here for random palettes, but it was never used anywhere so ember omits it.//ORIG
@ -1089,14 +1099,12 @@ public:
//Set ember parameters accordingly. //Set ember parameters accordingly.
result.m_Time = T(frame); result.m_Time = T(frame);
//Create the edit doc xml. //Create the edit doc xml.
sprintf_s(temp, 50, "interpolate %g", blend * 360.0);
result.ClearEdit(); result.ClearEdit();
result.m_Edits = m_EmberToXml.CreateNewEditdoc(&parents[0], &parents[1], temp, m_Nick, m_Url, m_Id, m_Comment, m_SheepGen, m_SheepId); result.m_Edits = m_EmberToXml.CreateNewEditdoc(&parents[0], &parents[1], temp, m_Nick, m_Url, m_Id, m_Comment, m_SheepGen, m_SheepId);
//Subpixel jitter. //Subpixel jitter.
Offset(result, m_OffsetX, m_OffsetY); Offset(result, m_OffsetX, m_OffsetY);
//Make the name of the flame the time. //Make the name of the flame the time.
sprintf_s(temp, 50, "%f", result.m_Time); result.m_Name = std::to_string(result.m_Time);
result.m_Name = string(temp);
} }
/// <summary> /// <summary>

View File

@ -222,6 +222,28 @@ public:
return temp; return temp;
} }
/// <summary>
/// For creating an object without passing parameters.
/// When the derived class has a default constructor, this should
/// not be called. This is only for when the derived class constructor
/// requires arguments. In that case, Instance() must first be called
/// with the proper values. Then once the singleton is constructed, this
/// can be called to just retrieve the object without having to worry about
/// parameters.
/// This is enforced by throwing if this has been called before Instance() is called.
/// </summary>
/// <returns>The constructed object</returns>
static std::shared_ptr<T> DefInstance()
{
auto& staticInstance = GetStaticInstance();
auto temp = staticInstance.lock();
if (!temp)
throw "Cannot create singleton with defaults, must first call at least once with proper arguments.";
return temp;
}
protected: protected:
/// <summary> /// <summary>
/// Clever hack to get a static to behave like a member variable that can be seen between classes and functions in the hierarchy. /// Clever hack to get a static to behave like a member variable that can be seen between classes and functions in the hierarchy.
@ -255,64 +277,34 @@ protected:
/// Open a file in binary mode and read its entire contents into a vector of bytes. Optionally null terminate. /// Open a file in binary mode and read its entire contents into a vector of bytes. Optionally null terminate.
/// </summary> /// </summary>
/// <param name="filename">The full path to the file to read</param> /// <param name="filename">The full path to the file to read</param>
/// <param name="buf">The vector which will be populated with the file's contents</param> /// <param name="buf">The string which will be populated with the file's contents</param>
/// <param name="nullTerminate">Whether to append a NULL character as the last element of the vector. Needed when reading text files. Default: true.</param> /// <param name="nullTerminate">Whether to append a NULL character as the last element of the vector. Needed when reading text files. Default: true.</param>
/// <returns>True if successfully read and populated, else false</returns> /// <returns>True if successfully read and populated, else false</returns>
static bool ReadFile(const char* filename, string& buf, bool nullTerminate = true) static bool ReadFile(const char* filename, string& buf, bool nullTerminate = true)
{ {
bool b = false;
FILE* f = nullptr;
try try
{ {
fopen_s(&f, filename, "rb");//Open in binary mode. ifstream ifs(filename, ios::binary | ios::ate);
auto pos = ifs.tellg();
buf.resize(pos + streampos(nullTerminate ? 1 : 0));
ifs.seekg(0, ios::beg);
ifs.read(&buf[0], pos);
if (f) if (nullTerminate)//Optionally NULL terminate if they want to treat it as a string.
{
struct _stat statBuf;
#if defined(_WIN32) || defined(__APPLE__)
int statResult = _fstat(f->_file, &statBuf);//Get data associated with file.
#else
int statResult = _fstat(f->_fileno, &statBuf);//Get data associated with file.
#endif
if (statResult == 0)//Check if statistics are valid.
{
buf.resize(statBuf.st_size + (nullTerminate ? 1 : 0));//Allocate vector to be the size of the entire file, with an optional additional character for nullptr.
if (buf.size() == static_cast<size_t>(statBuf.st_size + 1))//Ensure allocation succeeded.
{
size_t bytesRead = fread(&buf[0], 1, statBuf.st_size, f);//Read the entire file at once.
if (bytesRead == (static_cast<size_t>(statBuf.st_size)))//Ensure the number of bytes read matched what was requested.
{
if (nullTerminate)//Optionally nullptr terminate if they want to treat it as a string.
buf[buf.size() - 1] = 0; buf[buf.size() - 1] = 0;
b = true;//Success. return true;
}
}
}
fclose(f);
f = nullptr;
}
} }
catch (const std::exception& e) catch (const std::exception& e)
{ {
cout << "Error: Reading file " << filename << " failed: " << e.what() << "\n"; cout << "Error: Reading file " << filename << " failed: " << e.what() << "\n";
b = false;
} }
catch (...) catch (...)
{ {
cout << "Error: Reading file " << filename << " failed.\n"; cout << "Error: Reading file " << filename << " failed.\n";
b = false;
} }
if (f) return false;
fclose(f);
return b;
} }
/// <summary> /// <summary>

View File

@ -442,42 +442,6 @@ public:
return b; return b;
} }
/// <summary>
/// Convert an integer to a string.
/// Just a wrapper around _itoa_s() which wraps the result in a std::string.
/// </summary>
/// <param name="i">The integer to convert</param>
/// <param name="radix">The radix of the integer. Default: 10.</param>
/// <returns>The converted string</returns>
static string Itos(int i, int radix = 10)
{
char ch[16];
#ifdef _WIN32
_itoa_s(i, ch, 16, radix);
#else
sprintf(ch, "%d", i);
#endif
return string(ch);
}
/// <summary>
/// Convert an unsigned 64-bit integer to a string.
/// Just a wrapper around _ui64toa_s() which wraps the result in a std::string.
/// </summary>
/// <param name="i">The unsigned 64-bit integer to convert</param>
/// <param name="radix">The radix of the integer. Default: 10.</param>
/// <returns>The converted string</returns>
static string Itos64(size_t i, int radix = 10)
{
char ch[64];
#ifdef _WIN32
_ui64toa_s(i, ch, 64, radix);
#else
sprintf(ch, "%lu", i);
#endif
return string(ch);
}
static vector<string> m_FlattenNames; static vector<string> m_FlattenNames;
private: private:
@ -523,7 +487,7 @@ private:
if (auto pal = m_PaletteList.GetPalette(PaletteList<T>::m_DefaultFilename, currentEmber.PaletteIndex())) if (auto pal = m_PaletteList.GetPalette(PaletteList<T>::m_DefaultFilename, currentEmber.PaletteIndex()))
currentEmber.m_Palette = *pal; currentEmber.m_Palette = *pal;
else else
AddToReport(string(loc) + " : Error assigning palette with index " + Itos(currentEmber.PaletteIndex())); AddToReport(string(loc) + " : Error assigning palette with index " + std::to_string(currentEmber.PaletteIndex()));
} }
if (!currentEmber.XformCount())//Ensure there is always at least one xform or else the renderer will crash when trying to render. if (!currentEmber.XformCount())//Ensure there is always at least one xform or else the renderer will crash when trying to render.
@ -532,8 +496,6 @@ private:
currentEmber.AddXform(xform); currentEmber.AddXform(xform);
} }
//if (!Interpolater<T>::InterpMissingColors(currentEmber.m_Palette.m_Entries))
// AddToReport(string(loc) + " : Error interpolating missing palette colors");
currentEmber.CacheXforms(); currentEmber.CacheXforms();
currentEmber.m_Index = embers.size(); currentEmber.m_Index = embers.size();
currentEmber.m_ParentFilename = parentFileString; currentEmber.m_ParentFilename = parentFileString;
@ -562,7 +524,6 @@ private:
const char* loc = __FUNCTION__; const char* loc = __FUNCTION__;
int soloXform = -1; int soloXform = -1;
size_t i, count = 0, index = 0; size_t i, count = 0, index = 0;
double vals[16];
xmlAttrPtr att, curAtt; xmlAttrPtr att, curAtt;
xmlNodePtr editNode, childNode, motionNode; xmlNodePtr editNode, childNode, motionNode;
currentEmber.m_Palette.Clear();//Wipe out the current palette. currentEmber.m_Palette.Clear();//Wipe out the current palette.
@ -655,28 +616,16 @@ private:
} }
else if (!Compare(curAtt->name, "size")) else if (!Compare(curAtt->name, "size"))
{ {
if (sscanf_s(attStr, "%lu %lu", &currentEmber.m_FinalRasW, &currentEmber.m_FinalRasH) != 2) istringstream is(attStr);
{ is >> currentEmber.m_FinalRasW >> currentEmber.m_FinalRasH;
AddToReport(string(loc) + " : Invalid size attribute " + string(attStr));
//Assign reasonable defaults.
currentEmber.m_FinalRasW = 1000;
currentEmber.m_FinalRasH = 1000;
}
currentEmber.m_OrigFinalRasW = currentEmber.m_FinalRasW; currentEmber.m_OrigFinalRasW = currentEmber.m_FinalRasW;
currentEmber.m_OrigFinalRasH = currentEmber.m_FinalRasH; currentEmber.m_OrigFinalRasH = currentEmber.m_FinalRasH;
} }
else if (!Compare(curAtt->name, "center")) else if (!Compare(curAtt->name, "center"))
{ {
if (sscanf_s(attStr, "%lf %lf", &vals[0], &vals[1]) != 2) istringstream is(attStr);
{ is >> currentEmber.m_CenterX >> currentEmber.m_CenterY;
AddToReport(string(loc) + " : Invalid center attribute " + string(attStr)); currentEmber.m_RotCenterY = currentEmber.m_CenterY;
vals[0] = 0;
vals[1] = 0;
}
currentEmber.m_CenterX = T(vals[0]);
currentEmber.m_CenterY = currentEmber.m_RotCenterY = T(vals[1]);
} }
else if (!Compare(curAtt->name, "filter_shape")) else if (!Compare(curAtt->name, "filter_shape"))
{ {
@ -700,29 +649,22 @@ private:
} }
else if (!Compare(curAtt->name, "background")) else if (!Compare(curAtt->name, "background"))
{ {
if (sscanf_s(attStr, "%lf %lf %lf", &vals[0], &vals[1], &vals[2]) != 3) istringstream is(attStr);
{ is >> currentEmber.m_Background[0]//[0..1]
AddToReport(string(loc) + " : Invalid background attribute " + string(attStr)); >> currentEmber.m_Background[1]
vals[0] = 0; >> currentEmber.m_Background[2];
vals[1] = 0;
vals[2] = 0;
}
currentEmber.m_Background[0] = T(vals[0]);//[0..1]
currentEmber.m_Background[1] = T(vals[1]);
currentEmber.m_Background[2] = T(vals[2]);
} }
else if (!Compare(curAtt->name, "curves")) else if (!Compare(curAtt->name, "curves"))
{ {
stringstream ss(attStr); istringstream is(attStr);
for (i = 0; i < 4; i++) for (i = 0; i < 4; i++)
{ {
for (glm::length_t j = 0; j < 4; j++) for (glm::length_t j = 0; j < 4; j++)
{ {
ss >> currentEmber.m_Curves.m_Points[i][j].x; is >> currentEmber.m_Curves.m_Points[i][j].x
ss >> currentEmber.m_Curves.m_Points[i][j].y; >> currentEmber.m_Curves.m_Points[i][j].y
ss >> currentEmber.m_Curves.m_Weights[i][j]; >> currentEmber.m_Curves.m_Weights[i][j];
} }
} }
} }
@ -748,36 +690,24 @@ private:
for (curAtt = att; curAtt; curAtt = curAtt->next) for (curAtt = att; curAtt; curAtt = curAtt->next)
{ {
attStr = reinterpret_cast<char*>(xmlGetProp(childNode, curAtt->name));
a = 255; a = 255;
attStr = reinterpret_cast<char*>(xmlGetProp(childNode, curAtt->name));
istringstream is(attStr);
//This signifies that a palette is not being retrieved from the palette file, rather it's being parsed directly out of the ember xml. //This signifies that a palette is not being retrieved from the palette file, rather it's being parsed directly out of the ember xml.
//This also means the palette has already been hue adjusted and it doesn't need to be done again, which would be necessary if it were //This also means the palette has already been hue adjusted and it doesn't need to be done again, which would be necessary if it were
//coming from the palette file. //coming from the palette file.
currentEmber.m_Palette.m_Index = -1; currentEmber.m_Palette.m_Index = -1;
if (!Compare(curAtt->name, "index")) if (!Compare(curAtt->name, "index"))
{
Aton(attStr, index); Aton(attStr, index);
}
else if (!Compare(curAtt->name, "rgb")) else if (!Compare(curAtt->name, "rgb"))
{ is >> r >> g >> b;
if (sscanf_s(attStr, "%lf %lf %lf", &r, &g, &b) != 3)
AddToReport(string(loc) + " : Invalid rgb attribute " + string(attStr));
}
else if (!Compare(curAtt->name, "rgba")) else if (!Compare(curAtt->name, "rgba"))
{ is >> r >> g >> b >> a;
if (sscanf_s(attStr, "%lf %lf %lf %lf", &r, &g, &b, &a) != 4)
AddToReport(string(loc) + " : Invalid rgba attribute " + string(attStr));
}
else if (!Compare(curAtt->name, "a")) else if (!Compare(curAtt->name, "a"))
{ is >> a;
if (sscanf_s(attStr, "%lf", &a) != 1)
AddToReport(string(loc) + " : Invalid a attribute " + string(attStr));
}
else else
{
AddToReport(string(loc) + " : Unknown color attribute " + string(CCX(curAtt->name))); AddToReport(string(loc) + " : Unknown color attribute " + string(CCX(curAtt->name)));
}
xmlFree(attStr); xmlFree(attStr);
} }
@ -1051,13 +981,9 @@ private:
ret = ret && AttToEmberMotionFloat(att, attStr, eEmberMotionParam::FLAME_MOTION_VIBRANCY, motion); ret = ret && AttToEmberMotionFloat(att, attStr, eEmberMotionParam::FLAME_MOTION_VIBRANCY, motion);
else if (!Compare(curAtt->name, "background")) else if (!Compare(curAtt->name, "background"))
{ {
double r, g, b; double r = 0, g = 0, b = 0;
istringstream is(attStr);
if (sscanf_s(attStr, "%lf %lf %lf", &r, &g, &b) != 3) is >> r >> g >> b;
{
AddToReport(string(loc) + " : Invalid flame motion background attribute " + string(attStr));
r = g = b = 0;
}
if (r != 0) if (r != 0)
motion.m_MotionParams.push_back(MotionParam<T>(eEmberMotionParam::FLAME_MOTION_BACKGROUND_R, T(r))); motion.m_MotionParams.push_back(MotionParam<T>(eEmberMotionParam::FLAME_MOTION_BACKGROUND_R, T(r)));
@ -1070,13 +996,9 @@ private:
} }
else if (!Compare(curAtt->name, "center")) else if (!Compare(curAtt->name, "center"))
{ {
double cx, cy; double cx = 0, cy = 0;
istringstream is(attStr);
if (sscanf_s(attStr, "%lf %lf", &cx, &cy) != 2) is >> cx >> cy;
{
AddToReport(string(loc) + " : Invalid flame motion center attribute " + string(attStr));
cx = cy = 0;
}
if (cx != 0) if (cx != 0)
motion.m_MotionParams.push_back(MotionParam<T>(eEmberMotionParam::FLAME_MOTION_CENTER_X, T(cx))); motion.m_MotionParams.push_back(MotionParam<T>(eEmberMotionParam::FLAME_MOTION_CENTER_X, T(cx)));
@ -1148,7 +1070,6 @@ private:
size_t j; size_t j;
T temp; T temp;
double a, b, c, d, e, f; double a, b, c, d, e, f;
double vals[10];
xmlAttrPtr attPtr, curAtt; xmlAttrPtr attPtr, curAtt;
//Loop through the attributes of the xform element. //Loop through the attributes of the xform element.
attPtr = childNode->properties; attPtr = childNode->properties;
@ -1203,30 +1124,17 @@ private:
} }
else if (!Compare(curAtt->name, "color")) else if (!Compare(curAtt->name, "color"))
{ {
xform.m_ColorX = xform.m_ColorY = 0; istringstream is(attStr);
//Try two coords first .
if (sscanf_s(attStr, "%lf %lf", &vals[0], &vals[1]) == 2)
{
xform.m_ColorX = T(vals[0]);
xform.m_ColorY = T(vals[1]);
}
else if (sscanf_s(attStr, "%lf", &vals[0]) == 1)//Try one color.
{
xform.m_ColorX = T(vals[0]);
}
else
{
xform.m_ColorX = xform.m_ColorY = T(0.5); xform.m_ColorX = xform.m_ColorY = T(0.5);
AddToReport(string(loc) + " : Malformed xform color attribute " + string(attStr) + ", using 0.5, 0.5"); is >> xform.m_ColorX;
} is >> xform.m_ColorY;//Very unlikely to be present, but leave for future use.
} }
else if (!Compare(curAtt->name, "chaos")) else if (!Compare(curAtt->name, "chaos"))
{ {
stringstream ss(attStr); istringstream is(attStr);
j = 0; j = 0;
while (ss >> temp) while (is >> temp)
{ {
xform.SetXaos(j, temp); xform.SetXaos(j, temp);
j++; j++;
@ -1243,12 +1151,9 @@ private:
} }
else if (!Compare(curAtt->name, "coefs")) else if (!Compare(curAtt->name, "coefs"))
{ {
if (sscanf_s(attStr, "%lf %lf %lf %lf %lf %lf", &a, &d, &b, &e, &c, &f) != 6)//Original did a complicated parsing scheme. This is easier.//ORIG istringstream is(attStr);
{ a = b = c = d = e = f = 0;
a = d = b = e = c = f = 0; is >> a >> d >> b >> e >> c >> f;
AddToReport(string(loc) + " : Bad coeffs attribute " + string(attStr));
}
xform.m_Affine.A(T(a)); xform.m_Affine.A(T(a));
xform.m_Affine.B(T(b)); xform.m_Affine.B(T(b));
xform.m_Affine.C(T(c)); xform.m_Affine.C(T(c));
@ -1258,12 +1163,9 @@ private:
} }
else if (!Compare(curAtt->name, "post")) else if (!Compare(curAtt->name, "post"))
{ {
if (sscanf_s(attStr, "%lf %lf %lf %lf %lf %lf", &a, &d, &b, &e, &c, &f) != 6)//Original did a complicated parsing scheme. This is easier.//ORIG istringstream is(attStr);
{ a = b = c = d = e = f = 0;
a = d = b = e = c = f = 0; is >> a >> d >> b >> e >> c >> f;
AddToReport(string(loc) + " : Bad post coeffs attribute " + string(attStr));
}
xform.m_Post.A(T(a)); xform.m_Post.A(T(a));
xform.m_Post.B(T(b)); xform.m_Post.B(T(b));
xform.m_Post.C(T(c)); xform.m_Post.C(T(c));
@ -1469,64 +1371,33 @@ private:
/// <returns>True if there were no errors, else false.</returns> /// <returns>True if there were no errors, else false.</returns>
bool ParseHexColors(char* colstr, Ember<T>& ember, size_t numColors, intmax_t chan) bool ParseHexColors(char* colstr, Ember<T>& ember, size_t numColors, intmax_t chan)
{ {
size_t colorIndex = 0;
size_t colorCount = 0;
uint r, g, b, a;
int ret;
char tmps[2];
size_t skip = std::abs(chan);
bool ok = true;
const char* loc = __FUNCTION__; const char* loc = __FUNCTION__;
stringstream ss, temp(colstr); ss >> std::hex;
string s1, s;
size_t tmp, colorCount = 0, colorIndex = 0;
s.reserve(1536);
//Strip whitespace prior to first color. while (temp >> s1)
while (isspace(static_cast<int>(colstr[colorIndex]))) s += s1;
colorIndex++;
do auto length = s.size();
for (size_t strIndex = 0; strIndex < length;)
{ {
//Parse an RGB triplet at a time. for (glm::length_t i = 0; i < 3 && colorCount < ember.m_Palette.Size(); i++)
if (chan == 3)
ret = sscanf_s(&(colstr[colorIndex]), "%2x%2x%2x", &r, &g, &b);
else if (chan == -4)
ret = sscanf_s(&(colstr[colorIndex]), "00%2x%2x%2x", &r, &g, &b);
else // chan==4
ret = sscanf_s(&(colstr[colorIndex]), "%2x%2x%2x%2x", &r, &g, &b, &a);
a = 1;//Original allows for alpha, even though it will most likely never happen. Ember omits support for it.
if ((chan != 4 && ret != 3) || (chan == 4 && ret != 4))
{ {
ok = false; const char tmpStr[3] = { s[strIndex++], s[strIndex++], 0 };//Read out and convert the string two characters at a time.
r = g = b = 0; ss.clear();//Reset and fill the string stream.
AddToReport(string(loc) + " : Problem reading hexadecimal color data, assigning to 0"); ss.str(tmpStr);
break; ss >> tmp;//Do the conversion.
ember.m_Palette.m_Entries[colorCount][i] = T(tmp) / T(255);//Hex palette is [0..255], convert to [0..1].
} }
colorIndex += 2 * skip; ember.m_Palette.m_Entries[colorCount][3] = T(1);
while (isspace(static_cast<int>(colstr[colorIndex])))
colorIndex++;
ember.m_Palette.m_Entries[colorCount].r = T(r) / T(255);//Hex palette is [0..255], convert to [0..1].
ember.m_Palette.m_Entries[colorCount].g = T(g) / T(255);
ember.m_Palette.m_Entries[colorCount].b = T(b) / T(255);
ember.m_Palette.m_Entries[colorCount].a = T(a);
colorCount++; colorCount++;
} }
while (colorCount < numColors && colorCount < ember.m_Palette.m_Entries.size());
#ifdef _WIN32 return length >= 256;
if (sscanf_s(&(colstr[colorIndex]), "%1s", tmps, sizeof(tmps)) > 0) //Really need to migrate all of this parsing to C++.//TODO
#else
if (sscanf_s(&(colstr[colorIndex]), "%1s", tmps) > 0)
#endif
{
AddToReport(string(loc) + " : Extra data at end of hex color data " + string(&(colstr[colorIndex])));
ok = false;
}
return ok;
} }
/// <summary> /// <summary>

View File

@ -155,10 +155,9 @@ bool EmberAnimate(EmberOptions& opt)
if (opt.Format() != "jpg" && if (opt.Format() != "jpg" &&
opt.Format() != "png" && opt.Format() != "png" &&
opt.Format() != "ppm" &&
opt.Format() != "bmp") opt.Format() != "bmp")
{ {
cout << "Format must be jpg, png, ppm, or bmp not " << opt.Format() << ". Setting to jpg.\n"; cout << "Format must be jpg, png, or bmp not " << opt.Format() << ". Setting to jpg.\n";
} }
channels = opt.Format() == "png" ? 4 : 3; channels = opt.Format() == "png" ? 4 : 3;
@ -317,8 +316,6 @@ bool EmberAnimate(EmberOptions& opt)
writeSuccess = WritePng(filename.c_str(), finalImagep, w, h, opt.BitsPerChannel() / 8, opt.PngComments(), comments, opt.Id(), opt.Url(), opt.Nick()); writeSuccess = WritePng(filename.c_str(), finalImagep, w, h, opt.BitsPerChannel() / 8, opt.PngComments(), comments, opt.Id(), opt.Url(), opt.Nick());
else if (opt.Format() == "jpg") else if (opt.Format() == "jpg")
writeSuccess = WriteJpeg(filename.c_str(), finalImagep, w, h, int(opt.JpegQuality()), opt.JpegComments(), comments, opt.Id(), opt.Url(), opt.Nick()); writeSuccess = WriteJpeg(filename.c_str(), finalImagep, w, h, int(opt.JpegQuality()), opt.JpegComments(), comments, opt.Id(), opt.Url(), opt.Nick());
else if (opt.Format() == "ppm")
writeSuccess = WritePpm(filename.c_str(), finalImagep, w, h);
else if (opt.Format() == "bmp") else if (opt.Format() == "bmp")
writeSuccess = WriteBmp(filename.c_str(), finalImagep, w, h); writeSuccess = WriteBmp(filename.c_str(), finalImagep, w, h);

View File

@ -9,6 +9,7 @@
#define NOMINMAX #define NOMINMAX
#define WIN32_LEAN_AND_MEAN//Exclude rarely-used stuff from Windows headers. #define WIN32_LEAN_AND_MEAN//Exclude rarely-used stuff from Windows headers.
#define _USE_MATH_DEFINES #define _USE_MATH_DEFINES
//#define CL_USE_DEPRECATED_OPENCL_1_2_APIS 1
#include "Timing.h" #include "Timing.h"
#include "Renderer.h" #include "Renderer.h"

View File

@ -18,13 +18,11 @@
#include <BaseTsd.h> #include <BaseTsd.h>
#include <crtdbg.h> #include <crtdbg.h>
#include <tchar.h> #include <tchar.h>
#define snprintf _snprintf
#else #else
#include <arpa/inet.h> #include <arpa/inet.h>
#define _TCHAR char #define _TCHAR char
#define _tmain main #define _tmain main
#define _T #define _T
#define fprintf_s fprintf
#endif #endif
#include <iostream> #include <iostream>
@ -43,7 +41,6 @@
#define PNG_SKIP_SETJMP_CHECK 1 #define PNG_SKIP_SETJMP_CHECK 1
#include "png.h" #include "png.h"
//#include "pnginfo.h"
//Ember. //Ember.
#include "Ember.h" #include "Ember.h"

View File

@ -65,6 +65,8 @@ enum class eOptionIDs : et
OPT_ENCLOSED, OPT_ENCLOSED,
OPT_NO_EDITS, OPT_NO_EDITS,
OPT_UNSMOOTH_EDGE, OPT_UNSMOOTH_EDGE,
OPT_CW_LOOPS,
OPT_CW_INTERP_LOOPS,
OPT_LOCK_ACCUM, OPT_LOCK_ACCUM,
OPT_DUMP_KERNEL, OPT_DUMP_KERNEL,
@ -80,7 +82,9 @@ enum class eOptionIDs : et
OPT_END, OPT_END,
OPT_FRAME, OPT_FRAME,
OPT_DTIME, OPT_DTIME,
OPT_NFRAMES, OPT_LOOP_FRAMES,
OPT_INTERP_FRAMES,
OPT_INTERP_LOOPS,
OPT_SYMMETRY, OPT_SYMMETRY,
OPT_SHEEP_GEN, OPT_SHEEP_GEN,
OPT_SHEEP_ID, OPT_SHEEP_ID,
@ -236,7 +240,7 @@ private:
{ \ { \
if (member.m_Option.nArgType == SO_OPT) \ if (member.m_Option.nArgType == SO_OPT) \
{ \ { \
member(!strcmp(args.OptionArg(), "true")); \ member(!_stricmp(args.OptionArg(), "true")); \
} \ } \
else \ else \
{ \ { \
@ -245,50 +249,40 @@ private:
} \ } \
break break
//Parsing is the same for all numerical option types.
#define PARSEOPTION(e, member) \
case (e): \
{ \
ss.clear(); \
ss.str(args.OptionArg()); \
ss >> member.m_Val; \
break; \
}
//Int. //Int.
#define Eoi EmberOptionEntry<intmax_t> #define Eoi EmberOptionEntry<intmax_t>
#define INITINTOPTION(member, option) \ #define INITINTOPTION(member, option) \
member = option; \ member = option; \
m_IntArgs.push_back(&member) m_IntArgs.push_back(&member)
#define PARSEINTOPTION(e, member) \
case (e): \
sscanf_s(args.OptionArg(), "%ld", &member.m_Val); \
break
//Uint. //Uint.
#define Eou EmberOptionEntry<size_t> #define Eou EmberOptionEntry<size_t>
#define INITUINTOPTION(member, option) \ #define INITUINTOPTION(member, option) \
member = option; \ member = option; \
m_UintArgs.push_back(&member) m_UintArgs.push_back(&member)
#define PARSEUINTOPTION(e, member) \
case (e): \
sscanf_s(args.OptionArg(), "%lu", &member.m_Val); \
break
//Double. //Double.
#define Eod EmberOptionEntry<double> #define Eod EmberOptionEntry<double>
#define INITDOUBLEOPTION(member, option) \ #define INITDOUBLEOPTION(member, option) \
member = option; \ member = option; \
m_DoubleArgs.push_back(&member) m_DoubleArgs.push_back(&member)
#define PARSEDOUBLEOPTION(e, member) \
case (e): \
sscanf_s(args.OptionArg(), "%lf", &member.m_Val); \
break
//String. //String.
#define Eos EmberOptionEntry<string> #define Eos EmberOptionEntry<string>
#define INITSTRINGOPTION(member, option) \ #define INITSTRINGOPTION(member, option) \
member = option; \ member = option; \
m_StringArgs.push_back(&member) m_StringArgs.push_back(&member)
#define PARSESTRINGOPTION(e, member) \
case (e): \
member.m_Val = args.OptionArg(); \
break
/// <summary> /// <summary>
/// Class for holding all available options across all command line programs. /// Class for holding all available options across all command line programs.
/// Some are used only for a single program, while others are used for more than one. /// Some are used only for a single program, while others are used for more than one.
@ -345,6 +339,8 @@ public:
INITBOOLOPTION(Enclosed, Eob(eOptionUse::OPT_USE_GENOME, eOptionIDs::OPT_ENCLOSED, _T("--enclosed"), true, SO_OPT, " --enclosed Use enclosing Xml tags [default: true].\n")); INITBOOLOPTION(Enclosed, Eob(eOptionUse::OPT_USE_GENOME, eOptionIDs::OPT_ENCLOSED, _T("--enclosed"), true, SO_OPT, " --enclosed Use enclosing Xml tags [default: true].\n"));
INITBOOLOPTION(NoEdits, Eob(eOptionUse::OPT_USE_GENOME, eOptionIDs::OPT_NO_EDITS, _T("--noedits"), false, SO_NONE, " --noedits Exclude edit tags when writing Xml [default: false].\n")); INITBOOLOPTION(NoEdits, Eob(eOptionUse::OPT_USE_GENOME, eOptionIDs::OPT_NO_EDITS, _T("--noedits"), false, SO_NONE, " --noedits Exclude edit tags when writing Xml [default: false].\n"));
INITBOOLOPTION(UnsmoothEdge, Eob(eOptionUse::OPT_USE_GENOME, eOptionIDs::OPT_UNSMOOTH_EDGE, _T("--unsmoother"), false, SO_NONE, " --unsmoother Do not use smooth blending for sheep edges [default: false].\n")); INITBOOLOPTION(UnsmoothEdge, Eob(eOptionUse::OPT_USE_GENOME, eOptionIDs::OPT_UNSMOOTH_EDGE, _T("--unsmoother"), false, SO_NONE, " --unsmoother Do not use smooth blending for sheep edges [default: false].\n"));
INITBOOLOPTION(CwLoops, Eob(eOptionUse::OPT_USE_GENOME, eOptionIDs::OPT_CW_LOOPS, _T("--cwloops"), false, SO_NONE, " --cwloops Rotate loops clockwise [default: false].\n"));
INITBOOLOPTION(CwInterpLoops, Eob(eOptionUse::OPT_USE_GENOME, eOptionIDs::OPT_CW_INTERP_LOOPS, _T("--cwinterploops"), false, SO_NONE, " --cwinterploops Rotate clockwise during interpolation, ignored if --interploops is 0 [default: false].\n"));
INITBOOLOPTION(LockAccum, Eob(eOptionUse::OPT_USE_ALL, eOptionIDs::OPT_LOCK_ACCUM, _T("--lock_accum"), false, SO_NONE, " --lock_accum Lock threads when accumulating to the histogram using the CPU. This will drop performance to that of single threading [default: false].\n")); INITBOOLOPTION(LockAccum, Eob(eOptionUse::OPT_USE_ALL, eOptionIDs::OPT_LOCK_ACCUM, _T("--lock_accum"), false, SO_NONE, " --lock_accum Lock threads when accumulating to the histogram using the CPU. This will drop performance to that of single threading [default: false].\n"));
INITBOOLOPTION(DumpKernel, Eob(eOptionUse::OPT_USE_RENDER, eOptionIDs::OPT_DUMP_KERNEL, _T("--dump_kernel"), false, SO_NONE, " --dump_kernel Print the iteration kernel string when using OpenCL (ignored for CPU) [default: false].\n")); INITBOOLOPTION(DumpKernel, Eob(eOptionUse::OPT_USE_RENDER, eOptionIDs::OPT_DUMP_KERNEL, _T("--dump_kernel"), false, SO_NONE, " --dump_kernel Print the iteration kernel string when using OpenCL (ignored for CPU) [default: false].\n"));
//Int. //Int.
@ -368,20 +364,22 @@ public:
INITUINTOPTION(LastFrame, Eou(eOptionUse::OPT_USE_ANIMATE, eOptionIDs::OPT_END, _T("--end"), UINT_MAX, SO_REQ_SEP, " --end=<val> Time of last frame to render [default: last time specified in the input file].\n")); INITUINTOPTION(LastFrame, Eou(eOptionUse::OPT_USE_ANIMATE, eOptionIDs::OPT_END, _T("--end"), UINT_MAX, SO_REQ_SEP, " --end=<val> Time of last frame to render [default: last time specified in the input file].\n"));
INITUINTOPTION(Frame, Eou(eOptionUse::OPT_ANIM_GENOME, eOptionIDs::OPT_FRAME, _T("--frame"), UINT_MAX, SO_REQ_SEP, " --frame=<val> Time of first and last frame (ie do one frame).\n")); INITUINTOPTION(Frame, Eou(eOptionUse::OPT_ANIM_GENOME, eOptionIDs::OPT_FRAME, _T("--frame"), UINT_MAX, SO_REQ_SEP, " --frame=<val> Time of first and last frame (ie do one frame).\n"));
INITUINTOPTION(Dtime, Eou(eOptionUse::OPT_USE_ANIMATE, eOptionIDs::OPT_DTIME, _T("--dtime"), 1, SO_REQ_SEP, " --dtime=<val> Time between frames [default: 1].\n")); INITUINTOPTION(Dtime, Eou(eOptionUse::OPT_USE_ANIMATE, eOptionIDs::OPT_DTIME, _T("--dtime"), 1, SO_REQ_SEP, " --dtime=<val> Time between frames [default: 1].\n"));
INITUINTOPTION(Frames, Eou(eOptionUse::OPT_USE_GENOME, eOptionIDs::OPT_NFRAMES, _T("--nframes"), 20, SO_REQ_SEP, " --nframes=<val> Number of frames per loop and per interpolation in the animation [default: 20].\n")); INITUINTOPTION(LoopFrames, Eou(eOptionUse::OPT_USE_GENOME, eOptionIDs::OPT_LOOP_FRAMES, _T("--loopframes"), 20, SO_REQ_SEP, " --loopframes=<val> Number of frames per loop in the animation [default: 20].\n"));
INITUINTOPTION(InterpFrames, Eou(eOptionUse::OPT_USE_GENOME, eOptionIDs::OPT_INTERP_FRAMES, _T("--interpframes"), 20, SO_REQ_SEP, " --interpframes=<val> Number of frames per interpolation in the animation [default: 20].\n"));
INITUINTOPTION(InterpLoops, Eou(eOptionUse::OPT_USE_GENOME, eOptionIDs::OPT_INTERP_LOOPS, _T("--interploops"), 1, SO_REQ_SEP, " --interploops=<val> The number of 360 degree loops to rotate when interpolating between keyframes [default: 1].\n"));
INITUINTOPTION(Repeat, Eou(eOptionUse::OPT_USE_GENOME, eOptionIDs::OPT_REPEAT, _T("--repeat"), 1, SO_REQ_SEP, " --repeat=<val> Number of new flames to create. Ignored if sequence, inter or rotate were specified [default: 1].\n")); INITUINTOPTION(Repeat, Eou(eOptionUse::OPT_USE_GENOME, eOptionIDs::OPT_REPEAT, _T("--repeat"), 1, SO_REQ_SEP, " --repeat=<val> Number of new flames to create. Ignored if sequence, inter or rotate were specified [default: 1].\n"));
INITUINTOPTION(Tries, Eou(eOptionUse::OPT_USE_GENOME, eOptionIDs::OPT_TRIES, _T("--tries"), 10, SO_REQ_SEP, " --tries=<val> Number times to try creating a flame that meets the specified constraints. Ignored if sequence, inter or rotate were specified [default: 10].\n")); INITUINTOPTION(Tries, Eou(eOptionUse::OPT_USE_GENOME, eOptionIDs::OPT_TRIES, _T("--tries"), 10, SO_REQ_SEP, " --tries=<val> Number times to try creating a flame that meets the specified constraints. Ignored if sequence, inter or rotate were specified [default: 10].\n"));
INITUINTOPTION(MaxXforms, Eou(eOptionUse::OPT_USE_GENOME, eOptionIDs::OPT_MAX_XFORMS, _T("--maxxforms"), UINT_MAX, SO_REQ_SEP, " --maxxforms=<val> The maximum number of xforms allowed in the final output.\n")); INITUINTOPTION(MaxXforms, Eou(eOptionUse::OPT_USE_GENOME, eOptionIDs::OPT_MAX_XFORMS, _T("--maxxforms"), UINT_MAX, SO_REQ_SEP, " --maxxforms=<val> The maximum number of xforms allowed in the final output.\n"));
INITUINTOPTION(StartCount, Eou(eOptionUse::OPT_USE_GENOME, eOptionIDs::OPT_START_COUNT, _T("--startcount"), 0, SO_REQ_SEP, " --startcount=<val> The number to add to each flame name when generating a sequence. Useful for programs like ffmpeg which require numerically increasing filenames [default: 0].\n")); INITUINTOPTION(StartCount, Eou(eOptionUse::OPT_USE_GENOME, eOptionIDs::OPT_START_COUNT, _T("--startcount"), 0, SO_REQ_SEP, " --startcount=<val> The number to add to each flame name when generating a sequence. Useful for programs like ffmpeg which require numerically increasing filenames [default: 0].\n"));
INITUINTOPTION(Padding, Eou(eOptionUse::OPT_USE_GENOME, eOptionIDs::OPT_PADDING, _T("--padding"), 0, SO_REQ_SEP, " --padding=<val> Override the amount of zero padding added to each flame name when generating a sequence. Useful for programs like ffmpeg which require fixed width filenames [default: 0 (auto calculate padding)].\n")); INITUINTOPTION(Padding, Eou(eOptionUse::OPT_USE_GENOME, eOptionIDs::OPT_PADDING, _T("--padding"), 0, SO_REQ_SEP, " --padding=<val> Override the amount of zero padding added to each flame name when generating a sequence. Useful for programs like ffmpeg which require fixed width filenames [default: 0 (auto calculate padding)].\n"));
//Double. //Double.
INITDOUBLEOPTION(SizeScale, Eod(eOptionUse::OPT_RENDER_ANIM, eOptionIDs::OPT_SS, _T("--ss"), 1, SO_REQ_SEP, " --ss=<val> Size scale. All dimensions are scaled by this amount [default: 1.0].\n")); INITDOUBLEOPTION(SizeScale, Eod(eOptionUse::OPT_RENDER_ANIM, eOptionIDs::OPT_SS, _T("--ss"), 1.0, SO_REQ_SEP, " --ss=<val> Size scale. All dimensions are scaled by this amount [default: 1.0].\n"));
INITDOUBLEOPTION(QualityScale, Eod(eOptionUse::OPT_RENDER_ANIM, eOptionIDs::OPT_QS, _T("--qs"), 1, SO_REQ_SEP, " --qs=<val> Quality scale. All quality values are scaled by this amount [default: 1.0].\n")); INITDOUBLEOPTION(QualityScale, Eod(eOptionUse::OPT_RENDER_ANIM, eOptionIDs::OPT_QS, _T("--qs"), 1.0, SO_REQ_SEP, " --qs=<val> Quality scale. All quality values are scaled by this amount [default: 1.0].\n"));
INITDOUBLEOPTION(Quality, Eod(eOptionUse::OPT_RENDER_ANIM, eOptionIDs::OPT_QUALITY, _T("--quality"), 0, SO_REQ_SEP, " --quality=<val> Override the quality of the flame if not 0 [default: 0].\n")); INITDOUBLEOPTION(Quality, Eod(eOptionUse::OPT_RENDER_ANIM, eOptionIDs::OPT_QUALITY, _T("--quality"), 0.0, SO_REQ_SEP, " --quality=<val> Override the quality of the flame if not 0 [default: 0].\n"));
INITDOUBLEOPTION(DeMin, Eod(eOptionUse::OPT_RENDER_ANIM, eOptionIDs::OPT_DE_MIN, _T("--demin"), -1, SO_REQ_SEP, " --demin=<val> Override the minimum size of the density estimator filter radius if not -1 [default: -1].\n")); INITDOUBLEOPTION(DeMin, Eod(eOptionUse::OPT_RENDER_ANIM, eOptionIDs::OPT_DE_MIN, _T("--demin"), -1.0, SO_REQ_SEP, " --demin=<val> Override the minimum size of the density estimator filter radius if not -1 [default: -1].\n"));
INITDOUBLEOPTION(DeMax, Eod(eOptionUse::OPT_RENDER_ANIM, eOptionIDs::OPT_DE_MAX, _T("--demax"), -1, SO_REQ_SEP, " --demax=<val> Override the maximum size of the density estimator filter radius if not -1 [default: -1].\n")); INITDOUBLEOPTION(DeMax, Eod(eOptionUse::OPT_RENDER_ANIM, eOptionIDs::OPT_DE_MAX, _T("--demax"), -1.0, SO_REQ_SEP, " --demax=<val> Override the maximum size of the density estimator filter radius if not -1 [default: -1].\n"));
INITDOUBLEOPTION(AspectRatio, Eod(eOptionUse::OPT_USE_ALL, eOptionIDs::OPT_PIXEL_ASPECT, _T("--pixel_aspect"), 1, SO_REQ_SEP, " --pixel_aspect=<val> Aspect ratio of pixels (width over height), eg. 0.90909 for NTSC [default: 1.0].\n")); INITDOUBLEOPTION(AspectRatio, Eod(eOptionUse::OPT_USE_ALL, eOptionIDs::OPT_PIXEL_ASPECT, _T("--pixel_aspect"), 1.0, SO_REQ_SEP, " --pixel_aspect=<val> Aspect ratio of pixels (width over height), eg. 0.90909 for NTSC [default: 1.0].\n"));
INITDOUBLEOPTION(Stagger, Eod(eOptionUse::OPT_USE_GENOME, eOptionIDs::OPT_STAGGER, _T("--stagger"), 0, SO_REQ_SEP, " --stagger=<val> Affects simultaneity of xform interpolation during flame interpolation.\n" INITDOUBLEOPTION(Stagger, Eod(eOptionUse::OPT_USE_GENOME, eOptionIDs::OPT_STAGGER, _T("--stagger"), 0.0, SO_REQ_SEP, " --stagger=<val> Affects simultaneity of xform interpolation during flame interpolation.\n"
"\t Represents how 'separate' the xforms are interpolated. Set to 1 for each\n" "\t Represents how 'separate' the xforms are interpolated. Set to 1 for each\n"
"\t xform to be interpolated individually, fractions control interpolation overlap [default: 0].\n")); "\t xform to be interpolated individually, fractions control interpolation overlap [default: 0].\n"));
INITDOUBLEOPTION(AvgThresh, Eod(eOptionUse::OPT_USE_GENOME, eOptionIDs::OPT_AVG_THRESH, _T("--avg"), 20.0, SO_REQ_SEP, " --avg=<val> Minimum average pixel channel sum (r + g + b) threshold from 0 - 765. Ignored if sequence, inter or rotate were specified [default: 20].\n")); INITDOUBLEOPTION(AvgThresh, Eod(eOptionUse::OPT_USE_GENOME, eOptionIDs::OPT_AVG_THRESH, _T("--avg"), 20.0, SO_REQ_SEP, " --avg=<val> Minimum average pixel channel sum (r + g + b) threshold from 0 - 765. Ignored if sequence, inter or rotate were specified [default: 20].\n"));
@ -399,7 +397,7 @@ public:
INITSTRINGOPTION(Out, Eos(eOptionUse::OPT_USE_RENDER, eOptionIDs::OPT_OUT, _T("--out"), "", SO_REQ_SEP, " --out=<val> Name of a single output file. Not recommended when rendering more than one image.\n")); INITSTRINGOPTION(Out, Eos(eOptionUse::OPT_USE_RENDER, eOptionIDs::OPT_OUT, _T("--out"), "", SO_REQ_SEP, " --out=<val> Name of a single output file. Not recommended when rendering more than one image.\n"));
INITSTRINGOPTION(Prefix, Eos(eOptionUse::OPT_RENDER_ANIM, eOptionIDs::OPT_PREFIX, _T("--prefix"), "", SO_REQ_SEP, " --prefix=<val> Prefix to prepend to all output files.\n")); INITSTRINGOPTION(Prefix, Eos(eOptionUse::OPT_RENDER_ANIM, eOptionIDs::OPT_PREFIX, _T("--prefix"), "", SO_REQ_SEP, " --prefix=<val> Prefix to prepend to all output files.\n"));
INITSTRINGOPTION(Suffix, Eos(eOptionUse::OPT_RENDER_ANIM, eOptionIDs::OPT_SUFFIX, _T("--suffix"), "", SO_REQ_SEP, " --suffix=<val> Suffix to append to all output files.\n")); INITSTRINGOPTION(Suffix, Eos(eOptionUse::OPT_RENDER_ANIM, eOptionIDs::OPT_SUFFIX, _T("--suffix"), "", SO_REQ_SEP, " --suffix=<val> Suffix to append to all output files.\n"));
INITSTRINGOPTION(Format, Eos(eOptionUse::OPT_RENDER_ANIM, eOptionIDs::OPT_FORMAT, _T("--format"), "png", SO_REQ_SEP, " --format=<val> Format of the output file. Valid values are: bmp, jpg, png, ppm [default: png].\n")); INITSTRINGOPTION(Format, Eos(eOptionUse::OPT_RENDER_ANIM, eOptionIDs::OPT_FORMAT, _T("--format"), "png", SO_REQ_SEP, " --format=<val> Format of the output file. Valid values are: bmp, jpg, png [default: png].\n"));
INITSTRINGOPTION(PalettePath, Eos(eOptionUse::OPT_USE_ALL, eOptionIDs::OPT_PALETTE_FILE, _T("--flam3_palettes"), "flam3-palettes.xml", SO_REQ_SEP, " --flam3_palettes=<val> Path and name of the palette file [default: flam3-palettes.xml].\n")); INITSTRINGOPTION(PalettePath, Eos(eOptionUse::OPT_USE_ALL, eOptionIDs::OPT_PALETTE_FILE, _T("--flam3_palettes"), "flam3-palettes.xml", SO_REQ_SEP, " --flam3_palettes=<val> Path and name of the palette file [default: flam3-palettes.xml].\n"));
INITSTRINGOPTION(Id, Eos(eOptionUse::OPT_USE_ALL, eOptionIDs::OPT_ID, _T("--id"), "", SO_REQ_SEP, " --id=<val> ID to use in <edit> tags / image comments.\n")); INITSTRINGOPTION(Id, Eos(eOptionUse::OPT_USE_ALL, eOptionIDs::OPT_ID, _T("--id"), "", SO_REQ_SEP, " --id=<val> ID to use in <edit> tags / image comments.\n"));
INITSTRINGOPTION(Url, Eos(eOptionUse::OPT_USE_ALL, eOptionIDs::OPT_URL, _T("--url"), "", SO_REQ_SEP, " --url=<val> URL to use in <edit> tags / image comments.\n")); INITSTRINGOPTION(Url, Eos(eOptionUse::OPT_USE_ALL, eOptionIDs::OPT_URL, _T("--url"), "", SO_REQ_SEP, " --url=<val> URL to use in <edit> tags / image comments.\n"));
@ -436,6 +434,7 @@ public:
EmberOptions options; EmberOptions options;
vector<CSimpleOpt::SOption> sOptions = options.GetSimpleOptions(); vector<CSimpleOpt::SOption> sOptions = options.GetSimpleOptions();
CSimpleOpt args(argc, argv, sOptions.data()); CSimpleOpt args(argc, argv, sOptions.data());
stringstream ss;
//Process args. //Process args.
while (args.Next()) while (args.Next())
@ -492,72 +491,76 @@ public:
PARSEBOOLOPTION(eOptionIDs::OPT_ENCLOSED, Enclosed); PARSEBOOLOPTION(eOptionIDs::OPT_ENCLOSED, Enclosed);
PARSEBOOLOPTION(eOptionIDs::OPT_NO_EDITS, NoEdits); PARSEBOOLOPTION(eOptionIDs::OPT_NO_EDITS, NoEdits);
PARSEBOOLOPTION(eOptionIDs::OPT_UNSMOOTH_EDGE, UnsmoothEdge); PARSEBOOLOPTION(eOptionIDs::OPT_UNSMOOTH_EDGE, UnsmoothEdge);
PARSEBOOLOPTION(eOptionIDs::OPT_CW_LOOPS, CwLoops);
PARSEBOOLOPTION(eOptionIDs::OPT_CW_INTERP_LOOPS, CwInterpLoops);
PARSEBOOLOPTION(eOptionIDs::OPT_LOCK_ACCUM, LockAccum); PARSEBOOLOPTION(eOptionIDs::OPT_LOCK_ACCUM, LockAccum);
PARSEBOOLOPTION(eOptionIDs::OPT_DUMP_KERNEL, DumpKernel); PARSEBOOLOPTION(eOptionIDs::OPT_DUMP_KERNEL, DumpKernel);
PARSEINTOPTION(eOptionIDs::OPT_SYMMETRY, Symmetry);//Int args PARSEOPTION(eOptionIDs::OPT_SYMMETRY, Symmetry);//Int args
PARSEINTOPTION(eOptionIDs::OPT_SHEEP_GEN, SheepGen); PARSEOPTION(eOptionIDs::OPT_SHEEP_GEN, SheepGen);
PARSEINTOPTION(eOptionIDs::OPT_SHEEP_ID, SheepId); PARSEOPTION(eOptionIDs::OPT_SHEEP_ID, SheepId);
PARSEINTOPTION(eOptionIDs::OPT_PRIORITY, Priority); PARSEOPTION(eOptionIDs::OPT_PRIORITY, Priority);
PARSEUINTOPTION(eOptionIDs::OPT_NTHREADS, ThreadCount);//uint args. PARSEOPTION(eOptionIDs::OPT_NTHREADS, ThreadCount);//uint args.
PARSEUINTOPTION(eOptionIDs::OPT_STRIPS, Strips); PARSEOPTION(eOptionIDs::OPT_STRIPS, Strips);
PARSEUINTOPTION(eOptionIDs::OPT_SUPERSAMPLE, Supersample); PARSEOPTION(eOptionIDs::OPT_SUPERSAMPLE, Supersample);
PARSEUINTOPTION(eOptionIDs::OPT_TEMPSAMPLES, TemporalSamples); PARSEOPTION(eOptionIDs::OPT_TEMPSAMPLES, TemporalSamples);
PARSEUINTOPTION(eOptionIDs::OPT_BPC, BitsPerChannel); PARSEOPTION(eOptionIDs::OPT_BPC, BitsPerChannel);
PARSEUINTOPTION(eOptionIDs::OPT_PRINT_EDIT_DEPTH, PrintEditDepth); PARSEOPTION(eOptionIDs::OPT_PRINT_EDIT_DEPTH, PrintEditDepth);
PARSEUINTOPTION(eOptionIDs::OPT_JPEG, JpegQuality); PARSEOPTION(eOptionIDs::OPT_JPEG, JpegQuality);
PARSEUINTOPTION(eOptionIDs::OPT_BEGIN, FirstFrame); PARSEOPTION(eOptionIDs::OPT_BEGIN, FirstFrame);
PARSEUINTOPTION(eOptionIDs::OPT_END, LastFrame); PARSEOPTION(eOptionIDs::OPT_END, LastFrame);
PARSEUINTOPTION(eOptionIDs::OPT_FRAME, Frame); PARSEOPTION(eOptionIDs::OPT_FRAME, Frame);
PARSEUINTOPTION(eOptionIDs::OPT_DTIME, Dtime); PARSEOPTION(eOptionIDs::OPT_DTIME, Dtime);
PARSEUINTOPTION(eOptionIDs::OPT_NFRAMES, Frames); PARSEOPTION(eOptionIDs::OPT_LOOP_FRAMES, LoopFrames);
PARSEUINTOPTION(eOptionIDs::OPT_REPEAT, Repeat); PARSEOPTION(eOptionIDs::OPT_INTERP_FRAMES, InterpFrames);
PARSEUINTOPTION(eOptionIDs::OPT_TRIES, Tries); PARSEOPTION(eOptionIDs::OPT_INTERP_LOOPS, InterpLoops);
PARSEUINTOPTION(eOptionIDs::OPT_MAX_XFORMS, MaxXforms); PARSEOPTION(eOptionIDs::OPT_REPEAT, Repeat);
PARSEUINTOPTION(eOptionIDs::OPT_START_COUNT, StartCount); PARSEOPTION(eOptionIDs::OPT_TRIES, Tries);
PARSEUINTOPTION(eOptionIDs::OPT_PADDING, Padding); PARSEOPTION(eOptionIDs::OPT_MAX_XFORMS, MaxXforms);
PARSEDOUBLEOPTION(eOptionIDs::OPT_SS, SizeScale);//Float args. PARSEOPTION(eOptionIDs::OPT_START_COUNT, StartCount);
PARSEDOUBLEOPTION(eOptionIDs::OPT_QS, QualityScale); PARSEOPTION(eOptionIDs::OPT_PADDING, Padding);
PARSEDOUBLEOPTION(eOptionIDs::OPT_QUALITY, Quality); PARSEOPTION(eOptionIDs::OPT_SS, SizeScale);//Float args.
PARSEDOUBLEOPTION(eOptionIDs::OPT_DE_MIN, DeMin); PARSEOPTION(eOptionIDs::OPT_QS, QualityScale);
PARSEDOUBLEOPTION(eOptionIDs::OPT_DE_MAX, DeMax); PARSEOPTION(eOptionIDs::OPT_QUALITY, Quality);
PARSEDOUBLEOPTION(eOptionIDs::OPT_PIXEL_ASPECT, AspectRatio); PARSEOPTION(eOptionIDs::OPT_DE_MIN, DeMin);
PARSEDOUBLEOPTION(eOptionIDs::OPT_STAGGER, Stagger); PARSEOPTION(eOptionIDs::OPT_DE_MAX, DeMax);
PARSEDOUBLEOPTION(eOptionIDs::OPT_AVG_THRESH, AvgThresh); PARSEOPTION(eOptionIDs::OPT_PIXEL_ASPECT, AspectRatio);
PARSEDOUBLEOPTION(eOptionIDs::OPT_BLACK_THRESH, BlackThresh); PARSEOPTION(eOptionIDs::OPT_STAGGER, Stagger);
PARSEDOUBLEOPTION(eOptionIDs::OPT_WHITE_LIMIT, WhiteLimit); PARSEOPTION(eOptionIDs::OPT_AVG_THRESH, AvgThresh);
PARSEDOUBLEOPTION(eOptionIDs::OPT_SPEED, Speed); PARSEOPTION(eOptionIDs::OPT_BLACK_THRESH, BlackThresh);
PARSEDOUBLEOPTION(eOptionIDs::OPT_OFFSETX, OffsetX); PARSEOPTION(eOptionIDs::OPT_WHITE_LIMIT, WhiteLimit);
PARSEDOUBLEOPTION(eOptionIDs::OPT_OFFSETY, OffsetY); PARSEOPTION(eOptionIDs::OPT_SPEED, Speed);
PARSEDOUBLEOPTION(eOptionIDs::OPT_USEMEM, UseMem); PARSEOPTION(eOptionIDs::OPT_OFFSETX, OffsetX);
PARSEDOUBLEOPTION(eOptionIDs::OPT_LOOPS, Loops); PARSEOPTION(eOptionIDs::OPT_OFFSETY, OffsetY);
PARSESTRINGOPTION(eOptionIDs::OPT_OPENCL_DEVICE, Device);//String args. PARSEOPTION(eOptionIDs::OPT_USEMEM, UseMem);
PARSESTRINGOPTION(eOptionIDs::OPT_ISAAC_SEED, IsaacSeed); PARSEOPTION(eOptionIDs::OPT_LOOPS, Loops);
PARSESTRINGOPTION(eOptionIDs::OPT_IN, Input); PARSEOPTION(eOptionIDs::OPT_OPENCL_DEVICE, Device);//String args.
PARSESTRINGOPTION(eOptionIDs::OPT_OUT, Out); PARSEOPTION(eOptionIDs::OPT_ISAAC_SEED, IsaacSeed);
PARSESTRINGOPTION(eOptionIDs::OPT_PREFIX, Prefix); PARSEOPTION(eOptionIDs::OPT_IN, Input);
PARSESTRINGOPTION(eOptionIDs::OPT_SUFFIX, Suffix); PARSEOPTION(eOptionIDs::OPT_OUT, Out);
PARSESTRINGOPTION(eOptionIDs::OPT_FORMAT, Format); PARSEOPTION(eOptionIDs::OPT_PREFIX, Prefix);
PARSESTRINGOPTION(eOptionIDs::OPT_PALETTE_FILE, PalettePath); PARSEOPTION(eOptionIDs::OPT_SUFFIX, Suffix);
PARSEOPTION(eOptionIDs::OPT_FORMAT, Format);
PARSEOPTION(eOptionIDs::OPT_PALETTE_FILE, PalettePath);
//PARSESTRINGOPTION(eOptionIDs::OPT_PALETTE_IMAGE, PaletteImage); //PARSESTRINGOPTION(eOptionIDs::OPT_PALETTE_IMAGE, PaletteImage);
PARSESTRINGOPTION(eOptionIDs::OPT_ID, Id); PARSEOPTION(eOptionIDs::OPT_ID, Id);
PARSESTRINGOPTION(eOptionIDs::OPT_URL, Url); PARSEOPTION(eOptionIDs::OPT_URL, Url);
PARSESTRINGOPTION(eOptionIDs::OPT_NICK, Nick); PARSEOPTION(eOptionIDs::OPT_NICK, Nick);
PARSESTRINGOPTION(eOptionIDs::OPT_COMMENT, Comment); PARSEOPTION(eOptionIDs::OPT_COMMENT, Comment);
PARSESTRINGOPTION(eOptionIDs::OPT_TEMPLATE, TemplateFile); PARSEOPTION(eOptionIDs::OPT_TEMPLATE, TemplateFile);
PARSESTRINGOPTION(eOptionIDs::OPT_CLONE, Clone); PARSEOPTION(eOptionIDs::OPT_CLONE, Clone);
PARSESTRINGOPTION(eOptionIDs::OPT_CLONE_ALL, CloneAll); PARSEOPTION(eOptionIDs::OPT_CLONE_ALL, CloneAll);
PARSESTRINGOPTION(eOptionIDs::OPT_CLONE_ACTION, CloneAction); PARSEOPTION(eOptionIDs::OPT_CLONE_ACTION, CloneAction);
PARSESTRINGOPTION(eOptionIDs::OPT_ANIMATE, Animate); PARSEOPTION(eOptionIDs::OPT_ANIMATE, Animate);
PARSESTRINGOPTION(eOptionIDs::OPT_MUTATE, Mutate); PARSEOPTION(eOptionIDs::OPT_MUTATE, Mutate);
PARSESTRINGOPTION(eOptionIDs::OPT_CROSS0, Cross0); PARSEOPTION(eOptionIDs::OPT_CROSS0, Cross0);
PARSESTRINGOPTION(eOptionIDs::OPT_CROSS1, Cross1); PARSEOPTION(eOptionIDs::OPT_CROSS1, Cross1);
PARSESTRINGOPTION(eOptionIDs::OPT_METHOD, Method); PARSEOPTION(eOptionIDs::OPT_METHOD, Method);
PARSESTRINGOPTION(eOptionIDs::OPT_INTER, Inter); PARSEOPTION(eOptionIDs::OPT_INTER, Inter);
PARSESTRINGOPTION(eOptionIDs::OPT_ROTATE, Rotate); PARSEOPTION(eOptionIDs::OPT_ROTATE, Rotate);
PARSESTRINGOPTION(eOptionIDs::OPT_SEQUENCE, Sequence); PARSEOPTION(eOptionIDs::OPT_SEQUENCE, Sequence);
PARSESTRINGOPTION(eOptionIDs::OPT_USE_VARS, UseVars); PARSEOPTION(eOptionIDs::OPT_USE_VARS, UseVars);
PARSESTRINGOPTION(eOptionIDs::OPT_DONT_USE_VARS, DontUseVars); PARSEOPTION(eOptionIDs::OPT_DONT_USE_VARS, DontUseVars);
PARSESTRINGOPTION(eOptionIDs::OPT_EXTRAS, Extras); PARSEOPTION(eOptionIDs::OPT_EXTRAS, Extras);
default: default:
{ {
@ -775,6 +778,8 @@ public:
Eob Enclosed; Eob Enclosed;
Eob NoEdits; Eob NoEdits;
Eob UnsmoothEdge; Eob UnsmoothEdge;
Eob CwLoops;
Eob CwInterpLoops;
Eob LockAccum; Eob LockAccum;
Eob DumpKernel; Eob DumpKernel;
@ -794,7 +799,9 @@ public:
Eou LastFrame; Eou LastFrame;
Eou Frame; Eou Frame;
Eou Dtime; Eou Dtime;
Eou Frames; Eou LoopFrames;
Eou InterpFrames;
Eou InterpLoops;
Eou Repeat; Eou Repeat;
Eou Tries; Eou Tries;
Eou MaxXforms; Eou MaxXforms;

View File

@ -4,31 +4,6 @@
#define PNG_COMMENT_MAX 8 #define PNG_COMMENT_MAX 8
/// <summary>
/// Write a PPM file.
/// </summary>
/// <param name="filename">The full path and name of the file</param>
/// <param name="image">Pointer to the image data to write</param>
/// <param name="width">Width of the image in pixels</param>
/// <param name="height">Height of the image in pixels</param>
/// <returns>True if success, else false</returns>
static bool WritePpm(const char* filename, byte* image, size_t width, size_t height)
{
bool b = false;
size_t size = width * height * 3;
FILE* file;
if (fopen_s(&file, filename, "wb") == 0)
{
fprintf_s(file, "P6\n");
fprintf_s(file, "%lu %lu\n255\n", width, height);
b = (size == fwrite(image, 1, size, file));
fclose(file);
}
return b;
}
/// <summary> /// <summary>
/// Write a JPEG file. /// Write a JPEG file.
/// </summary> /// </summary>
@ -53,15 +28,16 @@ static bool WriteJpeg(const char* filename, byte* image, size_t width, size_t he
size_t i; size_t i;
jpeg_error_mgr jerr; jpeg_error_mgr jerr;
jpeg_compress_struct info; jpeg_compress_struct info;
char nickString[64], urlString[128], idString[128]; string nickString, urlString, idString;
char bvString[64], niString[64], rtString[64]; string bvString, niString, rtString;
char genomeString[65536], verString[64]; string genomeString, verString;
//Create the mandatory comment strings. //Create the mandatory comment strings.
snprintf_s(genomeString, 65536, "flam3_genome: %s", comments.m_Genome.c_str()); ostringstream os;
snprintf_s(bvString, 64, "flam3_error_rate: %s", comments.m_Badvals.c_str()); os << "genome: " << comments.m_Genome; genomeString = os.str(); os.str("");
snprintf_s(niString, 64, "flam3_samples: %s", comments.m_NumIters.c_str()); os << "error_rate: " << comments.m_Badvals; bvString = os.str(); os.str("");
snprintf_s(rtString, 64, "flam3_time: %s", comments.m_Runtime.c_str()); os << "samples: " << comments.m_NumIters; niString = os.str(); os.str("");
snprintf_s(verString, 64, "flam3_version: %s", EmberVersion()); os << "time: " << comments.m_Runtime; rtString = os.str(); os.str("");
os << "version: " << EmberVersion(); verString = os.str(); os.str("");
info.err = jpeg_std_error(&jerr); info.err = jpeg_std_error(&jerr);
jpeg_create_compress(&info); jpeg_create_compress(&info);
jpeg_stdio_dest(&info, file); jpeg_stdio_dest(&info, file);
@ -83,36 +59,43 @@ static bool WriteJpeg(const char* filename, byte* image, size_t width, size_t he
//Write comments to jpeg. //Write comments to jpeg.
if (enableComments) if (enableComments)
{ {
jpeg_write_marker(&info, JPEG_COM, reinterpret_cast<byte*>(verString), uint(strlen(verString))); string s;
jpeg_write_marker(&info, JPEG_COM, reinterpret_cast<const byte*>(verString.c_str()), uint(verString.size()));
if (nick != "") if (nick != "")
{ {
snprintf_s(nickString, 64, "flam3_nickname: %s", nick.c_str()); os.str("");
jpeg_write_marker(&info, JPEG_COM, reinterpret_cast<byte*>(nickString), uint(strlen(nickString))); os << "nickname: " << nick;
s = os.str();
jpeg_write_marker(&info, JPEG_COM, reinterpret_cast<const byte*>(s.c_str()), uint(s.size()));
} }
if (url != "") if (url != "")
{ {
snprintf_s(urlString, 128, "flam3_url: %s", url.c_str()); os.str("");
jpeg_write_marker(&info, JPEG_COM, reinterpret_cast<byte*>(urlString), uint(strlen(urlString))); os << "url: " << url;
s = os.str();
jpeg_write_marker(&info, JPEG_COM, reinterpret_cast<const byte*>(s.c_str()), uint(s.size()));
} }
if (id != "") if (id != "")
{ {
snprintf_s(idString, 128, "flam3_id: %s", id.c_str()); os.str("");
jpeg_write_marker(&info, JPEG_COM, reinterpret_cast<byte*>(idString), uint(strlen(idString))); os << "id: " << id;
s = os.str();
jpeg_write_marker(&info, JPEG_COM, reinterpret_cast<const byte*>(s.c_str()), uint(s.size()));
} }
jpeg_write_marker(&info, JPEG_COM, reinterpret_cast<byte*>(bvString), uint(strlen(bvString))); jpeg_write_marker(&info, JPEG_COM, reinterpret_cast<const byte*>(bvString.c_str()), uint(bvString.size()));
jpeg_write_marker(&info, JPEG_COM, reinterpret_cast<byte*>(niString), uint(strlen(niString))); jpeg_write_marker(&info, JPEG_COM, reinterpret_cast<const byte*>(niString.c_str()), uint(niString.size()));
jpeg_write_marker(&info, JPEG_COM, reinterpret_cast<byte*>(rtString), uint(strlen(rtString))); jpeg_write_marker(&info, JPEG_COM, reinterpret_cast<const byte*>(rtString.c_str()), uint(rtString.size()));
jpeg_write_marker(&info, JPEG_COM, reinterpret_cast<byte*>(genomeString), uint(strlen(genomeString))); jpeg_write_marker(&info, JPEG_COM, reinterpret_cast<const byte*>(genomeString.c_str()), uint(genomeString.size()));
} }
for (i = 0; i < height; i++) for (i = 0; i < height; i++)
{ {
JSAMPROW row_pointer[1]; JSAMPROW row_pointer[1];
row_pointer[0] = reinterpret_cast<byte*>(image) + (3 * width * i); row_pointer[0] = image + (3 * width * i);
jpeg_write_scanlines(&info, row_pointer, 1); jpeg_write_scanlines(&info, row_pointer, 1);
} }
@ -209,7 +192,7 @@ static bool WritePng(const char* filename, byte* image, size_t width, size_t hei
png_set_swap(png_ptr); png_set_swap(png_ptr);
} }
png_write_image(png_ptr, const_cast<png_bytepp>(rows.data())); png_write_image(png_ptr, rows.data());
png_write_end(png_ptr, info_ptr); png_write_end(png_ptr, info_ptr);
png_destroy_write_struct(&png_ptr, &info_ptr); png_destroy_write_struct(&png_ptr, &info_ptr);
fclose(file); fclose(file);
@ -227,10 +210,10 @@ static bool WritePng(const char* filename, byte* image, size_t width, size_t hei
/// <param name="height">The height.</param> /// <param name="height">The height.</param>
/// <param name="newSize">The size of the new buffer created</param> /// <param name="newSize">The size of the new buffer created</param>
/// <returns>The converted buffer if successful, else NULL.</returns> /// <returns>The converted buffer if successful, else NULL.</returns>
static byte* ConvertRGBToBMPBuffer(byte* buffer, size_t width, size_t height, size_t& newSize) static vector<byte> ConvertRGBToBMPBuffer(byte* buffer, size_t width, size_t height, size_t& newSize)
{ {
if (buffer == nullptr || width == 0 || height == 0) if (buffer == nullptr || width == 0 || height == 0)
return nullptr; return vector<byte>();
size_t padding = 0; size_t padding = 0;
size_t scanlinebytes = width * 3; size_t scanlinebytes = width * 3;
@ -240,11 +223,7 @@ static byte* ConvertRGBToBMPBuffer(byte* buffer, size_t width, size_t height, si
size_t psw = scanlinebytes + padding; size_t psw = scanlinebytes + padding;
newSize = height * psw; newSize = height * psw;
byte* newBuf = new byte[newSize]; vector<byte> newBuf(newSize);
if (newBuf)
{
memset (newBuf, 0, newSize);
size_t bufpos = 0; size_t bufpos = 0;
size_t newpos = 0; size_t newpos = 0;
@ -267,9 +246,6 @@ static byte* ConvertRGBToBMPBuffer(byte* buffer, size_t width, size_t height, si
return newBuf; return newBuf;
} }
return nullptr;
}
/// <summary> /// <summary>
/// Save a Bmp file. /// Save a Bmp file.
/// </summary> /// </summary>
@ -279,7 +255,7 @@ static byte* ConvertRGBToBMPBuffer(byte* buffer, size_t width, size_t height, si
/// <param name="height">Height of the image in pixels</param> /// <param name="height">Height of the image in pixels</param>
/// <param name="paddedSize">Padded size, greater than or equal to total image size.</param> /// <param name="paddedSize">Padded size, greater than or equal to total image size.</param>
/// <returns>True if success, else false</returns> /// <returns>True if success, else false</returns>
static bool SaveBmp(const char* filename, byte* image, size_t width, size_t height, size_t paddedSize) static bool SaveBmp(const char* filename, const byte* image, size_t width, size_t height, size_t paddedSize)
{ {
#ifdef _WIN32 #ifdef _WIN32
BITMAPFILEHEADER bmfh; BITMAPFILEHEADER bmfh;
@ -346,10 +322,7 @@ static bool WriteBmp(const char* filename, byte* image, size_t width, size_t hei
{ {
bool b = false; bool b = false;
size_t newSize; size_t newSize;
unique_ptr<byte> bgrBuf(ConvertRGBToBMPBuffer(image, width, height, newSize)); auto bgrBuf = ConvertRGBToBMPBuffer(image, width, height, newSize);
b = SaveBmp(filename, bgrBuf.data(), width, height, newSize);
if (bgrBuf.get())
b = SaveBmp(filename, bgrBuf.get(), width, height, newSize);
return b; return b;
} }

View File

@ -453,9 +453,21 @@ bool EmberGenome(EmberOptions& opt)
{ {
Ember<T> result; Ember<T> result;
if (opt.Frames() == 0) if (!opt.LoopFrames() && !opt.InterpFrames())
{ {
cerr << "nframes must be positive and non-zero, not " << opt.Frames() << ".\n"; cerr << "loop frames or interp frames must be positive and non-zero, not " << opt.LoopFrames() << ", " << opt.InterpFrames() << ".\n";
return false;
}
if (opt.LoopFrames() > 0 && !opt.Loops())
{
cerr << "loop frames cannot be positive while loops is zero: " << opt.LoopFrames() << ", " << opt.Loops() << ".\n";
return false;
}
if (opt.Loops() > 0 && !opt.LoopFrames())
{
cerr << "loops cannot be positive while loopframes is zero: " << opt.Loops() << ", " << opt.LoopFrames() << ".\n";
return false; return false;
} }
@ -465,19 +477,19 @@ bool EmberGenome(EmberOptions& opt)
frameCount = 0; frameCount = 0;
os.str(""); os.str("");
os << setfill('0') << setprecision(0) << fixed; os << setfill('0') << setprecision(0) << fixed;
auto padding = opt.Padding() ? streamsize(opt.Padding()) : (streamsize(std::log10(opt.StartCount() + (((opt.Frames() * opt.Loops()) + opt.Frames()) * embers.size()))) + 1); auto padding = opt.Padding() ? streamsize(opt.Padding()) : (streamsize(std::log10(opt.StartCount() + (((opt.LoopFrames() * opt.Loops()) + opt.InterpFrames()) * embers.size()))) + 1);
t.Tic(); t.Tic();
for (i = 0; i < embers.size(); i++) for (i = 0; i < embers.size(); i++)
{ {
if (opt.Loops() > 0) if (opt.Loops() > 0)
{ {
size_t roundFrames = size_t(std::round(opt.Frames() * opt.Loops())); size_t roundFrames = size_t(std::round(opt.LoopFrames() * opt.Loops()));
for (frame = 0; frame < roundFrames; frame++) for (frame = 0; frame < roundFrames; frame++)
{ {
blend = T(frame) / T(opt.Frames()); blend = T(frame) / T(opt.LoopFrames());
tools.Spin(embers[i], pTemplate, result, opt.StartCount() + frameCount++, blend);//Result is cleared and reassigned each time inside of Spin(). tools.Spin(embers[i], pTemplate, result, opt.StartCount() + frameCount++, blend, opt.CwLoops());//Result is cleared and reassigned each time inside of Spin().
FormatName(result, os, padding); FormatName(result, os, padding);
cout << emberToXml.ToString(result, opt.Extras(), opt.PrintEditDepth(), !opt.NoEdits(), opt.HexPalette()); cout << emberToXml.ToString(result, opt.Extras(), opt.PrintEditDepth(), !opt.NoEdits(), opt.HexPalette());
} }
@ -486,8 +498,8 @@ bool EmberGenome(EmberOptions& opt)
//Rotate the next step and save in result, but do not print. //Rotate the next step and save in result, but do not print.
//result will be the starting point for the interp phase below. //result will be the starting point for the interp phase below.
frame = roundFrames; frame = roundFrames;
blend = T(frame) / T(opt.Frames()); blend = T(frame) / T(opt.LoopFrames());
tools.Spin(embers[i], pTemplate, result, opt.StartCount() + frameCount, blend);//Do not increment frameCount here. tools.Spin(embers[i], pTemplate, result, opt.StartCount() + frameCount, blend, opt.CwLoops());//Do not increment frameCount here.
FormatName(result, os, padding); FormatName(result, os, padding);
} }
@ -496,19 +508,19 @@ bool EmberGenome(EmberOptions& opt)
if (opt.Loops() > 0)//Store the last result as the flame to interpolate from. This applies for whole or fractional values of opt.Loops(). if (opt.Loops() > 0)//Store the last result as the flame to interpolate from. This applies for whole or fractional values of opt.Loops().
embers[i] = result; embers[i] = result;
for (frame = 0; frame < opt.Frames(); frame++) for (frame = 0; frame < opt.InterpFrames(); frame++)
{ {
seqFlag = frame == 0 || (frame == opt.Frames() - 1); seqFlag = frame == 0 || (frame == opt.InterpFrames() - 1);
blend = frame / T(opt.Frames()); blend = frame / T(opt.InterpFrames());
result.Clear(); result.Clear();
tools.SpinInter(&embers[i], pTemplate, result, opt.StartCount() + frameCount++, seqFlag, blend); tools.SpinInter(&embers[i], pTemplate, result, opt.StartCount() + frameCount++, seqFlag, blend, opt.InterpLoops(), opt.CwInterpLoops());
FormatName(result, os, padding); FormatName(result, os, padding);
cout << emberToXml.ToString(result, opt.Extras(), opt.PrintEditDepth(), !opt.NoEdits(), opt.HexPalette()); cout << emberToXml.ToString(result, opt.Extras(), opt.PrintEditDepth(), !opt.NoEdits(), opt.HexPalette());
} }
} }
} }
tools.Spin(embers.back(), pTemplate, result, opt.StartCount() + frameCount, 0); tools.Spin(embers.back(), pTemplate, result, opt.StartCount() + frameCount, 0, opt.CwInterpLoops());
FormatName(result, os, padding); FormatName(result, os, padding);
cout << emberToXml.ToString(result, opt.Extras(), opt.PrintEditDepth(), !opt.NoEdits(), opt.HexPalette()); cout << emberToXml.ToString(result, opt.Extras(), opt.PrintEditDepth(), !opt.NoEdits(), opt.HexPalette());
t.Toc("Sequencing"); t.Toc("Sequencing");
@ -523,15 +535,15 @@ bool EmberGenome(EmberOptions& opt)
{ {
Ember<T> result, result1, result2, result3; Ember<T> result, result1, result2, result3;
if (opt.Frames() == 0) if (!opt.LoopFrames() && !opt.InterpFrames())
{ {
cerr << "nframes must be positive and non-zero, not " << opt.Frames() << ".\n"; cerr << "loop frames or interp frames must be positive and non-zero, not " << opt.LoopFrames() << ", " << opt.InterpFrames() << ".\n";
return false; return false;
} }
frame = opt.Frame(); frame = opt.Frame();
blend = frame / T(opt.Frames());//Percentage between first and second flame to treat as the center flame. blend = frame / T(opt.InterpFrames());//Percentage between first and second flame to treat as the center flame.
spread = 1 / T(opt.Frames());//Amount to move backward and forward from the center flame. spread = 1 / T(opt.InterpFrames());//Amount to move backward and forward from the center flame.
if (opt.Enclosed()) if (opt.Enclosed())
cout << "<pick version=\"EMBER-" << EmberVersion() << "\">\n"; cout << "<pick version=\"EMBER-" << EmberVersion() << "\">\n";
@ -546,12 +558,12 @@ bool EmberGenome(EmberOptions& opt)
if (frame)//Cannot spin backward below frame zero. if (frame)//Cannot spin backward below frame zero.
{ {
tools.Spin(embers[0], pTemplate, result1, frame - 1, blend - spread); tools.Spin(embers[0], pTemplate, result1, frame - 1, blend - spread, opt.CwLoops());
cout << emberToXml.ToString(result1, opt.Extras(), opt.PrintEditDepth(), !opt.NoEdits(), opt.HexPalette()); cout << emberToXml.ToString(result1, opt.Extras(), opt.PrintEditDepth(), !opt.NoEdits(), opt.HexPalette());
} }
tools.Spin(embers[0], pTemplate, result2, frame , blend ); tools.Spin(embers[0], pTemplate, result2, frame , blend , opt.CwLoops());
tools.Spin(embers[0], pTemplate, result3, frame + 1, blend + spread); tools.Spin(embers[0], pTemplate, result3, frame + 1, blend + spread, opt.CwLoops());
cout << emberToXml.ToString(result2, opt.Extras(), opt.PrintEditDepth(), !opt.NoEdits(), opt.HexPalette()); cout << emberToXml.ToString(result2, opt.Extras(), opt.PrintEditDepth(), !opt.NoEdits(), opt.HexPalette());
cout << emberToXml.ToString(result3, opt.Extras(), opt.PrintEditDepth(), !opt.NoEdits(), opt.HexPalette()); cout << emberToXml.ToString(result3, opt.Extras(), opt.PrintEditDepth(), !opt.NoEdits(), opt.HexPalette());
} }
@ -565,12 +577,12 @@ bool EmberGenome(EmberOptions& opt)
if (frame)//Cannot interpolate backward below frame zero. if (frame)//Cannot interpolate backward below frame zero.
{ {
tools.SpinInter(embers.data(), pTemplate, result1, frame - 1, false, blend - spread); tools.SpinInter(embers.data(), pTemplate, result1, frame - 1, false, blend - spread, opt.InterpLoops(), opt.CwInterpLoops());
cout << emberToXml.ToString(result1, opt.Extras(), opt.PrintEditDepth(), !opt.NoEdits(), opt.HexPalette()); cout << emberToXml.ToString(result1, opt.Extras(), opt.PrintEditDepth(), !opt.NoEdits(), opt.HexPalette());
} }
tools.SpinInter(embers.data(), pTemplate, result2, frame , false, blend ); tools.SpinInter(embers.data(), pTemplate, result2, frame , false, blend , opt.InterpLoops(), opt.CwInterpLoops());
tools.SpinInter(embers.data(), pTemplate, result3, frame + 1, false, blend + spread); tools.SpinInter(embers.data(), pTemplate, result3, frame + 1, false, blend + spread, opt.InterpLoops(), opt.CwInterpLoops());
cout << emberToXml.ToString(result2, opt.Extras(), opt.PrintEditDepth(), !opt.NoEdits(), opt.HexPalette()); cout << emberToXml.ToString(result2, opt.Extras(), opt.PrintEditDepth(), !opt.NoEdits(), opt.HexPalette());
cout << emberToXml.ToString(result3, opt.Extras(), opt.PrintEditDepth(), !opt.NoEdits(), opt.HexPalette()); cout << emberToXml.ToString(result3, opt.Extras(), opt.PrintEditDepth(), !opt.NoEdits(), opt.HexPalette());
} }

View File

@ -117,10 +117,9 @@ bool EmberRender(EmberOptions& opt)
if (opt.Format() != "jpg" && if (opt.Format() != "jpg" &&
opt.Format() != "png" && opt.Format() != "png" &&
opt.Format() != "ppm" &&
opt.Format() != "bmp") opt.Format() != "bmp")
{ {
cout << "Format must be jpg, png, ppm, or bmp not " << opt.Format() << ". Setting to jpg.\n"; cout << "Format must be jpg, png, or bmp not " << opt.Format() << ". Setting to jpg.\n";
} }
channels = opt.Format() == "png" ? 4 : 3; channels = opt.Format() == "png" ? 4 : 3;
@ -302,8 +301,6 @@ bool EmberRender(EmberOptions& opt)
writeSuccess = WritePng(filename.c_str(), finalImagep, finalEmber.m_FinalRasW, finalEmber.m_FinalRasH, opt.BitsPerChannel() / 8, opt.PngComments(), comments, opt.Id(), opt.Url(), opt.Nick()); writeSuccess = WritePng(filename.c_str(), finalImagep, finalEmber.m_FinalRasW, finalEmber.m_FinalRasH, opt.BitsPerChannel() / 8, opt.PngComments(), comments, opt.Id(), opt.Url(), opt.Nick());
else if (opt.Format() == "jpg") else if (opt.Format() == "jpg")
writeSuccess = WriteJpeg(filename.c_str(), finalImagep, finalEmber.m_FinalRasW, finalEmber.m_FinalRasH, int(opt.JpegQuality()), opt.JpegComments(), comments, opt.Id(), opt.Url(), opt.Nick()); writeSuccess = WriteJpeg(filename.c_str(), finalImagep, finalEmber.m_FinalRasW, finalEmber.m_FinalRasH, int(opt.JpegQuality()), opt.JpegComments(), comments, opt.Id(), opt.Url(), opt.Nick());
else if (opt.Format() == "ppm")
writeSuccess = WritePpm(filename.c_str(), finalImagep, finalEmber.m_FinalRasW, finalEmber.m_FinalRasH);
else if (opt.Format() == "bmp") else if (opt.Format() == "bmp")
writeSuccess = WriteBmp(filename.c_str(), finalImagep, finalEmber.m_FinalRasW, finalEmber.m_FinalRasH); writeSuccess = WriteBmp(filename.c_str(), finalImagep, finalEmber.m_FinalRasW, finalEmber.m_FinalRasH);

View File

@ -18,12 +18,9 @@ using namespace EmberCommon;
template <typename T> template <typename T>
void SaveFinalImage(Renderer<T, T>& renderer, vector<byte>& pixels, char* suffix) void SaveFinalImage(Renderer<T, T>& renderer, vector<byte>& pixels, char* suffix)
{ {
Timing t;
//renderer.AccumulatorToFinalImage(pixels);
//t.Toc("AccumulatorToFinalImage()");
long newSize; long newSize;
char ch[50]; ostringstream os;
sprintf_s(ch, 50, ".\\BasicFlame_%d_%s.bmp", sizeof(T), suffix); os << ".\\BasicFlame_" << sizeof(T) << "_" << suffix ".bmp";
BYTE* bgrBuf = ConvertRGBToBMPBuffer(pixels.data(), renderer.FinalRasW(), renderer.FinalRasH(), newSize); BYTE* bgrBuf = ConvertRGBToBMPBuffer(pixels.data(), renderer.FinalRasW(), renderer.FinalRasH(), newSize);
SaveBMP(ch, bgrBuf, renderer.FinalRasW(), renderer.FinalRasH(), newSize); SaveBMP(ch, bgrBuf, renderer.FinalRasW(), renderer.FinalRasH(), newSize);
delete [] bgrBuf; delete [] bgrBuf;
@ -1870,7 +1867,7 @@ void DistribTester()
throw "Out of bounds xform index in selection distribution."; throw "Out of bounds xform index in selection distribution.";
#endif #endif
//printf("offset = %d, xform = %d, running sum = %f\n", j, i, tempDensity); //cout << "offset = " << j << ", xform = " << i << ", running sum = " << tempDensity << "\n";
m_XformDistributions[(distrib * CHOOSE_XFORM_GRAIN) + j] = byte(i); m_XformDistributions[(distrib * CHOOSE_XFORM_GRAIN) + j] = byte(i);
tempDensity += densityPerElement; tempDensity += densityPerElement;
j++; j++;

View File

@ -58,7 +58,7 @@
<enum>QFrame::NoFrame</enum> <enum>QFrame::NoFrame</enum>
</property> </property>
<property name="text"> <property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;&lt;br/&gt;Fractorium 1.0.0.1&lt;/p&gt;&lt;p align=&quot;center&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;A Qt-based fractal flame editor which uses a C++ re-write of the flam3 algorithm named Ember and a GPU capable version named EmberCL which implements a portion of the cuburn algorithm in OpenCL.&lt;/span&gt;&lt;/p&gt;&lt;p align=&quot;center&quot;&gt;&lt;a href=&quot;http://fractorium.com&quot;&gt;fractorium.com&lt;/a&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;&lt;br/&gt;Lead: Matt Feemster&lt;br/&gt;Contributors: Simon Detheridge&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string> <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;&lt;br/&gt;Fractorium 1.0.0.2&lt;/p&gt;&lt;p align=&quot;center&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;A Qt-based fractal flame editor which uses a C++ re-write of the flam3 algorithm named Ember and a GPU capable version named EmberCL which implements a portion of the cuburn algorithm in OpenCL.&lt;/span&gt;&lt;/p&gt;&lt;p align=&quot;center&quot;&gt;&lt;a href=&quot;http://fractorium.com&quot;&gt;fractorium.com&lt;/a&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;&lt;br/&gt;Lead: Matt Feemster&lt;br/&gt;Contributors: Simon Detheridge&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property> </property>
<property name="textFormat"> <property name="textFormat">
<enum>Qt::RichText</enum> <enum>Qt::RichText</enum>

View File

@ -1,5 +1,6 @@
#include "FractoriumPch.h" #include "FractoriumPch.h"
#include "DoubleSpinBox.h" #include "DoubleSpinBox.h"
#include "FractoriumSettings.h"
QTimer DoubleSpinBox::s_Timer; QTimer DoubleSpinBox::s_Timer;
@ -15,7 +16,6 @@ QTimer DoubleSpinBox::s_Timer;
DoubleSpinBox::DoubleSpinBox(QWidget* p, int h, double step) DoubleSpinBox::DoubleSpinBox(QWidget* p, int h, double step)
: QDoubleSpinBox(p) : QDoubleSpinBox(p)
{ {
m_Select = false;
m_DoubleClick = false; m_DoubleClick = false;
m_DoubleClickNonZero = 0; m_DoubleClickNonZero = 0;
m_DoubleClickZero = 1; m_DoubleClickZero = 1;
@ -159,37 +159,40 @@ void DoubleSpinBox::OnTimeout()
bool DoubleSpinBox::eventFilter(QObject* o, QEvent* e) bool DoubleSpinBox::eventFilter(QObject* o, QEvent* e)
{ {
QMouseEvent* me = dynamic_cast<QMouseEvent*>(e); QMouseEvent* me = dynamic_cast<QMouseEvent*>(e);
auto settings = FractoriumSettings::DefInstance();
if (isEnabled() && if (isEnabled() && me)
me && {
if (!settings->ToggleType() &&//Ensure double click toggles, not right click.
me->type() == QMouseEvent::MouseButtonPress && me->type() == QMouseEvent::MouseButtonPress &&
me->button() == Qt::RightButton) me->button() == Qt::RightButton)
{ {
m_MouseDownPoint = m_MouseMovePoint = me->pos(); m_MouseDownPoint = m_MouseMovePoint = me->pos();
StartTimer(); StartTimer();
} }
else if (isEnabled() && else if (!settings->ToggleType() &&
me &&
me->type() == QMouseEvent::MouseButtonRelease && me->type() == QMouseEvent::MouseButtonRelease &&
me->button() == Qt::RightButton) me->button() == Qt::RightButton)
{ {
StopTimer(); StopTimer();
m_MouseDownPoint = m_MouseMovePoint = me->pos(); m_MouseDownPoint = m_MouseMovePoint = me->pos();
} }
else if (isEnabled() && else if (!settings->ToggleType() &&
me &&
me->type() == QMouseEvent::MouseMove && me->type() == QMouseEvent::MouseMove &&
QGuiApplication::mouseButtons() & Qt::RightButton) QGuiApplication::mouseButtons() & Qt::RightButton)
{ {
m_MouseMovePoint = me->pos(); m_MouseMovePoint = me->pos();
} }
else if (m_DoubleClick && e->type() == QMouseEvent::MouseButtonDblClick && isEnabled()) else if (m_DoubleClick &&
((!settings->ToggleType() && e->type() == QMouseEvent::MouseButtonDblClick && me->button() == Qt::LeftButton) ||
(settings->ToggleType() && me->type() == QMouseEvent::MouseButtonRelease && me->button() == Qt::RightButton)))
{ {
if (IsNearZero(value())) if (IsNearZero(value()))
setValue(m_DoubleClickZero); setValue(m_DoubleClickZero);
else else
setValue(m_DoubleClickNonZero); setValue(m_DoubleClickNonZero);
} }
}
else else
{ {
if (e->type() == QEvent::Wheel) if (e->type() == QEvent::Wheel)

View File

@ -6,6 +6,8 @@
/// DoubleSpinBox and VariationTreeDoubleSpinBox classes. /// DoubleSpinBox and VariationTreeDoubleSpinBox classes.
/// </summary> /// </summary>
enum class eSpinToggle : et { NONE = 0, SPIN_DOUBLE_CLICK = 1, SPIN_RIGHT_CLICK = 2 };
/// <summary> /// <summary>
/// A derivation to prevent the spin box from selecting its own text /// A derivation to prevent the spin box from selecting its own text
/// when editing. Also to prevent multiple spin boxes from all having /// when editing. Also to prevent multiple spin boxes from all having
@ -43,7 +45,6 @@ private:
void StartTimer(); void StartTimer();
void StopTimer(); void StopTimer();
bool m_Select;
bool m_DoubleClick; bool m_DoubleClick;
double m_DoubleClickNonZero; double m_DoubleClickNonZero;
double m_DoubleClickZero; double m_DoubleClickZero;

View File

@ -73,6 +73,7 @@ public:
m_Ember(ember) m_Ember(ember)
{ {
setFlags(Qt::ItemIsEnabled | Qt::ItemIsEditable | Qt::ItemIsSelectable | Qt::ItemIsDragEnabled); setFlags(Qt::ItemIsEnabled | Qt::ItemIsEditable | Qt::ItemIsSelectable | Qt::ItemIsDragEnabled);
setCheckState(0, Qt::Unchecked);
} }
/// <summary> /// <summary>
@ -86,6 +87,7 @@ public:
m_Ember(ember) m_Ember(ember)
{ {
setFlags(Qt::ItemIsEnabled | Qt::ItemIsEditable | Qt::ItemIsSelectable | Qt::ItemIsDragEnabled); setFlags(Qt::ItemIsEnabled | Qt::ItemIsEditable | Qt::ItemIsSelectable | Qt::ItemIsDragEnabled);
setCheckState(0, Qt::Unchecked);
} }
/// <summary> /// <summary>

View File

@ -10,7 +10,7 @@
/// <param name="settings">Pointer to the global settings object to use</param> /// <param name="settings">Pointer to the global settings object to use</param>
/// <param name="p">The parent widget</param> /// <param name="p">The parent widget</param>
/// <param name="f">The window flags. Default: 0.</param> /// <param name="f">The window flags. Default: 0.</param>
FractoriumFinalRenderDialog::FractoriumFinalRenderDialog(FractoriumSettings* settings, QWidget* p, Qt::WindowFlags f) FractoriumFinalRenderDialog::FractoriumFinalRenderDialog(QWidget* p, Qt::WindowFlags f)
: QDialog(p, f) : QDialog(p, f)
{ {
ui.setupUi(this); ui.setupUi(this);
@ -19,7 +19,7 @@ FractoriumFinalRenderDialog::FractoriumFinalRenderDialog(FractoriumSettings* set
QTableWidget* table = ui.FinalRenderParamsTable; QTableWidget* table = ui.FinalRenderParamsTable;
m_Info = OpenCLInfo::Instance(); m_Info = OpenCLInfo::Instance();
m_Fractorium = qobject_cast<Fractorium*>(p); m_Fractorium = qobject_cast<Fractorium*>(p);
m_Settings = settings; m_Settings = FractoriumSettings::DefInstance();
ui.FinalRenderThreadCountSpin->setRange(1, Timing::ProcessorCount()); ui.FinalRenderThreadCountSpin->setRange(1, Timing::ProcessorCount());
connect(ui.FinalRenderEarlyClipCheckBox, SIGNAL(stateChanged(int)), this, SLOT(OnEarlyClipCheckBoxStateChanged(int)), Qt::QueuedConnection); connect(ui.FinalRenderEarlyClipCheckBox, SIGNAL(stateChanged(int)), this, SLOT(OnEarlyClipCheckBoxStateChanged(int)), Qt::QueuedConnection);
connect(ui.FinalRenderYAxisUpCheckBox, SIGNAL(stateChanged(int)), this, SLOT(OnYAxisUpCheckBoxStateChanged(int)), Qt::QueuedConnection); connect(ui.FinalRenderYAxisUpCheckBox, SIGNAL(stateChanged(int)), this, SLOT(OnYAxisUpCheckBoxStateChanged(int)), Qt::QueuedConnection);

View File

@ -50,7 +50,7 @@ class FractoriumFinalRenderDialog : public QDialog
#endif #endif
public: public:
FractoriumFinalRenderDialog(FractoriumSettings* settings, QWidget* p, Qt::WindowFlags f = 0); FractoriumFinalRenderDialog(QWidget* p, Qt::WindowFlags f = 0);
void Show(bool fromSequence); void Show(bool fromSequence);
bool EarlyClip(); bool EarlyClip();
bool YAxisUp(); bool YAxisUp();
@ -132,7 +132,7 @@ private:
TwoButtonComboWidget* m_Tbcw; TwoButtonComboWidget* m_Tbcw;
QLineEdit* m_PrefixEdit; QLineEdit* m_PrefixEdit;
QLineEdit* m_SuffixEdit; QLineEdit* m_SuffixEdit;
FractoriumSettings* m_Settings; shared_ptr<FractoriumSettings> m_Settings;
Fractorium* m_Fractorium; Fractorium* m_Fractorium;
shared_ptr<OpenCLInfo> m_Info; shared_ptr<OpenCLInfo> m_Info;
vector<OpenCLWrapper> m_Wrappers; vector<OpenCLWrapper> m_Wrappers;

View File

@ -14,7 +14,7 @@ FinalRenderEmberControllerBase::FinalRenderEmberControllerBase(FractoriumFinalRe
m_FinalRenderDialog(finalRenderDialog) m_FinalRenderDialog(finalRenderDialog)
{ {
m_FinishedImageCount.store(0); m_FinishedImageCount.store(0);
m_Settings = m_Fractorium->m_Settings; m_Settings = FractoriumSettings::DefInstance();
} }
/// <summary> /// <summary>
@ -28,8 +28,8 @@ void FinalRenderEmberController<T>::CancelRender()
{ {
if (m_Result.isRunning()) if (m_Result.isRunning())
{ {
tbb::task_group g; //tbb::task_group g;
g.run([&] std::thread th([&]
{ {
m_Run = false; m_Run = false;
@ -61,7 +61,7 @@ void FinalRenderEmberController<T>::CancelRender()
} }
} }
}); });
g.wait(); Join(th);
while (m_Result.isRunning()) while (m_Result.isRunning())
QApplication::processEvents(); QApplication::processEvents();

View File

@ -81,7 +81,7 @@ protected:
QFuture<void> m_Result; QFuture<void> m_Result;
std::function<void (void)> m_FinalRenderFunc; std::function<void (void)> m_FinalRenderFunc;
FractoriumSettings* m_Settings; shared_ptr<FractoriumSettings> m_Settings;
FractoriumFinalRenderDialog* m_FinalRenderDialog; FractoriumFinalRenderDialog* m_FinalRenderDialog;
FinalRenderGuiState m_GuiState; FinalRenderGuiState m_GuiState;
std::recursive_mutex m_ProgressCs; std::recursive_mutex m_ProgressCs;

View File

@ -45,13 +45,13 @@ Fractorium::Fractorium(QWidget* p)
m_VarSortMode = 1;//Sort by weight by default. m_VarSortMode = 1;//Sort by weight by default.
m_PaletteSortMode = 0;//Sort by palette ascending by default. m_PaletteSortMode = 0;//Sort by palette ascending by default.
m_ColorDialog = new QColorDialog(this); m_ColorDialog = new QColorDialog(this);
m_Settings = new FractoriumSettings(this); m_Settings = FractoriumSettings::Instance();
m_QssDialog = new QssDialog(this); m_QssDialog = new QssDialog(this);
m_FileDialog = nullptr;//Use lazy instantiation upon first use. m_FileDialog = nullptr;//Use lazy instantiation upon first use.
m_FolderDialog = nullptr; m_FolderDialog = nullptr;
m_FinalRenderDialog = new FractoriumFinalRenderDialog(m_Settings, this); m_FinalRenderDialog = new FractoriumFinalRenderDialog(this);
m_OptionsDialog = new FractoriumOptionsDialog(m_Settings, this); m_OptionsDialog = new FractoriumOptionsDialog(this);
m_VarDialog = new FractoriumVariationsDialog(m_Settings, this); m_VarDialog = new FractoriumVariationsDialog(this);
m_AboutDialog = new FractoriumAboutDialog(this); m_AboutDialog = new FractoriumAboutDialog(this);
//Put the about dialog in the screen center. //Put the about dialog in the screen center.
const QRect screen = QApplication::desktop()->screenGeometry(); const QRect screen = QApplication::desktop()->screenGeometry();
@ -157,6 +157,7 @@ Fractorium::Fractorium(QWidget* p)
if (ifs.is_open()) if (ifs.is_open())
{ {
string total, qs; string total, qs;
total.reserve(20 * 1024);
while (std::getline(ifs, qs)) while (std::getline(ifs, qs))
total += qs + "\n"; total += qs + "\n";
@ -213,9 +214,9 @@ Fractorium::~Fractorium()
/// <param name="worldY">The cartesian world y coordinate</param> /// <param name="worldY">The cartesian world y coordinate</param>
void Fractorium::SetCoordinateStatus(int rasX, int rasY, float worldX, float worldY) void Fractorium::SetCoordinateStatus(int rasX, int rasY, float worldX, float worldY)
{ {
//Use sprintf rather than allocating and concatenating 6 QStrings for efficiency since this is called on every mouse move. static QString coords;
sprintf_s(m_CoordinateString, sizeof(m_CoordinateString), "Window: %4d, %4d World: %2.2f, %2.2f", rasX, rasY, worldX, worldY); coords.sprintf("Window: %4d, %4d World: %2.2f, %2.2f", rasX, rasY, worldX, worldY);
m_CoordinateStatusLabel->setText(QString(m_CoordinateString)); m_CoordinateStatusLabel->setText(coords);
} }
/// <summary> /// <summary>
@ -327,10 +328,10 @@ bool Fractorium::eventFilter(QObject* o, QEvent* e)
//Require shift for deleting to prevent it from triggering when the user enters delete in the edit box. //Require shift for deleting to prevent it from triggering when the user enters delete in the edit box.
if (ke->key() == Qt::Key_Delete && e->type() == QEvent::KeyRelease && shift) if (ke->key() == Qt::Key_Delete && e->type() == QEvent::KeyRelease && shift)
{ {
auto p = GetCurrentEmberIndex(); auto v = GetCurrentEmberIndex();
if (ui.LibraryTree->topLevelItem(0)->childCount() > 1 && p.second) if (ui.LibraryTree->topLevelItem(0)->childCount() > 1)
OnDelete(p); OnDelete(v);
} }
} }
} }

View File

@ -162,7 +162,7 @@ public slots:
//Library. //Library.
void OnEmberTreeItemChanged(QTreeWidgetItem* item, int col); void OnEmberTreeItemChanged(QTreeWidgetItem* item, int col);
void OnEmberTreeItemDoubleClicked(QTreeWidgetItem* item, int col); void OnEmberTreeItemDoubleClicked(QTreeWidgetItem* item, int col);
void OnDelete(const pair<size_t, QTreeWidgetItem*>& p); void OnDelete(const vector<pair<size_t, QTreeWidgetItem*>>& v);
void OnSequenceTreeItemChanged(QTreeWidgetItem* item, int col); void OnSequenceTreeItemChanged(QTreeWidgetItem* item, int col);
void OnSequenceStartPreviewsButtonClicked(bool checked); void OnSequenceStartPreviewsButtonClicked(bool checked);
void OnSequenceStopPreviewsButtonClicked(bool checked); void OnSequenceStopPreviewsButtonClicked(bool checked);
@ -175,6 +175,7 @@ public slots:
void OnSequenceRandomizeFramesPerRotCheckBoxStateChanged(int state); void OnSequenceRandomizeFramesPerRotCheckBoxStateChanged(int state);
void OnSequenceRandomizeRotationsCheckBoxStateChanged(int state); void OnSequenceRandomizeRotationsCheckBoxStateChanged(int state);
void OnSequenceRandomizeBlendFramesCheckBoxStateChanged(int state); void OnSequenceRandomizeBlendFramesCheckBoxStateChanged(int state);
void OnSequenceRandomizeRotationsPerBlendCheckBoxStateChanged(int state);
void OnSequenceStaggerSpinBoxChanged(double d); void OnSequenceStaggerSpinBoxChanged(double d);
void OnSequenceRandomStaggerMaxSpinBoxChanged(double d); void OnSequenceRandomStaggerMaxSpinBoxChanged(double d);
void OnSequenceStartFlameSpinBoxChanged(int d); void OnSequenceStartFlameSpinBoxChanged(int d);
@ -370,7 +371,7 @@ private:
void SyncOptionsToToolbar(); void SyncOptionsToToolbar();
//Library. //Library.
pair<size_t, QTreeWidgetItem*> GetCurrentEmberIndex(); vector<pair<size_t, QTreeWidgetItem*>> GetCurrentEmberIndex();
void SyncSequenceSettings(); void SyncSequenceSettings();
//Params. //Params.
@ -459,7 +460,7 @@ private:
DoubleSpinBox* m_XformWeightSpin; DoubleSpinBox* m_XformWeightSpin;
SpinnerButtonWidget* m_XformWeightSpinnerButtonWidget; SpinnerButtonWidget* m_XformWeightSpinnerButtonWidget;
QFormLayout* m_XformsSelectionLayout; QFormLayout* m_XformsSelectionLayout;
QVector<QCheckBox*> m_XformSelections; vector<QCheckBox*> m_XformSelections;
//Xforms Color. //Xforms Color.
QTableWidgetItem* m_XformColorValueItem; QTableWidgetItem* m_XformColorValueItem;
@ -522,13 +523,7 @@ private:
QProgressBar* m_ProgressBar; QProgressBar* m_ProgressBar;
QLabel* m_RenderStatusLabel; QLabel* m_RenderStatusLabel;
QLabel* m_CoordinateStatusLabel; QLabel* m_CoordinateStatusLabel;
FractoriumSettings* m_Settings; shared_ptr<FractoriumSettings> m_Settings;
char m_ULString[64];
char m_URString[64];
char m_LRString[64];
char m_LLString[64];
char m_WHString[64];
char m_DEString[64];
char m_CoordinateString[128]; char m_CoordinateString[128];
QColor m_XformComboColors[XFORM_COLOR_COUNT], m_FinalXformComboColor; QColor m_XformComboColors[XFORM_COLOR_COUNT], m_FinalXformComboColor;
QIcon m_XformComboIcons[XFORM_COLOR_COUNT], m_FinalXformComboIcon; QIcon m_XformComboIcons[XFORM_COLOR_COUNT], m_FinalXformComboIcon;

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,7 @@
#pragma once #pragma once
#include "FractoriumPch.h" #include "FractoriumPch.h"
#include "FractoriumSettings.h"
/// <summary> /// <summary>
/// Fractorium global utility functions. /// Fractorium global utility functions.
@ -30,6 +31,7 @@
template<typename spinType, typename valType> template<typename spinType, typename valType>
static void SetupSpinner(QTableWidget* table, const QObject* receiver, int& row, int col, spinType*& spinBox, int height, valType min, valType max, valType step, const char* signal, const char* slot, bool incRow = true, valType val = 0, valType doubleClickZero = -999, valType doubleClickNonZero = -999) static void SetupSpinner(QTableWidget* table, const QObject* receiver, int& row, int col, spinType*& spinBox, int height, valType min, valType max, valType step, const char* signal, const char* slot, bool incRow = true, valType val = 0, valType doubleClickZero = -999, valType doubleClickNonZero = -999)
{ {
auto settings = FractoriumSettings::DefInstance();
spinBox = new spinType(table, height, step); spinBox = new spinType(table, height, step);
spinBox->setRange(min, max); spinBox->setRange(min, max);
spinBox->setValue(val); spinBox->setValue(val);
@ -450,3 +452,21 @@ bool ConstrainHigh(T* low, T* high)
return false; return false;
} }
/// <summary>
/// Move all, possibly disjointly, selected items in a range to
/// a new location and update all existing locations.
/// Atribution: Sean Parent, Going Native 2013.
/// </summary>
/// <param name="f">The location of the first selected item, or the start of the collection.</param>
/// <param name="l">The location of the last selected item, or the end of the collection.</param>
/// <returns>A pair of iterators representing the start and end locations of the list of newly moved items</returns>
template <typename I, typename S>
pair<I, I> Gather(I f, I l, I p, S s)
{
return
{
stable_partition(f, p, [&](const typename iterator_traits<I>::value_type & x) { return !s(x); }),
stable_partition(p, l, s)
};
}

View File

@ -151,7 +151,10 @@ void FractoriumEmberController<T>::SetEmber(size_t index, bool verbatim)
for (int i = 0; i < top->childCount(); i++) for (int i = 0; i < top->childCount(); i++)
{ {
if (auto emberItem = dynamic_cast<EmberTreeWidgetItem<T>*>(top->child(i))) if (auto emberItem = dynamic_cast<EmberTreeWidgetItem<T>*>(top->child(i)))
{
emberItem->setSelected(i == index); emberItem->setSelected(i == index);
emberItem->setCheckState(0, i == index ? Qt::Checked : Qt::Unchecked);
}
} }
} }
@ -228,9 +231,9 @@ void FractoriumEmberController<T>::UpdateXform(std::function<void(Xform<T>*)> fu
while (auto xform = m_Ember.GetTotalXform(i)) while (auto xform = m_Ember.GetTotalXform(i))
{ {
if (auto child = m_Fractorium->m_XformsSelectionLayout->itemAt(i)) if (i < m_Fractorium->m_XformSelections.size())
{ {
if (auto w = qobject_cast<QCheckBox*>(child->widget())) if (auto w = m_Fractorium->m_XformSelections[i])
{ {
if (w->isChecked()) if (w->isChecked())
{ {
@ -257,9 +260,9 @@ void FractoriumEmberController<T>::UpdateXform(std::function<void(Xform<T>*)> fu
while (auto xform = (doFinal ? m_Ember.GetTotalXform(i) : m_Ember.GetXform(i))) while (auto xform = (doFinal ? m_Ember.GetTotalXform(i) : m_Ember.GetXform(i)))
{ {
if (auto child = m_Fractorium->m_XformsSelectionLayout->itemAt(i)) if (i < m_Fractorium->m_XformSelections.size())
{ {
if (auto w = qobject_cast<QCheckBox*>(child->widget())) if (auto w = m_Fractorium->m_XformSelections[i])
{ {
if (w->isChecked()) if (w->isChecked())
{ {

View File

@ -127,8 +127,8 @@ public:
virtual void StopLibraryPreviewRender() { } virtual void StopLibraryPreviewRender() { }
virtual void StopSequencePreviewRender() { } virtual void StopSequencePreviewRender() { }
virtual void StopAllPreviewRenderers() { } virtual void StopAllPreviewRenderers() { }
virtual void MoveLibraryItems(int startRow, int destRow) { } virtual void MoveLibraryItems(const QModelIndexList& items, int destRow) { }
virtual void Delete(const pair<size_t, QTreeWidgetItem*>& p) { } virtual void Delete(const vector<pair<size_t, QTreeWidgetItem*>>& v) { }
virtual void FillSequenceTree() { } virtual void FillSequenceTree() { }
virtual void SequenceGenerateButtonClicked() { } virtual void SequenceGenerateButtonClicked() { }
virtual void SequenceSaveButtonClicked() { } virtual void SequenceSaveButtonClicked() { }
@ -191,6 +191,8 @@ public:
virtual void RandomXformsAffine(bool pre) { } virtual void RandomXformsAffine(bool pre) { }
virtual void FillBothAffines() { } virtual void FillBothAffines() { }
double LockedScale() { return m_LockedScale; } double LockedScale() { return m_LockedScale; }
double LockedX() { return m_LockedX; }
double LockedY() { return m_LockedY; }
void LockedScale(double scale) { m_LockedScale = scale; } void LockedScale(double scale) { m_LockedScale = scale; }
virtual void LockAffineScaleCheckBoxStateChanged(int state) { } virtual void LockAffineScaleCheckBoxStateChanged(int state) { }
@ -265,6 +267,8 @@ protected:
uint m_FailedRenders = 0; uint m_FailedRenders = 0;
size_t m_UndoIndex = 0; size_t m_UndoIndex = 0;
double m_LockedScale = 1; double m_LockedScale = 1;
double m_LockedX = 0;
double m_LockedY = 0;
eRendererType m_RenderType = eRendererType::CPU_RENDERER; eRendererType m_RenderType = eRendererType::CPU_RENDERER;
eEditUndoState m_EditState; eEditUndoState m_EditState;
GLuint m_OutputTexID = 0; GLuint m_OutputTexID = 0;
@ -372,8 +376,8 @@ public:
virtual void SyncLibrary(eLibraryUpdate update) override; virtual void SyncLibrary(eLibraryUpdate update) override;
virtual void FillLibraryTree(int selectIndex = -1) override; virtual void FillLibraryTree(int selectIndex = -1) override;
virtual void UpdateLibraryTree() override; virtual void UpdateLibraryTree() override;
virtual void MoveLibraryItems(int startRow, int destRow) override; virtual void MoveLibraryItems(const QModelIndexList& items, int destRow) override;
virtual void Delete(const pair<size_t, QTreeWidgetItem*>& p) override; virtual void Delete(const vector<pair<size_t, QTreeWidgetItem*>>& v) override;
virtual void EmberTreeItemChanged(QTreeWidgetItem* item, int col) override; virtual void EmberTreeItemChanged(QTreeWidgetItem* item, int col) override;
virtual void EmberTreeItemDoubleClicked(QTreeWidgetItem* item, int col) override; virtual void EmberTreeItemDoubleClicked(QTreeWidgetItem* item, int col) override;
void RenderPreviews(QTreeWidget* tree, TreePreviewRenderer<T>* renderer, EmberFile<T>& file, uint start = UINT_MAX, uint end = UINT_MAX); void RenderPreviews(QTreeWidget* tree, TreePreviewRenderer<T>* renderer, EmberFile<T>& file, uint start = UINT_MAX, uint end = UINT_MAX);
@ -477,6 +481,10 @@ public:
virtual void ClearXaos() override; virtual void ClearXaos() override;
virtual void RandomXaos() override; virtual void RandomXaos() override;
//Xforms Selection.
bool XformCheckboxAt(int i, std::function<void(QCheckBox*)> func);
bool XformCheckboxAt(Xform<T>* xform, std::function<void(QCheckBox*)> func);
//Palette. //Palette.
virtual size_t InitPaletteList(const string& s) override; virtual size_t InitPaletteList(const string& s) override;
virtual bool FillPaletteTable(const string& s) override; virtual bool FillPaletteTable(const string& s) override;
@ -512,8 +520,6 @@ private:
//Xforms Selection. //Xforms Selection.
QString MakeXformCaption(size_t i); QString MakeXformCaption(size_t i);
bool XformCheckboxAt(int i, std::function<void(QCheckBox*)> func);
bool XformCheckboxAt(Xform<T>* xform, std::function<void(QCheckBox*)> func);
//Palette. //Palette.
void UpdateAdjustedPaletteGUI(Palette<T>& palette); void UpdateAdjustedPaletteGUI(Palette<T>& palette);

View File

@ -183,25 +183,28 @@ void Fractorium::FillSummary()
/// </summary> /// </summary>
void Fractorium::UpdateHistogramBounds() void Fractorium::UpdateHistogramBounds()
{ {
if (RendererBase* r = m_Controller->Renderer()) static QString ul, ur, lr, ll, wh, g, de;
if (auto r = m_Controller->Renderer())
{ {
sprintf_s(m_ULString, sizeof(m_ULString), "UL: %3.3f, %3.3f", r->LowerLeftX(), r->UpperRightY());//These bounds include gutter padding. ul.sprintf("UL: %3.3f, %3.3f", r->LowerLeftX(), r->UpperRightY());//These bounds include gutter padding.
sprintf_s(m_URString, sizeof(m_URString), "UR: %3.3f, %3.3f", -r->LowerLeftX(), r->UpperRightY()); ur.sprintf("UR: %3.3f, %3.3f", -r->LowerLeftX(), r->UpperRightY());
sprintf_s(m_LRString, sizeof(m_LRString), "LR: %3.3f, %3.3f", -r->LowerLeftX(), r->LowerLeftY()); lr.sprintf("LR: %3.3f, %3.3f", -r->LowerLeftX(), r->LowerLeftY());
sprintf_s(m_LLString, sizeof(m_LLString), "LL: %3.3f, %3.3f", r->LowerLeftX(), r->LowerLeftY()); ll.sprintf("LL: %3.3f, %3.3f", r->LowerLeftX(), r->LowerLeftY());
sprintf_s(m_WHString, sizeof(m_WHString), "W x H: %4lu x %4lu", r->SuperRasW(), r->SuperRasH()); wh.sprintf("W x H: %4u x %4u", r->SuperRasW(), r->SuperRasH());
ui.InfoBoundsLabelUL->setText(QString(m_ULString)); g.sprintf("%u", (uint)r->GutterWidth());
ui.InfoBoundsLabelUR->setText(QString(m_URString)); ui.InfoBoundsLabelUL->setText(ul);
ui.InfoBoundsLabelLR->setText(QString(m_LRString)); ui.InfoBoundsLabelUR->setText(ur);
ui.InfoBoundsLabelLL->setText(QString(m_LLString)); ui.InfoBoundsLabelLR->setText(lr);
ui.InfoBoundsLabelWH->setText(QString(m_WHString)); ui.InfoBoundsLabelLL->setText(ll);
ui.InfoBoundsTable->item(0, 1)->setText(ToString<qulonglong>(r->GutterWidth())); ui.InfoBoundsLabelWH->setText(wh);
ui.InfoBoundsTable->item(0, 1)->setText(g);
if (r->GetDensityFilter()) if (r->GetDensityFilter())
{ {
uint deWidth = (r->GetDensityFilter()->FilterWidth() * 2) + 1; auto deWidth = (r->GetDensityFilter()->FilterWidth() * 2) + 1;
sprintf_s(m_DEString, sizeof(m_DEString), "%d x %d", deWidth, deWidth); de.sprintf("%d x %d", deWidth, deWidth);
ui.InfoBoundsTable->item(1, 1)->setText(QString(m_DEString)); ui.InfoBoundsTable->item(1, 1)->setText(de);
} }
else else
ui.InfoBoundsTable->item(1, 1)->setText("N/A"); ui.InfoBoundsTable->item(1, 1)->setText("N/A");

View File

@ -30,6 +30,7 @@ void Fractorium::InitLibraryUI()
connect(ui.SequenceRandomizeFramesPerRotCheckBox, SIGNAL(stateChanged(int)), this, SLOT(OnSequenceRandomizeFramesPerRotCheckBoxStateChanged(int)), Qt::QueuedConnection); connect(ui.SequenceRandomizeFramesPerRotCheckBox, SIGNAL(stateChanged(int)), this, SLOT(OnSequenceRandomizeFramesPerRotCheckBoxStateChanged(int)), Qt::QueuedConnection);
connect(ui.SequenceRandomizeRotationsCheckBox, SIGNAL(stateChanged(int)), this, SLOT(OnSequenceRandomizeRotationsCheckBoxStateChanged(int)), Qt::QueuedConnection); connect(ui.SequenceRandomizeRotationsCheckBox, SIGNAL(stateChanged(int)), this, SLOT(OnSequenceRandomizeRotationsCheckBoxStateChanged(int)), Qt::QueuedConnection);
connect(ui.SequenceRandomizeBlendFramesCheckBox, SIGNAL(stateChanged(int)), this, SLOT(OnSequenceRandomizeBlendFramesCheckBoxStateChanged(int)), Qt::QueuedConnection); connect(ui.SequenceRandomizeBlendFramesCheckBox, SIGNAL(stateChanged(int)), this, SLOT(OnSequenceRandomizeBlendFramesCheckBoxStateChanged(int)), Qt::QueuedConnection);
connect(ui.SequenceRandomizeRotationsPerBlendCheckBox, SIGNAL(stateChanged(int)), this, SLOT(OnSequenceRandomizeRotationsPerBlendCheckBoxStateChanged(int)), Qt::QueuedConnection);
connect(ui.SequenceStaggerSpinBox, SIGNAL(valueChanged(double)), this, SLOT(OnSequenceStaggerSpinBoxChanged(double)), Qt::QueuedConnection); connect(ui.SequenceStaggerSpinBox, SIGNAL(valueChanged(double)), this, SLOT(OnSequenceStaggerSpinBoxChanged(double)), Qt::QueuedConnection);
connect(ui.SequenceRandomStaggerMaxSpinBox, SIGNAL(valueChanged(double)), this, SLOT(OnSequenceRandomStaggerMaxSpinBoxChanged(double)), Qt::QueuedConnection); connect(ui.SequenceRandomStaggerMaxSpinBox, SIGNAL(valueChanged(double)), this, SLOT(OnSequenceRandomStaggerMaxSpinBoxChanged(double)), Qt::QueuedConnection);
connect(ui.SequenceStartFlameSpinBox, SIGNAL(valueChanged(int)), this, SLOT(OnSequenceStartFlameSpinBoxChanged(int)), Qt::QueuedConnection); connect(ui.SequenceStartFlameSpinBox, SIGNAL(valueChanged(int)), this, SLOT(OnSequenceStartFlameSpinBoxChanged(int)), Qt::QueuedConnection);
@ -46,11 +47,12 @@ void Fractorium::InitLibraryUI()
/// Get the index of the currently selected ember in the library tree. /// Get the index of the currently selected ember in the library tree.
/// </summary> /// </summary>
/// <returns>A pair containing the index of the item clicked and a pointer to the item</param> /// <returns>A pair containing the index of the item clicked and a pointer to the item</param>
pair<size_t, QTreeWidgetItem*> Fractorium::GetCurrentEmberIndex() vector<pair<size_t, QTreeWidgetItem*>> Fractorium::GetCurrentEmberIndex()
{ {
int index = 0; int index = 0;
QTreeWidgetItem* item = nullptr; QTreeWidgetItem* item = nullptr;
auto tree = ui.LibraryTree; auto tree = ui.LibraryTree;
vector<pair<size_t, QTreeWidgetItem*>> v;
if (auto top = tree->topLevelItem(0)) if (auto top = tree->topLevelItem(0))
{ {
@ -58,14 +60,14 @@ pair<size_t, QTreeWidgetItem*> Fractorium::GetCurrentEmberIndex()
{ {
item = top->child(index); item = top->child(index);
if (item && !item->isSelected()) if (item && item->isSelected())
v.push_back(make_pair(index, item));
index++; index++;
else
break;
} }
} }
return make_pair(index, item); return v;
} }
/// <summary> /// <summary>
@ -218,6 +220,9 @@ void FractoriumEmberController<T>::EmberTreeItemChanged(QTreeWidgetItem* item, i
if (auto emberItem = dynamic_cast<EmberTreeWidgetItem<T>*>(item)) if (auto emberItem = dynamic_cast<EmberTreeWidgetItem<T>*>(item))
{ {
if (!emberItem->isSelected())//Checking/unchecking other items shouldn't perform the processing below.
return;
if (emberItem->text(0).isEmpty())//Prevent empty string. if (emberItem->text(0).isEmpty())//Prevent empty string.
{ {
emberItem->UpdateEditText(); emberItem->UpdateEditText();
@ -225,11 +230,16 @@ void FractoriumEmberController<T>::EmberTreeItemChanged(QTreeWidgetItem* item, i
} }
string oldName = emberItem->GetEmber()->m_Name;//First preserve the previous name. string oldName = emberItem->GetEmber()->m_Name;//First preserve the previous name.
string newName = emberItem->text(0).toStdString();
if (oldName == newName)//If nothing changed, nothing to do.
return;
tree->blockSignals(true); tree->blockSignals(true);
emberItem->UpdateEmberName();//Copy edit text to the ember's name variable. emberItem->UpdateEmberName();//Copy edit text to the ember's name variable.
m_EmberFile.MakeNamesUnique();//Ensure all names remain unique. m_EmberFile.MakeNamesUnique();//Ensure all names remain unique.
SyncLibrary(eLibraryUpdate::NAME);//Copy all ember names to the tree items since some might have changed to be made unique. SyncLibrary(eLibraryUpdate::NAME);//Copy all ember names to the tree items since some might have changed to be made unique.
string newName = emberItem->GetEmber()->m_Name;//Get the new, final, unique name. newName = emberItem->GetEmber()->m_Name;//Get the new, final, unique name.
if (m_EmberFilePointer == emberItem->GetEmber() && oldName != newName)//If the ember edited was the current one, and the name was indeed changed, update the name of the current one. if (m_EmberFilePointer == emberItem->GetEmber() && oldName != newName)//If the ember edited was the current one, and the name was indeed changed, update the name of the current one.
{ {
@ -263,20 +273,15 @@ void Fractorium::OnEmberTreeItemChanged(QTreeWidgetItem* item, int col) { m_Cont
/// Clears the undo state. /// Clears the undo state.
/// Resets the rendering process. /// Resets the rendering process.
/// Called when the user double clicks on a library tree item. /// Called when the user double clicks on a library tree item.
/// This will get called twice for some reason, and there's no way to prevent it. /// This will get called twice for some reason, so the check state is checked to prevent duplicate processing.
/// Doesn't seem to cause any problems.
/// </summary> /// </summary>
/// <param name="item">The item double clicked on</param> /// <param name="item">The item double clicked on</param>
/// <param name="col">The column clicked, ignored.</param> /// <param name="col">The column clicked</param>
template <typename T> template <typename T>
void FractoriumEmberController<T>::EmberTreeItemDoubleClicked(QTreeWidgetItem* item, int col) void FractoriumEmberController<T>::EmberTreeItemDoubleClicked(QTreeWidgetItem* item, int col)
{ {
if (auto emberItem = dynamic_cast<EmberTreeWidgetItem<T>*>(item)) if (item->checkState(col) == Qt::Unchecked)
{ SetEmber(m_Fractorium->ui.LibraryTree->currentIndex().row(), false);
//qDebug() << "Setting current ember to: " << QString::fromStdString(emberItem->GetEmber()->m_Name);
ClearUndo();
SetEmber(*emberItem->GetEmber(), false, true);
}
} }
void Fractorium::OnEmberTreeItemDoubleClicked(QTreeWidgetItem* item, int col) { m_Controller->EmberTreeItemDoubleClicked(item, col); } void Fractorium::OnEmberTreeItemDoubleClicked(QTreeWidgetItem* item, int col) { m_Controller->EmberTreeItemDoubleClicked(item, col); }
@ -287,34 +292,58 @@ void Fractorium::OnEmberTreeItemDoubleClicked(QTreeWidgetItem* item, int col) {
/// <param name="startRow">The index of the source item to move</param> /// <param name="startRow">The index of the source item to move</param>
/// <param name="destRow">The destination index to move the item to</param> /// <param name="destRow">The destination index to move the item to</param>
template <typename T> template <typename T>
void FractoriumEmberController<T>::MoveLibraryItems(int startRow, int destRow) void FractoriumEmberController<T>::MoveLibraryItems(const QModelIndexList& items, int destRow)
{ {
int i = 0; int i = 0;
auto startRow = items[0].row();
auto tree = m_Fractorium->ui.LibraryTree; auto tree = m_Fractorium->ui.LibraryTree;
auto top = tree->topLevelItem(0); auto top = tree->topLevelItem(0);
list<QString> names;
for (auto& item : items)
if (auto temp = m_EmberFile.Get(item.row()))
names.push_back(QString::fromStdString(temp->m_Name));
auto b = m_EmberFile.m_Embers.begin(); auto b = m_EmberFile.m_Embers.begin();
auto s = Advance(b, startRow); auto result = Gather(b, m_EmberFile.m_Embers.end(), Advance(b, destRow), [&](const Ember<T>& ember)
auto d = Advance(b, destRow); {
m_EmberFile.m_Embers.splice(d, m_EmberFile.m_Embers, s); auto qname = QString::fromStdString(ember.m_Name);
SyncLibrary(eLibraryUpdate::INDEX);//Only indices need syncing. auto position = std::find(names.begin(), names.end(), qname);
if (position != names.end())
{
names.erase(position);
return true;
}
return false;
});
SyncLibrary(eLibraryUpdate(eLibraryUpdate::INDEX | eLibraryUpdate::POINTER));
} }
/// <summary> /// <summary>
/// Delete the currently selected item in the tree. /// Delete the currently selected items in the tree.
/// Note this is not necessarilly the current ember, it's just the item /// Note this is not necessarilly the current ember, it's just the items
/// in the tree that is selected. /// in the tree that are selected.
/// </summary> /// </summary>
/// <param name="p">A pair containing the index of the item clicked and a pointer to the item</param> /// <param name="v">A vector of pairs, each containing the index of the item selected and a pointer to the item</param>
template <typename T> template <typename T>
void FractoriumEmberController<T>::Delete(const pair<size_t, QTreeWidgetItem*>& p) void FractoriumEmberController<T>::Delete(const vector<pair<size_t, QTreeWidgetItem*>>& v)
{ {
if (m_EmberFile.Delete(p.first)) size_t offset = 0;
for (auto& p : v)
{
if (p.second && m_EmberFile.Delete(p.first - offset))
{ {
delete p.second; delete p.second;
SyncLibrary(eLibraryUpdate::INDEX); SyncLibrary(eLibraryUpdate::INDEX);
m_Fractorium->SyncFileCountToSequenceCount(); m_Fractorium->SyncFileCountToSequenceCount();
} }
offset++;
}
//If there is now only one item left and it wasn't selected, select it. //If there is now only one item left and it wasn't selected, select it.
if (auto top = m_Fractorium->ui.LibraryTree->topLevelItem(0)) if (auto top = m_Fractorium->ui.LibraryTree->topLevelItem(0))
if (top->childCount() == 1) if (top->childCount() == 1)
@ -327,10 +356,10 @@ void FractoriumEmberController<T>::Delete(const pair<size_t, QTreeWidgetItem*>&
/// Called when the user presses and releases the delete key while the library tree has the focus, /// Called when the user presses and releases the delete key while the library tree has the focus,
/// and an item is selected. /// and an item is selected.
/// </summary> /// </summary>
/// <param name="p">A pair containing the index of the item clicked and a pointer to the item</param> /// <param name="v">A vector of pairs, each containing the index of the item selected and a pointer to the item</param>
void Fractorium::OnDelete(const pair<size_t, QTreeWidgetItem*>& p) void Fractorium::OnDelete(const vector<pair<size_t, QTreeWidgetItem*>>& v)
{ {
m_Controller->Delete(p); m_Controller->Delete(v);
} }
/// <summary> /// <summary>
@ -506,18 +535,30 @@ void FractoriumEmberController<T>::SequenceGenerateButtonClicked()
Ember<T> result; Ember<T> result;
auto& ui = m_Fractorium->ui; auto& ui = m_Fractorium->ui;
auto s = m_Fractorium->m_Settings; auto s = m_Fractorium->m_Settings;
//Bools for determining whether to use hard coded vs. random values.
bool randStagger = ui.SequenceRandomizeStaggerCheckBox->isChecked(); bool randStagger = ui.SequenceRandomizeStaggerCheckBox->isChecked();
bool randFramesRot = ui.SequenceRandomizeFramesPerRotCheckBox->isChecked(); bool randFramesRot = ui.SequenceRandomizeFramesPerRotCheckBox->isChecked();
bool randRot = ui.SequenceRandomizeRotationsCheckBox->isChecked(); bool randRot = ui.SequenceRandomizeRotationsCheckBox->isChecked();
bool randBlend = ui.SequenceRandomizeBlendFramesCheckBox->isChecked(); bool randBlend = ui.SequenceRandomizeBlendFramesCheckBox->isChecked();
bool randBlendRot = ui.SequenceRandomizeRotationsPerBlendCheckBox->isChecked();
//The direction to rotate the loops.
bool loopsCw = ui.SequenceRotationsCWCheckBox->isChecked();
bool loopsBlendCw = ui.SequenceRotationsPerBlendCWCheckBox->isChecked();
//Whether to stagger, default is 1 which means no stagger.
double stagger = ui.SequenceStaggerSpinBox->value(); double stagger = ui.SequenceStaggerSpinBox->value();
double staggerMax = ui.SequenceRandomStaggerMaxSpinBox->value(); double staggerMax = ui.SequenceRandomStaggerMaxSpinBox->value();
//Rotations on keyframes.
double rots = ui.SequenceRotationsSpinBox->value(); double rots = ui.SequenceRotationsSpinBox->value();
double rotsMax = ui.SequenceRandomRotationsMaxSpinBox->value(); double rotsMax = ui.SequenceRandomRotationsMaxSpinBox->value();
//Number of frames it takes to rotate a keyframe.
int framesPerRot = ui.SequenceFramesPerRotSpinBox->value(); int framesPerRot = ui.SequenceFramesPerRotSpinBox->value();
int framesPerRotMax = ui.SequenceRandomFramesPerRotMaxSpinBox->value(); int framesPerRotMax = ui.SequenceRandomFramesPerRotMaxSpinBox->value();
//Number of frames it takes to interpolate.
int framesBlend = ui.SequenceBlendFramesSpinBox->value(); int framesBlend = ui.SequenceBlendFramesSpinBox->value();
int framesBlendMax = ui.SequenceRandomBlendMaxFramesSpinBox->value(); int framesBlendMax = ui.SequenceRandomBlendMaxFramesSpinBox->value();
//Number of rotations performed during interpolation.
int rotsPerBlend = ui.SequenceRotationsPerBlendSpinBox->value();
int rotsPerBlendMax = ui.SequenceRotationsPerBlendMaxSpinBox->value();
size_t start = ui.SequenceStartFlameSpinBox->value(); size_t start = ui.SequenceStartFlameSpinBox->value();
size_t stop = ui.SequenceStopFlameSpinBox->value(); size_t stop = ui.SequenceStopFlameSpinBox->value();
size_t startCount = ui.SequenceStartCountSpinBox->value(); size_t startCount = ui.SequenceStartCountSpinBox->value();
@ -533,6 +574,24 @@ void FractoriumEmberController<T>::SequenceGenerateButtonClicked()
#else #else
"~/.config/fractorium"; "~/.config/fractorium";
#endif #endif
if (!randRot && !randBlend)
{
if ((!rots || !framesPerRot) && !framesBlend)
{
QMessageBox::critical(m_Fractorium, "Animation sequence parameters error",
"Rotations and Frames per rot, or blend frames must be positive and non-zero");
return;
}
if (framesPerRot > 1 && !rots)//Because framesPerRot control has a min value of 1, check greater than 1. Also don't need to check the inverse like in EmberGenome.
{
QMessageBox::critical(m_Fractorium, "Animation sequence parameters error",
"Frames per rot cannot be positive while Rotations is zero");
return;
}
}
SheepTools<T, float> tools(palettePath, EmberCommon::CreateRenderer<T>(eRendererType::CPU_RENDERER, devices, false, 0, emberReport)); SheepTools<T, float> tools(palettePath, EmberCommon::CreateRenderer<T>(eRendererType::CPU_RENDERER, devices, false, 0, emberReport));
tools.SetSpinParams(true, tools.SetSpinParams(true,
stagger,//Will be set again below if random is used. stagger,//Will be set again below if random is used.
@ -584,7 +643,7 @@ void FractoriumEmberController<T>::SequenceGenerateButtonClicked()
for (frame = 0; frame < roundFrames; frame++) for (frame = 0; frame < roundFrames; frame++)
{ {
blend = frame / rotFrames; blend = frame / rotFrames;
tools.Spin(embers[0], nullptr, result, startCount + frameCount++, blend);//Result is cleared and reassigned each time inside of Spin(). tools.Spin(embers[0], nullptr, result, startCount + frameCount++, blend, loopsCw);//Result is cleared and reassigned each time inside of Spin().
FormatName(result, os, padding); FormatName(result, os, padding);
m_SequenceFile.m_Embers.push_back(result); m_SequenceFile.m_Embers.push_back(result);
} }
@ -594,7 +653,7 @@ void FractoriumEmberController<T>::SequenceGenerateButtonClicked()
//result will be the starting point for the interp phase below. //result will be the starting point for the interp phase below.
frame = roundFrames; frame = roundFrames;
blend = frame / rotFrames; blend = frame / rotFrames;
tools.Spin(embers[0], nullptr, result, startCount + frameCount, blend);//Do not increment frameCount here. tools.Spin(embers[0], nullptr, result, startCount + frameCount, blend, loopsCw);//Do not increment frameCount here.
FormatName(result, os, padding); FormatName(result, os, padding);
} }
@ -606,6 +665,8 @@ void FractoriumEmberController<T>::SequenceGenerateButtonClicked()
auto it2 = it;//Need a quick temporary to avoid modifying it which is used in the loop. auto it2 = it;//Need a quick temporary to avoid modifying it which is used in the loop.
embers[1] = *(++it2);//Get the next ember to be used with blending below. embers[1] = *(++it2);//Get the next ember to be used with blending below.
size_t blendFrames = randBlend ? m_Rand.Frand<double>(framesBlend, framesBlendMax) : framesBlend; size_t blendFrames = randBlend ? m_Rand.Frand<double>(framesBlend, framesBlendMax) : framesBlend;
double d = randBlendRot ? m_Rand.Frand<double>(rotsPerBlend, rotsPerBlendMax) : double(rotsPerBlend);
size_t rpb = size_t(std::round(d));
if (randStagger) if (randStagger)
tools.Stagger(m_Rand.Frand<double>(stagger, staggerMax)); tools.Stagger(m_Rand.Frand<double>(stagger, staggerMax));
@ -615,7 +676,7 @@ void FractoriumEmberController<T>::SequenceGenerateButtonClicked()
bool seqFlag = frame == 0 || (frame == blendFrames - 1); bool seqFlag = frame == 0 || (frame == blendFrames - 1);
blend = frame / double(blendFrames); blend = frame / double(blendFrames);
result.Clear(); result.Clear();
tools.SpinInter(&embers[0], nullptr, result, startCount + frameCount++, seqFlag, blend); tools.SpinInter(&embers[0], nullptr, result, startCount + frameCount++, seqFlag, blend, rpb, loopsBlendCw);
FormatName(result, os, padding); FormatName(result, os, padding);
m_SequenceFile.m_Embers.push_back(result); m_SequenceFile.m_Embers.push_back(result);
} }
@ -623,7 +684,7 @@ void FractoriumEmberController<T>::SequenceGenerateButtonClicked()
} }
it = Advance(m_EmberFile.m_Embers.begin(), stop); it = Advance(m_EmberFile.m_Embers.begin(), stop);
tools.Spin(*it, nullptr, result, startCount + frameCount, 0); tools.Spin(*it, nullptr, result, startCount + frameCount, 0, loopsBlendCw);
FormatName(result, os, padding); FormatName(result, os, padding);
m_SequenceFile.m_Embers.push_back(result); m_SequenceFile.m_Embers.push_back(result);
FillSequenceTree();//The sequence has been generated, now create preview thumbnails. FillSequenceTree();//The sequence has been generated, now create preview thumbnails.
@ -730,6 +791,7 @@ void Fractorium::OnSequenceRandomizeStaggerCheckBoxStateChanged(int state) { ui.
void Fractorium::OnSequenceRandomizeFramesPerRotCheckBoxStateChanged(int state) { ui.SequenceRandomFramesPerRotMaxSpinBox->setEnabled(state); } void Fractorium::OnSequenceRandomizeFramesPerRotCheckBoxStateChanged(int state) { ui.SequenceRandomFramesPerRotMaxSpinBox->setEnabled(state); }
void Fractorium::OnSequenceRandomizeRotationsCheckBoxStateChanged(int state) { ui.SequenceRandomRotationsMaxSpinBox->setEnabled(state); } void Fractorium::OnSequenceRandomizeRotationsCheckBoxStateChanged(int state) { ui.SequenceRandomRotationsMaxSpinBox->setEnabled(state); }
void Fractorium::OnSequenceRandomizeBlendFramesCheckBoxStateChanged(int state) { ui.SequenceRandomBlendMaxFramesSpinBox->setEnabled(state); } void Fractorium::OnSequenceRandomizeBlendFramesCheckBoxStateChanged(int state) { ui.SequenceRandomBlendMaxFramesSpinBox->setEnabled(state); }
void Fractorium::OnSequenceRandomizeRotationsPerBlendCheckBoxStateChanged(int state) { ui.SequenceRotationsPerBlendMaxSpinBox->setEnabled(state); }
/// <summary> /// <summary>
/// Constrain all min/max spinboxes. /// Constrain all min/max spinboxes.

View File

@ -642,6 +642,8 @@ bool Fractorium::CreateRendererFromOptions()
//If using OpenCL, will only get here if creating RendererCL failed, but creating a backup CPU Renderer succeeded. //If using OpenCL, will only get here if creating RendererCL failed, but creating a backup CPU Renderer succeeded.
ShowCritical("Renderer Creation Error", "Error creating renderer, most likely a GPU problem. Using CPU instead."); ShowCritical("Renderer Creation Error", "Error creating renderer, most likely a GPU problem. Using CPU instead.");
m_Settings->OpenCL(false); m_Settings->OpenCL(false);
ui.ActionCpu->setChecked(true);
ui.ActionCL->setChecked(false);
m_OptionsDialog->ui.OpenCLCheckBox->setChecked(false); m_OptionsDialog->ui.OpenCLCheckBox->setChecked(false);
m_FinalRenderDialog->ui.FinalRenderOpenCLCheckBox->setChecked(false); m_FinalRenderDialog->ui.FinalRenderOpenCLCheckBox->setChecked(false);
ok = false; ok = false;
@ -674,11 +676,9 @@ bool Fractorium::CreateControllerFromOptions()
double scale; double scale;
uint current = 0; uint current = 0;
#ifdef DO_DOUBLE #ifdef DO_DOUBLE
Ember<double> ed;
EmberFile<double> efd; EmberFile<double> efd;
Palette<double> tempPalette; Palette<double> tempPalette;
#else #else
Ember<float> ed;
EmberFile<float> efd; EmberFile<float> efd;
Palette<float> tempPalette; Palette<float> tempPalette;
#endif #endif
@ -689,16 +689,13 @@ bool Fractorium::CreateControllerFromOptions()
{ {
scale = m_Controller->LockedScale(); scale = m_Controller->LockedScale();
m_Controller->StopAllPreviewRenderers();//Must stop any previews first, else changing controllers will crash the program and SaveCurrentToOpenedFile() will return 0. m_Controller->StopAllPreviewRenderers();//Must stop any previews first, else changing controllers will crash the program and SaveCurrentToOpenedFile() will return 0.
current = m_Controller->SaveCurrentToOpenedFile(false);
m_Controller->CopyTempPalette(tempPalette);//Convert float to double or save double verbatim; m_Controller->CopyTempPalette(tempPalette);//Convert float to double or save double verbatim;
current = m_Controller->SaveCurrentToOpenedFile(false);
//Replace below with this once LLVM fixes a crash in their compiler with default lambda parameters.//TODO //Replace below with this once LLVM fixes a crash in their compiler with default lambda parameters.//TODO
//m_Controller->CopyEmber(ed);
//m_Controller->CopyEmberFile(efd); //m_Controller->CopyEmberFile(efd);
#ifdef DO_DOUBLE #ifdef DO_DOUBLE
m_Controller->CopyEmber(ed, [&](Ember<double>& ember) { });
m_Controller->CopyEmberFile(efd, false, [&](Ember<double>& ember) { }); m_Controller->CopyEmberFile(efd, false, [&](Ember<double>& ember) { });
#else #else
m_Controller->CopyEmber(ed, [&](Ember<float>& ember) { });
m_Controller->CopyEmberFile(efd, false, [&](Ember<float>& ember) { }); m_Controller->CopyEmberFile(efd, false, [&](Ember<float>& ember) { });
#endif #endif
m_Controller->Shutdown(); m_Controller->Shutdown();
@ -715,7 +712,9 @@ bool Fractorium::CreateControllerFromOptions()
//Restore the ember and ember file. //Restore the ember and ember file.
if (m_Controller.get()) if (m_Controller.get())
{ {
ed.m_Palette = tempPalette;//Restore base temp palette. Adjustments will be then be applied and stored back in in m_Ember.m_Palette below. if (auto prev = efd.Get(current))//Restore base temp palette. Adjustments will be then be applied and stored back in in m_Ember.m_Palette below.
prev->m_Palette = tempPalette;
m_Controller->SetEmberFile(efd, true); m_Controller->SetEmberFile(efd, true);
m_Controller->SetEmber(current, true); m_Controller->SetEmber(current, true);
m_Controller->LockedScale(scale); m_Controller->LockedScale(scale);

View File

@ -5,12 +5,11 @@
/// Constructor that passes the parent to the base and sets up reasonable defaults /// Constructor that passes the parent to the base and sets up reasonable defaults
/// if the settings file was not present or corrupted. /// if the settings file was not present or corrupted.
/// </summary> /// </summary>
/// <param name="p">The parent widget</param> FractoriumSettings::FractoriumSettings()
FractoriumSettings::FractoriumSettings(QObject* p)
#ifdef _WIN32 #ifdef _WIN32
: QSettings(QSettings::IniFormat, QSettings::UserScope, "Fractorium", "Fractorium", p) : QSettings(QSettings::IniFormat, QSettings::UserScope, "Fractorium", "Fractorium", nullptr)
#else #else
: QSettings(QSettings::IniFormat, QSettings::UserScope, "fractorium", "fractorium", p) : QSettings(QSettings::IniFormat, QSettings::UserScope, "fractorium", "fractorium", nullptr)
#endif #endif
{ {
EnsureDefaults(); EnsureDefaults();
@ -110,6 +109,9 @@ void FractoriumSettings::Double(bool b) { setValue(DOUBLEPRECISION, b);
bool FractoriumSettings::ShowAllXforms() { return value(SHOWALLXFORMS).toBool(); } bool FractoriumSettings::ShowAllXforms() { return value(SHOWALLXFORMS).toBool(); }
void FractoriumSettings::ShowAllXforms(bool b) { setValue(SHOWALLXFORMS, b); } void FractoriumSettings::ShowAllXforms(bool b) { setValue(SHOWALLXFORMS, b); }
bool FractoriumSettings::ToggleType() { return value(TOGGLETYPE).toBool(); }
void FractoriumSettings::ToggleType(bool b) { setValue(TOGGLETYPE, b); }
bool FractoriumSettings::ContinuousUpdate() { return value(CONTUPDATE).toBool(); } bool FractoriumSettings::ContinuousUpdate() { return value(CONTUPDATE).toBool(); }
void FractoriumSettings::ContinuousUpdate(bool b) { setValue(CONTUPDATE, b); } void FractoriumSettings::ContinuousUpdate(bool b) { setValue(CONTUPDATE, b); }

View File

@ -13,6 +13,7 @@
#define DOUBLEPRECISION "render/dp64" #define DOUBLEPRECISION "render/dp64"
#define CONTUPDATE "render/continuousupdate" #define CONTUPDATE "render/continuousupdate"
#define SHOWALLXFORMS "render/dragshowallxforms" #define SHOWALLXFORMS "render/dragshowallxforms"
#define TOGGLETYPE "render/toggletype"
#define DEVICES "render/devices" #define DEVICES "render/devices"
#define THREADCOUNT "render/threadcount" #define THREADCOUNT "render/threadcount"
#define CPUDEFILTER "render/cpudefilter" #define CPUDEFILTER "render/cpudefilter"
@ -86,11 +87,11 @@
/// runs of Fractorium. Each of these generally corresponds /// runs of Fractorium. Each of these generally corresponds
/// to items in the options dialog and the final render dialog. /// to items in the options dialog and the final render dialog.
/// </summary> /// </summary>
class FractoriumSettings : public QSettings class FractoriumSettings : public QSettings, public Singleton<FractoriumSettings>
{ {
Q_OBJECT Q_OBJECT
public: public:
FractoriumSettings(QObject* p); SINGLETON_DERIVED_IMPL(FractoriumSettings);
void EnsureDefaults(); void EnsureDefaults();
bool EarlyClip(); bool EarlyClip();
@ -111,6 +112,9 @@ public:
bool ShowAllXforms(); bool ShowAllXforms();
void ShowAllXforms(bool b); void ShowAllXforms(bool b);
bool ToggleType();
void ToggleType(bool b);
bool ContinuousUpdate(); bool ContinuousUpdate();
void ContinuousUpdate(bool b); void ContinuousUpdate(bool b);
@ -281,4 +285,7 @@ public:
QString Theme(); QString Theme();
void Theme(const QString& s); void Theme(const QString& s);
private:
FractoriumSettings();
}; };

View File

@ -228,7 +228,7 @@ void FractoriumEmberController<T>::DeleteXforms()
checked++; checked++;
//Do not allow deleting the only remaining non-final xform. //Do not allow deleting the only remaining non-final xform.
if (haveFinal && count <= 2 && i == 0) if (haveFinal && count <= 2 && !(i - offset))
return; return;
if (!haveFinal && count == 1) if (!haveFinal && count == 1)
@ -354,10 +354,24 @@ void Fractorium::OnXformNameChanged(int row, int col) { m_Controller->XformNameC
template <typename T> template <typename T>
void FractoriumEmberController<T>::XformAnimateChanged(int state) void FractoriumEmberController<T>::XformAnimateChanged(int state)
{ {
UpdateXform([&](Xform<T>* xform) bool final = IsFinal(CurrentXform());
auto index = m_Fractorium->ui.CurrentXformCombo->currentIndex();
UpdateAll([&](Ember<T>& ember)
{ {
if (final)//If the current xform was final, only apply to other embers which also have a final xform.
{
if (ember.UseFinalXform())
{
auto xform = ember.NonConstFinalXform();
xform->m_Animate = state > 0 ? 1 : 0; xform->m_Animate = state > 0 ? 1 : 0;
}, eXformUpdate::UPDATE_SELECTED, false); }
}
else//Current was not final, so apply to other embers which have a non-final xform at this index.
{
if (auto xform = ember.GetXform(index))
xform->m_Animate = state > 0 ? 1 : 0;
}
}, false, eProcessAction::NOTHING, m_Fractorium->ApplyAll());
} }
void Fractorium::OnXformAnimateCheckBoxStateChanged(int state) { m_Controller->XformAnimateChanged(state); } void Fractorium::OnXformAnimateCheckBoxStateChanged(int state) { m_Controller->XformAnimateChanged(state); }

View File

@ -163,6 +163,8 @@ template <typename T>
void FractoriumEmberController<T>::LockAffineScaleCheckBoxStateChanged(int state) void FractoriumEmberController<T>::LockAffineScaleCheckBoxStateChanged(int state)
{ {
m_LockedScale = m_Ember.m_PixelsPerUnit; m_LockedScale = m_Ember.m_PixelsPerUnit;
m_LockedX = m_Ember.m_CenterX;
m_LockedY = m_Ember.m_CenterY;
m_Fractorium->ui.GLDisplay->update(); m_Fractorium->ui.GLDisplay->update();
} }

View File

@ -8,6 +8,9 @@ void Fractorium::InitXformsColorUI()
{ {
int spinHeight = 20, row = 0; int spinHeight = 20, row = 0;
m_XformColorValueItem = new QTableWidgetItem(); m_XformColorValueItem = new QTableWidgetItem();
//Can't set this in the designer, so do it here.
m_XformColorValueItem->setToolTip("The index in the palette the current xform uses.\r\n\r\n"
"This value can be changed by scrolling the mouse wheel in the box displaying the value or by dragging the scroll bar.");
ui.XformColorIndexTable->setItem(0, 0, m_XformColorValueItem); ui.XformColorIndexTable->setItem(0, 0, m_XformColorValueItem);
m_PaletteRefItem = new QTableWidgetItem(); m_PaletteRefItem = new QTableWidgetItem();
ui.XformPaletteRefTable->setItem(0, 0, m_PaletteRefItem); ui.XformPaletteRefTable->setItem(0, 0, m_PaletteRefItem);

View File

@ -31,8 +31,8 @@ void Fractorium::OnXformsSelectNoneButtonClicked(bool checked) { ForEachXformChe
/// <param name="checked">True if checked, else false.</param> /// <param name="checked">True if checked, else false.</param>
bool Fractorium::IsXformSelected(size_t i) bool Fractorium::IsXformSelected(size_t i)
{ {
if (auto child = m_XformsSelectionLayout->itemAt(int(i))) if (i < m_XformSelections.size())
if (auto w = qobject_cast<QCheckBox*>(child->widget())) if (auto w = m_XformSelections[i])
return w->isChecked(); return w->isChecked();
return false; return false;
@ -70,7 +70,7 @@ QString FractoriumEmberController<T>::MakeXformCaption(size_t i)
bool isFinal = m_Ember.FinalXform() == m_Ember.GetTotalXform(i); bool isFinal = m_Ember.FinalXform() == m_Ember.GetTotalXform(i);
QString caption = isFinal ? "Final" : QString::number(i + 1); QString caption = isFinal ? "Final" : QString::number(i + 1);
if (Xform<T>* xform = m_Ember.GetTotalXform(i)) if (auto xform = m_Ember.GetTotalXform(i))
{ {
if (!xform->m_Name.empty()) if (!xform->m_Name.empty())
caption += " (" + QString::fromStdString(xform->m_Name) + ")"; caption += " (" + QString::fromStdString(xform->m_Name) + ")";
@ -87,13 +87,8 @@ void Fractorium::ForEachXformCheckbox(std::function<void(int, QCheckBox*)> func)
{ {
int i = 0; int i = 0;
while (QLayoutItem* child = m_XformsSelectionLayout->itemAt(i)) for (auto& cb : m_XformSelections)
{ func(i++, cb);
if (auto w = qobject_cast<QCheckBox*>(child->widget()))
func(i, w);
i++;
}
} }
/// <summary> /// <summary>
@ -105,9 +100,9 @@ void Fractorium::ForEachXformCheckbox(std::function<void(int, QCheckBox*)> func)
template <typename T> template <typename T>
bool FractoriumEmberController<T>::XformCheckboxAt(int i, std::function<void(QCheckBox*)> func) bool FractoriumEmberController<T>::XformCheckboxAt(int i, std::function<void(QCheckBox*)> func)
{ {
if (auto child = m_Fractorium->m_XformsSelectionLayout->itemAt(i)) if (i < m_Fractorium->m_XformSelections.size())
{ {
if (auto w = qobject_cast<QCheckBox*>(child->widget())) if (auto w = m_Fractorium->m_XformSelections[i])
{ {
func(w); func(w);
return true; return true;

View File

@ -19,7 +19,7 @@ enum class eHoverType : et { HoverNone, HoverXAxis, HoverYAxis, HoverTranslation
/// <summary> /// <summary>
/// Dragging an affine transform or panning, rotating or scaling the image. /// Dragging an affine transform or panning, rotating or scaling the image.
/// </summary> /// </summary>
enum class eDragState : et { DragNone, DragPanning, DragDragging, DragRotateScale }; enum class eDragState : et { DragNone, DragSelect, DragPanning, DragDragging, DragRotateScale };
/// <summary> /// <summary>
/// Dragging with no keys pressed, shift, control or alt. /// Dragging with no keys pressed, shift, control or alt.

View File

@ -333,6 +333,22 @@ void GLEmberController<T>::DrawAffines(bool pre, bool post)
m_GL->glEnd(); m_GL->glEnd();
m_GL->glPointSize(1.0f);//Restore point size. m_GL->glPointSize(1.0f);//Restore point size.
} }
else if (m_DragState == eDragState::DragSelect)
{
m_GL->glLineWidth(2.0f);
m_GL->glBegin(GL_LINES);
m_GL->glColor4f(0.0f, 0.0f, 1.0f, 1.0f);
m_GL->glVertex2f(m_MouseDownWorldPos.x, m_MouseDownWorldPos.y);//UL->UR
m_GL->glVertex2f(m_MouseWorldPos.x, m_MouseDownWorldPos.y);
m_GL->glVertex2f(m_MouseDownWorldPos.x, m_MouseWorldPos.y);//LL->LR
m_GL->glVertex2f(m_MouseWorldPos.x, m_MouseWorldPos.y);
m_GL->glVertex2f(m_MouseDownWorldPos.x, m_MouseDownWorldPos.y);//UL->LL
m_GL->glVertex2f(m_MouseDownWorldPos.x, m_MouseWorldPos.y);
m_GL->glVertex2f(m_MouseWorldPos.x, m_MouseDownWorldPos.y);//UR->LR
m_GL->glVertex2f(m_MouseWorldPos.x, m_MouseWorldPos.y);
m_GL->glEnd();
m_GL->glLineWidth(1.0f);
}
else if (m_HoverType != eHoverType::HoverNone && m_HoverXform == m_SelectedXform)//Draw large turquoise dot on hover if they are hovering over the selected xform. else if (m_HoverType != eHoverType::HoverNone && m_HoverXform == m_SelectedXform)//Draw large turquoise dot on hover if they are hovering over the selected xform.
{ {
m_GL->glPointSize(6.0f); m_GL->glPointSize(6.0f);
@ -514,6 +530,9 @@ void GLEmberController<T>::MouseRelease(QMouseEvent* e)
if (m_DragState == eDragState::DragDragging && (e->button() & Qt::LeftButton)) if (m_DragState == eDragState::DragDragging && (e->button() & Qt::LeftButton))
UpdateHover(mouseFlipped); UpdateHover(mouseFlipped);
if (m_DragState == eDragState::DragNone)
m_Fractorium->OnXformsSelectNoneButtonClicked(false);
m_DragState = eDragState::DragNone; m_DragState = eDragState::DragNone;
m_DragModifier = 0; m_DragModifier = 0;
m_GL->repaint();//Force immediate redraw. m_GL->repaint();//Force immediate redraw.
@ -571,6 +590,26 @@ void GLEmberController<T>::MouseMove(QMouseEvent* e)
m_FractoriumEmberController->FillAffineWithXform(m_SelectedXform, pre);//Update the spinners in the affine tab of the main window. m_FractoriumEmberController->FillAffineWithXform(m_SelectedXform, pre);//Update the spinners in the affine tab of the main window.
m_FractoriumEmberController->UpdateRender();//Restart the rendering process. m_FractoriumEmberController->UpdateRender();//Restart the rendering process.
} }
else if ((m_DragState == eDragState::DragNone || m_DragState == eDragState::DragSelect) && (e->buttons() & Qt::LeftButton))
{
m_DragState = eDragState::DragSelect;//Only set drag state once the user starts moving the mouse with the left button down.
//Iterate over each xform, seeing if it's in the bounding box.
QPointF tl(m_MouseDownWorldPos.x, m_MouseDownWorldPos.y);
QPointF br(m_MouseWorldPos.x, m_MouseWorldPos.y);
QRectF qrf(tl, br);
T scale = m_FractoriumEmberController->AffineScaleCurrentToLocked();
int i = 0;
m_FractoriumEmberController->UpdateXform([&](Xform<T>* xform)
{
QPointF cd(xform->m_Affine.C() * scale, xform->m_Affine.F() * scale);
bool b = qrf.contains(cd);
m_FractoriumEmberController->XformCheckboxAt(i, [&](QCheckBox * cb)
{
cb->setChecked(b);
});
i++;
}, eXformUpdate::UPDATE_ALL, false);
}
else if (m_DragState == eDragState::DragPanning)//Translating the whole image. else if (m_DragState == eDragState::DragPanning)//Translating the whole image.
{ {
T x = -(m_MouseWorldPos.x - m_MouseDownWorldPos.x); T x = -(m_MouseWorldPos.x - m_MouseDownWorldPos.x);

View File

@ -18,7 +18,7 @@ void LibraryTreeWidget::SetMainWindow(Fractorium* f)
void LibraryTreeWidget::dropEvent(QDropEvent* de) void LibraryTreeWidget::dropEvent(QDropEvent* de)
{ {
QModelIndex droppedIndex = indexAt(de->pos()); QModelIndex droppedIndex = indexAt(de->pos());
auto items = selectionModel()->selectedIndexes(); auto items = selectionModel()->selectedRows();
if (!droppedIndex.isValid())//Don't process drop because it's outside of the droppable area. if (!droppedIndex.isValid())//Don't process drop because it's outside of the droppable area.
{ {
@ -33,7 +33,7 @@ void LibraryTreeWidget::dropEvent(QDropEvent* de)
if (dp == QAbstractItemView::BelowItem) if (dp == QAbstractItemView::BelowItem)
row++; row++;
m_Fractorium->m_Controller->MoveLibraryItems(items[0].row(), row); QTimer::singleShot(500, [ = ]() { m_Fractorium->m_Controller->MoveLibraryItems(items, row); });//Need to fire this after this event has internally reshuffled the items.
} }
QTreeWidget::dropEvent(de); QTreeWidget::dropEvent(de);

View File

@ -8,12 +8,12 @@
/// <param name="settings">A pointer to the settings object to use</param> /// <param name="settings">A pointer to the settings object to use</param>
/// <param name="p">The parent widget. Default: nullptr.</param> /// <param name="p">The parent widget. Default: nullptr.</param>
/// <param name="f">The window flags. Default: 0.</param> /// <param name="f">The window flags. Default: 0.</param>
FractoriumOptionsDialog::FractoriumOptionsDialog(FractoriumSettings* settings, QWidget* p, Qt::WindowFlags f) FractoriumOptionsDialog::FractoriumOptionsDialog(QWidget* p, Qt::WindowFlags f)
: QDialog(p, f) : QDialog(p, f)
{ {
int i, row = 0, spinHeight = 20; int i, row = 0, spinHeight = 20;
ui.setupUi(this); ui.setupUi(this);
m_Settings = settings; m_Settings = FractoriumSettings::DefInstance();
m_Info = OpenCLInfo::Instance(); m_Info = OpenCLInfo::Instance();
QTableWidget* table = ui.OptionsXmlSavingTable; QTableWidget* table = ui.OptionsXmlSavingTable;
ui.ThreadCountSpin->setRange(1, Timing::ProcessorCount()); ui.ThreadCountSpin->setRange(1, Timing::ProcessorCount());
@ -66,6 +66,7 @@ bool FractoriumOptionsDialog::ContinuousUpdate() { return ui.ContinuousUpdateChe
bool FractoriumOptionsDialog::OpenCL() { return ui.OpenCLCheckBox->isChecked(); } bool FractoriumOptionsDialog::OpenCL() { return ui.OpenCLCheckBox->isChecked(); }
bool FractoriumOptionsDialog::Double() { return ui.DoublePrecisionCheckBox->isChecked(); } bool FractoriumOptionsDialog::Double() { return ui.DoublePrecisionCheckBox->isChecked(); }
bool FractoriumOptionsDialog::ShowAllXforms() { return ui.ShowAllXformsCheckBox->isChecked(); } bool FractoriumOptionsDialog::ShowAllXforms() { return ui.ShowAllXformsCheckBox->isChecked(); }
bool FractoriumOptionsDialog::ToggleType() { return ui.ToggleTypeCheckBox->isChecked(); }
bool FractoriumOptionsDialog::AutoUnique() { return ui.AutoUniqueCheckBox->isChecked(); } bool FractoriumOptionsDialog::AutoUnique() { return ui.AutoUniqueCheckBox->isChecked(); }
uint FractoriumOptionsDialog::ThreadCount() { return ui.ThreadCountSpin->value(); } uint FractoriumOptionsDialog::ThreadCount() { return ui.ThreadCountSpin->value(); }
uint FractoriumOptionsDialog::RandomCount() { return ui.RandomCountSpin->value(); } uint FractoriumOptionsDialog::RandomCount() { return ui.RandomCountSpin->value(); }
@ -172,6 +173,7 @@ void FractoriumOptionsDialog::GuiToData()
m_Settings->OpenCL(OpenCL()); m_Settings->OpenCL(OpenCL());
m_Settings->Double(Double()); m_Settings->Double(Double());
m_Settings->ShowAllXforms(ShowAllXforms()); m_Settings->ShowAllXforms(ShowAllXforms());
m_Settings->ToggleType(ToggleType());
m_Settings->ThreadCount(ThreadCount()); m_Settings->ThreadCount(ThreadCount());
m_Settings->RandomCount(RandomCount()); m_Settings->RandomCount(RandomCount());
m_Settings->CpuSubBatch(ui.CpuSubBatchSpin->value()); m_Settings->CpuSubBatch(ui.CpuSubBatchSpin->value());
@ -204,6 +206,7 @@ void FractoriumOptionsDialog::DataToGui()
ui.OpenCLCheckBox->setChecked(m_Settings->OpenCL()); ui.OpenCLCheckBox->setChecked(m_Settings->OpenCL());
ui.DoublePrecisionCheckBox->setChecked(m_Settings->Double()); ui.DoublePrecisionCheckBox->setChecked(m_Settings->Double());
ui.ShowAllXformsCheckBox->setChecked(m_Settings->ShowAllXforms()); ui.ShowAllXformsCheckBox->setChecked(m_Settings->ShowAllXforms());
ui.ToggleTypeCheckBox->setChecked(m_Settings->ToggleType());
ui.ThreadCountSpin->setValue(m_Settings->ThreadCount()); ui.ThreadCountSpin->setValue(m_Settings->ThreadCount());
ui.RandomCountSpin->setValue(m_Settings->RandomCount()); ui.RandomCountSpin->setValue(m_Settings->RandomCount());
ui.CpuSubBatchSpin->setValue(m_Settings->CpuSubBatch()); ui.CpuSubBatchSpin->setValue(m_Settings->CpuSubBatch());

View File

@ -24,7 +24,7 @@ class FractoriumOptionsDialog : public QDialog
friend Fractorium; friend Fractorium;
public: public:
FractoriumOptionsDialog(FractoriumSettings* settings, QWidget* p = nullptr, Qt::WindowFlags f = 0); FractoriumOptionsDialog(QWidget* p = nullptr, Qt::WindowFlags f = 0);
public slots: public slots:
void OnOpenCLCheckBoxStateChanged(int state); void OnOpenCLCheckBoxStateChanged(int state);
@ -45,6 +45,7 @@ private:
bool OpenCL(); bool OpenCL();
bool Double(); bool Double();
bool ShowAllXforms(); bool ShowAllXforms();
bool ToggleType();
bool AutoUnique(); bool AutoUnique();
uint ThreadCount(); uint ThreadCount();
uint RandomCount(); uint RandomCount();
@ -59,5 +60,5 @@ private:
QLineEdit* m_IdEdit; QLineEdit* m_IdEdit;
QLineEdit* m_UrlEdit; QLineEdit* m_UrlEdit;
QLineEdit* m_NickEdit; QLineEdit* m_NickEdit;
FractoriumSettings* m_Settings; shared_ptr<FractoriumSettings> m_Settings;
}; };

View File

@ -414,6 +414,16 @@ in interactive mode for each mouse movement</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="3" column="1">
<widget class="QCheckBox" name="ToggleTypeCheckBox">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Checked: right clicking toggles spin boxes, right button dragging disabled.&lt;/p&gt;&lt;p&gt;Unchecked: double clicking toggles spin boxes, right button dragging enabled.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>Right Click Toggles Spinboxes</string>
</property>
</widget>
</item>
</layout> </layout>
</widget> </widget>
<widget class="QWidget" name="OptionsXmlSavingTab"> <widget class="QWidget" name="OptionsXmlSavingTab">

View File

@ -57,27 +57,22 @@ QssDialog::QssDialog(Fractorium* parent) :
m_LastStyle = m_Parent->styleSheet(); m_LastStyle = m_Parent->styleSheet();
setWindowTitle("QSS Editor - default.qss"); setWindowTitle("QSS Editor - default.qss");
connect(ui->QssEdit, SIGNAL(textChanged()), this, SLOT(SlotTextChanged())); connect(ui->QssEdit, SIGNAL(textChanged()), this, SLOT(SlotTextChanged()));
QToolBar* toolBar = new QToolBar(this); QToolBar* toolBar = new QToolBar(this);
QMenu* colorActionMenu = new QMenu(this); QMenu* colorActionMenu = new QMenu(this);
QMenu* geomActionMenu = new QMenu(this); QMenu* geomActionMenu = new QMenu(this);
QMenu* borderActionMenu = new QMenu(this); QMenu* borderActionMenu = new QMenu(this);
QMenu* styleActionMenu = new QMenu(this); QMenu* styleActionMenu = new QMenu(this);
(m_ColorActionMapper = new QSignalMapper(this))->setMapping(m_AddColorAction, QString()); (m_ColorActionMapper = new QSignalMapper(this))->setMapping(m_AddColorAction, QString());
(m_GeomActionMapper = new QSignalMapper(this))->setMapping(m_AddGeomAction, QString()); (m_GeomActionMapper = new QSignalMapper(this))->setMapping(m_AddGeomAction, QString());
(m_BorderActionMapper = new QSignalMapper(this))->setMapping(m_AddBorderAction, QString()); (m_BorderActionMapper = new QSignalMapper(this))->setMapping(m_AddBorderAction, QString());
(m_StyleActionMapper = new QSignalMapper(this))->setMapping(m_AddStyleAction, QString()); (m_StyleActionMapper = new QSignalMapper(this))->setMapping(m_AddStyleAction, QString());
connect(ui->QssLoadButton, SIGNAL(clicked()), this, SLOT(LoadButton_clicked()), Qt::QueuedConnection); connect(ui->QssLoadButton, SIGNAL(clicked()), this, SLOT(LoadButton_clicked()), Qt::QueuedConnection);
connect(ui->QssSaveButton, SIGNAL(clicked()), this, SLOT(SaveButton_clicked()), Qt::QueuedConnection); connect(ui->QssSaveButton, SIGNAL(clicked()), this, SLOT(SaveButton_clicked()), Qt::QueuedConnection);
connect(ui->QssBasicButton, SIGNAL(clicked()), this, SLOT(BasicButton_clicked()), Qt::QueuedConnection); connect(ui->QssBasicButton, SIGNAL(clicked()), this, SLOT(BasicButton_clicked()), Qt::QueuedConnection);
connect(ui->QssMediumButton, SIGNAL(clicked()), this, SLOT(MediumButton_clicked()), Qt::QueuedConnection); connect(ui->QssMediumButton, SIGNAL(clicked()), this, SLOT(MediumButton_clicked()), Qt::QueuedConnection);
connect(ui->QssAdvancedButton, SIGNAL(clicked()), this, SLOT(AdvancedButton_clicked()), Qt::QueuedConnection); connect(ui->QssAdvancedButton, SIGNAL(clicked()), this, SLOT(AdvancedButton_clicked()), Qt::QueuedConnection);
connect(m_AddFontAction, SIGNAL(triggered()), this, SLOT(SlotAddFont())); connect(m_AddFontAction, SIGNAL(triggered()), this, SLOT(SlotAddFont()));
QVector<QPair<QString, QString>> colorVec; QVector<QPair<QString, QString>> colorVec;
colorVec.reserve(12); colorVec.reserve(12);
colorVec.push_back(QPair<QString, QString>("color", "")); colorVec.push_back(QPair<QString, QString>("color", ""));
colorVec.push_back(QPair<QString, QString>("background-color", "")); colorVec.push_back(QPair<QString, QString>("background-color", ""));
@ -94,14 +89,12 @@ QssDialog::QssDialog(Fractorium* parent) :
for (auto& c : colorVec) for (auto& c : colorVec)
{ {
auto colorAction = colorActionMenu->addAction(c.first); auto colorAction = colorActionMenu->addAction(c.first);
m_ColorMap[c.first] = c.second; m_ColorMap[c.first] = c.second;
connect(colorAction, SIGNAL(triggered()), m_ColorActionMapper, SLOT(map())); connect(colorAction, SIGNAL(triggered()), m_ColorActionMapper, SLOT(map()));
m_ColorActionMapper->setMapping(colorAction, c.first); m_ColorActionMapper->setMapping(colorAction, c.first);
} }
QVector<QPair<QString, QString>> geomVec; QVector<QPair<QString, QString>> geomVec;
geomVec.reserve(12); geomVec.reserve(12);
geomVec.push_back(QPair<QString, QString>("width", "100px")); geomVec.push_back(QPair<QString, QString>("width", "100px"));
geomVec.push_back(QPair<QString, QString>("height", "50px")); geomVec.push_back(QPair<QString, QString>("height", "50px"));
@ -120,14 +113,12 @@ QssDialog::QssDialog(Fractorium* parent) :
for (auto& g : geomVec) for (auto& g : geomVec)
{ {
auto geomAction = geomActionMenu->addAction(g.first); auto geomAction = geomActionMenu->addAction(g.first);
m_GeomMap[g.first] = g.second; m_GeomMap[g.first] = g.second;
connect(geomAction, SIGNAL(triggered()), m_GeomActionMapper, SLOT(map())); connect(geomAction, SIGNAL(triggered()), m_GeomActionMapper, SLOT(map()));
m_GeomActionMapper->setMapping(geomAction, g.first); m_GeomActionMapper->setMapping(geomAction, g.first);
} }
QVector<QPair<QString, QString>> borderVec; QVector<QPair<QString, QString>> borderVec;
borderVec.reserve(8); borderVec.reserve(8);
borderVec.push_back(QPair<QString, QString>("border", "1px solid black")); borderVec.push_back(QPair<QString, QString>("border", "1px solid black"));
borderVec.push_back(QPair<QString, QString>("border-top", "1px inset black")); borderVec.push_back(QPair<QString, QString>("border-top", "1px inset black"));
@ -141,7 +132,6 @@ QssDialog::QssDialog(Fractorium* parent) :
for (auto& b : borderVec) for (auto& b : borderVec)
{ {
auto borderAction = borderActionMenu->addAction(b.first); auto borderAction = borderActionMenu->addAction(b.first);
m_BorderMap[b.first] = b.second; m_BorderMap[b.first] = b.second;
connect(borderAction, SIGNAL(triggered()), m_BorderActionMapper, SLOT(map())); connect(borderAction, SIGNAL(triggered()), m_BorderActionMapper, SLOT(map()));
m_BorderActionMapper->setMapping(borderAction, b.first); m_BorderActionMapper->setMapping(borderAction, b.first);
@ -152,7 +142,6 @@ QssDialog::QssDialog(Fractorium* parent) :
for (auto& s : styles) for (auto& s : styles)
{ {
auto styleAction = styleActionMenu->addAction(s); auto styleAction = styleActionMenu->addAction(s);
m_StyleMap[s] = s; m_StyleMap[s] = s;
connect(styleAction, SIGNAL(triggered()), m_StyleActionMapper, SLOT(map())); connect(styleAction, SIGNAL(triggered()), m_StyleActionMapper, SLOT(map()));
m_StyleActionMapper->setMapping(styleAction, s); m_StyleActionMapper->setMapping(styleAction, s);
@ -162,12 +151,10 @@ QssDialog::QssDialog(Fractorium* parent) :
connect(m_GeomActionMapper, SIGNAL(mapped(QString)), this, SLOT(SlotAddGeom(QString))); connect(m_GeomActionMapper, SIGNAL(mapped(QString)), this, SLOT(SlotAddGeom(QString)));
connect(m_BorderActionMapper, SIGNAL(mapped(QString)), this, SLOT(SlotAddBorder(QString))); connect(m_BorderActionMapper, SIGNAL(mapped(QString)), this, SLOT(SlotAddBorder(QString)));
connect(m_StyleActionMapper, SIGNAL(mapped(QString)), this, SLOT(SlotSetTheme(QString))); connect(m_StyleActionMapper, SIGNAL(mapped(QString)), this, SLOT(SlotSetTheme(QString)));
m_AddColorAction->setMenu(colorActionMenu); m_AddColorAction->setMenu(colorActionMenu);
m_AddGeomAction->setMenu(geomActionMenu); m_AddGeomAction->setMenu(geomActionMenu);
m_AddBorderAction->setMenu(borderActionMenu); m_AddBorderAction->setMenu(borderActionMenu);
m_AddStyleAction->setMenu(styleActionMenu); m_AddStyleAction->setMenu(styleActionMenu);
toolBar->addAction(m_AddColorAction); toolBar->addAction(m_AddColorAction);
toolBar->addAction(m_AddGeomAction); toolBar->addAction(m_AddGeomAction);
toolBar->addAction(m_AddBorderAction); toolBar->addAction(m_AddBorderAction);
@ -237,7 +224,6 @@ QList<QString> QssDialog::GetClassNames(bool includeObjectNames)
{ {
QSet<QString> dlgSet; QSet<QString> dlgSet;
auto dlgWidgetList = dlg->findChildren<QWidget*>();//Find all children of the dialog. auto dlgWidgetList = dlg->findChildren<QWidget*>();//Find all children of the dialog.
dlgSet.insert(classAndName);//Add the basic dialog class name, opening curly brace will be added later. dlgSet.insert(classAndName);//Add the basic dialog class name, opening curly brace will be added later.
classAndName += " "; classAndName += " ";
@ -290,8 +276,10 @@ bool QssDialog::IsStyleSheetValid(const QString& styleSheet)
{ {
QCss::Parser parser(styleSheet); QCss::Parser parser(styleSheet);
QCss::StyleSheet sheet; QCss::StyleSheet sheet;
if (parser.parse(&sheet)) if (parser.parse(&sheet))
return true; return true;
QString fullSheet = QStringLiteral("* { "); QString fullSheet = QStringLiteral("* { ");
fullSheet += styleSheet; fullSheet += styleSheet;
fullSheet += QLatin1Char('}'); fullSheet += QLatin1Char('}');
@ -396,7 +384,6 @@ void QssDialog::SlotAddColor(const QString& s)
void QssDialog::SlotAddGeom(const QString& s) void QssDialog::SlotAddGeom(const QString& s)
{ {
auto val = m_GeomMap[s]; auto val = m_GeomMap[s];
InsertCssProperty(s, val); InsertCssProperty(s, val);
} }
@ -407,7 +394,6 @@ void QssDialog::SlotAddGeom(const QString& s)
void QssDialog::SlotAddBorder(const QString& s) void QssDialog::SlotAddBorder(const QString& s)
{ {
auto val = m_BorderMap[s]; auto val = m_BorderMap[s];
InsertCssProperty(s, val); InsertCssProperty(s, val);
} }
@ -449,9 +435,11 @@ void QssDialog::SlotAddFont()
case QFont::StyleItalic: case QFont::StyleItalic:
fontStr += QStringLiteral("italic "); fontStr += QStringLiteral("italic ");
break; break;
case QFont::StyleOblique: case QFont::StyleOblique:
fontStr += QStringLiteral("oblique "); fontStr += QStringLiteral("oblique ");
break; break;
default: default:
break; break;
} }
@ -526,10 +514,7 @@ void QssDialog::SaveButton_clicked()
string s = Text().toStdString(); string s = Text().toStdString();
if (of.is_open()) if (of.is_open())
{
of << s; of << s;
of.close();
}
else else
QMessageBox::critical(this, "File save error", "Failed to save " + path + ", style will not be set as default"); QMessageBox::critical(this, "File save error", "Failed to save " + path + ", style will not be set as default");
} }
@ -547,10 +532,7 @@ void QssDialog::SaveAsDefault()
auto s = Text().toStdString(); auto s = Text().toStdString();
if (of.is_open()) if (of.is_open())
{
of << s; of << s;
of.close();
}
else else
QMessageBox::critical(this, "File save error", "Failed to save " + path + ", style will not be set as default"); QMessageBox::critical(this, "File save error", "Failed to save " + path + ", style will not be set as default");
} }
@ -615,7 +597,6 @@ void QssDialog::InsertCssProperty(const QString& name, const QString& value)
cursor.beginEditBlock(); cursor.beginEditBlock();
cursor.removeSelectedText(); cursor.removeSelectedText();
cursor.movePosition(QTextCursor::EndOfLine); cursor.movePosition(QTextCursor::EndOfLine);
//Simple check to see if we're in a selector scope. //Simple check to see if we're in a selector scope.
const QTextDocument* doc = editor->document(); const QTextDocument* doc = editor->document();
const QTextCursor closing = doc->find(QStringLiteral("}"), cursor, QTextDocument::FindBackward); const QTextCursor closing = doc->find(QStringLiteral("}"), cursor, QTextDocument::FindBackward);
@ -666,9 +647,7 @@ void QssDialog::SetupFileDialog()
QString QssDialog::OpenFile() QString QssDialog::OpenFile()
{ {
QStringList filenames; QStringList filenames;
SetupFileDialog(); SetupFileDialog();
m_FileDialog->setFileMode(QFileDialog::ExistingFile); m_FileDialog->setFileMode(QFileDialog::ExistingFile);
m_FileDialog->setAcceptMode(QFileDialog::AcceptOpen); m_FileDialog->setAcceptMode(QFileDialog::AcceptOpen);
m_FileDialog->setNameFilter("Qss (*.qss)"); m_FileDialog->setNameFilter("Qss (*.qss)");
@ -688,7 +667,6 @@ QString QssDialog::OpenFile()
QString QssDialog::SaveFile() QString QssDialog::SaveFile()
{ {
QStringList filenames; QStringList filenames;
SetupFileDialog(); SetupFileDialog();
m_FileDialog->setFileMode(QFileDialog::AnyFile); m_FileDialog->setFileMode(QFileDialog::AnyFile);
m_FileDialog->setAcceptMode(QFileDialog::AcceptSave); m_FileDialog->setAcceptMode(QFileDialog::AcceptSave);

View File

@ -1,5 +1,6 @@
#include "FractoriumPch.h" #include "FractoriumPch.h"
#include "SpinBox.h" #include "SpinBox.h"
#include "FractoriumSettings.h"
QTimer SpinBox::s_Timer; QTimer SpinBox::s_Timer;
@ -15,7 +16,6 @@ QTimer SpinBox::s_Timer;
SpinBox::SpinBox(QWidget* p, int h, int step) SpinBox::SpinBox(QWidget* p, int h, int step)
: QSpinBox(p) : QSpinBox(p)
{ {
m_Select = false;
m_DoubleClick = false; m_DoubleClick = false;
m_DoubleClickNonZero = 0; m_DoubleClickNonZero = 0;
m_DoubleClickZero = 1; m_DoubleClickZero = 1;
@ -135,46 +135,49 @@ void SpinBox::OnTimeout()
bool SpinBox::eventFilter(QObject* o, QEvent* e) bool SpinBox::eventFilter(QObject* o, QEvent* e)
{ {
QMouseEvent* me = dynamic_cast<QMouseEvent*>(e); QMouseEvent* me = dynamic_cast<QMouseEvent*>(e);
auto settings = FractoriumSettings::DefInstance();
if (isEnabled() && if (isEnabled() && me)
me && {
if (!settings->ToggleType() &&//Ensure double click toggles, not right click.
me->type() == QMouseEvent::MouseButtonPress && me->type() == QMouseEvent::MouseButtonPress &&
me->button() == Qt::RightButton) me->button() == Qt::RightButton)
{ {
m_MouseDownPoint = m_MouseMovePoint = me->pos(); m_MouseDownPoint = m_MouseMovePoint = me->pos();
StartTimer(); StartTimer();
} }
else if (isEnabled() && else if (!settings->ToggleType() &&
me &&
me->type() == QMouseEvent::MouseButtonRelease && me->type() == QMouseEvent::MouseButtonRelease &&
me->button() == Qt::RightButton) me->button() == Qt::RightButton)
{ {
StopTimer(); StopTimer();
m_MouseDownPoint = m_MouseMovePoint = me->pos(); m_MouseDownPoint = m_MouseMovePoint = me->pos();
} }
else if (isEnabled() && else if (!settings->ToggleType() &&
me &&
me->type() == QMouseEvent::MouseMove && me->type() == QMouseEvent::MouseMove &&
QGuiApplication::mouseButtons() & Qt::RightButton) QGuiApplication::mouseButtons() & Qt::RightButton)
{ {
m_MouseMovePoint = me->pos(); m_MouseMovePoint = me->pos();
} }
else if (m_DoubleClick && e->type() == QMouseEvent::MouseButtonDblClick && isEnabled()) else if (m_DoubleClick &&
((!settings->ToggleType() && e->type() == QMouseEvent::MouseButtonDblClick && me->button() == Qt::LeftButton) ||
(settings->ToggleType() && me->type() == QMouseEvent::MouseButtonRelease && me->button() == Qt::RightButton)))
{ {
if (value() == 0) if (IsNearZero(value()))
setValue(m_DoubleClickZero); setValue(m_DoubleClickZero);
else else
setValue(m_DoubleClickNonZero); setValue(m_DoubleClickNonZero);
} }
}
else else
{ {
if (e->type() == QEvent::Wheel) if (e->type() == QEvent::Wheel)
{ {
//Take special action for shift to reduce the scroll amount. Control already //Take special action for shift to reduce the scroll amount. Control already
//increases it automatically. //increases it automatically.
if (QWheelEvent* wev = dynamic_cast<QWheelEvent*>(e)) if (QWheelEvent* we = dynamic_cast<QWheelEvent*>(e))
{ {
Qt::KeyboardModifiers mod = wev->modifiers(); Qt::KeyboardModifiers mod = we->modifiers();
if (mod.testFlag(Qt::ShiftModifier)) if (mod.testFlag(Qt::ShiftModifier))
setSingleStep(m_SmallStep); setSingleStep(m_SmallStep);

View File

@ -1,6 +1,7 @@
#pragma once #pragma once
#include "FractoriumPch.h" #include "FractoriumPch.h"
#include "DoubleSpinBox.h"
/// <summary> /// <summary>
/// SpinBox class. /// SpinBox class.
@ -41,7 +42,6 @@ private:
void StartTimer(); void StartTimer();
void StopTimer(); void StopTimer();
bool m_Select;
bool m_DoubleClick; bool m_DoubleClick;
int m_DoubleClickNonZero; int m_DoubleClickNonZero;
int m_DoubleClickZero; int m_DoubleClickZero;

View File

@ -8,13 +8,13 @@
/// <param name="settings">Pointer to the global settings object to use</param> /// <param name="settings">Pointer to the global settings object to use</param>
/// <param name="p">The parent widget. Default: nullptr.</param> /// <param name="p">The parent widget. Default: nullptr.</param>
/// <param name="f">The window flags. Default: 0.</param> /// <param name="f">The window flags. Default: 0.</param>
FractoriumVariationsDialog::FractoriumVariationsDialog(FractoriumSettings* settings, QWidget* p, Qt::WindowFlags f) FractoriumVariationsDialog::FractoriumVariationsDialog(QWidget* p, Qt::WindowFlags f)
: QDialog(p, f), : QDialog(p, f),
m_Settings(settings),
m_VariationList(VariationList<float>::Instance()) m_VariationList(VariationList<float>::Instance())
{ {
ui.setupUi(this); ui.setupUi(this);
auto table = ui.VariationsTable; auto table = ui.VariationsTable;
m_Settings = FractoriumSettings::DefInstance();
m_Vars = m_Settings->Variations(); m_Vars = m_Settings->Variations();
Populate(); Populate();
OnSelectAllButtonClicked(true); OnSelectAllButtonClicked(true);

View File

@ -19,7 +19,7 @@ class FractoriumVariationsDialog : public QDialog
{ {
Q_OBJECT Q_OBJECT
public: public:
FractoriumVariationsDialog(FractoriumSettings* settings, QWidget* p = nullptr, Qt::WindowFlags f = nullptr); FractoriumVariationsDialog(QWidget* p = nullptr, Qt::WindowFlags f = nullptr);
void ForEachCell(std::function<void(QTableWidgetItem* cb)> func); void ForEachCell(std::function<void(QTableWidgetItem* cb)> func);
void ForEachSelectedCell(std::function<void(QTableWidgetItem* cb)> func); void ForEachSelectedCell(std::function<void(QTableWidgetItem* cb)> func);
void SyncSettings(); void SyncSettings();
@ -46,6 +46,6 @@ private:
shared_ptr<VariationList<float>> m_VariationList; shared_ptr<VariationList<float>> m_VariationList;
vector<QCheckBox*> m_CheckBoxes; vector<QCheckBox*> m_CheckBoxes;
QMap<QString, QVariant> m_Vars; QMap<QString, QVariant> m_Vars;
FractoriumSettings* m_Settings; shared_ptr<FractoriumSettings> m_Settings;
Ui::VariationsDialog ui; Ui::VariationsDialog ui;
}; };

View File

@ -9,12 +9,13 @@ git clone https://github.com/GNOME/libxml2.git
git clone https://github.com/g-truc/glm.git git clone https://github.com/g-truc/glm.git
REM Set VC paths REM Set VC paths
set INCLUDE=%INCLUDE%;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Include;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Include; set INCLUDE=%INCLUDE%;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Include;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Include;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin;
REM libjpeg REM libjpeg
copy fractorium\Builds\MSVC\WIN32.MAK libjpeg
cd libjpeg cd libjpeg
nmake /f makefile.vc setup-v10 nmake /f makefile.vc setup-v10 CPU=i386
nmake nodebug=1 /f makefile.vc all nmake nodebug=1 /f makefile.vc all CPU=i386
copy libjpeg.lib ..\fractorium\Deps copy libjpeg.lib ..\fractorium\Deps
cd .. cd ..
@ -44,7 +45,7 @@ copy libpng.lib ..\fractorium\Deps
cd .. cd ..
REM tbb REM tbb
cd tbb\build\vs2010 cd tbb\build\vs2012
devenv.exe tbb.vcxproj /upgrade devenv.exe tbb.vcxproj /upgrade
msbuild tbb.vcxproj /p:Configuration=Release msbuild tbb.vcxproj /p:Configuration=Release
copy X64\Release\tbb.dll ..\..\..\fractorium\Deps copy X64\Release\tbb.dll ..\..\..\fractorium\Deps