Compare commits
33 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| fbb0e140ce | |||
| d8908092fe | |||
| ce26728f7c | |||
| e2270c30a5 | |||
| 5ad3cf9fba | |||
| 5352dc55bf | |||
| 3410fcd5b6 | |||
| bfe2f6ffdd | |||
| b63e04aa85 | |||
| a09752fff1 | |||
| 5cc8579905 | |||
| e7c6c589fd | |||
| 940753a1ec | |||
| 0f5755eaf9 | |||
| 7b48f768cd | |||
| 7862cf4c40 | |||
| 188a5216d5 | |||
| d2593bb50d | |||
| a1862c5c1d | |||
| 74a371e567 | |||
| d6b112dd32 | |||
| 2fba807777 | |||
| 621a037c2a | |||
| cfb766f728 | |||
| 9b810d529f | |||
| 29c084a058 | |||
| 00189531fc | |||
| 8a4127d5d7 | |||
| 8a75d5d227 | |||
| 5cdfe0b6b9 | |||
| 583b08ae0e | |||
| 53ec438a25 | |||
| e1c5b0648a |
+27
-3
@@ -18,8 +18,6 @@
|
||||
*.ipch
|
||||
*.bsc
|
||||
*.exe
|
||||
*.xml
|
||||
!./Data/flam3-palettes.xml
|
||||
*.ilk
|
||||
*.wixobj
|
||||
*.pch
|
||||
@@ -27,9 +25,24 @@
|
||||
*.msi
|
||||
*.idb
|
||||
*.flam3
|
||||
*.flame
|
||||
*.bmp
|
||||
*.jpg
|
||||
Data/*.png
|
||||
*.zip
|
||||
*.avi
|
||||
*.ini
|
||||
*.bin
|
||||
*.aps
|
||||
*.db
|
||||
*.opendb
|
||||
*moc_*
|
||||
*GeneratedFiles*
|
||||
*.unsuccessfulbuild
|
||||
*~*
|
||||
*-pre1
|
||||
Makefile.Debug
|
||||
Makefile.Release
|
||||
*\Obj\*
|
||||
Builds/MSVC/VS2013/Obj/x64/Debug/EmberCL_manifest.rc
|
||||
Builds/MSVC/VS2013/Obj/EmberTester/x64/Debug/EmberTester_manifest.rc
|
||||
@@ -38,8 +51,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/Ember/x64/Debug/Ember_manifest.rc
|
||||
Builds/MSVC/Installer/obj/
|
||||
Builds/MSVC/VS2015/GeneratedFiles
|
||||
Builds/MSVC/VS2015/ipch
|
||||
Builds/MSVC/VS2015/Obj
|
||||
Bin/x64/Release/testallvarsout.flame
|
||||
Data/~$Bench.xlsx
|
||||
fractorium.com/
|
||||
Site/
|
||||
*.ps1
|
||||
*.o
|
||||
ui_*.h
|
||||
@@ -65,3 +82,10 @@ Builds/QtCreator/Fractorium/Makefile
|
||||
Builds/lib/libOpenCL.so
|
||||
Builds/include/CL
|
||||
Builds/include/GL
|
||||
/Data/Variations Bench.xlsx
|
||||
/Builds/QtCreator/EmberCL/EmberCL.pro.user.18
|
||||
/Builds/QtCreator/Ember/Ember.pro.user.18
|
||||
/Builds/QtCreator/Fractorium/Fractorium.pro.user.18
|
||||
/Builds/MSVC/VS2013/flam3-palettes.xml
|
||||
/Builds/MSVC/VS2015/flam3-palettes.xml
|
||||
*.dmg
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<ProductVersion>3.7</ProductVersion>
|
||||
<ProjectGuid>{c8096c47-e358-438c-a520-146d46b0637d}</ProjectGuid>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<OutputName>Fractorium_1.0.0.1</OutputName>
|
||||
<OutputName>Fractorium_1.0.0.2</OutputName>
|
||||
<OutputType>Package</OutputType>
|
||||
<WixTargetsPath Condition=" '$(WixTargetsPath)' == '' AND '$(MSBuildExtensionsPath32)' != '' ">$(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\Wix.targets</WixTargetsPath>
|
||||
<WixTargetsPath Condition=" '$(WixTargetsPath)' == '' ">$(MSBuildExtensionsPath)\Microsoft\WiX\v3.x\Wix.targets</WixTargetsPath>
|
||||
|
||||
+240
-177
@@ -1,186 +1,249 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
|
||||
<?define ProductVersion="1.0.0.1" ?>
|
||||
<?define ProductName="Fractorium $(var.ProductVersion) ($(var.GpuType))" ?>
|
||||
<?define UpgradeCode="{4714cd15-bfba-44f6-8059-9e1466ebfa6e}"?>
|
||||
<?define Manufacturer="Fractorium"?>
|
||||
|
||||
<!--
|
||||
Original GUID,
|
||||
<?define ProductCode="{703001af-6255-4671-9a69-571198b4c0dd}"?>
|
||||
-->
|
||||
<?define ProductVersion="1.0.0.2" ?>
|
||||
<?define ProductName="Fractorium $(var.ProductVersion) ($(var.GpuType))" ?>
|
||||
<?define UpgradeCode="{4714cd15-bfba-44f6-8059-9e1466ebfa6e}"?>
|
||||
<?define Manufacturer="Fractorium"?>
|
||||
|
||||
<!--
|
||||
Original GUID,
|
||||
<?define ProductCode="{703001af-6255-4671-9a69-571198b4c0dd}"?>
|
||||
-->
|
||||
|
||||
<!--
|
||||
Change this for every release.
|
||||
-->
|
||||
<?define ProductCode="{93E17CD3-46AA-4AD6-8531-3DF61721B48D}"?>
|
||||
|
||||
<Product Id="$(var.ProductCode)" Name="$(var.ProductName)" Language="1033" Version="$(var.ProductVersion)" Manufacturer="$(var.Manufacturer)" UpgradeCode="$(var.UpgradeCode)">
|
||||
<Package
|
||||
Keywords="Installer"
|
||||
Platform="x64"
|
||||
Description="$(var.Manufacturer)"
|
||||
Comments="$(var.Manufacturer)"
|
||||
Manufacturer="$(var.Manufacturer)"
|
||||
InstallScope="perUser"
|
||||
InstallerVersion="400"
|
||||
InstallPrivileges="limited"
|
||||
Compressed="yes"
|
||||
Languages="1033"
|
||||
SummaryCodepage="1252"
|
||||
/>
|
||||
<!--
|
||||
Change this for every release.
|
||||
-->
|
||||
<?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)">
|
||||
<Package
|
||||
Keywords="Installer"
|
||||
Platform="x64"
|
||||
Description="$(var.Manufacturer)"
|
||||
Comments="$(var.Manufacturer)"
|
||||
Manufacturer="$(var.Manufacturer)"
|
||||
InstallScope="perUser"
|
||||
InstallerVersion="400"
|
||||
InstallPrivileges="limited"
|
||||
Compressed="yes"
|
||||
Languages="1033"
|
||||
SummaryCodepage="1252"
|
||||
/>
|
||||
|
||||
<Upgrade Id="$(var.UpgradeCode)">
|
||||
<UpgradeVersion Minimum="0.0.0"
|
||||
IncludeMinimum="no"
|
||||
OnlyDetect="no"
|
||||
Maximum="$(var.ProductVersion)"
|
||||
IncludeMaximum="no"
|
||||
Property="PREVIOUSFOUND" />
|
||||
</Upgrade>
|
||||
<Upgrade Id="$(var.UpgradeCode)">
|
||||
<UpgradeVersion Minimum="0.0.0"
|
||||
IncludeMinimum="no"
|
||||
OnlyDetect="no"
|
||||
Maximum="$(var.ProductVersion)"
|
||||
IncludeMaximum="no"
|
||||
Property="PREVIOUSFOUND" />
|
||||
</Upgrade>
|
||||
|
||||
<InstallExecuteSequence>
|
||||
<RemoveExistingProducts After="InstallInitialize"/>
|
||||
</InstallExecuteSequence>
|
||||
|
||||
<MediaTemplate EmbedCab="yes" />
|
||||
|
||||
<Icon Id="AddRemoveProgramsIcon" SourceFile="$(var.SolutionDir)..\..\..\Source\Fractorium\Icons\Fractorium.ico"/>
|
||||
<Property Id="ARPPRODUCTICON" Value="AddRemoveProgramsIcon" />
|
||||
<Feature Id="MainApplication" Title="Main Application" Level="1">
|
||||
<ComponentGroupRef Id="ProductComponents" />
|
||||
<ComponentGroupRef Id="PlatformComponents" />
|
||||
<ComponentRef Id="FractoriumStartMenuShortcut"/>
|
||||
<ComponentRef Id="FractoriumDesktopShortcut"/>
|
||||
</Feature>
|
||||
<InstallExecuteSequence>
|
||||
<RemoveExistingProducts After="InstallInitialize"/>
|
||||
</InstallExecuteSequence>
|
||||
|
||||
<MediaTemplate EmbedCab="yes" />
|
||||
|
||||
<Icon Id="AddRemoveProgramsIcon" SourceFile="$(var.SolutionDir)..\..\..\Source\Fractorium\Icons\Fractorium.ico"/>
|
||||
<Property Id="ARPPRODUCTICON" Value="AddRemoveProgramsIcon" />
|
||||
<Feature Id="MainApplication" Title="Main Application" Level="1">
|
||||
<ComponentGroupRef Id="ProductComponents" />
|
||||
<ComponentGroupRef Id="PlatformComponents" />
|
||||
<ComponentRef Id="FractoriumStartMenuShortcut"/>
|
||||
<ComponentRef Id="FractoriumDesktopShortcut"/>
|
||||
</Feature>
|
||||
|
||||
<WixVariable Id="WixUILicenseRtf" Value="$(var.SolutionDir)..\..\..\Data\gplv3.rtf" />
|
||||
<WixVariable Id="WixUIBannerBmp" Value="$(var.SolutionDir)..\..\..\Source\Fractorium\Icons\banner.bmp" /><!--493 x 58 pixels -->
|
||||
<WixVariable Id="WixUIDialogBmp" Value="$(var.SolutionDir)..\..\..\Source\Fractorium\Icons\dialog.bmp" /><!--493 × 312 pixels -->
|
||||
|
||||
<Property Id="MSIUSEREALADMINDETECTION" Value="1" />
|
||||
<Property Id="MSIFASTINSTALL" Value="1" />
|
||||
|
||||
<Property Id="WIXUI_INSTALLDIR" Value="INSTALLFOLDER" />
|
||||
<UIRef Id="WixUI_InstallDir" />
|
||||
<UIRef Id="WixUI_ErrorProgressText" />
|
||||
</Product>
|
||||
|
||||
<Fragment>
|
||||
<Directory Id="TARGETDIR" Name="SourceDir" >
|
||||
<!-- Doing this requires admin access, so we don't do it.
|
||||
<Directory Id="ProgramFiles64Folder" >
|
||||
<Directory Id="INSTALLFOLDER" Name="Fractorium" >
|
||||
<Directory Id="INSTALLFOLDERPLATFORMS" Name="platforms" />
|
||||
</Directory>
|
||||
</Directory>
|
||||
-->
|
||||
<WixVariable Id="WixUILicenseRtf" Value="$(var.SolutionDir)..\..\..\Data\gplv3.rtf" />
|
||||
<WixVariable Id="WixUIBannerBmp" Value="$(var.SolutionDir)..\..\..\Source\Fractorium\Icons\banner.bmp" /><!--493 x 58 pixels -->
|
||||
<WixVariable Id="WixUIDialogBmp" Value="$(var.SolutionDir)..\..\..\Source\Fractorium\Icons\dialog.bmp" /><!--493 × 312 pixels -->
|
||||
|
||||
<Property Id="MSIUSEREALADMINDETECTION" Value="1" />
|
||||
<Property Id="MSIFASTINSTALL" Value="1" />
|
||||
|
||||
<Property Id="WIXUI_INSTALLDIR" Value="INSTALLFOLDER" />
|
||||
<UIRef Id="WixUI_InstallDir" />
|
||||
<UIRef Id="WixUI_ErrorProgressText" />
|
||||
</Product>
|
||||
|
||||
<Fragment>
|
||||
<Directory Id="TARGETDIR" Name="SourceDir" >
|
||||
<!-- Doing this requires admin access, so we don't do it.
|
||||
<Directory Id="ProgramFiles64Folder" >
|
||||
<Directory Id="INSTALLFOLDER" Name="Fractorium" >
|
||||
<Directory Id="INSTALLFOLDERPLATFORMS" Name="platforms" />
|
||||
</Directory>
|
||||
</Directory>
|
||||
-->
|
||||
|
||||
<!-- Doing this doesn't require admin access.
|
||||
It reports a ton of errors, but oddly enough, an MSI is still created with the errors.
|
||||
-->
|
||||
<Directory Id="AppDataFolder" >
|
||||
<Directory Id="INSTALLFOLDER" Name="Fractorium" >
|
||||
<Directory Id="INSTALLFOLDERPLATFORMS" Name="platforms" />
|
||||
</Directory>
|
||||
</Directory>
|
||||
|
||||
<!-- Shortcut folders-->
|
||||
<Directory Id="ProgramMenuFolder" Name="Programs">
|
||||
<Directory Id="ProgramMenuDirLevel1" Name="Fractorium" />
|
||||
</Directory>
|
||||
<Directory Id="DesktopFolder" Name="Desktop" />
|
||||
</Directory>
|
||||
</Fragment>
|
||||
<!-- Doing this doesn't require admin access.
|
||||
It reports a ton of errors, but oddly enough, an MSI is still created with the errors.
|
||||
-->
|
||||
<Directory Id="AppDataFolder" >
|
||||
<Directory Id="INSTALLFOLDER" Name="Fractorium" >
|
||||
<Directory Id="INSTALLFOLDERPLATFORMS" Name="platforms" />
|
||||
</Directory>
|
||||
</Directory>
|
||||
|
||||
<!-- Shortcut folders-->
|
||||
<Directory Id="ProgramMenuFolder" Name="Programs">
|
||||
<Directory Id="ProgramMenuDirLevel1" Name="Fractorium" />
|
||||
</Directory>
|
||||
<Directory Id="DesktopFolder" Name="Desktop" />
|
||||
</Directory>
|
||||
</Fragment>
|
||||
|
||||
<Fragment>
|
||||
<Component Id="FractoriumStartMenuShortcut" Directory="ProgramMenuDirLevel1" Guid="f1eaf3ba-9b61-48b6-8994-49ebc6b405aa">
|
||||
<Shortcut Id="FractoriumStartMenuShortcut"
|
||||
Directory="ProgramMenuDirLevel1"
|
||||
Name="Fractorium"
|
||||
Target="[INSTALLFOLDER]\Fractorium.exe"
|
||||
WorkingDirectory="INSTALLFOLDER"
|
||||
Icon="AddRemoveProgramsIcon"
|
||||
/>
|
||||
<Condition>1</Condition>
|
||||
<RemoveFolder Id="FractoriumStartMenuShortcut" On="uninstall" />
|
||||
<RegistryValue Root='HKCU' Key='Software\[Manufacturer]\[ProductName]' Type='string' Value='' KeyPath='yes' />
|
||||
</Component>
|
||||
<Component Id="FractoriumDesktopShortcut" Directory="DesktopFolder" Guid="b73ff21c-08ac-47ad-a510-b3ce90e43979">
|
||||
<Shortcut Id="FractoriumDesktopShortcut"
|
||||
Directory="DesktopFolder"
|
||||
Name="Fractorium"
|
||||
Target="[INSTALLFOLDER]\Fractorium.exe"
|
||||
WorkingDirectory="INSTALLFOLDER"
|
||||
Icon="AddRemoveProgramsIcon"
|
||||
/>
|
||||
<RemoveFolder Id="FractoriumDesktopShortcut" On="uninstall" />
|
||||
<Condition>1</Condition>
|
||||
<RegistryValue Root='HKCU' Key='Software\[Manufacturer]\[ProductName]' Type='string' Value='' KeyPath='yes' />
|
||||
</Component>
|
||||
</Fragment>
|
||||
|
||||
<Fragment>
|
||||
<ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
|
||||
<Component Id="Fractorium.exe" Guid="ccc04ca4-c747-4330-8cfd-bdd943b185c0">
|
||||
<File Id="Fractorium.exe" Source="$(var.SolutionDir)..\..\..\Bin\$(var.Platform)\$(var.Configuration)\Fractorium.exe" KeyPath="yes" Checksum="yes" ProcessorArchitecture="x64" />
|
||||
</Component>
|
||||
<Component Id="EmberRender.exe" Guid="12d49219-9269-495a-b8e4-3d33cb32d280">
|
||||
<File Id="EmberRender.exe" Source="$(var.SolutionDir)..\..\..\Bin\$(var.Platform)\$(var.Configuration)\EmberRender.exe" KeyPath="yes" Checksum="yes" ProcessorArchitecture="x64" />
|
||||
</Component>
|
||||
<Component Id="EmberAnimate.exe" Guid="ae362704-93a3-48dc-a13b-7c4eabd87ee1">
|
||||
<File Id="EmberAnimate.exe" Source="$(var.SolutionDir)..\..\..\Bin\$(var.Platform)\$(var.Configuration)\EmberAnimate.exe" KeyPath="yes" Checksum="yes" ProcessorArchitecture="x64" />
|
||||
</Component>
|
||||
<Component Id="EmberGenome.exe" Guid="7a93f079-216a-4d1c-9b02-8ca93a6a8daa">
|
||||
<File Id="EmberGenome.exe" Source="$(var.SolutionDir)..\..\..\Bin\$(var.Platform)\$(var.Configuration)\EmberGenome.exe" KeyPath="yes" Checksum="yes" ProcessorArchitecture="x64" />
|
||||
</Component>
|
||||
<Component Id="Ember.dll" Guid="c0f80dee-7a16-4d6a-b7ed-d6cd162154eb">
|
||||
<File Id="Ember.dll" Source="$(var.SolutionDir)..\..\..\Bin\$(var.Platform)\$(var.Configuration)\Ember.dll" KeyPath="yes" Checksum="yes" ProcessorArchitecture="x64"/>
|
||||
</Component>
|
||||
<Component Id="EmberCL.dll" Guid="21c0e372-c605-4e0d-9ba8-94e38949833b">
|
||||
<File Id="EmberCL.dll" Source="$(var.SolutionDir)..\..\..\Bin\$(var.Platform)\$(var.Configuration)\EmberCL.dll" KeyPath="yes" Checksum="yes" ProcessorArchitecture="x64"/>
|
||||
</Component>
|
||||
<Component Id="libxml2.dll" Guid="bb3aa687-7a3d-4d16-a27c-28529b472754">
|
||||
<File Id="libxml2.dll" Source="$(var.SolutionDir)..\..\..\Bin\$(var.Platform)\Release\libxml2.dll" KeyPath="yes" Checksum="yes" ProcessorArchitecture="x64"/>
|
||||
</Component>
|
||||
<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"/>
|
||||
</Component>
|
||||
<Component Id="msvcp120.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" />
|
||||
</Component>
|
||||
<Component Id="msvcr120.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" />
|
||||
</Component>
|
||||
<Component Id="vccorlib120.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" />
|
||||
</Component>
|
||||
<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" />
|
||||
</Component>
|
||||
<Component Id="dark.qss" Guid="c120ace3-5fab-416f-b7f1-a8d9e3e0f061">
|
||||
<File Id="dark.qss" Source="$(var.SolutionDir)..\..\..\Data\dark.qss" KeyPath="yes" Checksum="yes" ReadOnly="yes"/>
|
||||
</Component>
|
||||
<Component Id="VersionHistory.txt" Guid="8b031217-9e7d-4700-9ab8-2593a4e002b6">
|
||||
<File Id="VersionHistory.txt" Source="$(var.SolutionDir)..\..\..\Data\Version History.txt" KeyPath="yes" Checksum="yes" />
|
||||
</Component>
|
||||
<Component Id="Qt5Core.dll" Guid="0198dd4b-9bbb-4ea2-86e3-6ea0f4f6ac51">
|
||||
<File Id="Qt5Core.dll" Source="$(env.QTDIR)\bin\Qt5Core.dll" KeyPath="yes" Checksum="yes" ProcessorArchitecture="x64"/>
|
||||
</Component>
|
||||
<Component Id="Qt5Gui.dll" Guid="7f93dcc2-55db-4920-83d7-e06c23f7719a">
|
||||
<File Id="Qt5Gui.dll" Source="$(env.QTDIR)\bin\Qt5Gui.dll" KeyPath="yes" Checksum="yes" ProcessorArchitecture="x64"/>
|
||||
</Component>
|
||||
<Component Id="Qt5Widgets.dll" Guid="006bb2f1-7a38-426f-ba2c-5196d1d6c24d">
|
||||
<File Id="Qt5Widgets.dll" Source="$(env.QTDIR)\bin\Qt5Widgets.dll" KeyPath="yes" Checksum="yes" ProcessorArchitecture="x64"/>
|
||||
</Component>
|
||||
</ComponentGroup>
|
||||
</Fragment>
|
||||
|
||||
<Fragment>
|
||||
<ComponentGroup Id="PlatformComponents" Directory="INSTALLFOLDERPLATFORMS">
|
||||
<Component Id="qwindows.dll" Guid="627b7f5a-8fa6-4c78-a6b7-81fcdd8fdd63">
|
||||
<File Id="qwindows.dll" Source="$(env.QTDIR)\plugins\platforms\qwindows.dll" KeyPath="yes" Checksum="yes" ProcessorArchitecture="x64"/>
|
||||
</Component>
|
||||
</ComponentGroup>
|
||||
</Fragment>
|
||||
<Fragment>
|
||||
<Component Id="FractoriumStartMenuShortcut" Directory="ProgramMenuDirLevel1" Guid="f1eaf3ba-9b61-48b6-8994-49ebc6b405aa">
|
||||
<Shortcut Id="FractoriumStartMenuShortcut"
|
||||
Directory="ProgramMenuDirLevel1"
|
||||
Name="Fractorium"
|
||||
Target="[INSTALLFOLDER]\Fractorium.exe"
|
||||
WorkingDirectory="INSTALLFOLDER"
|
||||
Icon="AddRemoveProgramsIcon"
|
||||
/>
|
||||
<Condition>1</Condition>
|
||||
<RemoveFolder Id="FractoriumStartMenuShortcut" On="uninstall" />
|
||||
<RegistryValue Root='HKCU' Key='Software\[Manufacturer]\[ProductName]' Type='string' Value='' KeyPath='yes' />
|
||||
</Component>
|
||||
<Component Id="FractoriumDesktopShortcut" Directory="DesktopFolder" Guid="b73ff21c-08ac-47ad-a510-b3ce90e43979">
|
||||
<Shortcut Id="FractoriumDesktopShortcut"
|
||||
Directory="DesktopFolder"
|
||||
Name="Fractorium"
|
||||
Target="[INSTALLFOLDER]\Fractorium.exe"
|
||||
WorkingDirectory="INSTALLFOLDER"
|
||||
Icon="AddRemoveProgramsIcon"
|
||||
/>
|
||||
<RemoveFolder Id="FractoriumDesktopShortcut" On="uninstall" />
|
||||
<Condition>1</Condition>
|
||||
<RegistryValue Root='HKCU' Key='Software\[Manufacturer]\[ProductName]' Type='string' Value='' KeyPath='yes' />
|
||||
</Component>
|
||||
</Fragment>
|
||||
|
||||
<Fragment>
|
||||
<ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
|
||||
<Component Id="Fractorium.exe" Guid="ccc04ca4-c747-4330-8cfd-bdd943b185c0">
|
||||
<File Id="Fractorium.exe" Source="$(var.SolutionDir)..\..\..\Bin\$(var.Platform)\$(var.Configuration)\Fractorium.exe" KeyPath="yes" Checksum="yes" ProcessorArchitecture="x64" />
|
||||
</Component>
|
||||
<Component Id="EmberRender.exe" Guid="12d49219-9269-495a-b8e4-3d33cb32d280">
|
||||
<File Id="EmberRender.exe" Source="$(var.SolutionDir)..\..\..\Bin\$(var.Platform)\$(var.Configuration)\EmberRender.exe" KeyPath="yes" Checksum="yes" ProcessorArchitecture="x64" />
|
||||
</Component>
|
||||
<Component Id="EmberAnimate.exe" Guid="ae362704-93a3-48dc-a13b-7c4eabd87ee1">
|
||||
<File Id="EmberAnimate.exe" Source="$(var.SolutionDir)..\..\..\Bin\$(var.Platform)\$(var.Configuration)\EmberAnimate.exe" KeyPath="yes" Checksum="yes" ProcessorArchitecture="x64" />
|
||||
</Component>
|
||||
<Component Id="EmberGenome.exe" Guid="7a93f079-216a-4d1c-9b02-8ca93a6a8daa">
|
||||
<File Id="EmberGenome.exe" Source="$(var.SolutionDir)..\..\..\Bin\$(var.Platform)\$(var.Configuration)\EmberGenome.exe" KeyPath="yes" Checksum="yes" ProcessorArchitecture="x64" />
|
||||
</Component>
|
||||
<Component Id="Ember.dll" Guid="c0f80dee-7a16-4d6a-b7ed-d6cd162154eb">
|
||||
<File Id="Ember.dll" Source="$(var.SolutionDir)..\..\..\Bin\$(var.Platform)\$(var.Configuration)\Ember.dll" KeyPath="yes" Checksum="yes" ProcessorArchitecture="x64"/>
|
||||
</Component>
|
||||
<Component Id="EmberCL.dll" Guid="21c0e372-c605-4e0d-9ba8-94e38949833b">
|
||||
<File Id="EmberCL.dll" Source="$(var.SolutionDir)..\..\..\Bin\$(var.Platform)\$(var.Configuration)\EmberCL.dll" KeyPath="yes" Checksum="yes" ProcessorArchitecture="x64"/>
|
||||
</Component>
|
||||
<Component Id="libxml2.dll" Guid="bb3aa687-7a3d-4d16-a27c-28529b472754">
|
||||
<File Id="libxml2.dll" Source="$(var.SolutionDir)..\..\..\Bin\$(var.Platform)\Release\libxml2.dll" KeyPath="yes" Checksum="yes" ProcessorArchitecture="x64"/>
|
||||
</Component>
|
||||
<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"/>
|
||||
</Component>
|
||||
<Component Id="msvcp140.dll" Guid="8f1ffde7-c1bd-45fb-8bc8-26dde552eafd">
|
||||
<File Id="msvcp140.dll" Source="$(env.VS140COMNTOOLS)..\..\VC\redist\x64\Microsoft.VC140.CRT\msvcp140.dll" KeyPath="yes" Checksum="yes" />
|
||||
</Component>
|
||||
<Component Id="vcruntime140.dll" Guid="50c9bc27-c547-4a03-9f6c-cd416f449dd8">
|
||||
<File Id="vcruntime140.dll" Source="$(env.VS140COMNTOOLS)..\..\VC\redist\x64\Microsoft.VC140.CRT\vcruntime140.dll" KeyPath="yes" Checksum="yes" />
|
||||
</Component>
|
||||
<Component Id="vccorlib140.dll" Guid="affe33e7-1e64-4bb0-a062-2b56f77459b4">
|
||||
<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 Id="flam3palettes.xml" Guid="d3adb0bb-14ef-4923-99d9-a5784b7ef04e">
|
||||
<File Id="flam3palettes.xml" Source="$(var.SolutionDir)..\..\..\Data\flam3-palettes.xml" KeyPath="yes" Checksum="yes" />
|
||||
</Component>
|
||||
|
||||
<Component Id="userpalettes.xml" Guid="53e1e43e-b01e-4159-94fa-bdf6e8fd1d57">
|
||||
<File Id="userpalettes.xml" Source="$(var.SolutionDir)..\..\..\Data\user-palettes.xml" KeyPath="yes" Checksum="yes" />
|
||||
</Component>
|
||||
|
||||
<Component Id="boxtail_pack_02.gradient" Guid="f9bd8f21-6a61-4e4a-a7e6-bc50f2633dd6">
|
||||
<File Id="boxtail_pack_02.gradient" Source="$(var.SolutionDir)..\..\..\Data\boxtail_pack_02.gradient" KeyPath="yes" Checksum="yes" />
|
||||
</Component>
|
||||
|
||||
<Component Id="boxtail_pack_03_triangle.gradient" Guid="19d4957a-7ce7-4afd-b74b-5049265dffa2">
|
||||
<File Id="boxtail_pack_03_triangle.gradient" Source="$(var.SolutionDir)..\..\..\Data\boxtail_pack_03_triangle.gradient" KeyPath="yes" Checksum="yes" />
|
||||
</Component>
|
||||
|
||||
<Component Id="boxtail_pack_04_mineshack.gradient" Guid="2f144d87-97bd-4fe6-8000-f0a9e62f770f">
|
||||
<File Id="boxtail_pack_04_mineshack.gradient" Source="$(var.SolutionDir)..\..\..\Data\boxtail_pack_04_mineshack.gradient" KeyPath="yes" Checksum="yes" />
|
||||
</Component>
|
||||
|
||||
<Component Id="fardareismai_pack_01_variety_number_128.gradient" Guid="9ee0a298-b35b-4501-9beb-c0cdca41ca25">
|
||||
<File Id="fardareismai_pack_01_variety_number_128.gradient" Source="$(var.SolutionDir)..\..\..\Data\fardareismai_pack_01_variety_number_128.gradient" KeyPath="yes" Checksum="yes" />
|
||||
</Component>
|
||||
|
||||
<Component Id="fardareismai_pack_02_b_sides.gradient" Guid="69e0c7d9-283b-4161-a924-b015eb658e8d">
|
||||
<File Id="fardareismai_pack_02_b_sides.gradient" Source="$(var.SolutionDir)..\..\..\Data\fardareismai_pack_02_b_sides.gradient" KeyPath="yes" Checksum="yes" />
|
||||
</Component>
|
||||
|
||||
<Component Id="fardareismai_pack_03_old_and_new.gradient" Guid="1059241b-67e7-4a36-878d-675f3282c530">
|
||||
<File Id="fardareismai_pack_03_old_and_new.gradient" Source="$(var.SolutionDir)..\..\..\Data\fardareismai_pack_03_old_and_new.gradient" KeyPath="yes" Checksum="yes" />
|
||||
</Component>
|
||||
|
||||
<Component Id="fardareismai_pack_04_hoard.gradient" Guid="c611ee88-e0f4-493b-84f5-c65f899d43f3">
|
||||
<File Id="fardareismai_pack_04_hoard.gradient" Source="$(var.SolutionDir)..\..\..\Data\fardareismai_pack_04_hoard.gradient" KeyPath="yes" Checksum="yes" />
|
||||
</Component>
|
||||
|
||||
<Component Id="fractaldesire_pack_01.gradient" Guid="9f0885ab-920f-420d-a962-9bc515986701">
|
||||
<File Id="fractaldesire_pack_01.gradient" Source="$(var.SolutionDir)..\..\..\Data\fractaldesire_pack_01.gradient" KeyPath="yes" Checksum="yes" />
|
||||
</Component>
|
||||
|
||||
<Component Id="rce_ordinary_pack_01_colornation.gradient" Guid="8eb62cb8-279b-4518-9098-c0fec5830493">
|
||||
<File Id="rce_ordinary_pack_01_colornation.gradient" Source="$(var.SolutionDir)..\..\..\Data\rce_ordinary_pack_01_colornation.gradient" KeyPath="yes" Checksum="yes" />
|
||||
</Component>
|
||||
|
||||
<Component Id="tatasz_pack_01.gradient" Guid="967c9577-74d1-4bc0-aa52-2fb78507b572">
|
||||
<File Id="tatasz_pack_01.gradient" Source="$(var.SolutionDir)..\..\..\Data\tatasz_pack_01.gradient" KeyPath="yes" Checksum="yes" />
|
||||
</Component>
|
||||
|
||||
<Component Id="tatasz_pack_02_colder.gradient" Guid="304976a2-8ae7-47eb-bf1f-c6f3cbe380b8">
|
||||
<File Id="tatasz_pack_02_colder.gradient" Source="$(var.SolutionDir)..\..\..\Data\tatasz_pack_02_colder.gradient" KeyPath="yes" Checksum="yes" />
|
||||
</Component>
|
||||
|
||||
<Component Id="tatasz_pack_02_dark.gradient" Guid="05ed49cf-364c-4547-a107-2bd46afc6664">
|
||||
<File Id="tatasz_pack_02_dark.gradient" Source="$(var.SolutionDir)..\..\..\Data\tatasz_pack_02_dark.gradient" KeyPath="yes" Checksum="yes" />
|
||||
</Component>
|
||||
|
||||
<Component Id="tatasz_pack_02_warmer.gradient" Guid="62282580-0ae3-484e-98ba-38ec7bbf80e2">
|
||||
<File Id="tatasz_pack_02_warmer.gradient" Source="$(var.SolutionDir)..\..\..\Data\tatasz_pack_02_warmer.gradient" KeyPath="yes" Checksum="yes" />
|
||||
</Component>
|
||||
|
||||
<Component Id="tatasz_pack_03.gradient" Guid="7e5b5ef3-45be-4807-a88f-a8b773663e77">
|
||||
<File Id="tatasz_pack_03.gradient" Source="$(var.SolutionDir)..\..\..\Data\tatasz_pack_03.gradient" KeyPath="yes" Checksum="yes" />
|
||||
</Component>
|
||||
<Component Id="dark.qss" Guid="c120ace3-5fab-416f-b7f1-a8d9e3e0f061">
|
||||
<File Id="dark.qss" Source="$(var.SolutionDir)..\..\..\Data\dark.qss" KeyPath="yes" Checksum="yes" ReadOnly="yes"/>
|
||||
</Component>
|
||||
<Component Id="VersionHistory.txt" Guid="8b031217-9e7d-4700-9ab8-2593a4e002b6">
|
||||
<File Id="VersionHistory.txt" Source="$(var.SolutionDir)..\..\..\Data\Version History.txt" KeyPath="yes" Checksum="yes" />
|
||||
</Component>
|
||||
<Component Id="Qt5Core.dll" Guid="0198dd4b-9bbb-4ea2-86e3-6ea0f4f6ac51">
|
||||
<File Id="Qt5Core.dll" Source="$(env.QTDIR)\bin\Qt5Core.dll" KeyPath="yes" Checksum="yes" ProcessorArchitecture="x64"/>
|
||||
</Component>
|
||||
<Component Id="Qt5Gui.dll" Guid="7f93dcc2-55db-4920-83d7-e06c23f7719a">
|
||||
<File Id="Qt5Gui.dll" Source="$(env.QTDIR)\bin\Qt5Gui.dll" KeyPath="yes" Checksum="yes" ProcessorArchitecture="x64"/>
|
||||
</Component>
|
||||
<Component Id="Qt5Widgets.dll" Guid="006bb2f1-7a38-426f-ba2c-5196d1d6c24d">
|
||||
<File Id="Qt5Widgets.dll" Source="$(env.QTDIR)\bin\Qt5Widgets.dll" KeyPath="yes" Checksum="yes" ProcessorArchitecture="x64"/>
|
||||
</Component>
|
||||
</ComponentGroup>
|
||||
</Fragment>
|
||||
|
||||
<Fragment>
|
||||
<ComponentGroup Id="PlatformComponents" Directory="INSTALLFOLDERPLATFORMS">
|
||||
<Component Id="qwindows.dll" Guid="627b7f5a-8fa6-4c78-a6b7-81fcdd8fdd63">
|
||||
<File Id="qwindows.dll" Source="$(env.QTDIR)\plugins\platforms\qwindows.dll" KeyPath="yes" Checksum="yes" ProcessorArchitecture="x64"/>
|
||||
</Component>
|
||||
</ComponentGroup>
|
||||
</Fragment>
|
||||
</Wix>
|
||||
Binary file not shown.
@@ -0,0 +1,172 @@
|
||||
<?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>
|
||||
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
|
||||
<RuntimeTypeInfo>true</RuntimeTypeInfo>
|
||||
</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>
|
||||
<RuntimeTypeInfo>true</RuntimeTypeInfo>
|
||||
</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\EmberToXml.cpp" />
|
||||
<ClCompile Include="..\..\..\Source\Ember\PaletteList.cpp" />
|
||||
<ClCompile Include="..\..\..\Source\Ember\Renderer.cpp" />
|
||||
<ClCompile Include="..\..\..\Source\Ember\RendererBase.cpp" />
|
||||
<ClCompile Include="..\..\..\Source\Ember\VariationList.cpp" />
|
||||
<ClCompile Include="..\..\..\Source\Ember\XmlToEmber.cpp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ResourceCompile Include="Ember.rc" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
||||
@@ -0,0 +1,169 @@
|
||||
<?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>
|
||||
<ClCompile Include="..\..\..\Source\Ember\EmberToXml.cpp">
|
||||
<Filter>Header Files\Xml</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\Source\Ember\XmlToEmber.cpp">
|
||||
<Filter>Header Files\Xml</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\Source\Ember\PaletteList.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ResourceCompile Include="Ember.rc">
|
||||
<Filter>Resource Files</Filter>
|
||||
</ResourceCompile>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
@@ -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
|
||||
|
||||
@@ -0,0 +1,152 @@
|
||||
<?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>
|
||||
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
|
||||
<RuntimeTypeInfo>true</RuntimeTypeInfo>
|
||||
</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>
|
||||
<RuntimeTypeInfo>true</RuntimeTypeInfo>
|
||||
</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>
|
||||
@@ -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.
@@ -0,0 +1,154 @@
|
||||
<?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>
|
||||
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
|
||||
<RuntimeTypeInfo>true</RuntimeTypeInfo>
|
||||
</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>
|
||||
<RuntimeTypeInfo>true</RuntimeTypeInfo>
|
||||
</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>
|
||||
@@ -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>
|
||||
@@ -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
|
||||
|
||||
@@ -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>{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>
|
||||
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
|
||||
<RuntimeTypeInfo>true</RuntimeTypeInfo>
|
||||
</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>
|
||||
<RuntimeTypeInfo>true</RuntimeTypeInfo>
|
||||
</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>
|
||||
@@ -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>
|
||||
@@ -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
|
||||
|
||||
@@ -0,0 +1,152 @@
|
||||
<?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>
|
||||
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
|
||||
<RuntimeTypeInfo>true</RuntimeTypeInfo>
|
||||
</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>
|
||||
<RuntimeTypeInfo>true</RuntimeTypeInfo>
|
||||
</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>
|
||||
@@ -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>
|
||||
@@ -0,0 +1,144 @@
|
||||
<?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>
|
||||
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
|
||||
<RuntimeTypeInfo>true</RuntimeTypeInfo>
|
||||
</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>
|
||||
<RuntimeTypeInfo>true</RuntimeTypeInfo>
|
||||
</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>
|
||||
@@ -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.
@@ -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
|
||||
@@ -0,0 +1,770 @@
|
||||
<?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>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<PostBuildEventUseInBuild>true</PostBuildEventUseInBuild>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<PostBuildEventUseInBuild>true</PostBuildEventUseInBuild>
|
||||
</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>.;.\PaletteEditor;$(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)..\..\..\Source\Fractorium;$(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>
|
||||
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
|
||||
<RuntimeTypeInfo>true</RuntimeTypeInfo>
|
||||
</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\boxtail_pack_02.gradient" "$(OutDir)"
|
||||
xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\boxtail_pack_03_triangle.gradient" "$(OutDir)"
|
||||
xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\boxtail_pack_04_mineshack.gradient" "$(OutDir)"
|
||||
xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\fardareismai_pack_01_variety_number_128.gradient" "$(OutDir)"
|
||||
xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\fardareismai_pack_02_b_sides.gradient" "$(OutDir)"
|
||||
xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\fardareismai_pack_03_old_and_new.gradient" "$(OutDir)"
|
||||
xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\fardareismai_pack_04_hoard.gradient" "$(OutDir)"
|
||||
xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\fractaldesire_pack_01.gradient" "$(OutDir)"
|
||||
xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\rce_ordinary_pack_01_colornation.gradient" "$(OutDir)"
|
||||
xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\tatasz_pack_01.gradient" "$(OutDir)"
|
||||
xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\tatasz_pack_02_colder.gradient" "$(OutDir)"
|
||||
xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\tatasz_pack_02_dark.gradient" "$(OutDir)"
|
||||
xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\tatasz_pack_02_warmer.gradient" "$(OutDir)"
|
||||
xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\tatasz_pack_03.gradient" "$(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>.;.\PaletteEditor;$(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)..\..\..\Source\Fractorium;$(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>
|
||||
<RuntimeTypeInfo>true</RuntimeTypeInfo>
|
||||
</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\boxtail_pack_02.gradient" "$(OutDir)"
|
||||
xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\boxtail_pack_03_triangle.gradient" "$(OutDir)"
|
||||
xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\boxtail_pack_04_mineshack.gradient" "$(OutDir)"
|
||||
xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\fardareismai_pack_01_variety_number_128.gradient" "$(OutDir)"
|
||||
xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\fardareismai_pack_02_b_sides.gradient" "$(OutDir)"
|
||||
xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\fardareismai_pack_03_old_and_new.gradient" "$(OutDir)"
|
||||
xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\fardareismai_pack_04_hoard.gradient" "$(OutDir)"
|
||||
xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\fractaldesire_pack_01.gradient" "$(OutDir)"
|
||||
xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\rce_ordinary_pack_01_colornation.gradient" "$(OutDir)"
|
||||
xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\tatasz_pack_01.gradient" "$(OutDir)"
|
||||
xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\tatasz_pack_02_colder.gradient" "$(OutDir)"
|
||||
xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\tatasz_pack_02_dark.gradient" "$(OutDir)"
|
||||
xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\tatasz_pack_02_warmer.gradient" "$(OutDir)"
|
||||
xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\tatasz_pack_03.gradient" "$(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\PaletteEditor\ColorPanel.cpp" />
|
||||
<ClCompile Include="..\..\..\Source\Fractorium\PaletteEditor\ColorPickerWidget.cpp" />
|
||||
<ClCompile Include="..\..\..\Source\Fractorium\PaletteEditor\ColorTriangle.cpp" />
|
||||
<ClCompile Include="..\..\..\Source\Fractorium\PaletteEditor\GradientColorsView.cpp" />
|
||||
<ClCompile Include="..\..\..\Source\Fractorium\PaletteEditor\PaletteEditor.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_ColorPanel.cpp">
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="GeneratedFiles\Debug\moc_ColorPickerWidget.cpp">
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="GeneratedFiles\Debug\moc_ColorTriangle.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_GradientColorsView.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_PaletteEditor.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_ColorPanel.cpp">
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="GeneratedFiles\Release\moc_ColorPickerWidget.cpp">
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="GeneratedFiles\Release\moc_ColorTriangle.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_GradientColorsView.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_PaletteEditor.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" -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.\PaletteEditor" "-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)..\..\..\Source\Fractorium" "-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)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/VariationsDialog.h"</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" -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.\PaletteEditor" "-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)..\..\..\Source\Fractorium" "-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)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/VariationsDialog.h"</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" -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.\PaletteEditor" "-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)..\..\..\Source\Fractorium" "-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)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/QssDialog.h"</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" -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.\PaletteEditor" "-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)..\..\..\Source\Fractorium" "-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)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/QssDialog.h"</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" -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.\PaletteEditor" "-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)..\..\..\Source\Fractorium" "-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)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/csshighlighter.h"</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" -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.\PaletteEditor" "-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)..\..\..\Source\Fractorium" "-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)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/csshighlighter.h"</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" -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.\PaletteEditor" "-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)..\..\..\Source\Fractorium" "-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)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/LibraryTreeWidget.h"</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" -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.\PaletteEditor" "-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)..\..\..\Source\Fractorium" "-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)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/LibraryTreeWidget.h"</Command>
|
||||
</CustomBuild>
|
||||
<CustomBuild Include="..\..\..\Source\Fractorium\PaletteEditor\ColorPanel.h">
|
||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
|
||||
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing ColorPanel.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/PaletteEditor/ColorPanel.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.\PaletteEditor" "-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)..\..\..\Source\Fractorium" "-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 ColorPanel.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/PaletteEditor/ColorPanel.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.\PaletteEditor" "-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)..\..\..\Source\Fractorium" "-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>
|
||||
<CustomBuild Include="..\..\..\Source\Fractorium\PaletteEditor\ColorPickerWidget.h">
|
||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
|
||||
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing ColorPickerWidget.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/PaletteEditor/ColorPickerWidget.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.\PaletteEditor" "-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)..\..\..\Source\Fractorium" "-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 ColorPickerWidget.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/PaletteEditor/ColorPickerWidget.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.\PaletteEditor" "-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)..\..\..\Source\Fractorium" "-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>
|
||||
<CustomBuild Include="..\..\..\Source\Fractorium\PaletteEditor\ColorTriangle.h">
|
||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
|
||||
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing ColorTriangle.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/PaletteEditor/ColorTriangle.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.\PaletteEditor" "-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)..\..\..\Source\Fractorium" "-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 ColorTriangle.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/PaletteEditor/ColorTriangle.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.\PaletteEditor" "-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)..\..\..\Source\Fractorium" "-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\PaletteEditor\GradientArrow.h" />
|
||||
<CustomBuild Include="..\..\..\Source\Fractorium\PaletteEditor\GradientColorsView.h">
|
||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
|
||||
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing GradientColorsView.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/PaletteEditor/GradientColorsView.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.\PaletteEditor" "-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)..\..\..\Source\Fractorium" "-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 GradientColorsView.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/PaletteEditor/GradientColorsView.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.\PaletteEditor" "-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)..\..\..\Source\Fractorium" "-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>
|
||||
<CustomBuild Include="..\..\..\Source\Fractorium\PaletteEditor\PaletteEditor.h">
|
||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
|
||||
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing PaletteEditor.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/PaletteEditor/PaletteEditor.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.\PaletteEditor" "-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)..\..\..\Source\Fractorium" "-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 PaletteEditor.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/PaletteEditor/PaletteEditor.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.\PaletteEditor" "-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)..\..\..\Source\Fractorium" "-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" -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.\PaletteEditor" "-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)..\..\..\Source\Fractorium" "-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)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/QssTextEdit.h"</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" -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.\PaletteEditor" "-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)..\..\..\Source\Fractorium" "-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)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/QssTextEdit.h"</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_paletteeditor.h" />
|
||||
<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" -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.\PaletteEditor" "-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)..\..\..\Source\Fractorium" "-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)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/OptionsDialog.h"</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" -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.\PaletteEditor" "-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)..\..\..\Source\Fractorium" "-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)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/OptionsDialog.h"</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" -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.\PaletteEditor" "-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)..\..\..\Source\Fractorium" "-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)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/AboutDialog.h"</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" -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.\PaletteEditor" "-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)..\..\..\Source\Fractorium" "-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)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/AboutDialog.h"</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" -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.\PaletteEditor" "-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)..\..\..\Source\Fractorium" "-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)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/FinalRenderDialog.h"</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" -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.\PaletteEditor" "-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)..\..\..\Source\Fractorium" "-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)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/FinalRenderDialog.h"</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" -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.\PaletteEditor" "-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)..\..\..\Source\Fractorium" "-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)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/FractoriumSettings.h"</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" -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.\PaletteEditor" "-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)..\..\..\Source\Fractorium" "-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)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/FractoriumSettings.h"</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" -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.\PaletteEditor" "-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)..\..\..\Source\Fractorium" "-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)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/TwoButtonComboWidget.h"</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" -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.\PaletteEditor" "-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)..\..\..\Source\Fractorium" "-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)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/TwoButtonComboWidget.h"</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" -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.\PaletteEditor" "-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)..\..\..\Source\Fractorium" "-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)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/CurvesGraphicsView.h"</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" -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.\PaletteEditor" "-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)..\..\..\Source\Fractorium" "-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)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/CurvesGraphicsView.h"</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" -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.\PaletteEditor" "-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)..\..\..\Source\Fractorium" "-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)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/DoubleSpinBoxTableItemDelegate.h"</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" -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.\PaletteEditor" "-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)..\..\..\Source\Fractorium" "-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)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/DoubleSpinBoxTableItemDelegate.h"</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" -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.\PaletteEditor" "-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)..\..\..\Source\Fractorium" "-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)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/GLWidget.h"</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" -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.\PaletteEditor" "-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)..\..\..\Source\Fractorium" "-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)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/GLWidget.h"</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" -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.\PaletteEditor" "-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)..\..\..\Source\Fractorium" "-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)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/DoubleSpinBox.h"</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" -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.\PaletteEditor" "-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)..\..\..\Source\Fractorium" "-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)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/DoubleSpinBox.h"</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" -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.\PaletteEditor" "-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)..\..\..\Source\Fractorium" "-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)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/SpinBox.h"</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" -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.\PaletteEditor" "-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)..\..\..\Source\Fractorium" "-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)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/SpinBox.h"</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" -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.\PaletteEditor" "-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)..\..\..\Source\Fractorium" "-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)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/StealthComboBox.h"</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" -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.\PaletteEditor" "-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)..\..\..\Source\Fractorium" "-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)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/StealthComboBox.h"</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" -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.\PaletteEditor" "-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)..\..\..\Source\Fractorium" "-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)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/TableWidget.h"</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" -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.\PaletteEditor" "-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)..\..\..\Source\Fractorium" "-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)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/TableWidget.h"</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" -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.\PaletteEditor" "-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)..\..\..\Source\Fractorium" "-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)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/Fractorium.h"</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" -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.\PaletteEditor" "-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)..\..\..\Source\Fractorium" "-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)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/Fractorium.h"</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>
|
||||
<CustomBuild Include="..\..\..\Source\Fractorium\paletteeditor.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>
|
||||
@@ -0,0 +1,489 @@
|
||||
<?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>
|
||||
<Filter Include="Dialogs\PaletteEditor">
|
||||
<UniqueIdentifier>{30bfa226-b712-471b-a4ff-cf01d10cf1f4}</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>
|
||||
<ClCompile Include="..\..\..\Source\Fractorium\PaletteEditor\ColorPanel.cpp">
|
||||
<Filter>Dialogs\PaletteEditor</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="GeneratedFiles\Debug\moc_ColorPanel.cpp">
|
||||
<Filter>Generated Files\Debug</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="GeneratedFiles\Release\moc_ColorPanel.cpp">
|
||||
<Filter>Generated Files\Release</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\Source\Fractorium\PaletteEditor\ColorPickerWidget.cpp">
|
||||
<Filter>Dialogs\PaletteEditor</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="GeneratedFiles\Debug\moc_ColorPickerWidget.cpp">
|
||||
<Filter>Generated Files\Debug</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="GeneratedFiles\Release\moc_ColorPickerWidget.cpp">
|
||||
<Filter>Generated Files\Release</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\Source\Fractorium\PaletteEditor\ColorTriangle.cpp">
|
||||
<Filter>Dialogs\PaletteEditor</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="GeneratedFiles\Debug\moc_ColorTriangle.cpp">
|
||||
<Filter>Generated Files\Debug</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="GeneratedFiles\Release\moc_ColorTriangle.cpp">
|
||||
<Filter>Generated Files\Release</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\Source\Fractorium\PaletteEditor\GradientColorsView.cpp">
|
||||
<Filter>Dialogs\PaletteEditor</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="GeneratedFiles\Debug\moc_GradientColorsView.cpp">
|
||||
<Filter>Generated Files\Debug</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="GeneratedFiles\Release\moc_GradientColorsView.cpp">
|
||||
<Filter>Generated Files\Release</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\Source\Fractorium\PaletteEditor\PaletteEditor.cpp">
|
||||
<Filter>Dialogs\PaletteEditor</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="GeneratedFiles\Debug\moc_PaletteEditor.cpp">
|
||||
<Filter>Generated Files\Debug</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="GeneratedFiles\Release\moc_PaletteEditor.cpp">
|
||||
<Filter>Generated Files\Release</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>
|
||||
<ClInclude Include="..\..\..\Source\Fractorium\PaletteEditor\GradientArrow.h">
|
||||
<Filter>Dialogs\PaletteEditor</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="GeneratedFiles\ui_paletteeditor.h">
|
||||
<Filter>Generated Files</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>
|
||||
<CustomBuild Include="..\..\..\Source\Fractorium\PaletteEditor\ColorPanel.h">
|
||||
<Filter>Dialogs\PaletteEditor</Filter>
|
||||
</CustomBuild>
|
||||
<CustomBuild Include="..\..\..\Source\Fractorium\PaletteEditor\ColorPickerWidget.h">
|
||||
<Filter>Dialogs\PaletteEditor</Filter>
|
||||
</CustomBuild>
|
||||
<CustomBuild Include="..\..\..\Source\Fractorium\PaletteEditor\ColorTriangle.h">
|
||||
<Filter>Dialogs\PaletteEditor</Filter>
|
||||
</CustomBuild>
|
||||
<CustomBuild Include="..\..\..\Source\Fractorium\PaletteEditor\GradientColorsView.h">
|
||||
<Filter>Dialogs\PaletteEditor</Filter>
|
||||
</CustomBuild>
|
||||
<CustomBuild Include="..\..\..\Source\Fractorium\PaletteEditor\PaletteEditor.h">
|
||||
<Filter>Dialogs\PaletteEditor</Filter>
|
||||
</CustomBuild>
|
||||
<CustomBuild Include="..\..\..\Source\Fractorium\paletteeditor.ui">
|
||||
<Filter>Form Files</Filter>
|
||||
</CustomBuild>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="..\..\..\Source\Fractorium\Icons\Fractorium.ico" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ResourceCompile Include="Fractorium.rc">
|
||||
<Filter>Resource Files</Filter>
|
||||
</ResourceCompile>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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>
|
||||
@@ -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
|
||||
@@ -38,9 +38,12 @@ SOURCES += \
|
||||
$$PRJ_SRC_DIR/DllMain.cpp \
|
||||
$$PRJ_SRC_DIR/Ember.cpp \
|
||||
$$PRJ_SRC_DIR/EmberPch.cpp \
|
||||
$$PRJ_SRC_DIR/EmberToXml.cpp \
|
||||
$$PRJ_SRC_DIR/PaletteList.cpp \
|
||||
$$PRJ_SRC_DIR/RendererBase.cpp \
|
||||
$$PRJ_SRC_DIR/Renderer.cpp \
|
||||
$$PRJ_SRC_DIR/VariationList.cpp
|
||||
$$PRJ_SRC_DIR/VariationList.cpp \
|
||||
$$PRJ_SRC_DIR/XmlToEmber.cpp
|
||||
|
||||
include(deployment.pri)
|
||||
qtcAddDeployment()
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
TEMPLATE = app
|
||||
CONFIG += console
|
||||
CONFIG -= app_bundle
|
||||
|
||||
# Uncomment this if you only want to build a binary instead of an app bundle.
|
||||
#macx:CONFIG -= app_bundle
|
||||
|
||||
CONFIG -= qt
|
||||
|
||||
TARGET = emberanimate
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
TEMPLATE = app
|
||||
CONFIG += console
|
||||
CONFIG -= app_bundle
|
||||
|
||||
# Uncomment this if you only want to build a binary instead of an app bundle.
|
||||
#macx:CONFIG -= app_bundle
|
||||
|
||||
CONFIG -= qt
|
||||
|
||||
TARGET = embergenome
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
TEMPLATE = app
|
||||
CONFIG += console
|
||||
CONFIG -= app_bundle
|
||||
|
||||
# Uncomment this if you only want to build a binary instead of an app bundle.
|
||||
#macx:CONFIG -= app_bundle
|
||||
|
||||
CONFIG -= qt
|
||||
|
||||
TARGET = emberrender
|
||||
|
||||
@@ -43,17 +43,32 @@ CONFIG(debug, debug|release) {
|
||||
|
||||
#For some reason, a Qt project needs to be told to look at itself.
|
||||
INCLUDEPATH += $$PRJ_SRC_DIR
|
||||
INCLUDEPATH += $$PRJ_SRC_DIR/PaletteEditor
|
||||
|
||||
# TODO: Figure out how to build the app bundle correctly.
|
||||
# This will build a binary instead of an app bundle.
|
||||
macx:CONFIG -= app_bundle
|
||||
# Uncomment this if you only want to build a binary instead of an app bundle.
|
||||
#macx:CONFIG -= app_bundle
|
||||
|
||||
target.path = $$BIN_INSTALL_DIR
|
||||
#message(TARGET INSTALL: $$target.path)
|
||||
INSTALLS += target
|
||||
|
||||
palettes.path = $$SHARE_INSTALL_DIR
|
||||
palettes.files = $$ASSETS_DIR/flam3-palettes.xml
|
||||
palettes.files = $$ASSETS_DIR/flam3-palettes.xml \
|
||||
$$ASSETS_DIR/boxtail_pack_02.gradient \
|
||||
$$ASSETS_DIR/boxtail_pack_03_triangle.gradient \
|
||||
$$ASSETS_DIR/boxtail_pack_04_mineshack.gradient \
|
||||
$$ASSETS_DIR/fardareismai_pack_01_variety_number_128.gradient \
|
||||
$$ASSETS_DIR/fardareismai_pack_02_b_sides.gradient \
|
||||
$$ASSETS_DIR/fardareismai_pack_03_old_and_new.gradient \
|
||||
$$ASSETS_DIR/fardareismai_pack_04_hoard.gradient \
|
||||
$$ASSETS_DIR/fractaldesire_pack_01.gradient \
|
||||
$$ASSETS_DIR/rce_ordinary_pack_01_colornation.gradient \
|
||||
$$ASSETS_DIR/tatasz_pack_01.gradient \
|
||||
$$ASSETS_DIR/tatasz_pack_02_colder.gradient \
|
||||
$$ASSETS_DIR/tatasz_pack_02_dark.gradient \
|
||||
$$ASSETS_DIR/tatasz_pack_02_warmer.gradient \
|
||||
$$ASSETS_DIR/tatasz_pack_03.gradient
|
||||
|
||||
#message(PALETTE INSTALL SOURCE: $$palettes.files)
|
||||
INSTALLS += palettes
|
||||
|
||||
@@ -114,7 +129,12 @@ SOURCES += \
|
||||
$$PRJ_SRC_DIR/QssTextEdit.cpp \
|
||||
$$PRJ_SRC_DIR/SpinBox.cpp \
|
||||
$$PRJ_SRC_DIR/VariationsDialog.cpp \
|
||||
$$PRJ_SRC_DIR/LibraryTreeWidget.cpp
|
||||
$$PRJ_SRC_DIR/LibraryTreeWidget.cpp \
|
||||
$$PRJ_SRC_DIR/PaletteEditor/ColorPanel.cpp \
|
||||
$$PRJ_SRC_DIR/PaletteEditor/ColorPickerWidget.cpp \
|
||||
$$PRJ_SRC_DIR/PaletteEditor/ColorTriangle.cpp \
|
||||
$$PRJ_SRC_DIR/PaletteEditor/GradientColorsView.cpp \
|
||||
$$PRJ_SRC_DIR/PaletteEditor/PaletteEditor.cpp
|
||||
|
||||
HEADERS += \
|
||||
$$SRC_COMMON_DIR/EmberCommon.h \
|
||||
@@ -150,7 +170,13 @@ HEADERS += \
|
||||
$$PRJ_SRC_DIR/TwoButtonComboWidget.h \
|
||||
$$PRJ_SRC_DIR/VariationsDialog.h \
|
||||
$$PRJ_SRC_DIR/VariationTreeWidgetItem.h \
|
||||
$$PRJ_SRC_DIR/LibraryTreeWidget.h
|
||||
$$PRJ_SRC_DIR/LibraryTreeWidget.h \
|
||||
$$PRJ_SRC_DIR/PaletteEditor/ColorPanel.h \
|
||||
$$PRJ_SRC_DIR/PaletteEditor/ColorPickerWidget.h \
|
||||
$$PRJ_SRC_DIR/PaletteEditor/ColorTriangle.h \
|
||||
$$PRJ_SRC_DIR/PaletteEditor/GradientArrow.h \
|
||||
$$PRJ_SRC_DIR/PaletteEditor/GradientColorsView.h \
|
||||
$$PRJ_SRC_DIR/PaletteEditor/PaletteEditor.h
|
||||
|
||||
FORMS += \
|
||||
$$PRJ_SRC_DIR/AboutDialog.ui \
|
||||
@@ -158,7 +184,8 @@ FORMS += \
|
||||
$$PRJ_SRC_DIR/Fractorium.ui \
|
||||
$$PRJ_SRC_DIR/OptionsDialog.ui \
|
||||
$$PRJ_SRC_DIR/QssDialog.ui \
|
||||
$$PRJ_SRC_DIR/VariationsDialog.ui
|
||||
$$PRJ_SRC_DIR/VariationsDialog.ui \
|
||||
$$PRJ_SRC_DIR/PaletteEditor.ui
|
||||
|
||||
OTHER_FILES += \
|
||||
$$PRJ_SRC_DIR/Fractorium.aps \
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
VERSION = 0.9.9.5
|
||||
VERSION = 1.0.0.2
|
||||
win32:CONFIG += skip_target_version_ext
|
||||
CONFIG += c++14
|
||||
#message(PWD: $$absolute_path($$PWD))
|
||||
|
||||
#1) Declare the root of all files in this project, everything else will be
|
||||
@@ -50,7 +51,14 @@ win32 {
|
||||
INCLUDEPATH += /usr/local/include/GL
|
||||
INCLUDEPATH += /usr/include/glm
|
||||
INCLUDEPATH += /usr/include/tbb
|
||||
INCLUDEPATH += /usr/include/libxml2
|
||||
|
||||
unix:!macx {
|
||||
INCLUDEPATH += /usr/include/libxml2
|
||||
}
|
||||
else {
|
||||
INCLUDEPATH += /usr/local/opt/libxml2/include/libxml2
|
||||
}
|
||||
|
||||
#libjpeg and libpng aren't in separate folders, so nothing to add here for them.
|
||||
}
|
||||
|
||||
@@ -61,13 +69,19 @@ win32 {
|
||||
LIBS = ""
|
||||
LIBS += OpenGL32.lib
|
||||
LIBS += WS2_32.lib
|
||||
LIBS += $$(AMDAPPSDKROOT)/lib/x86_64/OpenCL.lib
|
||||
LIBS += $$(CUDA_PATH)/lib/x64/OpenCL.lib
|
||||
LIBS += $$absolute_path($$EXTERNAL_LIB)/libjpeg.lib
|
||||
LIBS += $$absolute_path($$EXTERNAL_LIB)/libpng.lib /NODEFAULTLIB:LIBCMT
|
||||
LIBS += $$absolute_path($$EXTERNAL_LIB)/libxml2.lib
|
||||
LIBS += $$absolute_path($$EXTERNAL_LIB)/tbb.lib
|
||||
LIBS += $$absolute_path($$EXTERNAL_LIB)/zlib.lib
|
||||
_AMDAPPSDK = $$(AMDAPPSDKROOT)
|
||||
|
||||
isEmpty(_AMDAPPSDK) {
|
||||
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)/libpng.lib
|
||||
LIBS += $$absolute_path($$EXTERNAL_LIB)/libxml2.lib
|
||||
LIBS += $$absolute_path($$EXTERNAL_LIB)/tbb.lib
|
||||
LIBS += $$absolute_path($$EXTERNAL_LIB)/zlib.lib
|
||||
}
|
||||
|
||||
!win32 {
|
||||
@@ -75,7 +89,13 @@ win32 {
|
||||
LIBS += -lpng
|
||||
LIBS += -ltbb
|
||||
LIBS += -lpthread
|
||||
LIBS += -lxml2
|
||||
|
||||
unix:!macx {
|
||||
LIBS += -lxml2
|
||||
}
|
||||
else {
|
||||
LIBS += -L/usr/local/opt/libxml2/lib -lxml2
|
||||
}
|
||||
}
|
||||
|
||||
macx {
|
||||
@@ -84,7 +104,7 @@ macx {
|
||||
LIBS += -L/usr/local/lib# homebrew installs into /usr/local
|
||||
}
|
||||
|
||||
unix {
|
||||
unix:!macx {
|
||||
LIBS += -lGL
|
||||
LIBS += -lOpenCL
|
||||
}
|
||||
@@ -144,6 +164,7 @@ win32 {
|
||||
QMAKE_CXXFLAGS_DEBUG += /Od #Optimization disabled.
|
||||
QMAKE_CXXFLAGS_DEBUG += /D "_DEBUG" #Debug mode.
|
||||
QMAKE_CXXFLAGS_DEBUG += /RTC1 #Basic runtime checks: stack frames and uninitialized variables.
|
||||
QMAKE_CXXFLAGS_DEBUG += /Ob2 #Inline function expansion: any suitable.
|
||||
}
|
||||
|
||||
!win32 {
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
# Build Guide for Mac OS/X
|
||||
|
||||
Install Xcode from the App Store. Install [homebrew](http://brew.sh/).
|
||||
Install Xcode from the App Store
|
||||
|
||||
Install Qt 5.4.2 (Note, newer versions of Qt up to and including 5.8 have a bug with drawing OpenGL lines)
|
||||
|
||||
Install [homebrew](http://brew.sh/).
|
||||
|
||||
Install `git` and clone the repository:
|
||||
|
||||
@@ -12,11 +16,9 @@ git clone https://mfeemster@bitbucket.org/mfeemster/fractorium.git
|
||||
Install the dependencies:
|
||||
|
||||
```
|
||||
brew install qt5 tbb glm dbus jpeg libpng glib libxml2
|
||||
brew install qt5 tbb glm jpeg libpng glib libxml2
|
||||
```
|
||||
|
||||
TODO: Confirm if `glib` and `libxml2` are actually needed.
|
||||
|
||||
Add the Qt `bin` folder to `PATH` to make `qmake` available. In
|
||||
`~/.bash_profile` or `~/.bashrc`:
|
||||
|
||||
@@ -25,18 +27,32 @@ PATH=/usr/local/opt/qt5/bin:$PATH
|
||||
export PATH
|
||||
```
|
||||
|
||||
Compile the binary:
|
||||
Building:
|
||||
|
||||
```
|
||||
cd fractorium
|
||||
qmake CONFIG-=app_bundle
|
||||
qmake CONFIG+=release
|
||||
make
|
||||
```
|
||||
Or open main.pro in Qt Creator, select release and build all.
|
||||
|
||||
Run the binary from the release folder:
|
||||
Creating the app bundle:
|
||||
|
||||
```
|
||||
cd archive
|
||||
./build.sh
|
||||
```
|
||||
|
||||
Running the binary from the release folder:
|
||||
|
||||
```
|
||||
cd ..
|
||||
cd Bin/release
|
||||
./fractorium
|
||||
```
|
||||
|
||||
Installing:
|
||||
|
||||
```
|
||||
Open Fractorium.dmg and copy Fractorium.app to /Applications.
|
||||
```
|
||||
|
||||
+64
-34
@@ -1,4 +1,4 @@
|
||||
#Build Guide For Visual Studio 2013 or Qt Creator
|
||||
#Build Guide For Visual Studio 2015 or Qt Creator
|
||||
##Tools
|
||||
|
||||
###git
|
||||
@@ -7,15 +7,15 @@ Install [git](https://git-scm.com/downloads).
|
||||
|
||||
###Visual Studio
|
||||
|
||||
Install [Microsoft Visual Studio 2013 or later](https://www.visualstudio.com/en-us/downloads/download-visual-studio-vs.aspx), then install the latest updates.
|
||||
Install [Microsoft Visual Studio 2015 or later](https://www.visualstudio.com/en-us/downloads/download-visual-studio-vs.aspx), then install the latest updates.
|
||||
|
||||
###Qt
|
||||
|
||||
Install Qt for Windows 64-bit (VS 2013) 5.5.x (http://www.qt.io/download/).
|
||||
Install Qt for Windows 64-bit (VS 2015) 5.8 or later (http://www.qt.io/download/).
|
||||
|
||||
Add system environment variable named `QTPATH` and point it to the location of the Qt folder. On a default install, this will be something like:
|
||||
|
||||
`C:\Qt\Qt5.5.1\5.5\msvc2013_64`
|
||||
`C:\Qt\5.8\msvc2015_64`
|
||||
|
||||
###Wix
|
||||
|
||||
@@ -85,7 +85,7 @@ This will download and build `glm libpng libxml zlib`. You will have a folder st
|
||||
|
||||
###Begin build with Qt Creator
|
||||
|
||||
Open the Qt Project `fractorium/main.pro` using Qt Creator with the default config of *Desktop Qt [version] MSVC2013 64bit*.
|
||||
Open the Qt Project `fractorium/main.pro` using Qt Creator with the default config of *Desktop Qt [version] MSVC2015 64bit*.
|
||||
Make sure *Shadow build* in *Edit build configuration* for both *Debug* and *Release* is unchecked.
|
||||
|
||||
Switch to the *Release* configuration.
|
||||
@@ -106,15 +106,15 @@ Install the [Visual Studio Qt Addon](http://www.qt.io/download/).
|
||||
|
||||
Run Visual Studio and verify there is a menu item named *Qt5*. Click on it and click *Qt Options*.
|
||||
|
||||
Add a new Qt version to the list with the exact name of "Qt 5.5", and set its path to the same as `$QTPATH`, which will be something like:
|
||||
Add a new Qt version to the list with the exact name of "Qt5", and set its path to the same as `$QTPATH`, which will be something like:
|
||||
|
||||
`C:\Qt\Qt5.5.1\5.5\msvc2013_64`
|
||||
`C:\Qt\5.8\msvc2015_64`
|
||||
|
||||
The name "Qt 5.5" must match exactly and this step must be completed before the Fractorium solution is opened. If not, the Qt add-in will completely ruin all solution and project files that use Qt.
|
||||
The name "Qt5" must match exactly and this step must be completed before the Fractorium solution is opened. If not, the Qt add-in will completely ruin all solution and project files that use Qt.
|
||||
|
||||
Set the default version to the newly created Qt version and click *Ok*.
|
||||
|
||||
Open the file Fractorium.sln under Builds/MSVC/2013
|
||||
Open the file Fractorium.sln under Builds/MSVC/2015
|
||||
|
||||
Set the configuration to release, and build all.
|
||||
|
||||
@@ -133,6 +133,9 @@ and Visual Studio will place its outputs in:
|
||||
The output contents will be:
|
||||
|
||||
```
|
||||
boxtail_pack_02.gradient
|
||||
boxtail_pack_03_triangle.gradient
|
||||
boxtail_pack_04_mineshack.gradient
|
||||
dark.qss
|
||||
ember.dll
|
||||
ember.exp
|
||||
@@ -143,52 +146,79 @@ embercl.exp
|
||||
embercl.lib
|
||||
embergenome.exe
|
||||
emberrender.exe
|
||||
fardareismai_pack_01_variety_number_128.gradient
|
||||
fardareismai_pack_02_b_sides.gradient
|
||||
fardareismai_pack_03_old_and_new.gradient
|
||||
fardareismai_pack_04_hoard.gradient
|
||||
flam3-palettes.xml
|
||||
fractaldesire_pack_01.gradient
|
||||
fractorium.exe
|
||||
libxml2.dll
|
||||
Qt5Core.dll
|
||||
Qt5Gui.dll
|
||||
Qt5Widgets.dll
|
||||
rce_ordinary_pack_01_colornation.gradient
|
||||
tatasz_pack_01.gradient
|
||||
tatasz_pack_02_colder.gradient
|
||||
tatasz_pack_02_dark.gradient
|
||||
tatasz_pack_02_warmer.gradient
|
||||
tatasz_pack_03.gradient
|
||||
tbb.dll
|
||||
platforms\qwindows.dll
|
||||
```
|
||||
|
||||
Double click fractorium.exe to run it, and use the command line to run the others.
|
||||
|
||||
To run on a computer without Visual Studio 2013, these files also need to be in the folder:
|
||||
To run on a computer without Visual Studio 2015, these files also need to be in the folder:
|
||||
|
||||
```
|
||||
MSVC2013\VC\redist\x64\Microsoft.VC120.CRT\msvcp120.dll
|
||||
MSVC2013\VC\redist\x64\Microsoft.VC120.CRT\msvcr120.dll
|
||||
MSVC2013\VC\redist\x64\Microsoft.VC120.CRT\vccorlib120.dll
|
||||
MSVC2015\VC\redist\x64\Microsoft.VC140.CRT\msvcp140.dll
|
||||
MSVC2015\VC\redist\x64\Microsoft.VC140.CRT\vcruntime140.dll
|
||||
MSVC2015\VC\redist\x64\Microsoft.VC140.CRT\vccorlib140.dll
|
||||
MSVC2015\VC\redist\x64\Microsoft.VC140.CRT\concrt140.dll
|
||||
```
|
||||
|
||||
or you can install [Visual C++ Redistributable Packages for Visual Studio 2013 (64 bit)](https://www.microsoft.com/en-us/download/details.aspx?id=40784)
|
||||
or you can install [Visual C++ Redistributable Packages for Visual Studio 2015 (64 bit)](https://www.microsoft.com/en-us/download/details.aspx?id=53840)
|
||||
|
||||
##Final file structure for distribution
|
||||
|
||||
```
|
||||
[YOUR FOLDER]
|
||||
│
|
||||
├─ dark.qss
|
||||
├─ ember.dll
|
||||
├─ emberanimate.exe
|
||||
├─ embercl.dll
|
||||
├─ embergenome.exe
|
||||
├─ emberrender.exe
|
||||
├─ flam3-palettes.xml
|
||||
├─ fractorium.exe
|
||||
├─ libxml2.dll
|
||||
├─ Qt5Core.dll
|
||||
├─ Qt5Gui.dll
|
||||
├─ Qt5Widgets.dll
|
||||
├─ tbb.dll
|
||||
│
|
||||
├─ vccorlib120.dll (optional)
|
||||
├─ msvcp120.dll (optional)
|
||||
├─ msvcr120.dll (optional)
|
||||
│
|
||||
└─platforms
|
||||
│
|
||||
├─ boxtail_pack_02.gradient
|
||||
├─ boxtail_pack_03_triangle.gradient
|
||||
├─ boxtail_pack_04_mineshack.gradient
|
||||
├─ dark.qss
|
||||
├─ ember.dll
|
||||
├─ emberanimate.exe
|
||||
├─ embercl.dll
|
||||
├─ embergenome.exe
|
||||
├─ emberrender.exe
|
||||
├─ fardareismai_pack_01_variety_number_128.gradient
|
||||
├─ fardareismai_pack_02_b_sides.gradient
|
||||
├─ fardareismai_pack_03_old_and_new.gradient
|
||||
├─ fardareismai_pack_04_hoard.gradient
|
||||
├─ flam3-palettes.xml
|
||||
├─ fractaldesire_pack_01.gradient
|
||||
├─ fractorium.exe
|
||||
├─ libxml2.dll
|
||||
├─ Qt5Core.dll
|
||||
├─ Qt5Gui.dll
|
||||
├─ Qt5Widgets.dll
|
||||
├─ rce_ordinary_pack_01_colornation.gradient
|
||||
├─ tatasz_pack_01.gradient
|
||||
├─ tatasz_pack_02_colder.gradient
|
||||
├─ tatasz_pack_02_dark.gradient
|
||||
├─ tatasz_pack_02_warmer.gradient
|
||||
├─ tatasz_pack_03.gradient
|
||||
├─ tbb.dll
|
||||
│
|
||||
├─ msvcp140.dll (optional)
|
||||
├─ vcruntime140.dll (optional)
|
||||
├─ vccorlib140.dll (optional)
|
||||
├─ concrt140.dll (optional)
|
||||
│
|
||||
└─platforms
|
||||
│
|
||||
├─qwindows.dll
|
||||
```
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>NSPrincipalClass</key>
|
||||
<string>NSApplication</string>
|
||||
<key>CFBundleIconFile</key>
|
||||
<string>Fractorium.icns</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>Fractorium</string>
|
||||
<key>CFBundleGetInfoString</key>
|
||||
<string>Created by Qt/QMake</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>fractorium</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.yourcompany.fractorium</string>
|
||||
<key>NOTE</key>
|
||||
<string>This file was generated by Qt/QMake.</string>
|
||||
</dict>
|
||||
</plist>
|
||||
@@ -49,7 +49,7 @@ link to the `.deb` from "Package Details".
|
||||
|
||||
## Narrative
|
||||
|
||||
Starting with a fresh clone from bitbucket.org:
|
||||
Starting with a fresh clone from bitbucket.org. It will not work unless it's totally fresh:
|
||||
|
||||
```
|
||||
$ git clone https://mfeemster@bitbucket.org/mfeemster/fractorium.git
|
||||
|
||||
@@ -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
|
||||
--Bug fixes
|
||||
-Highlight power values less than 0 were accidentally disabled on the UI.
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
#summary About dialog
|
||||
<font face="Verdana">
|
||||
|
||||
=About=
|
||||
|
||||
The About dialog shows miscellaneous program information.
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
==Code Copied==
|
||||
|
||||
This is code where portions were copied and modified.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
==Libraries Linked==
|
||||
|
||||
This is code that was either directly copied and remained mostly unmodified, or was built and linked in library form.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
==Icons Used==
|
||||
|
||||
The various icon sets that Fractorium got its icons from. Almost all of these were altered to be gray.
|
||||
</li>
|
||||
</ul>
|
||||
@@ -1,318 +0,0 @@
|
||||
#summary How the fractal flames algorithm actually works.
|
||||
<font face="Verdana">
|
||||
|
||||
=Introduction=
|
||||
|
||||
The standard way of getting familiar with the algorithm is reading the paper by Scott Draves and Erik Reckase, titled <a href="http://flam3.com/flame_draves.pdf">The Fractal Flame Algorithm</a>. Reading it is highly recommended before proceeding.
|
||||
|
||||
Another paper which gives more detail, and which this project borrows heavily from is the <a href="http://www.eecs.ucf.edu/seniordesign/su2011fa2011/g12/report.pdf">Cuburn paper</a>. The first few sections give a better description of the algorithm. The later sections are more focused on GPU implementations, so they are only recommended for advanced readers.
|
||||
|
||||
While the original paper gives a great introduction, it omits some important details. If one reads the flam3 code, they will notice that quite a bit is left out of the paper. This section of the wiki gives a detailed description of what actually happens when a fractal flame is rendered.
|
||||
|
||||
It's broken down into the data used, and the processing performed on the data in order from start to finish. It dispenses with mathematical terms and notation, and expresses the process in plain English with pseudo code.
|
||||
<br><br>
|
||||
|
||||
=Details=
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
==Data==
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
===Buffers===
|
||||
|
||||
-Histogram: Supersampled with gutter, iteration is plotted here.
|
||||
|
||||
-Density filter buffer/accumulator: Same dimensions as histogram, density filter output written here.
|
||||
|
||||
-Final image buffer: Not supersampled, final output written here.<br></br>
|
||||
|
||||
The dimensions of the final image are straightforward. They are just the values specified in the size field of the Xml.
|
||||
|
||||
The dimensions of the histogram are slightly more complex to calculate:
|
||||
|
||||
{{{
|
||||
histwidth = (finalwidth * supersample) + (2 * gutter)
|
||||
histheight = (finalheight * supersample) + (2 * gutter)
|
||||
}}}
|
||||
|
||||
The gutter is to account for the extra space needed when filtering at edge pixels. It's calculated by:
|
||||
|
||||
{{{
|
||||
gutter = max((spatialfilterwidth - supersample) / 2, maxdensityfilterradius * supersample)
|
||||
}}}
|
||||
|
||||
Computing the histogram bounds (camera) is much more complex. The values are based off of the following Xml fields: size, supersample, scale, zoom, center, spatial and density filter widths.
|
||||
|
||||
Scale is the pixels per unit, meaning the number of raster pixels needed to represent the distance from 0 to 1 in the Cartesian plane. The higher the value, the more zoomed in the camera is. Increasing scale will degrade image quality.
|
||||
|
||||
Zoom is the amount of zoom to apply to the image. It has a similar effect to increasing scale, but does not suffer from quality loss. This will increase the number of iterations done to compensate.
|
||||
|
||||
Supersample is the value to multiply the dimensions of the histogram and accumulator by to accomplish anti-aliasing.
|
||||
|
||||
Center is the camera offset in on each axis. The image will move in the opposite direction of these values.
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
===Fractal Flame (Ember)===
|
||||
|
||||
The main data structure is the fractal flame itself. In this project, it is referred to as an `Ember`.
|
||||
|
||||
An `Ember` contains the following pieces:<br></br>
|
||||
-Dimensions, filter parameters, and quality settings.<br></br>
|
||||
-A list of xforms, which each contain a weight, color index, color speed, pre and post affine transforms, and a list of variations.<br></br>
|
||||
-A color palette.
|
||||
</li>
|
||||
<li>
|
||||
|
||||
===Xml===
|
||||
|
||||
An `Ember` is stored in an Xml file, which can contain one or more `Embers` in them. The first step in rendering is to read the data out of the Xml and into a vector of `Embers`.
|
||||
|
||||
The first parameters encountered in each `Ember` are ones that specify general information about what is to be rendered, such as the dimensions, rotation, quality, supersampling, filter types and sizes, and color information. The colors that are to be used during iteration are specified in a palette, which is a list of 256 colors.
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
===Palettes===
|
||||
|
||||
Palettes can be specified in one of two ways: An index into a palette file, or as an inserted block of data present in the `Ember` Xml. For the first case, the palette file is usually the standard flam3-palettes.xml file which contains 700 palettes and is shipped with all fractal flame editors. The `Ember` has an Xml field named palette whose value is an integer index into the file. A value of -1 means to select a random palette from the file. The palette index field is used in conjunction with the hue field. Hue signifies a hue rotation to be applied to the palette after it's read. The palettes in the file are stored as RGB values in the range of 0-255. Upon reading, the hue rotation is applied to them, and they are converted into normalized values ranging from 0-1. They are stored with the `Ember` in a `Palette` object.
|
||||
|
||||
The other way of specifying a palette is to embed it directly in the Xml as either individual tags for each color entry, or as a hexadecimal representation of the binary data. The latter is preferred because it keeps the Xml files smaller. When embedding the palette, no hue adjustment is applied after reading it.
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
===Xforms===
|
||||
|
||||
The xforms are what contribute most to defining the look of the final output image. Each xform contains several parameters:
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
====Weight====
|
||||
|
||||
The probability that the xform will be chosen in each iteration. All weights are normalized before running.
|
||||
</li><li>
|
||||
====Color Index====
|
||||
|
||||
The index in the palette the xform uses.
|
||||
</li><li>
|
||||
====Color Speed====
|
||||
|
||||
The speed with which the color indices are pulled toward this xform's color index. This value can be negative.
|
||||
</li><li>
|
||||
====Opacity====
|
||||
|
||||
How visible the xform's contribution to the image is.
|
||||
</li><li>
|
||||
====Pre Affine Transform====
|
||||
|
||||
The affine transform that is applied to the input coordinates which will be used as inputs to the variations.
|
||||
</li><li>
|
||||
====Post Affine Transform====
|
||||
|
||||
The affine transform that is applied to the output of the sum of the variations, optionally omitted.
|
||||
</li><li>
|
||||
====Variations====
|
||||
|
||||
A list of functions which each contain a weight, and optionally more parameters.
|
||||
</li><li>
|
||||
====Xaos====
|
||||
|
||||
Xaos is an optional advanced feature that adds an element of control to the random selection of xforms during iteration. It adds an adjustment to the probability that a given xform will be selected based on the xform that was selected in the previous iteration. This is usually omitted.
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
||||
In addition to the list of xforms, an additional one can be specified as the final xform. It contains all of the same parameters, except weight. This is because it is always applied in each iteration.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
===Filters===
|
||||
|
||||
As mentioned earlier, each `Ember` contains filtering parameters. These are values used to specify details about the three filtering stages used to improve the quality of the final output image. They are:
|
||||
<ul>
|
||||
<li>
|
||||
====Temporal====
|
||||
|
||||
In addition to creating a still image, the algorithm can be used to create a series of still images where each represents a frame in an animation. This is done by adjusting the affine transforms slightly for each frame. It also involves interpolating (blending) between two different `Embers`. Sometimes, even slight changes in the `Ember` parameters can cause a large change in the final output image. To mitigate this effect, each frame splits its render into a number of temporal samples. This does not increase the number of iterations. Instead, it breaks the total number of iterations into chunks. Each chunk renders an interpolated `Ember` at a specific time between the current frame and the next one to be rendered. The histogram is not cleared between temporal samples, so all iteration values are accumulated to produce a motion blurring effect. A temporal samples value of 1000 is commonly used for animation. When rendering a single frame, the number of temporal samples is always set to 1 since there is nothing to interpolate.
|
||||
</li><li>
|
||||
====Density====
|
||||
|
||||
Flam3 refers to this as density estimation, or DE. This is a misnaming as there is no estimation taking place. Rather, a variable width Gaussian filter is applied to each log scaled histogram cell. The Xml specifies the minimum and maximum widths that the filter can be, as well as the decay curve for how quickly the filter's values drop off when extending outward from the pixel being filtered.
|
||||
</li><li>
|
||||
====Spatial====
|
||||
|
||||
After iterating and density filtering are done, final color correction to the output image is computed. Spatial filtering is applied during this step. The Xml parameters specify both the width of the filter as well as the type. This gives very fine adjustment over what the final image looks like.
|
||||
<br></br>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
|
||||
==Processing==
|
||||
|
||||
The process contains 3 main steps:
|
||||
|
||||
-Iterating<br></br>
|
||||
-Density Filtering<br></br>
|
||||
-Final Accumulation
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
===Iterating===
|
||||
<ul>
|
||||
<li>
|
||||
====Xform Application====
|
||||
|
||||
Iterating is described in the paper, however it's worth clarifying because it's the most important part of the algorithm.
|
||||
|
||||
Random numbers are obviously a core component of the algorithm, however the paper doesn't touch on exactly how they're implemented and used. Flam3 uses a very fast and high quality RNG named ISAAC because system RNGs are usually of poor quality. Using ISAAC also allows for producing the exact same image on different platforms when supplied with the same seed.
|
||||
|
||||
More interesting though, is how the numbers from ISAAC are used to select random xforms. Before iterating begins, a buffer of 10,000 elements is created. All xform weights are normalized and the elements of the buffer are populated with xform indices with a distribution proportional to each of their weights. For example, given an Ember with 4 xforms, each with a weight of 1, their normalized weights would each become 0.25. The random selection buffer would then be populated like so:
|
||||
|
||||
{{{
|
||||
buf[0..2499] = 0
|
||||
buf[2500..4999] = 1
|
||||
buf[5000..7499] = 2
|
||||
buf[7500..9999] = 3
|
||||
}}}
|
||||
|
||||
To select a random xform, retrieve the next random unsigned integer from ISAAC and perform a modulo (%) 10,000. The value at that index in the buffer is the index of the next xform to use.<br></br>
|
||||
|
||||
The classic Iterated Function System works like the following pseudo code in flam3 and Ember:
|
||||
|
||||
x and y = random numbers between -1 and 1.
|
||||
|
||||
Pick a random xform from the Ember, with biases specified by their weights.
|
||||
|
||||
Calculate tx and ty by applying the selected xform's pre affine transform to x and y:
|
||||
|
||||
{{{
|
||||
tx = Ax * By + C
|
||||
ty = Dx * Ey + F
|
||||
}}}
|
||||
|
||||
Pass the transformed point to each of the variations and sum the results. Note that this does not change the transformed points at all, they are only used as inputs.
|
||||
|
||||
{{{
|
||||
vx = 0
|
||||
vy = 0
|
||||
|
||||
vx,vy += var1(tx, ty)
|
||||
vx,vy += var2(tx, ty)
|
||||
vx,vy += var3(tx, ty)
|
||||
...
|
||||
vx,vy += varN(tx, ty)
|
||||
|
||||
ox, oy = vx, vy
|
||||
}}}
|
||||
|
||||
If a post affine transform is present, apply it to the result calculated from summing the outputs of the variations above.
|
||||
|
||||
{{{
|
||||
ox = pAvx * pBvy + pC
|
||||
oy = pDvx * pEvy + pF
|
||||
}}}
|
||||
|
||||
Now that the new point has been calculated, compute the new color coordinate. As the paper states, the coordinate is the one specified in the currently chosen xform, blended with the one from the previously chosen xform. It incorrectly states that blending is achieved by adding the current and previous coordinates and dividing by 2. Not only is it calculated differently, but the hard coded value of 2 is actually the user specified color speed parameter of each xform. The real calculation is:
|
||||
|
||||
{{{
|
||||
newindex = colorspeed * thisindex + (1.0 - colorspeed) * oldindex
|
||||
}}}
|
||||
|
||||
It's important to note that the colors themselves are not being blended, only their indices in the palette are.
|
||||
|
||||
At this point, we have the final output point ox,oy to be plotted to the histogram. However, we can't use it just yet. There is a slight possibility that the calculated value was not valid. This is detected by checking for it being very close to infinity, or very close to zero. If either are the case, 5 attempts at the following correction method are tried:
|
||||
|
||||
-Pick a new input point with x and y each being a different random number between -1 and 1.<br></br>
|
||||
-Pick a new random xform and apply it.<br></br>
|
||||
-Keep color index from the first xform that was applied, which originally gave us the bad values.<br></br>
|
||||
|
||||
If after 5 attempts, a valid point is not produced, the output point is assigned random numbers between -1 and 1. The number of bad values are saved for statistical use later.
|
||||
|
||||
After computing this point, apply a final xform if one is present. Plot its output next, however do not feed it back into the iteration loop. Rather, only feed the output of the randomly selected xform above to the next iteration of the loop.
|
||||
|
||||
</li>
|
||||
<li>
|
||||
====Plotting====
|
||||
|
||||
Once we have our new point, it's time to plot it. This is one of the most important parts of the algorithm, so it's worth detailing what exactly happens. First, let's review the information the point contains:
|
||||
|
||||
-An x,y coordinate in Cartesian space.<br></br>
|
||||
-A color index from 0-255.<br></br>
|
||||
|
||||
The first step in plotting is applying any rotation specified in the Xml. Rotation is specified in terms of the camera, so it will actually rotate the image in the opposite direction.
|
||||
|
||||
After applying rotation to the coordinate, bounds checking is done. If the point is outside of the Cartesian space the histogram covers, then it's discarded, otherwise it's plotted if the opacity is non-zero.
|
||||
|
||||
The point can't be plotted directly because it's in a different coordinate system than the one used for indexing the histogram memory. The points are decimal numbers in Cartesian space with 0,0 at the center. The histogram is stored in raster coordinates with 0,0 at the top left and each bucket specified by an integer x,y index. So before plotting, the coordinates must be converted to determine the histogram bucket to write to.
|
||||
|
||||
After computing the raster coordinate, a color must be added to the bucket. This is gotten from the Ember's color palette, at the index specified in the point. A similar coordinate problem occurs in that the computed color index is a decimal number, but the indices in the palette are integers. The algorithm offers two methods for retrieving the color. The first is called "Step" and just rounds the index down to the nearest integer. The other is called "Linear" and does a blending of the values at the integer index and the one next to it.
|
||||
|
||||
Once a color is retrieved, multiply all three RBG values by the opacity and add the result to the RGB values in the histogram bucket at the specified location. The alpha channel is unused for transparency and is instead used as a hit counter to record how many times a given bucket was hit during iteration. Each hit adds one to the alpha channel.
|
||||
|
||||
The Cartesian coordinate calculated from applying the xform in the previous step is fed back into the iteration loop and is used as the starting point for repeating the process all over again. The number of times this is done is referred to as the quality and is equal to:
|
||||
|
||||
{{{
|
||||
quality * finalwidth * finalheight
|
||||
}}}
|
||||
|
||||
Note that while supersampling increases the size of the histogram, it does not increase the number of iterations performed.
|
||||
|
||||
</li>
|
||||
<li>
|
||||
====Trajectory====
|
||||
|
||||
Iterating and plotting don't occur exactly in the order described above or in the paper. The point is not plotted immediately after each xform application. Rather, the points are all stored in a temporary buffer whose size defaults to 10,000, known as a sub batch. Once 10,000 iterations have completed, all of the points are plotted to the histogram. Before the next sub batch begins, the point trajectory is reset by re-enabling the fuse state and assigning the first input coordinate random numbers between -1 and 1.
|
||||
|
||||
This method of using sub batches reveals an interesting characteristic of the algorithm not covered in the paper. That is, the point trajectory need not remain continuous to produce a final image. Even when resetting every 10,000 iterations, the trajectory still converges on the attractor. Thanks to this property, multi-threading does not degrade the image quality by breaking up the trajectory, since each thread will run many sub batches.<br></br>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
===Density Filtering===
|
||||
|
||||
After the iteration loop is performed many times, most of the buckets in the histogram will have been hit many times. This puts their color values far outside the allowed range for display, 0-255 (or 0-1 for normalized colors).
|
||||
|
||||
To bring these color values into the valid range, log scaling is applied. There are two types, basic log scaling or log scaling with density estimation filtering. As stated above, the term density estimation is misleading, since no estimating of any kind takes place.
|
||||
|
||||
Basic log scaling is triggered by setting the maximum density filtering radius to zero. It is achieved by performing the following step on each histogram bucket:
|
||||
|
||||
{{{
|
||||
scale = 2^zoom
|
||||
scaledquality = quality * scale * scale
|
||||
area = (finalwidth * finalheight) / (pixelsperunitx * pixelsperunity)
|
||||
k1 = (brightness * 268) / 256
|
||||
k2 = supersample^2 / (area * scaledquality * temporalfilter.sumfilt)
|
||||
accumulator[index] = (k1 * log(1 + histogram[index].hitcount * k2)) / histogram[index].hitcount
|
||||
}}}
|
||||
|
||||
This calculation is much more complex than the simplistic log(a)/a mentioned in the flam3 paper. Note the presence of the somewhat mysterious k1 and k2 variables. They are mentioned nowhere in the paper, and are completely undocumented in the flam3 code, yet play a large role in how the final output image appears. k1 is intended to be the brightness multiplied by a magic number. k2 helps adjust the log scaling based on the supersample.
|
||||
|
||||
If the max density filtering radius is greater than zero, a much more advanced algorithm is used for filtering. As stated in the paper, it's a Gaussian blur filter whose width is inversely proportional to the number of hits in a given bucket. This means that buckets which were hit infrequently will have a wide blur applied to the surrounding pixels. A bucket with many hits will have very little blur applied.
|
||||
|
||||
The result of these filtering operations is written to another buffer of identical size called the filtering buffer, or accumulator.
|
||||
</li>
|
||||
<li>
|
||||
|
||||
===Final Accumulation===
|
||||
|
||||
Despite filtering, the image is still not ready for final display. One more step is needed, and that is final accumulation with spatial filtering.
|
||||
|
||||
For each pixel in the filtering buffer at the beginning (top left) of each supersample block (SSxSS), a spatial filter is applied and the resulting value is written as a single pixel to the final output image.
|
||||
|
||||
The spatial filter is of a fixed width and type specified in the original Xml. It multiplies the filter values by the pixel values of all pixels extending forward and down by the length of the filter, and sums them to a final value. This final value will most likely be out of range, so further color correction is necessary. Gamma correction is applied and the final pixels are clamped to the valid range of 0-255 and written to the output image buffer. Note that the color correction process is not documented anywhere and remains mostly a mystery, however it works.
|
||||
|
||||
If early clipping is specified, the color correction is applied before the spatial filter.
|
||||
|
||||
The process is done.
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
@@ -1,232 +0,0 @@
|
||||
#summary How to build Fractorium from source.
|
||||
<font face="Verdana">
|
||||
|
||||
=Introduction=
|
||||
|
||||
Step by step instructions for building Fractorium and its associated libraries from source.
|
||||
|
||||
The development environment currently supported is Visual Studio 2010 SP1. In the future, other compilers and operating systems will be supported. For now, this page focuses on VS 2010 SP1.
|
||||
|
||||
First install Visual Studio 2010, and run it once. Then close it and install SP1.
|
||||
|
||||
=Details=
|
||||
|
||||
The release built into the installer on the main page is for x64 systems only. This is because x64 gives a ~30% performance improvement over x86, which is most likely due to additional registers in the x64 standard. Another reason for x64 only, is that such processors have been around for almost a decade, with popular operating system support existing since Windows Vista. There is simply no reason to support x86 systems. This project aims to help move the target platforms of popular applications away from x86 and toward x64.
|
||||
|
||||
Sadly, the free version of Visual Studio does not support building x64 targets. You are welcome to build for x86, but understand that the CPU performance will be significantly lower than what you experience with the executable contained in the installer.
|
||||
|
||||
These steps must be followed exactly as stated, and in the order stated. Skipping any step, or doing any step out of order will break the build.
|
||||
|
||||
==Prerequisites==
|
||||
|
||||
These are the libraries that the project depends on. Download the zip files and extract them into folders organized in the following way:
|
||||
|
||||
/<a href="http://sourceforge.net/projects/ogl-math/">glm</a> (Matrix math)<br></br>
|
||||
/<a href="http://www.ijg.org/">libjpeg</a> (Jpg image support)<br></br>
|
||||
/<a href="https://sourceforge.net/projects/libpng/files/">libpng</a> (Png image support)<br></br>
|
||||
/<a href="https://git.gnome.org/browse/libxml2/">libxml2</a> (Xml parsing support)<br></br>
|
||||
/<a href="https://www.threadingbuildingblocks.org/">tbb</a> (Intel Threading Building Blocks)<br></br>
|
||||
/<a href="http://www.zlib.net/">zlib</a> (Zip compression)
|
||||
|
||||
===libjpeg===
|
||||
|
||||
libjpeg does not ship with VS 2010 projects, so its older project files must first be converted before opening the solution.
|
||||
|
||||
Open a Visual Studio command prompt and navigate to:
|
||||
|
||||
/libjpeg
|
||||
|
||||
and run:
|
||||
|
||||
{{{
|
||||
NMAKE /f makefile.vc setup-v10
|
||||
}}}
|
||||
|
||||
This will create all of the necessary project files for libjpeg.
|
||||
|
||||
===libxml2===
|
||||
|
||||
The libxml2 project is crippled out of the box so it needs some changes before it will open. Further changes will be required later once it's opened.
|
||||
|
||||
Navigate to:
|
||||
|
||||
libxml2\win32
|
||||
|
||||
and find the file configure.js. Right click on it and click Properties. Ensure the default program used to open it is Windows Based Script Host, click Ok. Double click configure.js and you will see several message boxes telling you the project files it created.
|
||||
|
||||
===OpenCL===
|
||||
|
||||
Install the latest drivers for your video card.
|
||||
<ul>
|
||||
<li>
|
||||
====nVidia====
|
||||
Install the latest <a href="https://developer.nvidia.com/cuda-downloads">CUDA</a> development kit, which will contain un-advertized OpenCL libraries.
|
||||
|
||||
Get the file <a href="http://www.khronos.org/registry/cl/api/1.1/cl.hpp">cl.hpp</a> and place it here:
|
||||
|
||||
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\include\CL
|
||||
</li>
|
||||
<li>
|
||||
====AMD====
|
||||
Install the APP SDK.
|
||||
</li>
|
||||
</ul>
|
||||
===Qt===
|
||||
|
||||
Qt is what Fractorium uses for its GUI. Sadly, the pre-compiled version of Qt cannot be used. Instead, it must be completely rebuilt from source. The reason being that it does not use the desktop OpenGL library and instead uses OpenGL ES. Since Qt is a very large build, you should only do this step if you plan to build the full Fractorium GUI. If you are only interested in the Ember libraries and command line programs, skip this step.
|
||||
|
||||
Further, Qt will not work with Express versions of Visual Studio.
|
||||
|
||||
These instructions roughly follow what's listed <a href="http://qt-project.org/wiki/Building-Qt-5-from-Git">here</a>, however they are a bit more concise.
|
||||
|
||||
Install the <a href="http://qt-project.org/downloads">Visual Studio Qt Add-on</a> found in the Other Downloads section of the Qt downloads page.
|
||||
|
||||
Install <a href="http://msysgit.github.io/">Git</a>, <a href="http://www.activestate.com/activeperl/downloads">Perl</a>, <a href="http://www.python.org/download/releases/">Python</a> and <a href="http://qt-project.org/wiki/jom">Jom</a>.
|
||||
|
||||
Assuming Jom was installed to C:\jom and Python was installed to C:\Python27, add both of these to your PATH variable:
|
||||
|
||||
{{{
|
||||
C:\jom
|
||||
C:\Python27\DLLs
|
||||
}}}
|
||||
|
||||
Open a Visual Studio x64 command prompt and cd to the folder which contains all prerequisites and Fractorium. Enter the following commands:
|
||||
|
||||
{{{
|
||||
git clone git://gitorious.org/qt/qt5.git qt5
|
||||
cd qt5
|
||||
git checkout stable
|
||||
}}}
|
||||
|
||||
This will take roughly 15 minutes. After it's done, add these paths to your PATH variable:
|
||||
|
||||
{{{
|
||||
/your/dev/dir/qt5/qtbase/bin
|
||||
/your/dev/dir/qt5/gnuwin32/bin
|
||||
}}}
|
||||
|
||||
Add these environment variables:
|
||||
|
||||
{{{
|
||||
QMAKESPEC win32-msvc2010
|
||||
QTDIR /your/dev/dir/qt5/qtbase
|
||||
}}}
|
||||
|
||||
Enter the following commands to configure and build:
|
||||
|
||||
{{{
|
||||
Perl init-repository –no-webkit
|
||||
cd qtbase
|
||||
configure -developer-build -opensource -shared -opengl desktop -platform win32-msvc2010 -nomake examples -nomake tests
|
||||
jom.exe
|
||||
}}}
|
||||
|
||||
The jom.exe command is what actually starts the build. Note that you should replace the number 4 with the number of cores on your system. Configuring and building will take roughly one hour.
|
||||
|
||||
Once finished, open Visual Studio and verify there is a menu item named Qt5. Click on it and click Qt Options.
|
||||
|
||||
Add a new Qt version to the list with the exact name of "5.0.1", and set its path to /your/dev/dir/qt5/qtbase
|
||||
|
||||
The name must match exactly and must be created before any Qt solution is opened. If not, the Qt add-in will completely ruin all solution and project files that use Qt.
|
||||
|
||||
Set the default version to the newly created Qt version and click Ok.
|
||||
|
||||
===Fractorium===
|
||||
|
||||
Next, checkout Fractorium with cvs so that it's on the same level with the other dependencies like so:
|
||||
|
||||
/<a href="https://code.google.com/p/fractorium/source/checkout">fractorium</a>
|
||||
|
||||
/glm
|
||||
|
||||
/libjpeg
|
||||
|
||||
/libpng
|
||||
|
||||
/libxml2
|
||||
|
||||
/qt5
|
||||
|
||||
/tbb
|
||||
|
||||
/zlib
|
||||
|
||||
To build the installer, you must have <a href="http://wixtoolset.org/">Wix</a> installed. If you are unconcerned with it, you can skip this step and just dismiss the warning that shows when opening the solution later.
|
||||
|
||||
==Opening the Solution==
|
||||
Navigate to the subfolder:
|
||||
|
||||
fractorium/Builds/MSVC/VS2010
|
||||
|
||||
and open Fractorium.sln
|
||||
|
||||
If all dependencies were placed in the proper hierarchy, the solution should open with no warnings or errors. However, it's not ready to build yet.
|
||||
|
||||
==Build Configuration==
|
||||
|
||||
Visual Studio merges all build configurations and platforms from every project in a solution. Because Fractorium has dependencies on other libraries, the configuration manager will show all configurations from all projects in the solution. Most of these can safely be ignored. The only configurations that matter are Debug/Release. The only platforms that matter are Win32/x64.
|
||||
|
||||
Building other configurations and platforms is not advised and is unsupported.
|
||||
|
||||
Despite x64 support in Visual Studio for many years, most third party libraries do not ship with an x64 build target in their project files. You must manually create them here before you can build for x64. If you are only building for Win32, you can skip this step.
|
||||
|
||||
Right click on the solution and open the Configuration Manager.
|
||||
|
||||
Set the configuration to Release, and the platform to x64. Do the following for jpeg, libpng, libxml2, pnglibconf, and zlib:
|
||||
|
||||
-Click the combo box in the platform column on the project's row and select New...
|
||||
|
||||
-Set New Platform to x64, and Copy Settings From to Win32. Click Ok. Note, Visual Studio has a bug where you may need to do this twice for each project. After you click Ok, click the combo box again to verify it worked. If x64 is shown as a valid platform in the list, it worked. If not, you must repeat this step.
|
||||
|
||||
===Further libxml2 Changes===
|
||||
|
||||
Right click on the libxml2 project and open the properties dialog and click Configuration Properties.
|
||||
|
||||
Navigate to General, select all configurations and all platforms and set the configuration type to Dynamic Library (.dll).
|
||||
|
||||
Set Output Directory to:
|
||||
|
||||
{{{
|
||||
$(SolutionDir)$(Platform)\$(Configuration)\
|
||||
}}}
|
||||
|
||||
Set Intermediate Directory to:
|
||||
|
||||
{{{
|
||||
$(Platform)\$(Configuration)\
|
||||
}}}
|
||||
|
||||
and click Apply.
|
||||
|
||||
Navigate to C/C++ | General and make sure these paths are present in the Additional Include Directories for Debug/Release configurations and Win32/x64 platforms, and click Apply:
|
||||
|
||||
{{{
|
||||
$(ProjectDir);
|
||||
$(ProjectDir)..\..\include;
|
||||
}}}
|
||||
|
||||
Navigate to C/C++ | Preprocessor, select All Configurations and All Platforms and add ;WIN32 to the list in Preprocessor Definitions, and click Apply.
|
||||
|
||||
Navigate to Linker | Input, select All Configurations and All Platforms and add ;Ws2_32.lib to the list of Additional Dependencies, and click Ok.
|
||||
|
||||
Find the file /include/libxml/xmlversion.h and comment out line 277:
|
||||
|
||||
{{{
|
||||
#define LIBXML_ICONV_ENABLED
|
||||
}}}
|
||||
|
||||
because Fractorium doesn't need Iconv support.
|
||||
|
||||
===zlib Changes===
|
||||
|
||||
Open the file zutil.h, and comment out line 33:
|
||||
|
||||
{{{
|
||||
typedef long ptrdiff_t;
|
||||
}}}
|
||||
|
||||
The solution is now ready to build. The output will be placed in:
|
||||
|
||||
{{{
|
||||
/your/dev/dir/fractorium/Bin/$(Platform)/$(Configuration)
|
||||
}}}
|
||||
@@ -1,15 +0,0 @@
|
||||
#summary Coding philosophy.
|
||||
<font face="Verdana">
|
||||
|
||||
=Introduction=
|
||||
|
||||
The philosophy behind the code contained in this project.
|
||||
|
||||
|
||||
=Details=
|
||||
|
||||
Code is read many more times than it is written. Therefore, legible code is of high importance. This project makes every effort to write understandable, well designed and well documented code. When a person reads the code for the first time, they should not be blindsided with confusion. Instead, they should be able to navigate and understand the code and project structure relatively quickly.
|
||||
|
||||
Modern language techniques like lambdas, templates and the C++ Standard Template Library can greatly simplify code. These are taken advantage of at every possible opportunity. There is simply no valid reason to use legacy coding styles in a project of this nature.
|
||||
|
||||
This project only supports x64 hardware. Given the prevalence of it and operating systems that support it, as well as the performance boost it gives, there is no reason to continue supporting x86. Much like 16-bit programs have disappeared from the development landscape, 32-bit programs have also had their day.
|
||||
@@ -1,29 +0,0 @@
|
||||
#summary User's guide for command line programs.
|
||||
<font face="Verdana">
|
||||
|
||||
=Introduction=
|
||||
|
||||
Usage of EmberRender, EmberAnimate and EmberGenome command line programs.
|
||||
|
||||
These are advanced tools mostly used in a scripted environment.
|
||||
|
||||
|
||||
=Details=
|
||||
|
||||
These programs are replacements for the original flam3-render, flam3-animate and flam3-genome programs. They function the same and produce identical output, however they offer two major advantages over the originals:
|
||||
|
||||
-Option to use OpenCL renderer.<br>
|
||||
-Ability to use command line arguments in addition to environment variables. The originals only supported the latter.<br>
|
||||
|
||||
Running any with the `--help` argument will provide a list of the options available to that program.
|
||||
|
||||
More information on the what these do and the options to pass them can be found in the original flam3 documentation here:
|
||||
|
||||
<a href="https://code.google.com/p/flam3/wiki/Flam3Render">EmberRender</a>
|
||||
|
||||
<a href="https://code.google.com/p/flam3/wiki/Flam3Animate">EmberAnimate</a>
|
||||
|
||||
<a href="https://code.google.com/p/flam3/wiki/Flam3Genome">EmberGenome</a>
|
||||
|
||||
|
||||
The only option omitted was `field` which was used to render progressive scanned images for animations. Modern LCD/LED displays overcome the need for this.
|
||||
@@ -1,9 +0,0 @@
|
||||
#summary Information for developers.
|
||||
|
||||
[EmberImplementationDetails Ember]
|
||||
|
||||
[EmberCLImplementationDetails EmberCL]
|
||||
|
||||
[Building Building]
|
||||
|
||||
[CodingPhilosophy Coding Philosophy]
|
||||
@@ -1,266 +0,0 @@
|
||||
#summary EmberCL implementation details.
|
||||
<font face="Verdana">
|
||||
|
||||
= Introduction =
|
||||
|
||||
EmberCL resides in a separate project that links to Ember and uses OpenCL to perform iteration, density filtering and final accumulation. Xml parsing, interpolation, and palette setup are still performed by the base library on the CPU.
|
||||
|
||||
OpenCL was chosen because it provides run-time compilation and cross platform interoperability, both of which nVidia's CUDA platform lack.
|
||||
|
||||
|
||||
= Details =
|
||||
<ul>
|
||||
<li>
|
||||
==OpenCLWrapper==
|
||||
|
||||
OpenCL programming requires a large amount of setup code before getting to the point where a kernel can be invoked. To relieve the programmer of having to deal with such details, a class named `OpenCLWrapper` is provided. It holds all buffers, images, kernel source and compiled programs in memory and automatically frees them as necessary. Each object can be accessed via name string or index in a vector.
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
==Kernel Creators==
|
||||
|
||||
At the heart of OpenCL is the kernel. It's a small program ran as the body of a number of threads executing in parallel. It takes the form of a text string that is compiled at run-time. The compiled binary output is passed to the device running OpenCL along with various arguments and grid dimensions. The grid is is a 1D, 2D or 3D matrix of blocks, and each block is a 1D, 2D or 3D matrix of threads. A full discussion of OpenCL is beyond the scope of this Wiki.
|
||||
|
||||
EmberCL takes a unique approach to building and running kernels for fractal flame rendering that differs from the other two major OpenCL implementations, flam4 and Fractron. The Single Instruction-Multiple Thread (SIMT) nature of the devices OpenCL runs on suffer from an interesting limitation that CPUs do not suffer from. CPUs are very good at processing conditionals, but are slower at doing calculations. SIMT devices are bad at processing conditionals, but are very fast at doing calculations. Because of this, the EmberCL kernel creators build special versions of kernels for each rendering processing step with the conditionals dynamically stripped out at runtime. This creates highly condensed kernels that only run what is absolutely necessary for the Ember currently being rendered. The drawback of this approach is that if the Ember currently being rendered differs enough from the previous one rendered, an OpenCL recompilation will be triggered. These take from one third to one half of a second on a modern processor.
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
===Iteration Kernel===
|
||||
|
||||
The iteration kernel is the most advanced, and most important portion of the EmberCL library. It is here that EmberCL achieves its large performance lead over other OpenCL implementations of the fractal flame algorithm.
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
====The Naive Implementation===
|
||||
|
||||
The naive implementation copies the code from the CPU implementation to a kernel and each thread runs it in parallel. This is very inefficient and is an improper use of OpenCL.
|
||||
|
||||
SIMT devices excel at executing the same instruction across multiple threads in a group. On nVidia hardware, this group is known as a warp and is 32 threads wide. On AMD hardware, it's known as a wavefront and is 64 threads wide. They operate at peak efficiency when every thread is executing the same instruction at once. If any threads take a different execution path than the others, then warp divergence occurs. Some threads have to sit idle and wait while others complete their operations until they can all get back in sync. This is a waste of resources and prevents the OpenCL device from achieving its full potential.
|
||||
|
||||
This scenario occurs with the naive implementation. If each thread is choosing random xforms to apply, then they will be diverging from all other threads which picked different xforms. A smarter implementation for randomization is needed when using OpenCL, enter cuburn.
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
====Randomization Without Warp Divergence====
|
||||
|
||||
Cuburn was the senior project for 4 students at Central Florida University in the fall of 2011. It investigated this exact issue and came up with a novel solution using Python and CUDA. Their solution is implemented and improved on here in OpenCL and is what gives EmberCL its performance advantage. It takes the following form.
|
||||
|
||||
Each iteration block is 32 threads wide by 8 threads high, giving 256 threads. Each block gets a buffer of on-chip local shared memory with the same dimensions as the block (32x8) to store point iterations to.
|
||||
|
||||
For each iteration, instead of every thread picking a random xform to apply, each row of threads gets a single random xform and all threads in it execute the same xform. The output of each iteration is accumulated to the histogram and also written to a different thread's location within shared memory.
|
||||
|
||||
After each iteration, the process repeats by re-randomizing each row and having each thread use the point at its location in the shared memory buffer, which was the previous output of a different thread, as the input to the xform it applies. This process is repeated 256 times for each thread, giving a total of 65,536 iterations per block.
|
||||
|
||||
The combination of point shuffling and randomizing the xform each row applies on each iteration achieves the goal of eliminating warp divergence while also producing high quality randomization.
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
====MWC vs ISAAC====
|
||||
|
||||
As mentioned in the Ember description, ISAAC is the RNG used in both Ember and flam3. While performing very well on the CPU, it's a poor choice for OpenCL since it would require a large amount of memory for each thread to keep its own copy. An alternative used in cuburn is the multiply-with-carry RNG. EmberCL uses this as well because it gives good randomization while requiring very little memory. Each block is passed a different seed, and each thread adds its index to the seed to ensure that all threads take a different trajectory when using the RNG.
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
====Run-time Compilation====
|
||||
|
||||
As mentioned above, one of the key strengths of OpenCL is run-time compilation. EmberCL takes heavy advantage of this at every opportunity to achieve maximum performance. The CPU implementation has many conditional checks during iteration. These include the presence/absence of post affine transforms, final xforms, palette indexing mode, pre-blur variations as well as virtual functions (or a case statement in flam3) to execute each variation. Such a large number of conditionals would be detrimental to OpenCL performance. Run-time compilation allows us to eliminate these completely. Once the `Ember` to be rendered is known, the kernel to render it is dynamically generated with only the necessary parts included and is compiled on the fly.
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
====Race Conditions====
|
||||
|
||||
One area where EmberCL differs from cuburn is that it does not account for the case of two threads accumulating to the same bucket in the histogram at the same time by default. Cuburn devoted a large portion of the paper to experimenting with every possible way to avoid such a condition. EmberCL ignores these efforts by default because they are mostly unnecessary. The whole point of using the GPU is to get real-time fractal flame rendering, or to make pre-rendered animations more quickly. With animating flames, a few pixels missing a few iteration values will be unnoticeable to the human eye. The small benefit of a clever implementation of such a mechanism is nowhere near being worth the performance hit and additional code complexity. However, is still interested in comparing the differences between locked and unlocked iteration, they can specify the `--lock_accum` argument on the command line for `EmberRender.exe` and `EmberAnimate.exe`. This will prevent race conditions, but will dramatically slow down the performance because the locking is achieved by using software atomic operations which are very slow.
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
====Compatibility With CPU====
|
||||
|
||||
A concern with GPU implementations of any program originally written for a CPU is that it will not be able to implement every feature from the original. EmberCL addresses these concerns by implementing all other features involved with iteration which were originally implemented on the CPU. These are fusing, opacity, bad value detection, xaos, post affine transforms, final xforms, and step vs linear palette indexing for histogram accumulation.
|
||||
<br></br>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
===Density Filter Kernel===
|
||||
|
||||
As mentioned in the algorithm overview description, density filtering can either be basic log scaling, or a more advanced Gaussian blur filter. EmberCL implements both of these. The former is trivial, the latter is very complex. The extreme difficulty of fully implementing density filtering such that it operates efficiently and also gives identical output to the CPU has prevented it from being done elsewhere. EmberCL overcomes this and is the first full implementation of variable width Gaussian density filtering for fractal flames in OpenCL. Seven different methods were tried, with the fastest being the chosen one. There are two main kernels used for density filtering, one with shared memory and one without.
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
====Shared Memory Kernel====
|
||||
|
||||
The shared memory kernel is used for final filter widths of 9 or less with float data types due to the limited space of shared memory. As stated in the algorithm overview, density filtering multiplies the log scaled value at a given histogram bucket by a filter value and adds it to the surrounding pixels in the accumulator. This process repeats for the width of the filter and the scaling values decrease as it moves outward from the pixel being operated on.
|
||||
|
||||
When running on a GPU, these repeated reads and writes to global memory are very slow. A better approach is for each thread to read a pixel from the histogram, and perform filtering to a shared memory buffer. Once all threads in the block have finished, the final result from the shared memory box is written to the accumulator.
|
||||
|
||||
In the EmberCL implementation, each block is 32x32 threads, and the box size of the shared memory is the size of the block plus the width of the filter in each direction. So for the commonly used filter width of 9, the box size would be 32 + 9 x 32 + 9, or 41 x 41. Each block processes a box and exits. No column or row advancements take place.
|
||||
|
||||
The filter is applied in a different manner than on the CPU to avoid race conditions. On the CPU, it's applied from the center pixel outward. In OpenCL, it's applied by row from top to bottom.
|
||||
|
||||
Certain variables were reused because the code is so complex, the card runs out of resources for block sizes greater than 24.
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
====Non-shared Memory Kernel====
|
||||
|
||||
The non-shared memory kernel is used for double precision data types or for final filter widths of 10 or more. This is commonly the case when supersampling is used because the final filter width is the supersample value times the max density filter radius. It takes roughly the same form as the shared memory kernel, but omits shared memory and deals directly with the histogram and accumulator for all reads and writes. Due to the excessive global memory accesses in this method, it offers no real performance improvement over the CPU.
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
====Filter Overlapping====
|
||||
|
||||
Both of these methods present a problem when two kernels are operating on an adjacent block of pixels. Although the pixels themselves don't overlap, the filters extending out from the edges of the blocks do overlap. To overcome this, the kernels are launched in multiple passes that are spaced far enough apart vertically and horizontally on the image so as to not overlap.
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
====Special Supersampling Cases====
|
||||
|
||||
Density filtering performs a few extra calculations depending on the supersample value used. To eliminate conditionals and achieve maximum performance, a separate kernel is built for each of these cases for the shared and non-shared memory cases. This leads to a total of 6 possible kernels being built to cover all scenarios. After being built once, the compiled output is saved for all subsequent renders during a program run.
|
||||
<br></br>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
|
||||
===Final Accumulation Kernel===
|
||||
|
||||
The implementation of final accumulation in OpenCL is the simplest of the kernels and is copied almost verbatim from the Ember CPU code. To maintain complete compatibility with the CPU, all advanced features such as transparency, early clipping and highlight power are implemented. Like density filtering, unnecessary calculations and conditionals are eliminated by providing different kernels depending on the parameters of the Ember being rendered. They are:
|
||||
|
||||
-Early clipping with transparency.<br></br>
|
||||
-Early clipping without transparency.<br></br>
|
||||
-Late clipping with transparency.<br></br>
|
||||
-Late clipping without transparency.
|
||||
|
||||
All are assumed to have an alpha channel. Three channel RGB output is implemented, but not supported.
|
||||
<br></br>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
|
||||
==RendererCL==
|
||||
|
||||
The main rendering class in Ember is `Renderer`. EmberCL contains a class which derives from `Renderer<T>` named `RendererCL<T>` and fully supports both single and double precision data types like the base class does.
|
||||
|
||||
`RendererCL` overrides various virtual functions defined in `Renderer` and implements their processing on the GPU in OpenCL.
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
===Shared vs. Un-shared===
|
||||
|
||||
`RendererCL` can operate in two modes, shared and un-shared.
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
====Un-shared====
|
||||
|
||||
The final output is rendered to an OpenCL 2D image which no other running program is accessing.
|
||||
</li>
|
||||
<li>
|
||||
|
||||
====Shared====
|
||||
|
||||
The final output is rendered to an OpenCL 2D image which another program is also using as an OpenGL 2D texture. This is how interactive rendering is done in the Fractorium GUI. Shared mode benefits from the efficiency of a shared image/texture because no copying is necessary and all outputs remain on the GPU.
|
||||
For sharing to work, every call to create, access or destroy the output image must be preceded by a call to acquire the object from OpenGL and followed by a call to release it. These calls are handled internally by `OpenCLWrapper`.
|
||||
</li>
|
||||
|
||||
In either of these modes, the output image can be copied back into main memory as needed for use in writing the final output file.
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
|
||||
===Parameter Differences===
|
||||
|
||||
A few user configurable properties from `Renderer` are hard coded in `RendererCL` due to how processing is implemented.
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
====Thread Count====
|
||||
|
||||
Always considered to be 1, because threading is managed inside the kernels.
|
||||
</li>
|
||||
<li>
|
||||
====Channels====
|
||||
|
||||
Always 4 because the type of the output image is `CL_RGBA`. Final output file type can only be PNG.
|
||||
</li>
|
||||
<li>
|
||||
====Bits Per Pixel====
|
||||
|
||||
Always 8, 16bpp for PNG images is only supported in Ember on the CPU.
|
||||
</li>
|
||||
<li>
|
||||
====Sub Batch Size====
|
||||
|
||||
Always `iterblocksWide * iterblockshigh * 256 * 256` since that is the number of iterations performed in a single kernel call.
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
|
||||
===Kernel Launching===
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
====Iteration Grid Dimensions====
|
||||
|
||||
The iteration kernel is launched in a grid which is 64 blocks wide by 2 blocks high. Each block has 256 (32x8) threads which each perform 256 iterations. This gives 8,388,608 iterations per kernel launch. The grid dimensions were empirically derived and may change in the future as new hardware is released.
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
====Passing Arguments====
|
||||
|
||||
An `Ember` object cannot be passed directly from the CPU side to an OpenCL kernel. Instead, stripped down versions of the `Ember` object and its filters are created and copied right before each kernel launch and are passed as arguments. However, the palette can be passed verbatim since it's just a 256 element `vector<vec4<float>>`.
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
====Fusing====
|
||||
|
||||
Fusing is very important for image quality. Omitting it or choosing the wrong value will lead to strange artifacts in the final output image. Since there are so many threads, setting the fuse value is not as simple as just using the same value from the CPU side.
|
||||
|
||||
Forcing each thread to fuse on each kernel call would be a huge waste of resources since each only performs 256 iterations. On the other hand, not fusing often enough after several kernel calls leads to bad image quality. `RendererCL` uses an empirically derived solution of having every thread fuse 100 times for every 4 kernel calls, which is 1024 iterations.
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
====Recompilation====
|
||||
|
||||
As mentioned above, a custom kernel is created and compiled for every `Ember` that is rendered. However, compilation is not always required if the `Ember` to be rendered does not differ significantly from the previous one rendered. Differences in the following parameters will trigger a recompilation:
|
||||
|
||||
-Xform count.<br></br>
|
||||
-Presence/absence of post affine transform.<br></br>
|
||||
-Presence/absence of final xform.<br></br>
|
||||
-Presence/absence of xaos.<br></br>
|
||||
-Step/linear palette indexing mode.<br></br>
|
||||
-Variations present in each xform.
|
||||
|
||||
When requesting iteration to commence, the checks above will be made. If any mismatches occur, a recompilation will be triggered right before the kernel launch.
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
@@ -1,171 +0,0 @@
|
||||
#summary Ember implementation details for developers.
|
||||
<font face="Verdana">
|
||||
|
||||
=Introduction=
|
||||
|
||||
This page is intended for developers who wish to get familiar with the Ember code.
|
||||
|
||||
As stated on the main page, the intent of Ember was to re-write the entire flam3 library and the 3 command line programs that use it, in C++. By using modern design and language techniques, a legacy code base was made to be easily understandable to the common programmer. The extensibility of C++ also allows derived projects to implement alternative renderers as they are developed, while still maintaining 100% compatibility with the original. Below are the main design features of Ember and how they compare to the original implementation in flam3.
|
||||
|
||||
Ember takes advantage of a few core language features in C++ that help simplify the coding effort.
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
===Templates===
|
||||
|
||||
Since the process of rendering a fractal flame from start to finish is lengthy, it's interesting to experiment with how using different data types affects performance and image quality. flam3 implemented just such a capability, but since C doesn't have the concept of templates, it did something else. It used a tricky method of strategically positioning #include statements after #defines for each type. C++ provides a more elegant solution through the use of template arguments. Ember supports not only changing the data types of the histogram, but of every calculation used in the entire algorithm. Supported types are float and double.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
===Lambdas===
|
||||
|
||||
These were added to the standard in C++0x and have been a blessing to those implementing multi-threaded programs ever since. Before that, the traditional threading model required a programmer to butcher their design just to achieve parallelism. Modern C++ offers a vast improvement through the use of lambdas. These allow us to write multi-threaded code while keeping good program design structure in tact. Ember achieves this by using the Intel Threading Building Blocks library for all threading needs.
|
||||
</li>
|
||||
</ul>
|
||||
=Details=
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
==Containers==
|
||||
|
||||
Flam3 contained very verbose code for managing seemingly simple memory operations such as keeping a list of xforms. With the C++ Standard Template Library, such code can be greatly reduced. Containers are used extensively throughout Ember, greatly simplifying the code, reducing its verbosity and enhancing its readability.
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
==Variations==
|
||||
|
||||
In flam3, for any action to be taken on a variation, such as calling it or setting parameters, a massive case statement had to be used. The number of cases equaled the number of variations supported by that build. If a new variation was added, all case statements had to be updated.
|
||||
|
||||
In Ember, this cumbersome burden was alleviated by making each variation a class which derived from a base variation class. Each implements a virtual function which does the processing work. Other virtual functions are used for setting random or default states for parametric variations.
|
||||
|
||||
In Apophysis, users can add variations by compiling their own DLLs. Ember could conceivably support such a feature in the future by having DLLs return pointers to base variation objects that have been instantiated as derived variations. However, no such support has been implemented. For the time being, new variation classes will periodically be added to Ember.
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
==Iterating==
|
||||
|
||||
Iteration is the portion of the algorithm where the most time is spent. Any possible optimization that can be taken, should be taken within the innermost loops. Flam3 missed a few opportunities to do this, so Ember optimized every last piece to the maximum possible extent.
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
===Fusing===
|
||||
|
||||
As stated in the paper, the first 20 iterations are not plotted in order to get a more concentrated image with less stray points. This is somewhat misleading, since the number flam3 actually uses is 15. If early clipping is used, the number of fuse iterations is 100.
|
||||
|
||||
Further deviating from the paper, fusing is not just done at the very beginning. Rather, all iteration is broken up into chunks, or sub batches, of 10,000. At the beginning of each sub batch, the point trajectory is reset, and fused again. Assuming a fuse value of 15 and a sub batch size of 10,000, fusing takes place for 0.0015 of the total iterations.
|
||||
|
||||
For each iteration, flam3 checks to see whether fusing is done yet, if so, the point is plotted. This is wasteful to check for something every iteration that occurs so infrequently. In the interest of maximum efficiency, Ember splits all iteration up into two identical loops, one with fusing and one without. This reduces the number of conditional checks needed.
|
||||
|
||||
A further optimization opportunity was that when a final xform was present, flam3 applied it during fusing, even though the computed point was never used. Ember omits the application of the final xform during fusing.
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
===Point Assignment===
|
||||
|
||||
The general structure of the iteration loop in flam3 looks like:
|
||||
|
||||
{{{
|
||||
p2 = xform(p1)
|
||||
save p2 to temp buffer for plotting later
|
||||
p1 = p2
|
||||
}}}
|
||||
|
||||
This was optimized to omit the assignment from p2 back to p1 for the start of the next iteration. Instead, no temporary points are ever created. Rather, the indices of the temporary buffer to read from and write to are incremented. Further, the buffer is read from and written to directly, alleviating the need for temporary assignments. It roughly takes the form of:
|
||||
|
||||
{{{
|
||||
i = 0
|
||||
while (i < SubBatchSize)
|
||||
{
|
||||
xform(buf[i], buf[i + 1])
|
||||
i++
|
||||
}
|
||||
}}}
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
===Xaos===
|
||||
|
||||
When xaos is used, an additional calculation must be performed to look up the next random xform to apply. Ember bypasses this when xaos is not present by having two separate classes for iteration, one with xaos and one without.
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
|
||||
==Filtering==
|
||||
|
||||
For density and spatial filtering, a box of pixels is processed. Flam3 accessed pixels in row, column order. This is cache inefficient because every pixel access is on a different row. Ember optimizes filtering by processing in a more cache-friendly column, row order.
|
||||
|
||||
While flam3 parallelized the Gaussian density filtering, it did not do so for basic log scale filtering (max radius = 0). While this method is seldom used for a final output image, it is used for interactive renders to give a preview image before full iteration is complete. In an effort to give a more responsive GUI, Ember parallelized this method.
|
||||
|
||||
During an interactive render, the only parameters that are usually changing are the affine transforms. Because this doesn't affect many of the other parameters used to render, intelligent checks are used to skip any unnecessary memory allocations each time the main render function is called. This technique is used with density and spatial filters to only recreate them if the requested filter differs from the one previously used.
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
==Incremental Rendering==
|
||||
|
||||
Ember is designed to be run from the command line, or from an interactive GUI. To facilitate the latter, the rendering process keeps state information about its progress. This is done so that it can be aborted in mid-render, and resumed later on. It also serves to ensure the minimum amount of processing is performed in response to a change in the `Ember` being rendered. For example, if a render completes and the user only wants to change the vibrancy, then only final accumulation needs to be ran again. Another feature is that if a render completes and the user increases the quality, all previous iteration information is preserved in the histogram and the new iterations for the quality difference are simply added to them.
|
||||
|
||||
The downside of this design is that it admittedly butchers the structure of the main rendering function with numerous conditionals. The cost is worth it as the state-preserving design greatly facilitates interactive rendering from a GUI.
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
==Final Accumulation==
|
||||
|
||||
This stage is where color correction and spatial filtering are done. Flam3 did not multi-thread this step because the percentage of the total time spent here is small. Ember easily parallelized it with the aforementioned use of lambdas and TBB. While inconsequential in a headless render, it's very helpful in providing more responsiveness in an interactive render.
|
||||
|
||||
The process was further optimized by eliminating many of the redundant assignments and bounds checks that flam3 did.
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
==Xml Parsing==
|
||||
|
||||
While not much of a speed bottleneck, Xml parsing can take some time if reading in a large file, such as is used for animations. Flam3 implemented this in the least efficient manner possible by reading a single character at a time. Ember does this much faster by reading the entire file at once. The structure of the Xml parsing functions remains mostly the same.
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
==Affine Transforms==
|
||||
|
||||
In every iteration, these are applied before, and optionally after, variations are applied. Flam3 treated them as an array of 6 coefficients arranged in column, row order. Ember puts them in a class called Affine2D so they can be accessed more clearly using their coefficient labels, A-F. The layout of the two is like so:
|
||||
|
||||
flam3: 3 columns of 2 rows each. Accessed col, row.
|
||||
|
||||
{{{
|
||||
[a(0,0)][b(1,0)][c(2,0)]
|
||||
[d(0,1)][e(1,1)][f(2,1)]
|
||||
}}}
|
||||
|
||||
Ember: 2 columns of 3 rows each. Accessed col, row.
|
||||
|
||||
{{{
|
||||
[a(0,0)][d(1,0)]
|
||||
[b(0,1)][e(1,1)]
|
||||
[c(0,2)][f(1,2)]
|
||||
}}}
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
==Matrices==
|
||||
|
||||
All matrices and vectors are from the glm library and receive the same template argument used to create the classes they're used in.
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
==Random Numbers==
|
||||
|
||||
Randomization is at the heart of the fractal flames algorithm. Flam3 used the ISAAC random number generator. Ember does the same, but uses a C++ version with a few additional convenience functions added.
|
||||
|
||||
The flam3 method of using a buffer to hold xform indices to randomly select is also used in Ember. However, flam3 made each element an unsigned short. Since an Ember will have nowhere near 256 xforms, the elements were made to be 1 byte each in an effort to make the buffer fit into the cache better.
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
@@ -1,229 +0,0 @@
|
||||
#summary Final render dialog
|
||||
<font face="Verdana">
|
||||
|
||||
=Final Render Dialog=
|
||||
|
||||
This dialog allows the user to render flames to an output file. It can render either the current flame, or all
|
||||
open flames. When rendering all, they can either be treated as individual images, or as frames in an animation. If the
|
||||
later is chosen, temporal samples are used to achieve motion blur. All values specified here will be saved between program runs.
|
||||
|
||||
Before rendering begins, the current flame will be saved back to the opened file in memory.
|
||||
|
||||
Miscellaneous messages are shown in the bottom text box.
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
==Early Clip==
|
||||
|
||||
Whether to apply color correction before spatial filtering. It's recommended to only use this if the colors don't look right.
|
||||
|
||||
A more thorough discussion of early clip from the original flam3 documentation is <a href="https://code.google.com/p/flam3/wiki/NewFeatures">here</a>.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
==Transparency==
|
||||
|
||||
Whether the empty pixels in the image should be transparent, or use the background color. This only applies when saving as PNG.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
==Use OpenCL==
|
||||
|
||||
Whether to use OpenCL in the rendering process. It is highly recommended that you use this if your video card supports it.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
==Use Double Precision==
|
||||
|
||||
Whether to use double precision numbers in the rendering process. This will slow down the render and double the memory usage, but will produce a better looking image in some cases.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
==Save Xml==
|
||||
|
||||
Whether to also save the Xml of every rendered image in the same folder the image is saved.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
==Render All==
|
||||
|
||||
Whether to render all currently opened flames, or just the current one. When checked, image and Xml output names will be auto generated.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
==Render as Animation Sequence==
|
||||
|
||||
When Render All is checked, whether to use the Temporal Samples value specified to create motion blurring. Disabled if Render All is unchecked.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
==Keep Aspect Ratio==
|
||||
|
||||
Whether to keep the aspect ratio of the final output image the same as the original flame. When checked, changing the value of one of the dimensions
|
||||
will cause the other dimension to change a corresponding amount times the aspect ratio of the original.<br></br>
|
||||
The original dimensions will be those of the render preview window if the flame originated in Fractorium.
|
||||
If the flame originated from a file or pasted Xml, the original dimensions will be whatever was specified in those parameters.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
==Scale==
|
||||
|
||||
The scaling method to use. This is used to adjust the zoom specified in the scale parameter based on the difference between the original image dimensions and the final image dimensions.
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
===None===
|
||||
|
||||
Do not adjust the scale parameter in response to the difference between the original dimensions and the final dimensions. This is useful for cropping without zooming.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
===Width===
|
||||
|
||||
Scale the scale parameter by the percentage difference between the original width and the final width.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
===Height===
|
||||
|
||||
Scale the scale parameter by the percentage difference between the original height and the final height.
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
==Render All Extension==
|
||||
|
||||
The image type to use when Render All is checked. Disabled if Render All is unchecked.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
==OpenCL Platforms==
|
||||
|
||||
The available OpenCL platforms on the system. Disabled if Use OpenCL is unchecked.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
==OpenCL Device==
|
||||
|
||||
The available devices on the currently selected platform. Disabled if Use OpenCL is unchecked.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
==Threads==
|
||||
|
||||
The number of threads to use when using the traditional CPU renderer. Disabled if Use OpenCL is unchecked.
|
||||
|
||||
Range: 1 - number of cores.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
==Width==
|
||||
|
||||
The width of the final output image.
|
||||
|
||||
Range: 10 - 100,000.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
==Height==
|
||||
|
||||
The height of the final output image.
|
||||
|
||||
Range: 10 - 100,000.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
==Quality==
|
||||
|
||||
The quality of the final output image. Values above 500 don't offer noticeable improvement.
|
||||
|
||||
Range: 1 - 200,000.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
==Temporal Samples==
|
||||
|
||||
The temporal samples to use when applying motion blur. A value of 1000 is recommended. Only used when Render as Animation Sequence is checked, otherwise a value of 1 is internally used.
|
||||
|
||||
Range: 1 - 5,000.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
==Supersample==
|
||||
|
||||
The value to multiply the dimensions of the histogram and density filter buffer by to help eliminate jagged lines.
|
||||
Values greater than one will greatly impact performance and will increase memory usage. See the Memory Usage field for the effect.
|
||||
|
||||
While a value of 2 offers some visual improvement, values greater than 2 don't offer noticeable improvement.
|
||||
|
||||
Range: 1 - 4.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
==Memory Usage==
|
||||
|
||||
The amount of memory required for the the entire render, which is the histogram, density filtering buffer and final image.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
==Output==
|
||||
|
||||
The file to save a single image render to, or the folder to save multiple image renders to. This is set by clicking the ... button.
|
||||
Clicking Open will open the folder location in an explorer window.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
==Prefix==
|
||||
|
||||
The prefix to prepend to all image and Xml files.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
==Suffix==
|
||||
|
||||
The suffix to append to all image and Xml files.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
==Total Progress==
|
||||
|
||||
The percentage of the entire rendering process which has completed.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
==Iteration==
|
||||
|
||||
The percentage of the iteration step in the current image render which has completed.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
==Density Filtering==
|
||||
|
||||
The percentage of the density filtering step in the current image render which has completed.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
==Final Accumulation==
|
||||
|
||||
The percentage of the final color correction and spatial filtering step in the current image render which has completed. This is almost always instantaneous.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
==Start==
|
||||
|
||||
Begin the rendering process. If a render is already running, it will stop it first.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
==Stop==
|
||||
|
||||
Stop the rendering process.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
==Close==
|
||||
|
||||
Stop the rendering process, close the dialog and return to the main window.
|
||||
</li>
|
||||
</ul>
|
||||
@@ -1,319 +0,0 @@
|
||||
#summary Flame tab
|
||||
<font face="Verdana">
|
||||
|
||||
=Flame Tab Item Descriptions=
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
==Color==
|
||||
|
||||
These settings affect color. There is no set combination to make a perfect image. Once you've settled on a design you like,
|
||||
play with different color combinations to give it the desired final look.
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
===Brightness===
|
||||
|
||||
The brightness of the final output image.
|
||||
|
||||
Range: 0.05 - 50.
|
||||
|
||||
Render State: Density filtering.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
===Gamma===
|
||||
|
||||
The gamma of the final output image. Higher values will give better color, but will reveal more scattered points.
|
||||
Lower values will reduce scattered points but will wash the colors out to white.
|
||||
|
||||
Range: 1 - 9999.
|
||||
|
||||
Render State: Final accumulation.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
===Gamma Threshold===
|
||||
|
||||
The gamma threshold of the final output image. Higher values will reduce scattered points, but will also reduce color quality.
|
||||
Lower values will reveal more scattered points, but give better color.
|
||||
|
||||
Range: 0 - 10.
|
||||
|
||||
Render State: Final accumulation.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
===Vibrancy===
|
||||
|
||||
The scale factor to apply to the alpha channel log scaling when gamma correcting the final output image. Higher values will
|
||||
give more saturated colors. Lower values will wash the colors out to white.
|
||||
|
||||
Range: 0 - 1.
|
||||
|
||||
Render State: Final accumulation.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
===Highlight Power===
|
||||
|
||||
The highlight power of the final image. Set this to a value greater than zero if the colors don't look right.
|
||||
|
||||
A more thorough discussion of highlight power from the original flam3 documentation is <a href="https://code.google.com/p/flam3/wiki/HighlightPower">here</a> and <a href="https://code.google.com/p/flam3/wiki/NewFeatures">here</a>.
|
||||
|
||||
Range: -1 - 2.
|
||||
|
||||
Render State: Final accumulation.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
===Background===
|
||||
|
||||
The background color of the image. Ignored on the final image output if transparency is used.
|
||||
|
||||
Range: 0-255 for RGB.
|
||||
|
||||
Render State: Full render.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
===Palette Mode===
|
||||
|
||||
The mode used for palette indexing when accumulating to the histogram.
|
||||
|
||||
Step: If the specified palette index is a fraction, round down to the nearest integer.
|
||||
|
||||
Linear: Blend the specified index with the one after it.
|
||||
|
||||
Render State: Full render.
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
==Geometry==
|
||||
<ul>
|
||||
<li>
|
||||
===Width===
|
||||
|
||||
The width in pixels of the viewable area. Read only.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
===Height===
|
||||
|
||||
The height in pixels of the viewable area. Read only.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
===Center X===
|
||||
|
||||
The center offset of the camera. The image will move in the opposite direction on the X axis.
|
||||
|
||||
Range: -10 - 10.
|
||||
|
||||
Render State: Full render.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
===Center Y===
|
||||
|
||||
The center offset of the camera. The image will move in the opposite direction on the Y axis.
|
||||
|
||||
Range: -10 - 10.
|
||||
|
||||
Render State: Full render.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
===Scale===
|
||||
|
||||
The number of pixels in the final image that correspond to the distance from 0 to 1 in the Cartesian rendering plane.
|
||||
Increasing zooms in, decreasing zooms out. Quality is not scaled when this value is adjusted, so increased values
|
||||
will degrade the final image quality.
|
||||
|
||||
Range: 10 - 3000.
|
||||
|
||||
Render State: Full render.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
===Zoom===
|
||||
|
||||
The zoom level of the final image. Quality is scaled when this value is adjusted, so rendering time is greatly increased.
|
||||
|
||||
Range: 0 - 5.
|
||||
|
||||
Render State: Full render.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
===Rotate===
|
||||
|
||||
The rotation of the final image.
|
||||
|
||||
Range: -180 - 180.
|
||||
|
||||
Render State: Full render.
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
==Filter==
|
||||
<ul>
|
||||
<li>
|
||||
===Spatial Filter Width===
|
||||
|
||||
The width of the spatial filter applied to the final image.
|
||||
|
||||
Range: 0.1 - 10.
|
||||
|
||||
Render State: Full render.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
===Spatial Filter Type===
|
||||
|
||||
The type of the spatial filter applied to the final image.
|
||||
|
||||
Render State: Full render.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
===Temporal Filter Width===
|
||||
|
||||
The width of the temporal filter used during animation. This value has no effect on the
|
||||
interactive renderer, however it's stored in the Xml when saved.
|
||||
|
||||
Render State: Unchanged.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
===Temporal Filter Type===
|
||||
|
||||
The type of the temporal filter used during animation. This value has no effect on the
|
||||
interactive renderer, however it's stored in the Xml when saved.
|
||||
|
||||
Render State: Unchanged.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
===DE Filter Min Radius===
|
||||
|
||||
The minimum filter radius to use when performing density filtering. Increasing this value
|
||||
will add additional blurring even in high density areas, which is generally undesirable. This must
|
||||
always be less than or equal to the DE max radius.
|
||||
|
||||
A more thorough discussion of density filtering from the original flam3 documentation is <a href="https://code.google.com/p/flam3/wiki/DensityEstimation">here</a>.
|
||||
|
||||
Range: 0 - 25.
|
||||
|
||||
Render State: Full render.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
===DE Filter Max Radius===
|
||||
|
||||
The maximum filter radius to use when performing density filtering. Increasing this value
|
||||
will add additional blurring only to low density areas, which is generally desirable. This must
|
||||
always be greater than or equal to the DE min radius.
|
||||
|
||||
When using OpenCL, if this value multiplied by the supersample is greater than 9, the performance
|
||||
of density filtering will drop to that of the CPU. This is because a filter size greater than 9
|
||||
cannot fit into local shared memory.
|
||||
|
||||
Range: 0 - 25.
|
||||
|
||||
Render State: Full render.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
===DE Curve===
|
||||
|
||||
The speed with which the density filter values decrease when moving away from the center pixel
|
||||
being filtered. This value will almost never need to be anything other than the default of 0.40.
|
||||
|
||||
Range: 0.01 - 5.
|
||||
|
||||
Render State: Full render.
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
==Iteration==
|
||||
<ul>
|
||||
<li>
|
||||
===Passes===
|
||||
|
||||
The number of steps to break iteration into, applying density filtering each time.
|
||||
|
||||
This value should never be anothing other than one and will most likely be removed in a future release.
|
||||
|
||||
Range: 1 - 3.
|
||||
|
||||
Render State: Full render.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
===Temporal Samples===
|
||||
|
||||
The number of temporal samples used to blend between frames during animation. This value has no effect on the
|
||||
interactive renderer, however it's stored in the Xml when saved.
|
||||
|
||||
Range: 1 - 5,000.
|
||||
|
||||
Render State: Unchanged.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
===Quality===
|
||||
|
||||
The number of iterations per pixel in the final output image. Suggested values:
|
||||
|
||||
CPU, Interactive: 10
|
||||
|
||||
OpenCL, Interactive: 20 - 60
|
||||
|
||||
Final Render: 2000+
|
||||
|
||||
Values greater than 2000 don't offer much noticeable improvement.
|
||||
|
||||
Range: 1 - 200,000.
|
||||
|
||||
Render State: Full render.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
===Supersample===
|
||||
|
||||
The value to multiply the dimensions of the histogram and density filter buffer by
|
||||
to help eliminate jagged lines. During interactive editing, it should always be one,
|
||||
and should only be increased when preparing for a final render. Values greater than one
|
||||
will greatly impact performance and will increase memory usage.
|
||||
|
||||
While a value of 2 offers some visual improvement, values greater than 2 don't offer noticeable improvement.
|
||||
|
||||
Range: 1 - 4.
|
||||
|
||||
Render State: Full render.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
===Affine Interpolation===
|
||||
|
||||
The method to use when interpolating affine transforms during animation. This value has no effect on the
|
||||
interactive renderer, however it's stored in the Xml when saved.
|
||||
|
||||
Render State: Unchanged.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
===Interpolation===
|
||||
|
||||
The method to use when interpolating flames during animation. This value has no effect on the
|
||||
interactive renderer, however it's stored in the Xml when saved.
|
||||
|
||||
Render State: Unchanged.
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
@@ -1,159 +0,0 @@
|
||||
#summary User's guide for Fractorium.
|
||||
<font face="Verdana">
|
||||
|
||||
=Introduction=
|
||||
|
||||
Fractorium is a fractal flame editor written in C++ with the Qt library. It uses Ember and EmberCL to perform all rendering.
|
||||
|
||||
The intent of Fractorium is to create an editor which has a cleaner interface, easier usage and better performance than any currently available in order to provide the artist with the best possible experience.
|
||||
<br></br>
|
||||
|
||||
=Details=
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
==General Usage==
|
||||
|
||||
Fractorium aims to allow the artist maximum creative freedom with the minimal possible effort. To achieve this, the entire program was designed to be used with a mouse containing two buttons and a wheel. Using Fractorium with a less capable input device will most likely be cumbersome and is not supported.
|
||||
|
||||
In keeping with the idea of minimizing effort, a novel feature is that the user need not click in the spinners or combo boxes they are editing. Rather, just hover over them and scroll the mouse wheel. Almost every control in the program is designed to be altered with the mouse wheel. Scrolling it only applies to the control the mouse is hovering over. Once the mouse moves away from the control, it loses focus and mouse wheel scrolling no longer applies to it.
|
||||
|
||||
In addition to being designed for a mouse, the user is also meant to have one hand on the keyboard with their fingers on the shift, ctrl and alt keys.
|
||||
|
||||
Most controls have a default non-zero value. Fractorium makes it easy for the user to switch back and forth between a default value and a reasonable non-default value. Just double click in any control with a default value and you will see the value change to a reasonable non-default value. Double click again and it will change back to the default.
|
||||
|
||||
If you need to enter a specific value with finer granularity than is provided by double clicking or mouse wheel scrolling, you can enter it by hand. Select the text of the control and type in it while the mouse is still hovering over it. Be careful not to move the mouse away, because it will cause the control to lose focus.
|
||||
|
||||
Note that all rendering is done without locking the histogram. While this is theoretically imperfect, it doesn't seem to have any visual impact. An option to control this may be revisited later.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
==Usage Tips==
|
||||
|
||||
A responsive interface has the highest positive impact on user experience. These tips will help get you running in the best possible configuration for your hardware.
|
||||
|
||||
The first step is to enable OpenCL in the options if your video card supports it. This will give incredibly fluid real-time feedback while editing transforms.
|
||||
|
||||
When running with OpenCL enabled, you may find the movement is a little bit jerky if you have a fast card. This is a case of running "too fast". The jerkiness comes from the fact that your card is so fast that it's completing the render in between every mouse movement and is attempting to perform full Gaussian density filtering which can be slow. To avoid this jerkiness, increase the quality slightly to a value between 20 and 50. This will cause the render to take long enough such that full density filtering will not be performed between rapid mouse movements.
|
||||
|
||||
If OpenCL does not work, and you are forced to use the CPU, keep your quality setting on 10. This will give reasonably responsive feedback.
|
||||
|
||||
Regardless of the renderer type being used, do not increase the quality to a high value until your design is solid enough to be ready for a final render. Keep the quality low until you are sure you've got something you want to keep.
|
||||
|
||||
You can optionally select single or double precision numbers. Single is much faster and is highly recommended. Double will produce better image quality but is so slow that it is only recommended when doing a final render.
|
||||
|
||||
Never use supersampling during interactive rendering. It won't produce any noticeable improvement in quality and will greatly slow down performance. Only use it if you want to determine if it will help a final render look better. After experimenting with values greater than one, always restore supersample to one when finished. As a general rule, values higher than 2 don't add any benefit.
|
||||
|
||||
For each mouse movement, a number of iterations are ran before displaying a preview image. This value is controlled by the sub batch count option. Separate values are allowed for CPU and OpenCL. Increase these to get a better preview, decrease them to get more responsive feedback.
|
||||
|
||||
By default, preview images for mouse movements are scaled using basic log density scaling. Only when iteration has fully completed after the mouse is held still is full Gaussian density filtering performed. If you have an extremely fast processor or video card, try setting the filtering method to Full DE. This will perform full Gaussian density filtering on every mouse movement. The processing cost is high, but the feedback is stunning.
|
||||
|
||||
The circles shown on the main display are the affine transforms for each xform. Dragging them around is how most editing is done. Holding down certain keys can alter the effect dragging has on them.
|
||||
|
||||
To get an existing Xml file open in the editor, you can either select it by clicking the File | Open menu, or by dragging and dropping the file onto the window.
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
====No Keys====
|
||||
|
||||
X & Y: Rotate and Scale.
|
||||
|
||||
Center: Move.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
====Shift====
|
||||
|
||||
X & Y: Rotate only.
|
||||
|
||||
Local Pivot:
|
||||
|
||||
Center: Rotate around 0,0, while keeping local orientation fixed.
|
||||
|
||||
World Pivot:
|
||||
|
||||
Center: Rotate around 0,0, also rotating local orientation.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
====Control====
|
||||
|
||||
X, Y and Center: Snap current movement to grid.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
====Alt====
|
||||
|
||||
X & Y: Free movement.
|
||||
|
||||
Center: No effect.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
====Shift + Alt====
|
||||
|
||||
Local Pivot:
|
||||
|
||||
X & Y: Rotate around transform center.
|
||||
|
||||
Center: No effect.
|
||||
|
||||
World Pivot:
|
||||
|
||||
X & Y: Rotate around 0,0.
|
||||
|
||||
Center: No effect.
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
Dragging the image with the right mouse button rotates and scales.
|
||||
|
||||
Dragging the image with the middle mouse button pans.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
==Parameter Descriptions==
|
||||
|
||||
Behavior and recommended usage of all UI elements.
|
||||
|
||||
[Menus Menus]<br></br>
|
||||
[Toolbar Toolbar]
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
===Tabs===
|
||||
<ul>
|
||||
<li>
|
||||
[FlameTab Flame]<br></br>
|
||||
</li>
|
||||
<li>
|
||||
[XformsTab Xforms]<br></br>
|
||||
</li>
|
||||
<li>
|
||||
[PaletteTab Palette]<br></br>
|
||||
</li>
|
||||
<li>
|
||||
[LibraryTab Library]<br></br>
|
||||
</li>
|
||||
<li>
|
||||
[InfoTab Info]<br></br>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
===Dialogs===
|
||||
<ul>
|
||||
<li>
|
||||
[FinalRenderDialog Final Render]<br></br>
|
||||
</li>
|
||||
<li>
|
||||
[OptionsDialog Options]<br></br>
|
||||
</li>
|
||||
<li>
|
||||
[AboutDialog About]<br></br>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
@@ -1,45 +0,0 @@
|
||||
#summary Info tab
|
||||
<font face="Verdana">
|
||||
|
||||
=Info Tab Item Descriptions=
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
==Histogram Bounds==
|
||||
|
||||
When the histogram is allocated before starting a render, it does not have the exact dimensions the user requested. Instead, it is slightly larger
|
||||
to allow for filter padding around the edges. The box helps the user understand the relationship between the Cartesian space the histogram represents and the
|
||||
dimensions of the memory allocated for it. This is mostly of engineering interest.
|
||||
|
||||
The corners going clockwise from the top left correspond to the bounds of the Cartesian space the histogram represents. They are upper left,
|
||||
upper right, lower right, lower left.
|
||||
|
||||
The values in the middle of the top and left sides of the box represent the height and width of the histogram in memory.
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
===Gutter===
|
||||
|
||||
The amount of padding added to the edges of the histogram to allow for filtering.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
===DE Box Dimensions===
|
||||
|
||||
The size of the density filtering box used, with the pixel being filtered in the center. This value is used in calculating the gutter.
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
==File Opening==
|
||||
|
||||
If there were any warnings or errors opening a file, the details will be displayed here.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
==Rendering==
|
||||
|
||||
If there were any problems creating a renderer, or finishing the rendering process, the details will be displayed here.
|
||||
</li>
|
||||
</ul>
|
||||
@@ -1,34 +0,0 @@
|
||||
#summary Library tab
|
||||
<font face="Verdana">
|
||||
|
||||
=Library Tab Item Descriptions=
|
||||
<ul>
|
||||
<li>
|
||||
==Current Flame File==
|
||||
|
||||
This shows a list of all flames present in the currently opened file, or randomly generated flock. When editing, the latest updates to the
|
||||
current flame will not be saved back to this list in memory, and the preview will not be updated, unless the user specifically does so. This allows restoration of the original flame
|
||||
if needed.
|
||||
|
||||
|
||||
The entire file will not be saved back to disk unless the user specifically does so.
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
===Single click===
|
||||
|
||||
Edit the name of the selected flame. This will be used as the name within the Xml file when the user saves it back to disk.
|
||||
|
||||
Render State: Unchanged.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
===Double click===
|
||||
|
||||
Set the flame as the current one. This will overwrite any edits currently pending, so be sure to save them first before switching between flames. This will also reset the undo list.
|
||||
|
||||
Render State: Full render.
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
@@ -1,101 +0,0 @@
|
||||
=Description=
|
||||
<font face="Verdana" size="2">
|
||||
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.
|
||||
</font>
|
||||
<br></br>
|
||||
|
||||
==Installer (0.3.7.2 Beta)==
|
||||
<font face="Verdana" size="2">
|
||||
<a href="https://drive.google.com/file/d/0Bws5xPbHJph6TThVOHdUZUxVM00/edit?usp=sharing">Windows 7 64-bit Installer</a>
|
||||
</font>
|
||||
<br></br>
|
||||
|
||||
==Documentation==
|
||||
<font face="Verdana" size="2">
|
||||
Get started <a href="https://code.google.com/p/fractorium/wiki/ProjectOverview">here</a>.
|
||||
</font>
|
||||
<br></br>
|
||||
|
||||
==Requirements and Prerequisites==
|
||||
<font face="Verdana" size="2">
|
||||
Windows 7, 64-bit
|
||||
|
||||
Install the latest drivers for your video card
|
||||
|
||||
An nVidia or AMD video card to take advantage of OpenCL
|
||||
|
||||
If you have an Intel processor, but do not have a device capable of running OpenCL, and still want to run Fractorium with only CPU support, you must install Intel's CPU-only OpenCL libraries <a href="http://registrationcenter.intel.com/irc_nas/3608/intel_sdk_for_ocl_applications_2013_r2_runtime_x64_setup.msi">here</a>.
|
||||
</font>
|
||||
<br></br>
|
||||
|
||||
==Running==
|
||||
<font face="Verdana" size="2">
|
||||
Fractorium and its associated command line tools can render fractal flames using the CPU, or OpenCL. In order to use OpenCL, you must have an nVidia card that has the Fermi architecture or later, or a recent AMD card. If you attempt to use an unsupported card, you will receive an error message and the CPU renderer will be used instead.
|
||||
</font><br></br>
|
||||
|
||||
==Current Status==
|
||||
<font face="Verdana" size="2">
|
||||
Initial beta releases supporting the following:
|
||||
|
||||
===Hardware:===
|
||||
-CPU: x64 Intel and AMD CPUs.
|
||||
|
||||
-GPU: Recent AMD and nVidia (Fermi and later) cards.
|
||||
|
||||
===Variations:===
|
||||
-The 98 standard variations included with flam3.
|
||||
|
||||
===Palettes:===
|
||||
-The 700 palettes included in the standard flam3-palettes.xml file.
|
||||
|
||||
===Data Types:===
|
||||
-Single and double precision floating point numbers on both the CPU and the GPU.
|
||||
|
||||
===Compilers:===
|
||||
-Microsoft Visual Studio 2010 SP1 (project files upgrade-able to 2012).
|
||||
|
||||
===Operating Systems:===
|
||||
-Windows 7 x64.
|
||||
</font>
|
||||
|
||||
==Future Direction==
|
||||
<font face="Verdana" size="2">
|
||||
Help is needed and welcome for implementing the following features:
|
||||
|
||||
-Support for Intel and AMD APU chips.
|
||||
|
||||
-More variations from Apophysis.
|
||||
|
||||
-Support for other compilers, such as gcc and MingW.
|
||||
|
||||
-Support for other operating systems, Mac and Linux.
|
||||
|
||||
-Conversion of OpenGL calls to shader programs.
|
||||
|
||||
-Implementation of more alternative rendering methods.
|
||||
|
||||
-Standalone animator/music visualizer.
|
||||
|
||||
-Benchmarking suite.
|
||||
</font><br></br>
|
||||
|
||||
==Gratitude==
|
||||
<font face="Verdana" size="2">
|
||||
A sincere thanks to the following people.
|
||||
|
||||
Code and theory questions:
|
||||
|
||||
Scott Draves
|
||||
|
||||
Erik Reckase
|
||||
|
||||
Steve Robertson
|
||||
|
||||
Mike Thiesen
|
||||
|
||||
Testing:
|
||||
|
||||
Richard Vollebregt
|
||||
|
||||
Tai
|
||||
</font>
|
||||
@@ -1,214 +0,0 @@
|
||||
#summary Menus
|
||||
<font face="Verdana">
|
||||
|
||||
=Menu Item Descriptions=
|
||||
<ul>
|
||||
<li>
|
||||
===Menu===
|
||||
<ul>
|
||||
<li>
|
||||
====File====
|
||||
<ul>
|
||||
|
||||
<li>
|
||||
=====New Flock=====
|
||||
|
||||
Create a new set of 10 randomly generated flames and set the first one as the current flame. This will clear whatever is currently open.
|
||||
|
||||
Render State: Full render.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
=====New Empty Flame=====
|
||||
|
||||
Add a new empty flame to the end of the open flames and set it as the current flame.
|
||||
|
||||
Render State: Full render.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
=====New Random Flame=====
|
||||
|
||||
Add a new random flame to the end of the open flames and set it as the current flame.
|
||||
|
||||
Render State: Full render.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
=====Copy Flame=====
|
||||
|
||||
Add a copy of the current flame to the end of the open flames and set it as the current flame.
|
||||
|
||||
Render State: Full render.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
=====Open=====
|
||||
|
||||
Open a flame Xml file. This will clear whatever is currently open.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
=====Save Current as Xml=====
|
||||
|
||||
Save the current flame to an Xml file. If it has not yet been saved, a file save dialog will be shown. On subsequent saves, no dialog will be shown
|
||||
and it will use the filename specified the first time the dialog was shown.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
=====Save Entire File as Xml=====
|
||||
|
||||
Save the all currently open flames to a single Xml file. If it has not yet been saved, a file save dialog will be shown. On subsequent saves, no dialog will be shown
|
||||
and it will use the filename specified the first time the dialog was shown.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
=====Save Current Screen=====
|
||||
|
||||
Save the current screen to an image file.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
=====Save Current To Open File=====
|
||||
|
||||
Save the current flame back to the open flame list in memory. This does not save anything to disk.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
=====Exit=====
|
||||
|
||||
Exit the program. Save all current work before exiting.
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
====Edit====
|
||||
<ul>
|
||||
<li>
|
||||
=====Undo=====
|
||||
|
||||
Revert to the previous edit. The undo list is updated upon completion of the rendering process, when not traversing the undo list.
|
||||
|
||||
If an edit is made while traversing the list, the list is cleared.
|
||||
|
||||
Render State: Full render.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
=====Redo=====
|
||||
|
||||
If traversing the undo list, move forward to the next edit.
|
||||
|
||||
Render State: Full render.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
=====Copy Xml=====
|
||||
|
||||
Copy the current flame as an Xml to the clipboard.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
=====Copy All Xmls=====
|
||||
|
||||
Copy all flames in the currently opened file as Xmls to the clipboard.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
=====Paste Xml Append=====
|
||||
|
||||
Paste the current clipboard text as a flame appended to the list of currently opened flames.
|
||||
|
||||
Render State: Full render.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
=====Paste Xml Over=====
|
||||
|
||||
Paste the current clipboard text over the list of currently opened flames. This will clear whatever is currently open.
|
||||
|
||||
Render State: Full render.
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
====Tools====
|
||||
<ul>
|
||||
<li>
|
||||
=====Add Reflective Symmetry=====
|
||||
|
||||
Add an xform that will reflect the image along the Y axis. This is accomplished by giving the xform a weight of one, color speed of 0 and
|
||||
a single linear variation with a weight of one. Its affine is centered on 0,0 with X at -1,0 and Y at 0,1.
|
||||
|
||||
Render State: Full render.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
=====Add Rotational Symmetry=====
|
||||
|
||||
Add an xform that will duplicate a rotated portion of the image along the Y axis. This is accomplished by giving the xform a weight of one, color speed of 0 and
|
||||
a single linear variation with a weight of one. Its affine is centered on 0,0 with X at -1,0 and Y at 0,-1.
|
||||
|
||||
Render State: Full render.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
=====Add Reflective and Rotational Symmetry=====
|
||||
|
||||
Add two xforms, one for reflective symmetry and another for rotational symmetry.
|
||||
|
||||
Render State: Full render.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
=====Clear Flame=====
|
||||
|
||||
Clear the current flame such that it only has one xform with no variations, pre and post affine transforms set to the identity matrix, and no xaos.
|
||||
|
||||
Render State: Full render.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
=====Render Previews=====
|
||||
|
||||
Re-render all previews.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
=====Stop Rendering Previews=====
|
||||
|
||||
Stop rendering previews.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
=====Final Render=====
|
||||
|
||||
Display the final rendering dialog. This will stop the render, and restart it from the beginning when the dialog is closed.
|
||||
|
||||
Render State: Full render.
|
||||
</li>
|
||||
<li>
|
||||
=====Options=====
|
||||
|
||||
Display the options dialog. This will stop the render, and restart it from the beginning when the dialog is closed.
|
||||
|
||||
Render State: Full render.
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
====Help====
|
||||
<ul>
|
||||
<li>
|
||||
=====About=====
|
||||
|
||||
Show the about box which gives a description, version, and licensing information about the code this project uses.
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
@@ -1,178 +0,0 @@
|
||||
#summary Options Dialog
|
||||
<font face="Verdana">
|
||||
|
||||
=Options=
|
||||
|
||||
Options to use in various parts of Fractorium.
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
==Interactive Rendering==
|
||||
|
||||
Options used when editing flames and displaying them in the output window.
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
===Early Clip===
|
||||
|
||||
Whether to apply color correction before spatial filtering. It's recommended to only use this if the colors don't look right.
|
||||
|
||||
A more thorough discussion of early clip from the original flam3 documentation is <a href="https://code.google.com/p/flam3/wiki/NewFeatures">here</a>.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
===Transparency===
|
||||
|
||||
This has no effect since the output window will always have the same color as the flame's specified background color.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
===Use OpenCL===
|
||||
|
||||
Whether to use OpenCL in the rendering process. It is highly recommended that you use this if your video card supports it.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
===Use Double Precision===
|
||||
|
||||
Whether to use double precision numbers in the rendering process. This will slow down the render and double the memory usage, but will produce a better looking image in some cases. It is recommended you don't use this for interactive rendering on the GPU unless you have an extremely fast graphics card with double precision support.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
===OpenCL Platforms===
|
||||
|
||||
The available OpenCL platforms on the system. Disabled if Use OpenCL is unchecked.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
===OpenCL Device===
|
||||
|
||||
The available devices on the currently selected platform. Disabled if Use OpenCL is unchecked.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
===Threads===
|
||||
|
||||
The number of threads to use when using the traditional CPU renderer. Disabled if Use OpenCL is unchecked.
|
||||
|
||||
Range: 1 - number of cores.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
===CPU Sub Batch===
|
||||
|
||||
The number of sub batches of 10,000 iterations to run on each mouse movement. Values between 1 and 10 are recommended.
|
||||
|
||||
Higher values give better preview images, but a less responsive UI. Decrease this value if you have a slower processor.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
===OpenCL Sub Batch===
|
||||
|
||||
The number of sub batches of ~8 million iterations to run on each mouse movement. Values between 1 and 3 are recommended.
|
||||
|
||||
Higher values give better preview images, but a less responsive UI. Decrease this value if you have a slower video card.
|
||||
|
||||
Note that since the sub batch size for the OpenCL renderer is so large, low quality renders can complete on the first sub batch. In that case,
|
||||
full density filtering will be performed, which can give a choppy UI. In such cases, increase the quality a bit.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
===CPU Filtering===
|
||||
|
||||
The type of filtering to perform for preview renders on each mouse movement when using the CPU renderer. Log scaling is recommended for all but the fastest processors. However, if
|
||||
you have a very fast processor and want to see a more realistic representation of what the final output image will look like on every mouse movement, select
|
||||
the Full DE option.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
===OpenCL Filtering===
|
||||
|
||||
The type of filtering to perform for preview renders on each mouse movement when using the OpenCL renderer. Log scaling is recommended for all but the fastest video cards. However, if
|
||||
you have a very fast processor and want to see a more realistic representation of what the final output image will look like on every mouse movement, select
|
||||
the Full DE option.
|
||||
|
||||
Note that as stated above under OpenCL Sub Batch, even if this option is set to log scaling, full DE might get performed on each mouse movement for low quality renders.
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
==Xml Saving==
|
||||
|
||||
When editing flames, the user will save the parameters as an Xml file once they are satisfied with the result. Most of the values will be displayed exactly as they
|
||||
are on the UI. However, there are a few that make sense to override each time.
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
===Width===
|
||||
|
||||
The width of the final output image.
|
||||
|
||||
Range: 10 - 100,000.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
===Height===
|
||||
|
||||
The height of the final output image.
|
||||
|
||||
Range: 10 - 100,000.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
===Quality===
|
||||
|
||||
The quality of the final output image. Values above 2000 don't offer much noticeable improvement.
|
||||
|
||||
Range: 1 - 200,000.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
===Temporal Samples===
|
||||
|
||||
The temporal samples to use when applying motion blur. A value of 1000 is recommended. Only used during animation, otherwise the value is overridden with one.
|
||||
|
||||
Range: 1 - 5,000.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
===Supersample===
|
||||
|
||||
The value to multiply the dimensions of the histogram and density filter buffer by to help eliminate jagged lines.
|
||||
Values greater than one will greatly impact performance and will increase memory usage.
|
||||
|
||||
While a value of 2 offers some visual improvement, values greater than 2 don't offer noticeable improvement.
|
||||
|
||||
Range: 1 - 4.
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
==Identity==
|
||||
|
||||
When saving flame parameters to an Xml file, there is a field for the identity of the artist who made the flame. Fill these out with your identity so that you
|
||||
get proper attribution for your work.
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
===Id===
|
||||
|
||||
The identity of the user.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
===Url===
|
||||
|
||||
The website of the user.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
===Nick===
|
||||
|
||||
The nick name of the user.
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
@@ -1,108 +0,0 @@
|
||||
#summary Palette tab
|
||||
<font face="Verdana">
|
||||
|
||||
=Palette Tab Item Descriptions=
|
||||
|
||||
<ul>
|
||||
The list of available palettes as well as optional adjustment values.
|
||||
|
||||
<li>
|
||||
==Adjustments==
|
||||
|
||||
Adjustments are applied to the selected palette in the following order: frequency, hue, saturation, brightness, contrast, blur.
|
||||
|
||||
Double clicking a spinner will reset it to its default value.
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
===Hue===
|
||||
|
||||
The degrees to rotate the hue of the HSV representation of the RGB color by.
|
||||
|
||||
Range: -180 - 180.
|
||||
|
||||
Render State: Full render.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
===Saturation===
|
||||
|
||||
The percentage to add to the saturation (intensity) component of the HSV representation of the RGB color.
|
||||
|
||||
Range: 0 - 100.
|
||||
|
||||
Render State: Full render.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
===Brightness===
|
||||
|
||||
The value to add to each channel. Negative values bring it toward black, positive values toward white.
|
||||
|
||||
Range: -255 - 255.
|
||||
|
||||
Render State: Full render.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
===Contrast===
|
||||
|
||||
The difference between lightest and darkest colors in the palette. Negative values decrease the difference, and
|
||||
bring the colors toward gray. Positive values increase the difference and make the colors more saturated.
|
||||
|
||||
Range: -100 - 100.
|
||||
|
||||
Render State: Full render.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
===Blur===
|
||||
|
||||
The width in pixels of the blurring.
|
||||
|
||||
Range: 0 - 127.
|
||||
|
||||
Render State: Full render.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
===Frequency===
|
||||
|
||||
The number of times to repeat the palette.
|
||||
|
||||
Range: 1 - 10.
|
||||
|
||||
Render State: Full render.
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
==Palette Preview==
|
||||
|
||||
What the final adjusted palette looks like. This is what's used for iteration.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
==Palette List==
|
||||
|
||||
The full list of palettes and their names in the current palette file, which defaults to flam3-palettes.xml.
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
===Single click===
|
||||
|
||||
Set the selected palette as the current one and apply the specified adjustments.
|
||||
|
||||
Render State: Full render.
|
||||
</li>
|
||||
<li>
|
||||
===Double click===
|
||||
|
||||
Set the selected palette as the current one and reset all adjustments.
|
||||
|
||||
Render State: Full render.
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
@@ -1,88 +0,0 @@
|
||||
=Description=
|
||||
<font face="Verdana" size="2">
|
||||
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.
|
||||
</font>
|
||||
<br></br>
|
||||
|
||||
==Installer==
|
||||
<font face="Verdana" size="2">
|
||||
<a href="https://drive.google.com/file/d/0Bws5xPbHJph6Vm1jOVRZSVJ6OUk/edit?usp=sharing">Windows 7 64-bit Installer</a>
|
||||
</font>
|
||||
<br></br>
|
||||
|
||||
==Requirements and Prerequisites==
|
||||
<font face="Verdana" size="2">
|
||||
Windows 7, 64-bit
|
||||
|
||||
Install the latest drivers for your video card
|
||||
|
||||
An nVidia video card to take advantage of OpenCL
|
||||
|
||||
If you have an Intel processor, but do not have a device capable of running OpenCL, and still want to run Fractorium with only CPU support, you must install Intel's CPU-only OpenCL libraries <a href="http://registrationcenter.intel.com/irc_nas/3608/intel_sdk_for_ocl_applications_2013_r2_runtime_x64_setup.msi">here</a>.
|
||||
</font>
|
||||
<br></br>
|
||||
|
||||
==Running==
|
||||
<font face="Verdana" size="2">
|
||||
Fractorium and its associated command line tools can render fractal flames using the CPU, or OpenCL. In order to use OpenCL, you must have an nVidia card that has the Fermi architecture or later. If you attempt to use an unsupported card, you will receive an error message and the CPU renderer will be used instead.
|
||||
|
||||
AMD cards will be supported shortly.
|
||||
</font>
|
||||
<br></br>
|
||||
|
||||
==Current Status==
|
||||
<font face="Verdana" size="2">
|
||||
Initial beta release supporting the following:
|
||||
|
||||
===Hardware:===
|
||||
-CPU: x64 Intel and AMD CPUs.
|
||||
|
||||
-GPU: nVidia Fermi and later cards.
|
||||
|
||||
===Variations:===
|
||||
-The 98 standard variations included with flam3.
|
||||
|
||||
===Palettes:===
|
||||
-The 700 palettes included in the standard flam3-palettes.xml file.
|
||||
|
||||
===Compilers:===
|
||||
-Microsoft Visual Studio 2010 (project files upgrade-able to 2012).
|
||||
|
||||
===Operating Systems:===
|
||||
-Windows 7 x64.
|
||||
</font>
|
||||
|
||||
==Future Direction==
|
||||
<font face="Verdana" size="2">
|
||||
Help is needed and welcome for implementing the following features:
|
||||
|
||||
-Support for AMD hardware.
|
||||
|
||||
-More variations from Apophysis.
|
||||
|
||||
-Support for other compilers, such as gcc and MingW.
|
||||
|
||||
-Support for other operating systems, Mac and Linux.
|
||||
|
||||
-Conversion of OpenGL calls to shader programs.
|
||||
|
||||
-Implementation of more alternative rendering methods.
|
||||
|
||||
-Standalone animator/music visualizer.
|
||||
|
||||
-Benchmarking suite.
|
||||
</font>
|
||||
<br></br>
|
||||
|
||||
==Gratitude==
|
||||
<font face="Verdana" size="2">
|
||||
A sincere thanks to the following people for answering all of my questions:
|
||||
|
||||
Scott Draves
|
||||
|
||||
Erik Reckase
|
||||
|
||||
Steve Robertson
|
||||
|
||||
Mike Thiesen
|
||||
</font>
|
||||
@@ -1,21 +0,0 @@
|
||||
#summary Sidebar
|
||||
* [Users]
|
||||
* [ProjectOverview Overview]
|
||||
* [AlgorithmExplanation Algorithm]
|
||||
* [FractoriumUserGuide Fractorium User's Guide]
|
||||
* [Menus Menus]
|
||||
* [Toolbar Toolbar]
|
||||
* [LibraryTab Library Tab]
|
||||
* [FlameTab Flame Tab]
|
||||
* [XformsTab Xforms Tab]
|
||||
* [PaletteTab Palette Tab]
|
||||
* [InfoTab Info Tab]
|
||||
* [FinalRenderDialog Final Render Dialog]
|
||||
* [OptionsDialog Options Dialog]
|
||||
* [AboutDialog About Dialog]
|
||||
* [CommandLinePrograms Command Line Programs]
|
||||
* [Developers]
|
||||
* [EmberImplementationDetails Ember]
|
||||
* [EmberCLImplementationDetails EmberCL]
|
||||
* [Building Building]
|
||||
* [CodingPhilosophy Coding Philosophy]
|
||||
@@ -1,9 +0,0 @@
|
||||
#summary Toolbars
|
||||
<font face="Verdana">
|
||||
=Toolbar Item Descriptions=
|
||||
|
||||
<ul>
|
||||
===Toolbar===
|
||||
|
||||
Buttons perform the same functions as the menu items of the same names.
|
||||
</ul>
|
||||
@@ -1,18 +0,0 @@
|
||||
#summary Information for users.
|
||||
|
||||
[ProjectOverview Overview]
|
||||
|
||||
[AlgorithmExplanation Algorithm]
|
||||
|
||||
[FractoriumUserGuide Fractorium User's Guide]
|
||||
[Menus Menus]<br></br>
|
||||
[Toolbar Toolbar]<br></br>
|
||||
[LibraryTab Library]<br></br>
|
||||
[FlameTab Flame Tab]<br></br>
|
||||
[XformsTab Xforms]<br></br>
|
||||
[PaletteTab Palette]<br></br>
|
||||
[InfoTab Info]<br></br>
|
||||
[FinalRenderDialog Final Render Dialog]<br></br>
|
||||
[OptionsDialog Options Dialog]<br></br>
|
||||
[AboutDialog About Dialog]
|
||||
[CommandLinePrograms Command Line Programs]
|
||||
@@ -1,343 +0,0 @@
|
||||
#summary Xforms tab
|
||||
<font face="Verdana">
|
||||
|
||||
=Xforms Tab Item Descriptions=
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
==Current Xform==
|
||||
|
||||
The number shown is the index of the currently selected xform. The values on all controls within the xforms tab
|
||||
will be from the current xform.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
==Add Xform==
|
||||
|
||||
Add an empty xform to the current flame and set it as the current one. It will have no variations and its affine trasforms will be set to the identity matrix
|
||||
|
||||
Render State: Full render.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
==Duplicate Xform==
|
||||
|
||||
Make a copy of the current xform and add it to the end of the xforms and set it as the current one.
|
||||
|
||||
Render State: Full render.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
==Clear Xform Variations==
|
||||
|
||||
Delete all variations from the current xform.
|
||||
|
||||
Render State: Full render.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
==Delete Xform==
|
||||
|
||||
Delete the current xform from the flame.
|
||||
|
||||
Render State: Full render.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
==Add Final Xform==
|
||||
|
||||
Add a final xform if one is not already present.
|
||||
|
||||
Render State: Full render.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
==Weight==
|
||||
|
||||
The probability that the current xform will be chosen among the others during iteration. Note that all weight values
|
||||
are normalized before iteration begins.
|
||||
|
||||
Render State: Full render.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
==Equalize Weights==
|
||||
|
||||
Set all xform weights to be 1 / xform count.
|
||||
|
||||
Render State: Full render.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
==Name==
|
||||
|
||||
Optional name for this xform to help more easily identify it. Note this values is only used for display purposes
|
||||
in Fractorium and is not saved to the Xml file.
|
||||
</li>
|
||||
<li>
|
||||
==Color==
|
||||
<ul>
|
||||
|
||||
<li>
|
||||
===Color Index===
|
||||
|
||||
The index in the palette the current xform uses. This value can be changed by scrolling the mouse wheel in the box displaying the value
|
||||
or by dragging the scroll bar.
|
||||
|
||||
Range: 0 - 1.
|
||||
|
||||
Render State: Full render.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
===Color Speed===
|
||||
|
||||
The speed with which the color indices are pulled toward the current xform's color index. This value can be negative.
|
||||
|
||||
Range: -1 - 1.
|
||||
|
||||
Render State: Full render.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
===Opacity===
|
||||
|
||||
How visible the current xform's contribution to the image is. 0 is invisible, 1 is totally visible.
|
||||
|
||||
Range: 0 - 1.
|
||||
|
||||
Render State: Full render.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
===Solo===
|
||||
|
||||
When checked, the current xform is the only visible one. The text of the checkbox specifies which xform is
|
||||
the solo one. If none are selected as solo, no number is displayed. This feature is useful for determining how much
|
||||
each xform contributes to the final image.
|
||||
|
||||
Note that checking this does not affect the opacity values stored in the Xml file when saved.
|
||||
|
||||
Render State: Full render.
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
==Affine==
|
||||
<ul>
|
||||
|
||||
<li>
|
||||
===Pre Affine Transform===
|
||||
|
||||
The affine transform applied to the input points before variations are applied on each iteration.
|
||||
|
||||
The values correspond to the usual affine transform of:
|
||||
|
||||
{{{
|
||||
tx = Ax * By + C
|
||||
ty = Dx * Ey + F
|
||||
}}}
|
||||
|
||||
like so:
|
||||
|
||||
A: X1, D: X2
|
||||
|
||||
B: Y1, E: Y2
|
||||
|
||||
C: O1, F: O2
|
||||
|
||||
<ul>
|
||||
|
||||
<li>
|
||||
====Enable====
|
||||
|
||||
Checking/unchecking shows/hides pre affine transforms and enables/disables the controls.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
====Reset====
|
||||
|
||||
Reset the pre affine transform to the identity matrix.
|
||||
|
||||
Render State: Full render.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
====Adjustments====
|
||||
|
||||
Change the values of the pre affine transform as the tool tips describe.
|
||||
|
||||
Render State: Full render.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
====Show Current/All====
|
||||
|
||||
Show current only draws a circle around the current xform's pre affine transform.
|
||||
|
||||
Show all draws a circle around all xforms' pre affine transforms. This can sometimes clutter
|
||||
the view if the flame contains many xforms, hence the option to only show current.
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
===Post Affine Transform===
|
||||
|
||||
The affine transform applied to the sum of the applying the variations.
|
||||
|
||||
The values correspond to the usual affine transform of:
|
||||
|
||||
{{{
|
||||
tx = Ax * By + C
|
||||
ty = Dx * Ey + F
|
||||
}}}
|
||||
|
||||
like so:
|
||||
|
||||
A: X1, D: X2
|
||||
|
||||
B: Y1, E: Y2
|
||||
|
||||
C: O1, F: O2
|
||||
|
||||
<ul>
|
||||
|
||||
<li>
|
||||
====Enable====
|
||||
|
||||
Checking/unchecking shows/hides post affine transforms and enables/disables the controls.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
====Reset====
|
||||
|
||||
Reset the post affine transform to the identity matrix.
|
||||
|
||||
Render State: Full render.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
====Adjustments====
|
||||
|
||||
Change the values of the post affine transform as the tool tips describe.
|
||||
|
||||
Render State: Full render.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
====Show Current/All====
|
||||
|
||||
Show current only draws a circle around the current xform's post affine transform.
|
||||
|
||||
Show all draws a circle around all xforms' post affine transforms. This can sometimes clutter
|
||||
the view if the flame contains many xforms, hence the option to only show current.
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
===Pivot===
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
====When dragging the X or Y component of an affine transform and holding Shift+Alt:====
|
||||
|
||||
Local: Rotates the point around the center of the transform.
|
||||
|
||||
World: Rotates the point around 0, 0.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
====When dragging the center of an affine transform and holding Shift:====
|
||||
|
||||
Local: Rotates entire transform around the origin, keeping its local orientation fixed.
|
||||
|
||||
World: Rotates entire transform around the origin, also rotating the local orientation.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
====When reflecting an affine transform:====
|
||||
|
||||
Local: Reflect horizontally and vertically around the center of the transform.
|
||||
|
||||
World: Reflect horizontallly around the Y axis, and vertically around the X axis.
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
</li>
|
||||
|
||||
<li>
|
||||
==Variations==
|
||||
<ul>
|
||||
Each xform has one or more variations contained in it that get applied during each iteration. The value to the right of the
|
||||
variation name is its weight. Values below it in sub-tree items are for parametric variations.
|
||||
|
||||
<li>
|
||||
===Weight===
|
||||
|
||||
Add a variation to the current xform by scrolling its weight to a non-zero value. Remove it by scrolling
|
||||
its weight back to zero. Variations present in the current xform will have a gray background to make them easily
|
||||
identifiable.
|
||||
|
||||
A quick way to add or remove a variation is to double click the weight spinner, which will flip the weight
|
||||
between 0 and 1.
|
||||
|
||||
Adding or removing variations will trigger an OpenCL recompile, so you will see a slight pause when doing so.
|
||||
|
||||
Render State: Full render.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
===Search===
|
||||
|
||||
Typing in this box does a case insensitive search which will only show variations
|
||||
with matching text. To restore all, click the X button to the right.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
===Sorting===
|
||||
|
||||
Clicking on the left header column will sort by variation ID (which is hidden from the user).
|
||||
|
||||
Clicking on the right header column will sort by weight, placing all variations in the current xform
|
||||
with non-zero weights at the top.
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
==Xaos==
|
||||
<ul>
|
||||
Xaos is an advanced feature that adds an element of control to the random selection of xforms during iteration.
|
||||
It adds an adjustment to the probability that a given xform will be selected based on the xform that was selected in the previous iteration.
|
||||
|
||||
Each of the spinners in the right column show a value to adjust the probability of the scenario described in the left column by.
|
||||
|
||||
Values greater than one make it more likely to happen, values less than one make it less likely. Setting all values equal to one indicate no xaos is used.
|
||||
|
||||
Render State: Full render.
|
||||
|
||||
<li>
|
||||
===Direction===
|
||||
|
||||
Different users understand xaos more easily based on the "direction" the terms are specified in. Switching the direction changes the text description in the left column
|
||||
and changes the spinner values accordingly.
|
||||
|
||||
To: Adjust the probability of each xform being selected when going from the currently selected xform "to" all of the others.
|
||||
|
||||
From: Adjust the probability of the currently selected xform being selected when coming "from" all of the others.
|
||||
</li>
|
||||
<li>
|
||||
===Clear Xaos===
|
||||
|
||||
Set all xaos values in all xforms to 1.
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,68 @@
|
||||
<palettes>
|
||||
<palette number="0" name="pal1" source_colors="0,0.847059,0.482353,0.109804 0.111111,0.878431,0.67451,0.282353 0.222222,0.329412,0.258824,0.866667 0.333333,0.843137,0.286275,0.0745098 0.444444,0.470588,0.909804,0.180392 0.555556,0.0588235,0.168627,0.529412 0.666667,0.439216,0.615686,0.780392 0.777778,0.890196,0.701961,0.101961 0.888889,0.486275,0.886275,0.568627 1,0.443137,0.384314,0.921569 " data="00d87c1d00d87e1f00d9802000d9812200d9832300da852500da862600da8828
|
||||
00da8a2900db8c2b00db8d2c00db8f2e00dc913000dc933100dc943300dc9634
|
||||
00dd983600dd993700dd9b3900de9d3a00de9f3c00dea03e00dea23f00dfa441
|
||||
00dfa54200dfa74400dfa94500e0ab4700dfab4900daa74e00d5a45400d0a059
|
||||
00cb9c5e00c6996300c1956900bc916e00b88d7300b38a7800ae867e00a98283
|
||||
00a47e88009f7b8d009a7792009573980090709d008b6ca2008668a7008164ad
|
||||
007c61b200785db7007359bc006e55c2006952c700644ecc005f4ad1005a47d7
|
||||
005543dc005842d7005c42d0006143c9006543c2006a43bb006f43b4007344ad
|
||||
007844a6007b44a1007f449a008445930089458c008d45850092457e00974676
|
||||
009b466f00a0466800a4466100a9475a00ae475300b2474c00b7474500bb483e
|
||||
00c0483700c5482f00c9482800ce492100d2491a00d7491300d44f1400d05415
|
||||
00cd5a1600ca5f1700c6651800c36b1900c0701a00bc761b00b97b1c00b6811c
|
||||
00b2861d00af8c1e00ac921f00a8972000a59d2100a2a222009ea823009bae24
|
||||
0098b3250094b9260091be27008ec428008aca290087cf2a0084d52b0080da2c
|
||||
007de02d0079e62e0076e4300072de33006fd736006bd0390067ca3c0063c33f
|
||||
0060bc43005cb6460058af490055a94c0051a24f004d9b52004a955500468e58
|
||||
0042875c003f815f003b7a620037736500336d680030666b002c5f6e00285971
|
||||
0025527500214b78001d457b001a3e7e0016388100123184000f2b8700132f89
|
||||
0016338c001a378e001d3b9000203f920024439500274797002b4c99002e509b
|
||||
0031549e003558a000385ca2003c60a4003f64a7004368a900466cab004970ad
|
||||
004d74b0005078b200547cb4005780b6005a84b9005e88bb00618cbd006590bf
|
||||
006894c2006b98c4006f9cc600739ec300779ebd007b9fb7007fa0b10083a1ab
|
||||
0087a1a5008ba29e008fa3980093a4920097a48c009ba586009fa68000a3a77a
|
||||
00a7a87400aba86e00afa96800b3aa6200b7ab5c00bbab5500c0ac4f00c4ad49
|
||||
00c8ae4300cbae3e00cfaf3800d3b03200d7b12c00dbb12600dfb22000e3b31a
|
||||
00dfb51e00dcb62200d8b82700d5ba2b00d1bb2f00cdbd3300cabf3700c6c03b
|
||||
00c2c24000bfc44400bbc54800b8c74c00b4c85000b0ca5500adcc5900a9cd5d
|
||||
00a5cf6100a2d165009ed269009bd46e0097d6720093d7760090d97a008cdb7e
|
||||
0088dc830085de870081e08b007ee18f007cdf93007bdb96007bd699007bd29c
|
||||
007acd9f007ac9a30079c4a60079c0a90079bbac0078b7af0078b2b20078aeb6
|
||||
0077a9b90077a5bc0076a0bf00769cc2007697c5007593c900758ecc00748acf
|
||||
007485d2007481d500737cd8007378dc007273df00726fe200726ae5007166e8
|
||||
"/>
|
||||
<palette number="1" name="pal2" source_colors="0,0.545098,0.223529,0.298039 0.0666667,0.694118,0.337255,0.427451 0.133333,0.690196,0.392157,0.505882 0.2,0.686275,0.282353,0.34902 0.266667,0.694118,0.337255,0.419608 0.333333,0.243137,0.286275,0.301961 0.4,0.533333,0.32549,0.521569 0.466667,0.47451,0.392157,0.517647 0.533333,0.52549,0.298039,0.466667 0.6,0.521569,0.243137,0.305882 0.666667,0.521569,0.282353,0.392157 0.733333,0.619608,0.513726,0.556863 0.8,0.486275,0.458824,0.501961 0.866667,0.345098,0.317647,0.352941 0.933333,0.678431,0.360784,0.454902 1,0.807843,0.407843,0.490196 " data="008c3a4d008f3c4f00913d5100933f530095415500974357009a4459009c465b
|
||||
009e485d00a0495f00a34b6000a54d6200a74e6400a9506600ac526800ae546a
|
||||
00b0556c00b1566e00b1576f00b1587000b1597100b15a7200b15b7300b15b75
|
||||
00b15c7600b05d7700b05e7800b05f7900b05f7b00b0607c00b0617d00b0627e
|
||||
00b0637f00b0648000b0638000b0627e00b0607b00b05e7900b05d7700b05b74
|
||||
00b0597200b0586f00af566d00af546b00af536800af516600af506400af4e61
|
||||
00af4c5f00af4b5d00af495a00af485900af495a00af4a5c00af4b5d00b04c5e
|
||||
00b04c5f00b04d6000b04e6100b04f6200b0506300b0516400b0516500b05266
|
||||
00b1536700b1546800b1546900b1556a00b0566b00a9556900a35467009c5465
|
||||
00955364008e5262008851600081515e007a505d00734f5b006d4e5900664e57
|
||||
005f4d5600584c5400524b52004b4a5000444a4f003e494d00434a5000474a54
|
||||
004b4b5700504b5a00544c5e00584d61005d4d6400614e6700654e6b006a4f6e
|
||||
006e4f710072507500775178007b517b007f527e008452820088538500875485
|
||||
008655850085568500845785008458850083598500825a8500815b8500805c84
|
||||
007f5d84007e5e84007d5f84007d6084007c6184007b6284007a638400796484
|
||||
007a6383007a6183007b6082007c5e81007d5d80007e5c7f007e5a7f007f597e
|
||||
0080577d0081567c0081557c0082537b0083527a0084507900844f7900854e78
|
||||
00864c7700864b7500864a7300864a700086496e0086486b0086476900864667
|
||||
00864664008545620085445f0085435d0085425a008541580085415600854053
|
||||
00853f5100853e4e00853e4f00853f5000854052008540530085415400854155
|
||||
0085425700854358008543590085445b0085445c0085455d0085455e00854660
|
||||
00854761008547620085486400864b6600884e680089516b008a556d008c5870
|
||||
008d5c72008f5f75009063770092667900936a7c00956d7e0096718100987483
|
||||
00997786009b7b88009c7e8b009e828d009d828d009b828d0099818c0097808b
|
||||
00957f8a00937f8a00917e89008f7d88008d7c87008b7b8600897a8500877a85
|
||||
008579840083788300817782007f7681007d7681007b747f0079727d0077707b
|
||||
00756e7900736c7600716a74006f6872006d6670006a636d0068616b00665f69
|
||||
00645d6700625b6500605962005e5760005c555e005a535c0059515a005e525c
|
||||
0063525d0068535f006d54600072546200775564007c56650081566700865768
|
||||
008b586a0090586b0095596d009a5a6e009f5a7000a45b7100a95b7300ad5c74
|
||||
00af5d7500b15e7500b35e7600b55f7600b7607700b9607700bb617800bd6278
|
||||
00bf627900c1637900c3647a00c5657a00c7657b00c8667b00ca677c00cc677d
|
||||
"/>
|
||||
</palettes>
|
||||
@@ -9,7 +9,11 @@ of the cuburn algorithm in OpenCL.
|
||||
|
||||
## Windows
|
||||
|
||||
Download: [Fractorium_Beta_1.0.0.0.msi](https://drive.google.com/file/d/0Bws5xPbHJph6cGJpZkZ3eGFWVms/view?usp=sharing)
|
||||
Download: [Fractorium_1.0.0.2.msi](https://drive.google.com/file/d/0Bws5xPbHJph6Y2tlQ2tmdHFwNnc/view?usp=sharing)
|
||||
|
||||
## Mac
|
||||
|
||||
Download: [Fractorium_1.0.0.2.dmg](https://drive.google.com/file/d/0Bws5xPbHJph6MkpQZjVaV1dVMWM/view?usp=sharing)
|
||||
|
||||
## Linux
|
||||
|
||||
@@ -31,29 +35,25 @@ sudo apt-get install fractorium
|
||||
|
||||
### Install from .deb
|
||||
|
||||
Download: [fractorium_1.0.0.0a-0ubuntu1_amd64.deb](https://launchpad.net/~fractorium/+archive/ubuntu/ppa/+files/fractorium_1.0.0.0a-0ubuntu1_amd64.deb)
|
||||
Download: [fractorium_1.0.0.1-0ubuntu1_amd64.deb](https://launchpad.net/~fractorium/+archive/ubuntu/ppa/+files/fractorium_1.0.0.1-0ubuntu1_amd64.deb)
|
||||
|
||||
```
|
||||
cd ~/Downloads
|
||||
sudo dpkg -i fractorium_1.0.0.0a-0ubuntu1_amd64.deb
|
||||
sudo dpkg -i fractorium_1.0.0.1-0ubuntu1_amd64.deb
|
||||
```
|
||||
|
||||
## Mac OS/X (10.9+)
|
||||
|
||||
TODO
|
||||
|
||||
# Building from git
|
||||
|
||||
All builds are 64-bit.
|
||||
|
||||
## Windows
|
||||
|
||||
[Build Guide for Visual Studio 2013 or Qt Creator](Data/BuildGuideQtCreator.md)
|
||||
[Build Guide for Visual Studio 2015 or Qt Creator](Data/BuildGuideQtCreator.md)
|
||||
|
||||
## Linux
|
||||
|
||||
[Build Guide for Linux](./Data/BuildGuideLinux.md)
|
||||
|
||||
## Mac OS/X 10.9+
|
||||
## Mac OS/X Sierra, El Capitan, Yosemite and Mavericks
|
||||
|
||||
[Build Guide for Mac OS/X](./Data/BuildGuideMacOSX.md)
|
||||
@@ -203,6 +203,19 @@ void Affine2D<T>::Scale(T amount)
|
||||
F(F() * amount);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Scales all values A,B,D,E by the specified amount.
|
||||
/// </summary>
|
||||
/// <param name="amount">The amount to scale by</param>
|
||||
template <typename T>
|
||||
void Affine2D<T>::ScaleXY(T amount)
|
||||
{
|
||||
A(A() * amount);
|
||||
B(B() * amount);
|
||||
D(D() * amount);
|
||||
E(E() * amount);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Rotate this affine transform around its origin by the specified angle in degrees.
|
||||
/// </summary>
|
||||
|
||||
@@ -76,6 +76,7 @@ public:
|
||||
bool IsZero() const;
|
||||
bool IsEmpty() const;
|
||||
void Scale(T amount);
|
||||
void ScaleXY(T amount);
|
||||
Affine2D<T> ScaleCopy(T amount);
|
||||
void Rotate(T rad);
|
||||
void RotateTrans(T rad);
|
||||
|
||||
@@ -56,8 +56,6 @@ uint Timing::m_ProcessorCount;
|
||||
template class Post##varName##Variation<T>;
|
||||
|
||||
#define EXPORT_SINGLE_TYPE_EMBER(T) \
|
||||
template<> const char* PaletteList<T>::m_DefaultFilename = "flam3-palettes.xml"; \
|
||||
template<> map<string, vector<Palette<T>>> PaletteList<T>::s_Palettes = map<string, vector<Palette<T>>>(); \
|
||||
template<> bool XmlToEmber<T>::m_Init = false; \
|
||||
template<> vector<string> XmlToEmber<T>::m_FlattenNames = vector<string>(); \
|
||||
template<> unordered_map<string, string> XmlToEmber<T>::m_BadParamNames = unordered_map<string, string>(); \
|
||||
@@ -396,6 +394,11 @@ uint Timing::m_ProcessorCount;
|
||||
EXPORTPREPOSTREGVAR(Gamma, T) \
|
||||
EXPORTPREPOSTREGVAR(PRose3D, T) \
|
||||
EXPORTPREPOSTREGVAR(LogDB, T) \
|
||||
EXPORTPREPOSTREGVAR(CircleSplit, T) \
|
||||
EXPORTPREPOSTREGVAR(Cylinder2, T) \
|
||||
EXPORTPREPOSTREGVAR(TileLog, T) \
|
||||
EXPORTPREPOSTREGVAR(TruchetFill, T) \
|
||||
EXPORTPREPOSTREGVAR(Waves2Radial, T) \
|
||||
template EMBER_API class PostSmartcropVariation<T>; /*Only implemented as post.*/ \
|
||||
EXPORTPREPOSTREGVAR(DCBubble, T) \
|
||||
EXPORTPREPOSTREGVAR(DCCarpet, T) \
|
||||
@@ -436,11 +439,10 @@ uint Timing::m_ProcessorCount;
|
||||
template EMBER_API class XmlToEmber<T>; \
|
||||
template EMBER_API class EmberToXml<T>;
|
||||
|
||||
EXPORT_SINGLE_TYPE_EMBER(float)
|
||||
|
||||
#define EXPORT_TWO_TYPE_EMBER(T, bucketT) \
|
||||
template EMBER_API class SheepTools<T, bucketT>;
|
||||
|
||||
EXPORT_SINGLE_TYPE_EMBER(float)
|
||||
EXPORT_TWO_TYPE_EMBER(float, float)
|
||||
|
||||
#ifdef DO_DOUBLE
|
||||
|
||||
+12
-12
@@ -659,23 +659,23 @@ public:
|
||||
{
|
||||
for (glm::length_t i = 0; i < 256; i++)
|
||||
{
|
||||
T t[3], s[4] = { 0, 0, 0, 0 };
|
||||
float t[3], s[4] = { 0, 0, 0, 0 };
|
||||
|
||||
for (glm::length_t k = 0; k < size; k++)
|
||||
{
|
||||
Palette<T>::RgbToHsv(glm::value_ptr(embers[k].m_Palette[i]), t);
|
||||
Palette<float>::RgbToHsv(glm::value_ptr(embers[k].m_Palette[i]), t);
|
||||
|
||||
for (size_t j = 0; j < 3; j++)
|
||||
s[j] += coefs[k] * t[j];
|
||||
s[j] += float(coefs[k]) * t[j];
|
||||
|
||||
s[3] += coefs[k] * embers[k].m_Palette[i][3];
|
||||
s[3] += float(coefs[k]) * embers[k].m_Palette[i][3];
|
||||
}
|
||||
|
||||
Palette<T>::HsvToRgb(s, glm::value_ptr(m_Palette[i]));
|
||||
Palette<float>::HsvToRgb(s, glm::value_ptr(m_Palette[i]));
|
||||
m_Palette[i][3] = s[3];
|
||||
|
||||
for (glm::length_t j = 0; j < 4; j++)
|
||||
Clamp<T>(m_Palette[i][j], 0, 1);
|
||||
Clamp<float>(m_Palette[i][j], 0, 1);
|
||||
}
|
||||
}
|
||||
else if (embers[0].m_PaletteInterp == ePaletteInterp::INTERP_SWEEP)
|
||||
@@ -1100,8 +1100,8 @@ public:
|
||||
/// <summary>
|
||||
/// Placeholder to do nothing.
|
||||
/// </summary>
|
||||
/// <param name="point">Unused</param>
|
||||
/// <param name="rand">Unused</param>
|
||||
/// <param name="point">Ignored</param>
|
||||
/// <param name="rand">Ignored</param>
|
||||
void ProjectNone(Point<T>& point, QTIsaac<ISAAC_SIZE, ISAAC_INT>& rand)
|
||||
{
|
||||
}
|
||||
@@ -1110,7 +1110,7 @@ public:
|
||||
/// Project when only z is set, and not pitch, yaw, projection or depth blur.
|
||||
/// </summary>
|
||||
/// <param name="point">The point to project</param>
|
||||
/// <param name="rand">Unused</param>
|
||||
/// <param name="rand">Ignored</param>
|
||||
void ProjectZPerspective(Point<T>& point, QTIsaac<ISAAC_SIZE, ISAAC_INT>& rand)
|
||||
{
|
||||
T zr = Zeps(1 - m_CamPerspective * (point.m_Z - m_CamZPos));
|
||||
@@ -1123,7 +1123,7 @@ public:
|
||||
/// Project when pitch, and optionally z and perspective are set, but not depth blur or yaw.
|
||||
/// </summary>
|
||||
/// <param name="point">The point to project</param>
|
||||
/// <param name="rand">Unused</param>
|
||||
/// <param name="rand">Ignored</param>
|
||||
void ProjectPitch(Point<T>& point, QTIsaac<ISAAC_SIZE, ISAAC_INT>& rand)
|
||||
{
|
||||
T z = point.m_Z - m_CamZPos;
|
||||
@@ -1180,7 +1180,7 @@ public:
|
||||
/// Project when yaw and optionally pitch, z, and perspective are set, but not depth blur.
|
||||
/// </summary>
|
||||
/// <param name="point">The point to project</param>
|
||||
/// <param name="rand">Unused</param>
|
||||
/// <param name="rand">Ignored</param>
|
||||
void ProjectPitchYaw(Point<T>& point, QTIsaac<ISAAC_SIZE, ISAAC_INT>& rand)
|
||||
{
|
||||
T z = point.m_Z - m_CamZPos;
|
||||
@@ -1653,7 +1653,7 @@ public:
|
||||
//The color palette to use. Can be specified inline as Xml color fields, or as a hex buffer. Can also be specified
|
||||
//as an index into the palette file with an optional hue rotation applied. Inserting as a hex buffer is the preferred method.
|
||||
//Xml field: "color" or "colors" or "palette" .
|
||||
Palette<T> m_Palette;//Final palette that is actually used is a copy of this inside of render, which will be of type bucketT (float).
|
||||
Palette<float> m_Palette;//Final palette that is actually used is a copy of this inside of render, which will be of type bucketT (float).
|
||||
|
||||
//Curves used to adjust the color during final accumulation.
|
||||
Curves<T> m_Curves;
|
||||
|
||||
@@ -18,9 +18,6 @@
|
||||
#define _stat stat
|
||||
#define _fstat fstat
|
||||
#define _stricmp strcmp
|
||||
#define sscanf_s sscanf
|
||||
#define sprintf_s snprintf
|
||||
#define snprintf_s snprintf
|
||||
typedef int errno_t;
|
||||
#endif
|
||||
|
||||
@@ -40,7 +37,7 @@ static void sincos(float x, float* s, float* c)
|
||||
|
||||
namespace EmberNs
|
||||
{
|
||||
#define EMBER_VERSION "1.0.0.1"
|
||||
#define EMBER_VERSION "1.0.0.2"
|
||||
#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 ISAAC_SIZE 4
|
||||
@@ -106,6 +103,8 @@ static inline size_t NowMs()
|
||||
#define v2T glm::tvec2<T, glm::defaultp>
|
||||
#define v3T glm::tvec3<T, glm::defaultp>
|
||||
#define v4T glm::tvec4<T, glm::defaultp>
|
||||
#define v4F glm::tvec4<float, glm::defaultp>
|
||||
#define v4D glm::tvec4<double, glm::defaultp>
|
||||
#define v4bT glm::tvec4<bucketT, glm::defaultp>
|
||||
#define m2T glm::tmat2x2<T, glm::defaultp>
|
||||
#define m3T glm::tmat3x3<T, glm::defaultp>
|
||||
@@ -115,6 +114,8 @@ static inline size_t NowMs()
|
||||
#define v2T glm::detail::tvec2<T, glm::defaultp>
|
||||
#define v3T glm::detail::tvec3<T, glm::defaultp>
|
||||
#define v4T glm::detail::tvec4<T, glm::defaultp>
|
||||
#define v4F glm::detail::tvec4<float, glm::defaultp>
|
||||
#define v4D glm::detail::tvec4<double, glm::defaultp>
|
||||
#define v4bT glm::detail::tvec4<bucketT, glm::defaultp>
|
||||
#define m2T glm::detail::tmat2x2<T, glm::defaultp>
|
||||
#define m3T glm::detail::tmat3x3<T, glm::defaultp>
|
||||
|
||||
@@ -13,8 +13,6 @@
|
||||
#ifdef _WIN32
|
||||
#pragma warning(disable : 4251; disable : 4661; disable : 4100)
|
||||
#define basename(x) _strdup(x)
|
||||
#define snprintf _snprintf
|
||||
#define snprintf_s _snprintf_s
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#define EMBER_OS "WIN"
|
||||
|
||||
@@ -69,11 +67,12 @@
|
||||
#endif
|
||||
|
||||
//Intel's Threading Building Blocks is what's used for all threading.
|
||||
#include <tbb/task_group.h>
|
||||
#include <tbb/parallel_for.h>
|
||||
#include <tbb/task_scheduler_init.h>
|
||||
|
||||
#define GLM_FORCE_RADIANS 1
|
||||
#define GLM_ENABLE_EXPERIMENTAL 1
|
||||
|
||||
#ifndef __APPLE__
|
||||
#define GLM_FORCE_INLINE 1
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,882 @@
|
||||
#include "EmberPch.h"
|
||||
#include "EmberToXml.h"
|
||||
|
||||
namespace EmberNs
|
||||
{
|
||||
/// <summary>
|
||||
/// Save the ember to the specified file.
|
||||
/// </summary>
|
||||
/// <param name="filename">Full path and filename</param>
|
||||
/// <param name="ember">The ember to save</param>
|
||||
/// <param name="printEditDepth">How deep the edit depth goes</param>
|
||||
/// <param name="doEdits">If true included edit tags, else don't.</param>
|
||||
/// <param name="hexPalette">If true, embed a hexadecimal palette instead of Xml Color tags, else use Xml color tags.</param>
|
||||
/// <param name="append">If true, append to the file if it already exists, else create a new file.</param>
|
||||
/// <param name="start">Whether a new file is to be started</param>
|
||||
/// <param name="finish">Whether an existing file is to be ended</param>
|
||||
/// <returns>True if successful, else false</returns>
|
||||
template <typename T>
|
||||
bool EmberToXml<T>::Save(const string& filename, Ember<T>& ember, size_t printEditDepth, bool doEdits, bool hexPalette, bool append, bool start, bool finish)
|
||||
{
|
||||
vector<Ember<T>> vec;
|
||||
vec.push_back(ember);
|
||||
return Save(filename, vec, printEditDepth, doEdits, hexPalette, append, start, finish);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Save a container of embers to the specified file.
|
||||
/// </summary>
|
||||
/// <param name="filename">Full path and filename</param>
|
||||
/// <param name="embers">The container of embers to save</param>
|
||||
/// <param name="printEditDepth">How deep the edit depth goes</param>
|
||||
/// <param name="doEdits">If true included edit tags, else don't.</param>
|
||||
/// <param name="hexPalette">If true, embed a hexadecimal palette instead of Xml Color tags, else use Xml color tags.</param>
|
||||
/// <param name="append">If true, append to the file if it already exists, else create a new file.</param>
|
||||
/// <param name="start">Whether a new file is to be started</param>
|
||||
/// <param name="finish">Whether an existing file is to be ended</param>
|
||||
/// <returns>True if successful, else false</returns>
|
||||
template <typename T>
|
||||
template <typename Alloc, template <typename, typename> class C>
|
||||
bool EmberToXml<T>::Save(const string& filename, C<Ember<T>, Alloc>& embers, size_t printEditDepth, bool doEdits, bool hexPalette, bool append, bool start, bool finish)
|
||||
{
|
||||
bool b = false;
|
||||
T t = 0;
|
||||
string temp;
|
||||
ofstream f;
|
||||
|
||||
try
|
||||
{
|
||||
if (append)
|
||||
f.open(filename, std::ofstream::out | std::ofstream::app);//Appending allows us to write multiple embers to a single file.
|
||||
else
|
||||
f.open(filename);
|
||||
|
||||
if (f.is_open())
|
||||
{
|
||||
auto prev = embers.begin();
|
||||
|
||||
//Always ensure times make sense.
|
||||
for (auto& ember : embers)
|
||||
ember.m_Time = t++;
|
||||
|
||||
if ((append && start) || !append)
|
||||
{
|
||||
temp = "<flames>\n";
|
||||
//temp = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n<flames>\n";
|
||||
f.write(temp.c_str(), temp.size());
|
||||
}
|
||||
|
||||
for (auto& ember : embers)
|
||||
{
|
||||
string s = ToString(ember, "", printEditDepth, doEdits, hexPalette);
|
||||
f.write(s.c_str(), s.size());
|
||||
}
|
||||
|
||||
if ((append && finish) || !append)
|
||||
{
|
||||
temp = "</flames>\n";
|
||||
f.write(temp.c_str(), temp.size());
|
||||
}
|
||||
|
||||
f.close();
|
||||
b = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
cout << "Error: Writing flame " << filename << " failed.\n";
|
||||
b = false;
|
||||
}
|
||||
}
|
||||
catch (const std::exception& e)
|
||||
{
|
||||
cout << "Error: Writing flame " << filename << " failed: " << e.what() << "\n";
|
||||
b = false;
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
cout << "Error: Writing flame " << filename << " failed.\n";
|
||||
b = false;
|
||||
}
|
||||
|
||||
return b;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Return the Xml string representation of an ember.
|
||||
/// </summary>
|
||||
/// <param name="ember">The ember to create the Xml with</param>
|
||||
/// <param name="extraAttributes">If true, add extra attributes, else don't</param>
|
||||
/// <param name="printEditDepth">How deep the edit depth goes</param>
|
||||
/// <param name="doEdits">If true included edit tags, else don't.</param>
|
||||
/// <param name="hexPalette">If true, embed a hexadecimal palette instead of Xml Color tags, else use Xml color tags.</param>
|
||||
/// <returns>The Xml string representation of the passed in ember</returns>
|
||||
template <typename T>
|
||||
string EmberToXml<T>::ToString(Ember<T>& ember, const string& extraAttributes, size_t printEditDepth, bool doEdits, bool hexPalette)
|
||||
{
|
||||
size_t i, j;
|
||||
string s;
|
||||
ostringstream os;
|
||||
vector<Variation<T>*> variations;
|
||||
os << "<flame version=\"EMBER-" << EmberVersion() << "\" time=\"" << ember.m_Time << "\"";
|
||||
|
||||
if (!ember.m_Name.empty())
|
||||
os << " name=\"" << ember.m_Name << "\"";
|
||||
|
||||
os << " size=\"" << ember.m_FinalRasW << " " << ember.m_FinalRasH << "\"";
|
||||
os << " center=\"" << ember.m_CenterX << " " << ember.m_CenterY << "\"";
|
||||
os << " scale=\"" << ember.m_PixelsPerUnit << "\"";
|
||||
|
||||
if (ember.m_Zoom != 0)
|
||||
os << " zoom=\"" << ember.m_Zoom << "\"";
|
||||
|
||||
os << " rotate=\"" << ember.m_Rotate << "\"";
|
||||
os << " supersample=\"" << std::max<size_t>(1, ember.m_Supersample) << "\"";
|
||||
os << " filter=\"" << ember.m_SpatialFilterRadius << "\"";
|
||||
os << " filter_shape=\"" << ToLower(SpatialFilterCreator<T>::ToString(ember.m_SpatialFilterType)) << "\"";
|
||||
os << " temporal_filter_type=\"" << ToLower(TemporalFilterCreator<T>::ToString(ember.m_TemporalFilterType)) << "\"";
|
||||
|
||||
if (ember.m_TemporalFilterType == eTemporalFilterType::EXP_TEMPORAL_FILTER)
|
||||
os << " temporal_filter_exp=\"" << ember.m_TemporalFilterExp << "\"";
|
||||
|
||||
os << " temporal_filter_width=\"" << ember.m_TemporalFilterWidth << "\"";
|
||||
os << " quality=\"" << ember.m_Quality << "\"";
|
||||
os << " temporal_samples=\"" << ember.m_TemporalSamples << "\"";
|
||||
os << " sub_batch_size=\"" << ember.m_SubBatchSize << "\"";
|
||||
os << " fuse=\"" << ember.m_FuseCount << "\"";
|
||||
os << " background=\"" << ember.m_Background.r << " " << ember.m_Background.g << " " << ember.m_Background.b << "\"";
|
||||
os << " brightness=\"" << ember.m_Brightness << "\"";
|
||||
os << " gamma=\"" << ember.m_Gamma << "\"";
|
||||
os << " highlight_power=\"" << ember.m_HighlightPower << "\"";
|
||||
os << " vibrancy=\"" << ember.m_Vibrancy << "\"";
|
||||
os << " estimator_radius=\"" << ember.m_MaxRadDE << "\"";
|
||||
os << " estimator_minimum=\"" << ember.m_MinRadDE << "\"";
|
||||
os << " estimator_curve=\"" << ember.m_CurveDE << "\"";
|
||||
os << " gamma_threshold=\"" << ember.m_GammaThresh << "\"";
|
||||
os << " cam_zpos=\"" << ember.m_CamZPos << "\"";
|
||||
os << " cam_persp=\"" << ember.m_CamPerspective << "\"";
|
||||
os << " cam_yaw=\"" << ember.m_CamYaw << "\"";
|
||||
os << " cam_pitch=\"" << ember.m_CamPitch << "\"";
|
||||
os << " cam_dof=\"" << ember.m_CamDepthBlur << "\"";
|
||||
|
||||
if (ember.m_PaletteMode == ePaletteMode::PALETTE_STEP)
|
||||
os << " palette_mode=\"step\"";
|
||||
else if (ember.m_PaletteMode == ePaletteMode::PALETTE_LINEAR)
|
||||
os << " palette_mode=\"linear\"";
|
||||
|
||||
if (ember.m_Interp == eInterp::EMBER_INTERP_LINEAR)
|
||||
os << " interpolation=\"linear\"";
|
||||
else if (ember.m_Interp == eInterp::EMBER_INTERP_SMOOTH)
|
||||
os << " interpolation=\"smooth\"";
|
||||
|
||||
if (ember.m_AffineInterp == eAffineInterp::AFFINE_INTERP_LINEAR)
|
||||
os << " interpolation_type=\"linear\"";
|
||||
else if (ember.m_AffineInterp == eAffineInterp::AFFINE_INTERP_LOG)
|
||||
os << " interpolation_type=\"log\"";
|
||||
else if (ember.m_AffineInterp == eAffineInterp::AFFINE_INTERP_COMPAT)
|
||||
os << " interpolation_type=\"old\"";
|
||||
else if (ember.m_AffineInterp == eAffineInterp::AFFINE_INTERP_OLDER)
|
||||
os << " interpolation_type=\"older\"";
|
||||
|
||||
if (ember.m_PaletteInterp == ePaletteInterp::INTERP_SWEEP)
|
||||
os << " palette_interpolation=\"sweep\"";
|
||||
|
||||
if (!extraAttributes.empty())
|
||||
os << " " << extraAttributes;
|
||||
|
||||
os << " plugins=\"";
|
||||
ember.GetPresentVariations(variations, false);
|
||||
|
||||
if (!variations.empty())
|
||||
for (auto var : variations) os << var->Name() << (var != variations.back() ? " " : "\"");
|
||||
else
|
||||
os << "\"";
|
||||
|
||||
os << " new_linear=\"1\"";
|
||||
os << " curves=\"";
|
||||
|
||||
for (glm::length_t ci = 0; ci < 4; ci++)
|
||||
{
|
||||
for (glm::length_t cj = 0; cj < 4; cj++)
|
||||
{
|
||||
os << ember.m_Curves.m_Points[ci][cj].x << " ";
|
||||
os << ember.m_Curves.m_Points[ci][cj].y << " ";
|
||||
os << ember.m_Curves.m_Weights[ci][cj] << " ";
|
||||
}
|
||||
}
|
||||
|
||||
os << "\">\n";
|
||||
|
||||
for (i = 0; i < ember.m_EmberMotionElements.size(); ++i)
|
||||
os << " " << ToString(ember.m_EmberMotionElements[i]);
|
||||
|
||||
//This is a grey area, what to do about symmetry to avoid duplicating the symmetry xforms when reading back?//TODO//BUG.
|
||||
//if (ember.m_Symmetry)
|
||||
// os << " <symmetry kind=\"" << ember.m_Symmetry << "\"/>\n";
|
||||
|
||||
for (i = 0; i < ember.XformCount(); i++)
|
||||
os << ToString(*ember.GetXform(i), ember.XformCount(), false, false);//Not final, don't do motion.
|
||||
|
||||
if (ember.UseFinalXform())
|
||||
os << ToString(*ember.NonConstFinalXform(), ember.XformCount(), true, false);//Final, don't do motion.
|
||||
|
||||
//Note that only embedded palettes are saved. The old style of specifying a palette index to look up in a default palette file
|
||||
//is no longer supported, as it makes no sense when using multiple palette files. The only way it could work is if the index was
|
||||
//always meant to refer to the default file, or if the filename was embedded as well. It's easier, more straightforward and
|
||||
//less error prone to just embed the palette.
|
||||
if (hexPalette)
|
||||
{
|
||||
os << " <palette count=\"256\" format=\"RGB\"";
|
||||
|
||||
if (!ember.m_Palette.m_SourceColors.empty())
|
||||
{
|
||||
os << " source_colors=\"";
|
||||
|
||||
for (auto& sc : ember.m_Palette.m_SourceColors)
|
||||
{
|
||||
os <<
|
||||
Clamp(sc.first, 0.0f, 1.0f) << "," <<
|
||||
Clamp(sc.second.r, 0.0f, 1.0f) << "," <<
|
||||
Clamp(sc.second.g, 0.0f, 1.0f) << "," <<
|
||||
Clamp(sc.second.b, 0.0f, 1.0f) << " ";
|
||||
}
|
||||
|
||||
os << "\"";
|
||||
}
|
||||
|
||||
os << ">\n";
|
||||
os << std::uppercase;
|
||||
|
||||
for (i = 0; i < 32; i++)
|
||||
{
|
||||
os << " ";
|
||||
|
||||
for (j = 0; j < 8; j++)
|
||||
{
|
||||
size_t idx = 8 * i + j;
|
||||
os << hex << setw(2) << setfill('0') << int(std::rint(ember.m_Palette[idx][0] * 255));
|
||||
os << hex << setw(2) << setfill('0') << int(std::rint(ember.m_Palette[idx][1] * 255));
|
||||
os << hex << setw(2) << setfill('0') << int(std::rint(ember.m_Palette[idx][2] * 255));
|
||||
}
|
||||
|
||||
os << "\n";
|
||||
}
|
||||
|
||||
os << std::nouppercase;
|
||||
os << " </palette>\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
for (i = 0; i < 256; i++)
|
||||
{
|
||||
double r = ember.m_Palette[i][0] * 255;
|
||||
double g = ember.m_Palette[i][1] * 255;
|
||||
double b = ember.m_Palette[i][2] * 255;
|
||||
double a = ember.m_Palette[i][3] * 255;
|
||||
os << " ";
|
||||
|
||||
//The original used a precision of 6 which is totally unnecessary, use 2.
|
||||
if (IsClose(a, 255.0))
|
||||
os << "<color index=\"" << i << "\" rgb=\"" << std::fixed << std::setprecision(2) << r << " " << g << " " << b << "\"/>";
|
||||
else
|
||||
os << " <color index=\"" << i << "\" rgba=\"" << std::fixed << std::setprecision(2) << r << " " << g << " " << b << " " << a << "\"/>";
|
||||
|
||||
os << "\n";
|
||||
}
|
||||
}
|
||||
|
||||
if (doEdits && ember.m_Edits)
|
||||
os << ToString(xmlDocGetRootElement(ember.m_Edits), 1, true, printEditDepth);
|
||||
|
||||
os << "</flame>\n";
|
||||
return os.str();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Create a new editdoc optionally based on parents passed in.
|
||||
/// This is used when an ember is made out of some mutation or edit from one or two existing embers and
|
||||
/// the user wants to capture the genetic lineage history information in the edit doc of the new ember.
|
||||
/// </summary>
|
||||
/// <param name="parent0">The first parent, optionally nullptr.</param>
|
||||
/// <param name="parent1">The second parent, optionally nullptr.</param>
|
||||
/// <param name="action">The action that was taken to create the new ember</param>
|
||||
/// <param name="nick">The nickname of the author</param>
|
||||
/// <param name="url">The Url of the author</param>
|
||||
/// <param name="id">The id of the author</param>
|
||||
/// <param name="comment">The comment to include</param>
|
||||
/// <param name="sheepGen">The sheep generation used if > 0. Default: 0.</param>
|
||||
/// <param name="sheepId">The sheep id used if > 0. Default: 0.</param>
|
||||
/// <returns></returns>
|
||||
template <typename T>
|
||||
xmlDocPtr EmberToXml<T>::CreateNewEditdoc(Ember<T>* parent0, Ember<T>* parent1, const string& action, const string& nick, const string& url, const string& id, const string& comment, intmax_t sheepGen, intmax_t sheepId)
|
||||
{
|
||||
char timeString[128];
|
||||
time_t myTime;
|
||||
string s;
|
||||
xmlDocPtr commentDoc = nullptr;
|
||||
xmlDocPtr doc = xmlNewDoc(XC("1.0"));
|
||||
xmlNodePtr rootNode = nullptr, node = nullptr, nodeCopy = nullptr;
|
||||
xmlNodePtr rootComment = nullptr;
|
||||
ostringstream os;
|
||||
//Create the root node, called "edit".
|
||||
rootNode = xmlNewNode(nullptr, XC("edit"));
|
||||
xmlDocSetRootElement(doc, rootNode);
|
||||
//Add the edit attributes.
|
||||
//Date.
|
||||
myTime = time(nullptr);
|
||||
#ifdef _WIN32
|
||||
tm localt;
|
||||
localtime_s(&localt, &myTime);
|
||||
strftime(timeString, 128, "%a %b %d %H:%M:%S %z %Y", &localt);//XXX use standard time format including timezone.
|
||||
#else
|
||||
tm* localt;
|
||||
localt = localtime(&myTime);
|
||||
strftime(timeString, 128, "%a %b %d %H:%M:%S %z %Y", localt);//XXX use standard time format including timezone.
|
||||
#endif
|
||||
xmlNewProp(rootNode, XC("date"), XC(timeString));
|
||||
|
||||
//Nick.
|
||||
if (nick != "")
|
||||
xmlNewProp(rootNode, XC("nick"), XC(nick.c_str()));
|
||||
|
||||
//Url.
|
||||
if (url != "")
|
||||
xmlNewProp(rootNode, XC("url"), XC(url.c_str()));
|
||||
|
||||
if (id != "")
|
||||
xmlNewProp(rootNode, XC("id"), XC(id.c_str()));
|
||||
|
||||
//Action.
|
||||
xmlNewProp(rootNode, XC("action"), XC(action.c_str()));
|
||||
|
||||
//Sheep info.
|
||||
if (sheepGen > 0 && sheepId > 0)
|
||||
{
|
||||
//Create a child node of the root node called sheep.
|
||||
node = xmlNewChild(rootNode, nullptr, XC("sheep"), nullptr);
|
||||
//Create the sheep attributes.
|
||||
os << sheepGen;
|
||||
s = os.str();
|
||||
xmlNewProp(node, XC("generation"), XC(s.c_str()));
|
||||
os.str("");
|
||||
os << sheepId;
|
||||
s = os.str();
|
||||
xmlNewProp(node, XC("id"), XC(s.c_str()));
|
||||
os.str("");
|
||||
}
|
||||
|
||||
//Check for the parents.
|
||||
//If parent 0 not specified, this is a randomly generated genome.
|
||||
if (parent0)
|
||||
{
|
||||
os << parent0->m_Index;
|
||||
s = os.str();
|
||||
|
||||
if (parent0->m_Edits)
|
||||
{
|
||||
//Copy the node from the parent.
|
||||
node = xmlDocGetRootElement(parent0->m_Edits);
|
||||
nodeCopy = xmlCopyNode(node, 1);
|
||||
AddFilenameWithoutAmpersand(nodeCopy, parent0->m_ParentFilename);
|
||||
xmlNewProp(nodeCopy, XC("index"), XC(s.c_str()));
|
||||
xmlAddChild(rootNode, nodeCopy);
|
||||
}
|
||||
else
|
||||
{
|
||||
//Insert a (parent has no edit) message.
|
||||
nodeCopy = xmlNewChild(rootNode, nullptr, XC("edit"), nullptr);
|
||||
AddFilenameWithoutAmpersand(nodeCopy, parent0->m_ParentFilename);
|
||||
xmlNewProp(nodeCopy, XC("index"), XC(s.c_str()));
|
||||
}
|
||||
|
||||
os.str("");
|
||||
}
|
||||
|
||||
if (parent1)
|
||||
{
|
||||
os << parent1->m_Index;
|
||||
s = os.str();
|
||||
|
||||
if (parent1->m_Edits)
|
||||
{
|
||||
//Copy the node from the parent.
|
||||
node = xmlDocGetRootElement(parent1->m_Edits);
|
||||
nodeCopy = xmlCopyNode(node, 1);
|
||||
AddFilenameWithoutAmpersand(nodeCopy, parent1->m_ParentFilename);
|
||||
xmlNewProp(nodeCopy, XC("index"), XC(s.c_str()));
|
||||
xmlAddChild(rootNode, nodeCopy);
|
||||
}
|
||||
else
|
||||
{
|
||||
//Insert a (parent has no edit) message.
|
||||
nodeCopy = xmlNewChild(rootNode, nullptr, XC("edit"), nullptr);
|
||||
AddFilenameWithoutAmpersand(nodeCopy, parent1->m_ParentFilename);
|
||||
xmlNewProp(nodeCopy, XC("index"), XC(s.c_str()));
|
||||
}
|
||||
|
||||
os.str("");
|
||||
}
|
||||
|
||||
//Comment string:
|
||||
//This one's hard, since the comment string must be treated as
|
||||
//a valid XML document. Create a new document using the comment
|
||||
//string as the in-memory document, and then copy all children of
|
||||
//the root node into the edit structure
|
||||
//Parsing the comment string should be done once and then copied
|
||||
//for each new edit doc, but that's for later.
|
||||
if (comment != "")
|
||||
{
|
||||
os << "<comm>" << comment << "</comm>";
|
||||
s = os.str();
|
||||
commentDoc = xmlReadMemory(s.c_str(), int(s.length()), "comment.env", nullptr, XML_PARSE_NONET);
|
||||
os.str("");
|
||||
|
||||
//Check for errors.
|
||||
if (commentDoc)
|
||||
{
|
||||
//Loop through the children of the new document and copy them into the rootNode.
|
||||
rootComment = xmlDocGetRootElement(commentDoc);
|
||||
|
||||
for (node = rootComment->children; node; node = node->next)
|
||||
{
|
||||
nodeCopy = xmlCopyNode(node, 1);
|
||||
xmlAddChild(rootNode, nodeCopy);
|
||||
}
|
||||
|
||||
//Free the created document.
|
||||
xmlFreeDoc(commentDoc);
|
||||
}
|
||||
else
|
||||
{
|
||||
cout << "Failed to parse comment into Xml.\n";
|
||||
}
|
||||
}
|
||||
|
||||
//Return the Xml doc.
|
||||
return doc;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Return the Xml string representation of an xform.
|
||||
/// </summary>
|
||||
/// <param name="xform">The xform to create the Xml with</param>
|
||||
/// <param name="xformCount">The number of non-final xforms in the ember to which this xform belongs. Used for xaos.</param>
|
||||
/// <param name="isFinal">True if the xform is the final xform in the ember, else false.</param>
|
||||
/// <param name="doMotion">If true, include motion elements in the Xml string, else omit.</param>
|
||||
/// <returns>The Xml string representation of the passed in xform</returns>
|
||||
template <typename T>
|
||||
string EmberToXml<T>::ToString(Xform<T>& xform, size_t xformCount, bool isFinal, bool doMotion)
|
||||
{
|
||||
size_t i, j;
|
||||
ostringstream os;
|
||||
|
||||
if (doMotion)
|
||||
{
|
||||
os << " <motion motion_frequency=\"" << xform.m_MotionFreq << "\" ";
|
||||
|
||||
if (xform.m_MotionFunc == eMotion::MOTION_SIN)
|
||||
os << "motion_function=\"sin\" ";
|
||||
else if (xform.m_MotionFunc == eMotion::MOTION_TRIANGLE)
|
||||
os << "motion_function=\"triangle\" ";
|
||||
else if (xform.m_MotionFunc == eMotion::MOTION_HILL)
|
||||
os << "motion_function=\"hill\" ";
|
||||
else if (xform.m_MotionFunc == eMotion::MOTION_SAW)
|
||||
os << "motion_function=\"saw\" ";
|
||||
|
||||
if (xform.m_MotionOffset != 0)
|
||||
os << "motion_offset=\"" << xform.m_MotionOffset << "\" ";
|
||||
}
|
||||
else
|
||||
{
|
||||
if (isFinal)
|
||||
os << " <finalxform ";
|
||||
else
|
||||
os << " <xform weight=\"" << xform.m_Weight << "\" ";
|
||||
}
|
||||
|
||||
if (!doMotion || xform.m_ColorX != EMPTYFIELD) os << "color=\"" << xform.m_ColorX << "\" ";
|
||||
|
||||
//if (!doMotion || xform.m_ColorY != EMPTYFIELD) os << "color=\"" << xform.m_ColorX << " " << xform.m_ColorY << "\" ";
|
||||
if (!doMotion || xform.m_DirectColor != EMPTYFIELD) os << "var_color=\"" << xform.m_DirectColor << "\" ";
|
||||
|
||||
if (!doMotion || xform.m_ColorSpeed != EMPTYFIELD) os << "color_speed=\"" << xform.m_ColorSpeed << "\" ";
|
||||
|
||||
//os << "symmetry=\"" << fabs(xform.m_ColorSpeed - 1) * 2 << "\" ";//Legacy support.
|
||||
|
||||
if (!doMotion)
|
||||
{
|
||||
string s = xform.m_Name;
|
||||
std::replace(s.begin(), s.end(), ' ', '_');
|
||||
os << "name=\"" << s << "\" ";//Flam3 didn't do this, but Apo does.
|
||||
|
||||
if (!isFinal)
|
||||
os << "animate=\"" << xform.m_Animate << "\" ";
|
||||
}
|
||||
|
||||
//Variation writing order differs slightly from the original to make it a bit more readable.
|
||||
//The original wrote out all of the variation names and weights. Then wrote out the parameters for
|
||||
//the parametric variations. Here, write out the params immediately after each parametric variation
|
||||
//so they are more closely grouped with the variation they apply to, rather than being all grouped at the end.
|
||||
for (i = 0; i < xform.TotalVariationCount(); i++)
|
||||
{
|
||||
Variation<T>* var = xform.GetVariation(i);
|
||||
ParametricVariation<T>* parVar = dynamic_cast<ParametricVariation<T>*>(var);
|
||||
|
||||
if (var->m_Weight != 0)
|
||||
{
|
||||
os << var->Name() << "=\"" << var->m_Weight << "\" ";
|
||||
|
||||
if (parVar)
|
||||
{
|
||||
auto params = parVar->Params();
|
||||
|
||||
for (j = 0; j < parVar->ParamCount(); j++)
|
||||
{
|
||||
if ((!doMotion || (doMotion && (params[j].ParamVal() != 0))) && !params[j].IsPrecalc())
|
||||
os << params[j].Name() << "=\"" << params[j].ParamVal() << "\" ";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!doMotion || (doMotion && !xform.m_Affine.IsZero() && !xform.m_Affine.IsEmpty()))
|
||||
{
|
||||
os << "coefs=\"" << xform.m_Affine.A() << " " << xform.m_Affine.D() << " " << xform.m_Affine.B() << " "
|
||||
<< xform.m_Affine.E() << " " << xform.m_Affine.C() << " " << xform.m_Affine.F() << "\"";
|
||||
}
|
||||
|
||||
if ((!doMotion && !xform.m_Post.IsID()) || (doMotion && !xform.m_Post.IsZero() && !xform.m_Post.IsEmpty()))
|
||||
{
|
||||
os << " post=\"" << xform.m_Post.A() << " " << xform.m_Post.D() << " " << xform.m_Post.B() << " "
|
||||
<< xform.m_Post.E() << " " << xform.m_Post.C() << " " << xform.m_Post.F() << "\"";
|
||||
}
|
||||
|
||||
//Original only printed xaos values that were not 1. Here, print them all out if any are present.
|
||||
if (!isFinal && !doMotion && xform.XaosPresent())//Applying motion to xaos not supported.
|
||||
{
|
||||
os << " chaos=\"";
|
||||
|
||||
for (i = 0; i < xformCount; i++)
|
||||
os << xform.Xaos(i) << " ";
|
||||
|
||||
os << "\"";
|
||||
}
|
||||
|
||||
if (!doMotion || xform.m_Opacity != EMPTYFIELD) os << " opacity=\"" << xform.m_Opacity << "\"";
|
||||
|
||||
if (!doMotion && !xform.m_Motion.empty())
|
||||
{
|
||||
os << ">\n";
|
||||
|
||||
for (i = 0; i < xform.m_Motion.size(); i++)
|
||||
os << ToString(xform.m_Motion[i], 0, false, true);
|
||||
|
||||
if (isFinal)//Fixed to properly close final.//SMOULDER
|
||||
os << " </finalxform>\n";
|
||||
else
|
||||
os << " </xform>\n";
|
||||
}
|
||||
else
|
||||
os << "/>\n";
|
||||
|
||||
return os.str();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Return an edit node Xml string.
|
||||
/// </summary>
|
||||
/// <param name="editNode">The edit node to get the string for</param>
|
||||
/// <param name="tabs">How many tabs to use</param>
|
||||
/// <param name="formatting">If true, include newlines and tabs, else don't.</param>
|
||||
/// <param name="printEditDepth">How deep the edit depth goes</param>
|
||||
/// <returns>The edit node Xml string</returns>
|
||||
template <typename T>
|
||||
string EmberToXml<T>::ToString(xmlNodePtr editNode, size_t tabs, bool formatting, size_t printEditDepth)
|
||||
{
|
||||
bool indentPrinted = false;
|
||||
const char* tabString = " ", *attStr;
|
||||
const char* editString = "edit";
|
||||
const char* sheepString = "sheep";
|
||||
size_t ti;//, editOrSheep = 0;
|
||||
xmlAttrPtr attPtr = nullptr, curAtt = nullptr;
|
||||
xmlNodePtr childPtr = nullptr, curChild = nullptr;
|
||||
ostringstream os;
|
||||
|
||||
if (printEditDepth > 0 && tabs > printEditDepth)
|
||||
return "";
|
||||
|
||||
//If this node is an XML_ELEMENT_NODE, print it and its attributes.
|
||||
if (editNode->type == XML_ELEMENT_NODE)
|
||||
{
|
||||
//Print the node at the tab specified.
|
||||
if (formatting)
|
||||
for (ti = 0; ti < tabs; ti++)
|
||||
os << tabString;
|
||||
|
||||
os << "<" << editNode->name;
|
||||
|
||||
//This can either be an edit node or a sheep node.
|
||||
//If it's an edit node, add one to the tab.
|
||||
if (!Compare(editNode->name, editString))
|
||||
{
|
||||
//editOrSheep = 1;
|
||||
tabs++;
|
||||
}
|
||||
else if (!Compare(editNode->name, sheepString)) {}
|
||||
//editOrSheep = 2;
|
||||
else {}
|
||||
|
||||
//editOrSheep = 0;
|
||||
//Print the attributes.
|
||||
attPtr = editNode->properties;
|
||||
|
||||
for (curAtt = attPtr; curAtt; curAtt = curAtt->next)
|
||||
{
|
||||
attStr = CX(xmlGetProp(editNode, curAtt->name));
|
||||
os << " " << curAtt->name << "=\"" << attStr << "\"";
|
||||
xmlFree(reinterpret_cast<void*>(const_cast<char*>(attStr)));
|
||||
}
|
||||
|
||||
//Does this node have children?
|
||||
if (!editNode->children || (printEditDepth > 0 && tabs > printEditDepth))
|
||||
{
|
||||
//Close the tag and subtract the tab.
|
||||
os << "/>";
|
||||
|
||||
if (formatting)
|
||||
os << "\n";
|
||||
|
||||
tabs--;
|
||||
}
|
||||
else
|
||||
{
|
||||
//Close the tag.
|
||||
os << ">";
|
||||
|
||||
if (formatting)
|
||||
os << "\n";
|
||||
|
||||
//Loop through the children and print them.
|
||||
childPtr = editNode->children;
|
||||
indentPrinted = false;
|
||||
|
||||
for (curChild = childPtr; curChild; curChild = curChild->next)
|
||||
{
|
||||
//If child is an element, indent first and then print it.
|
||||
if (curChild->type == XML_ELEMENT_NODE &&
|
||||
(!Compare(curChild->name, editString) || !Compare(curChild->name, sheepString)))
|
||||
{
|
||||
if (indentPrinted)
|
||||
{
|
||||
indentPrinted = false;
|
||||
os << "\n";
|
||||
}
|
||||
|
||||
os << ToString(curChild, tabs, true, printEditDepth);
|
||||
}
|
||||
else
|
||||
{
|
||||
//Child is a text node, don't want to indent more than once.
|
||||
if (xmlIsBlankNode(curChild))
|
||||
continue;
|
||||
|
||||
if (!indentPrinted && formatting)
|
||||
{
|
||||
for (ti = 0; ti < tabs; ti++)
|
||||
os << tabString;
|
||||
|
||||
indentPrinted = true;
|
||||
}
|
||||
|
||||
//Print nodes without formatting.
|
||||
os << ToString(curChild, tabs, false, printEditDepth);
|
||||
}
|
||||
}
|
||||
|
||||
if (indentPrinted && formatting)
|
||||
os << "\n";
|
||||
|
||||
tabs--;//Tab out.
|
||||
|
||||
if (formatting)
|
||||
for (ti = 0; ti < tabs; ti++)
|
||||
os << tabString;
|
||||
|
||||
os << "</" << editNode->name << ">";//Close the tag.
|
||||
|
||||
if (formatting)
|
||||
os << "\n";
|
||||
}
|
||||
}
|
||||
else if (editNode->type == XML_TEXT_NODE)
|
||||
{
|
||||
string s(reinterpret_cast<char*>(xmlNodeGetContent(editNode)));
|
||||
os << Trim(s);
|
||||
}
|
||||
|
||||
return os.str();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert a EmberMotion element to an xml string
|
||||
/// </summary>
|
||||
/// <param name="motion">The EmberMotion object to convert to XML</param>
|
||||
/// <returns>The string representation of the passed in EmberMotion object</returns>
|
||||
template <typename T>
|
||||
string EmberToXml<T>::ToString(const EmberMotion<T>& motion)
|
||||
{
|
||||
ostringstream os;
|
||||
os << "<flame_motion motion_frequency=\"" << motion.m_MotionFreq << "\" ";
|
||||
|
||||
if (motion.m_MotionOffset > 0)
|
||||
os << "motion_offset=\"" << motion.m_MotionOffset << "\" ";
|
||||
|
||||
os << "motion_func=";
|
||||
|
||||
switch (motion.m_MotionFunc)
|
||||
{
|
||||
case eMotion::MOTION_SIN:
|
||||
os << "\"sin\"";
|
||||
break;
|
||||
|
||||
case eMotion::MOTION_HILL:
|
||||
os << "\"hill\"";
|
||||
break;
|
||||
|
||||
case eMotion::MOTION_TRIANGLE:
|
||||
os << "\"triangle\"";
|
||||
break;
|
||||
|
||||
case eMotion::MOTION_SAW:
|
||||
default:
|
||||
os << "\"saw\"";
|
||||
break;
|
||||
}
|
||||
|
||||
T r = 0.0;
|
||||
T g = 0.0;
|
||||
T b = 0.0;
|
||||
T cx = 0.0;
|
||||
T cy = 0.0;
|
||||
|
||||
for (size_t i = 0; i < motion.m_MotionParams.size(); ++i)
|
||||
{
|
||||
switch (motion.m_MotionParams[i].first)
|
||||
{
|
||||
case eEmberMotionParam::FLAME_MOTION_ZOOM:
|
||||
os << " zoom=\"" << motion.m_MotionParams[i].second << "\"";
|
||||
break;
|
||||
|
||||
case eEmberMotionParam::FLAME_MOTION_ZPOS:
|
||||
os << " cam_zpos=\"" << motion.m_MotionParams[i].second << "\"";
|
||||
break;
|
||||
|
||||
case eEmberMotionParam::FLAME_MOTION_PERSPECTIVE:
|
||||
os << " cam_persp=\"" << motion.m_MotionParams[i].second << "\"";
|
||||
break;
|
||||
|
||||
case eEmberMotionParam::FLAME_MOTION_YAW:
|
||||
os << " cam_yaw=\"" << motion.m_MotionParams[i].second << "\"";
|
||||
break;
|
||||
|
||||
case eEmberMotionParam::FLAME_MOTION_PITCH:
|
||||
os << " cam_pitch=\"" << motion.m_MotionParams[i].second << "\"";
|
||||
break;
|
||||
|
||||
case eEmberMotionParam::FLAME_MOTION_DEPTH_BLUR:
|
||||
os << " cam_dof=\"" << motion.m_MotionParams[i].second << "\"";
|
||||
break;
|
||||
|
||||
case eEmberMotionParam::FLAME_MOTION_CENTER_X:
|
||||
cx = motion.m_MotionParams[i].second;
|
||||
break;
|
||||
|
||||
case eEmberMotionParam::FLAME_MOTION_CENTER_Y:
|
||||
cy = motion.m_MotionParams[i].second;
|
||||
break;
|
||||
|
||||
case eEmberMotionParam::FLAME_MOTION_ROTATE:
|
||||
os << " rotate=\"" << motion.m_MotionParams[i].second << "\"";
|
||||
break;
|
||||
|
||||
case eEmberMotionParam::FLAME_MOTION_BRIGHTNESS:
|
||||
os << " brightness=\"" << motion.m_MotionParams[i].second << "\"";
|
||||
break;
|
||||
|
||||
case eEmberMotionParam::FLAME_MOTION_GAMMA:
|
||||
os << " gamma=\"" << motion.m_MotionParams[i].second << "\"";
|
||||
break;
|
||||
|
||||
case eEmberMotionParam::FLAME_MOTION_GAMMA_THRESH:
|
||||
os << " gamma_threshold=\"" << motion.m_MotionParams[i].second << "\"";
|
||||
break;
|
||||
|
||||
case eEmberMotionParam::FLAME_MOTION_HIGHLIGHT_POWER:
|
||||
os << " highlight_power=\"" << motion.m_MotionParams[i].second << "\"";
|
||||
break;
|
||||
|
||||
case eEmberMotionParam::FLAME_MOTION_BACKGROUND_R:
|
||||
r = motion.m_MotionParams[i].second;
|
||||
break;
|
||||
|
||||
case eEmberMotionParam::FLAME_MOTION_BACKGROUND_G:
|
||||
g = motion.m_MotionParams[i].second;
|
||||
break;
|
||||
|
||||
case eEmberMotionParam::FLAME_MOTION_BACKGROUND_B:
|
||||
b = motion.m_MotionParams[i].second;
|
||||
break;
|
||||
|
||||
case eEmberMotionParam::FLAME_MOTION_VIBRANCY:
|
||||
os << " vibrancy=\"" << motion.m_MotionParams[i].second << "\"";
|
||||
break;
|
||||
|
||||
case eEmberMotionParam::FLAME_MOTION_NONE:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (r != 0.0 || g != 0.0 || b != 0.0)
|
||||
os << " background=\"" << r << " " << g << " " << b << "\"";
|
||||
|
||||
if (cx != 0.0 || cy != 0.0)
|
||||
os << " center=\"" << cx << " " << cy << "\"";
|
||||
|
||||
os << "/>\n";
|
||||
return os.str();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Replace the character '&' in a filename with "&" and set the value in
|
||||
/// the passed in node to this new string.
|
||||
/// If no '&' is found, the passed in string is used as-is when populating the value of the node.
|
||||
/// This is done because Xml parsing can't handle ampersands.
|
||||
/// </summary>
|
||||
/// <param name="node">The XML node to write the new value to</param>
|
||||
/// <param name="filename">The filename string to examine for ampersands.</param>
|
||||
template <typename T>
|
||||
void EmberToXml<T>::AddFilenameWithoutAmpersand(xmlNodePtr node, string& filename)
|
||||
{
|
||||
if (filename.find_first_of('&') != std::string::npos)
|
||||
{
|
||||
string filenameWithoutAmpersands = filename;
|
||||
FindAndReplace<string>(filenameWithoutAmpersands, "&", "&");
|
||||
xmlNewProp(node, XC("filename"), XC(filenameWithoutAmpersands.c_str()));
|
||||
}
|
||||
else
|
||||
{
|
||||
xmlNewProp(node, XC("filename"), XC(filename.c_str()));
|
||||
}
|
||||
}
|
||||
|
||||
#define EXPORT_EMBER_TO_XML(T) \
|
||||
template EMBER_API class EmberToXml<T>; \
|
||||
template EMBER_API bool EmberToXml<T>::Save(const string&, vector<Ember<T>>& embers, size_t, bool, bool, bool, bool, bool); \
|
||||
template EMBER_API bool EmberToXml<T>::Save(const string&, list<Ember<T>>& embers, size_t, bool, bool, bool, bool, bool);
|
||||
|
||||
EXPORT_EMBER_TO_XML(float)
|
||||
|
||||
#ifdef DO_DOUBLE
|
||||
EXPORT_EMBER_TO_XML(double)
|
||||
#endif
|
||||
}
|
||||
+8
-830
@@ -27,838 +27,16 @@ public:
|
||||
~EmberToXml() = default;
|
||||
EmberToXml(const EmberToXml<T>& e) = delete;
|
||||
|
||||
/// <summary>
|
||||
/// Save the ember to the specified file.
|
||||
/// </summary>
|
||||
/// <param name="filename">Full path and filename</param>
|
||||
/// <param name="ember">The ember to save</param>
|
||||
/// <param name="printEditDepth">How deep the edit depth goes</param>
|
||||
/// <param name="doEdits">If true included edit tags, else don't.</param>
|
||||
/// <param name="hexPalette">If true, embed a hexadecimal palette instead of Xml Color tags, else use Xml color tags.</param>
|
||||
/// <param name="append">If true, append to the file if it already exists, else create a new file.</param>
|
||||
/// <param name="start">Whether a new file is to be started</param>
|
||||
/// <param name="finish">Whether an existing file is to be ended</param>
|
||||
/// <returns>True if successful, else false</returns>
|
||||
bool Save(const string& filename, Ember<T>& ember, size_t printEditDepth, bool doEdits, bool hexPalette, bool append = false, bool start = false, bool finish = false)
|
||||
{
|
||||
vector<Ember<T>> vec;
|
||||
vec.push_back(ember);
|
||||
return Save(filename, vec, printEditDepth, doEdits, hexPalette, append, start, finish);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Save a container of embers to the specified file.
|
||||
/// </summary>
|
||||
/// <param name="filename">Full path and filename</param>
|
||||
/// <param name="embers">The container of embers to save</param>
|
||||
/// <param name="printEditDepth">How deep the edit depth goes</param>
|
||||
/// <param name="doEdits">If true included edit tags, else don't.</param>
|
||||
/// <param name="hexPalette">If true, embed a hexadecimal palette instead of Xml Color tags, else use Xml color tags.</param>
|
||||
/// <param name="append">If true, append to the file if it already exists, else create a new file.</param>
|
||||
/// <param name="start">Whether a new file is to be started</param>
|
||||
/// <param name="finish">Whether an existing file is to be ended</param>
|
||||
/// <returns>True if successful, else false</returns>
|
||||
bool Save(const string& filename, Ember<T>& ember, size_t printEditDepth, bool doEdits, bool hexPalette, bool append = false, bool start = false, bool finish = false);
|
||||
template <typename Alloc, template <typename, typename> class C>
|
||||
bool Save(const string& filename, C<Ember<T>, Alloc>& embers, size_t printEditDepth, bool doEdits, bool hexPalette, bool append = false, bool start = false, bool finish = false)
|
||||
{
|
||||
bool b = false;
|
||||
bool hasTimes = false;
|
||||
T t = 0;
|
||||
string temp;
|
||||
ofstream f;
|
||||
|
||||
try
|
||||
{
|
||||
if (append)
|
||||
f.open(filename, std::ofstream::out | std::ofstream::app);//Appending allows us to write multiple embers to a single file.
|
||||
else
|
||||
f.open(filename);
|
||||
|
||||
if (f.is_open())
|
||||
{
|
||||
auto prev = embers.begin();
|
||||
|
||||
//Always ensure times make sense.
|
||||
for (auto& ember : embers)
|
||||
ember.m_Time = t++;
|
||||
|
||||
if ((append && start) || !append)
|
||||
{
|
||||
temp = "<flames>\n";
|
||||
//temp = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n<flames>\n";
|
||||
f.write(temp.c_str(), temp.size());
|
||||
}
|
||||
|
||||
for (auto& ember : embers)
|
||||
{
|
||||
string s = ToString(ember, "", printEditDepth, doEdits, hexPalette);
|
||||
f.write(s.c_str(), s.size());
|
||||
}
|
||||
|
||||
if ((append && finish) || !append)
|
||||
{
|
||||
temp = "</flames>\n";
|
||||
f.write(temp.c_str(), temp.size());
|
||||
}
|
||||
|
||||
f.close();
|
||||
b = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
cout << "Error: Writing flame " << filename << " failed.\n";
|
||||
b = false;
|
||||
}
|
||||
}
|
||||
catch (const std::exception& e)
|
||||
{
|
||||
cout << "Error: Writing flame " << filename << " failed: " << e.what() << "\n";
|
||||
b = false;
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
cout << "Error: Writing flame " << filename << " failed.\n";
|
||||
b = false;
|
||||
}
|
||||
|
||||
if (f.is_open())
|
||||
f.close();
|
||||
|
||||
return b;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Return the Xml string representation of an ember.
|
||||
/// </summary>
|
||||
/// <param name="ember">The ember to create the Xml with</param>
|
||||
/// <param name="extraAttributes">If true, add extra attributes, else don't</param>
|
||||
/// <param name="printEditDepth">How deep the edit depth goes</param>
|
||||
/// <param name="doEdits">If true included edit tags, else don't.</param>
|
||||
/// <param name="hexPalette">If true, embed a hexadecimal palette instead of Xml Color tags, else use Xml color tags.</param>
|
||||
/// <returns>The Xml string representation of the passed in ember</returns>
|
||||
string ToString(Ember<T>& ember, const string& extraAttributes, size_t printEditDepth, bool doEdits, bool hexPalette = true)
|
||||
{
|
||||
size_t i, j;
|
||||
string s;
|
||||
ostringstream os;
|
||||
vector<Variation<T>*> variations;
|
||||
os << "<flame version=\"EMBER-" << EmberVersion() << "\" time=\"" << ember.m_Time << "\"";
|
||||
|
||||
if (!ember.m_Name.empty())
|
||||
os << " name=\"" << ember.m_Name << "\"";
|
||||
|
||||
os << " size=\"" << ember.m_FinalRasW << " " << ember.m_FinalRasH << "\"";
|
||||
os << " center=\"" << ember.m_CenterX << " " << ember.m_CenterY << "\"";
|
||||
os << " scale=\"" << ember.m_PixelsPerUnit << "\"";
|
||||
|
||||
if (ember.m_Zoom != 0)
|
||||
os << " zoom=\"" << ember.m_Zoom << "\"";
|
||||
|
||||
os << " rotate=\"" << ember.m_Rotate << "\"";
|
||||
os << " supersample=\"" << std::max<size_t>(1, ember.m_Supersample) << "\"";
|
||||
os << " filter=\"" << ember.m_SpatialFilterRadius << "\"";
|
||||
os << " filter_shape=\"" << ToLower(SpatialFilterCreator<T>::ToString(ember.m_SpatialFilterType)) << "\"";
|
||||
os << " temporal_filter_type=\"" << ToLower(TemporalFilterCreator<T>::ToString(ember.m_TemporalFilterType)) << "\"";
|
||||
|
||||
if (ember.m_TemporalFilterType == eTemporalFilterType::EXP_TEMPORAL_FILTER)
|
||||
os << " temporal_filter_exp=\"" << ember.m_TemporalFilterExp << "\"";
|
||||
|
||||
os << " temporal_filter_width=\"" << ember.m_TemporalFilterWidth << "\"";
|
||||
os << " quality=\"" << ember.m_Quality << "\"";
|
||||
os << " temporal_samples=\"" << ember.m_TemporalSamples << "\"";
|
||||
os << " sub_batch_size=\"" << ember.m_SubBatchSize << "\"";
|
||||
os << " fuse=\"" << ember.m_FuseCount << "\"";
|
||||
os << " background=\"" << ember.m_Background.r << " " << ember.m_Background.g << " " << ember.m_Background.b << "\"";
|
||||
os << " brightness=\"" << ember.m_Brightness << "\"";
|
||||
os << " gamma=\"" << ember.m_Gamma << "\"";
|
||||
os << " highlight_power=\"" << ember.m_HighlightPower << "\"";
|
||||
os << " vibrancy=\"" << ember.m_Vibrancy << "\"";
|
||||
os << " estimator_radius=\"" << ember.m_MaxRadDE << "\"";
|
||||
os << " estimator_minimum=\"" << ember.m_MinRadDE << "\"";
|
||||
os << " estimator_curve=\"" << ember.m_CurveDE << "\"";
|
||||
os << " gamma_threshold=\"" << ember.m_GammaThresh << "\"";
|
||||
os << " cam_zpos=\"" << ember.m_CamZPos << "\"";
|
||||
os << " cam_persp=\"" << ember.m_CamPerspective << "\"";
|
||||
os << " cam_yaw=\"" << ember.m_CamYaw << "\"";
|
||||
os << " cam_pitch=\"" << ember.m_CamPitch << "\"";
|
||||
os << " cam_dof=\"" << ember.m_CamDepthBlur << "\"";
|
||||
|
||||
if (ember.m_PaletteMode == ePaletteMode::PALETTE_STEP)
|
||||
os << " palette_mode=\"step\"";
|
||||
else if (ember.m_PaletteMode == ePaletteMode::PALETTE_LINEAR)
|
||||
os << " palette_mode=\"linear\"";
|
||||
|
||||
if (ember.m_Interp == eInterp::EMBER_INTERP_LINEAR)
|
||||
os << " interpolation=\"linear\"";
|
||||
else if (ember.m_Interp == eInterp::EMBER_INTERP_SMOOTH)
|
||||
os << " interpolation=\"smooth\"";
|
||||
|
||||
if (ember.m_AffineInterp == eAffineInterp::AFFINE_INTERP_LINEAR)
|
||||
os << " interpolation_type=\"linear\"";
|
||||
else if (ember.m_AffineInterp == eAffineInterp::AFFINE_INTERP_LOG)
|
||||
os << " interpolation_type=\"log\"";
|
||||
else if (ember.m_AffineInterp == eAffineInterp::AFFINE_INTERP_COMPAT)
|
||||
os << " interpolation_type=\"old\"";
|
||||
else if (ember.m_AffineInterp == eAffineInterp::AFFINE_INTERP_OLDER)
|
||||
os << " interpolation_type=\"older\"";
|
||||
|
||||
if (ember.m_PaletteInterp == ePaletteInterp::INTERP_SWEEP)
|
||||
os << " palette_interpolation=\"sweep\"";
|
||||
|
||||
if (!extraAttributes.empty())
|
||||
os << " " << extraAttributes;
|
||||
|
||||
os << " plugins=\"";
|
||||
ember.GetPresentVariations(variations, false);
|
||||
|
||||
if (!variations.empty())
|
||||
for (auto var : variations) os << var->Name() << (var != variations.back() ? " " : "\"");
|
||||
else
|
||||
os << "\"";
|
||||
|
||||
os << " new_linear=\"1\"";
|
||||
os << " curves=\"";
|
||||
|
||||
for (glm::length_t ci = 0; ci < 4; ci++)
|
||||
{
|
||||
for (glm::length_t cj = 0; cj < 4; cj++)
|
||||
{
|
||||
os << ember.m_Curves.m_Points[ci][cj].x << " ";
|
||||
os << ember.m_Curves.m_Points[ci][cj].y << " ";
|
||||
os << ember.m_Curves.m_Weights[ci][cj] << " ";
|
||||
}
|
||||
}
|
||||
|
||||
os << "\">\n";
|
||||
|
||||
for (i = 0; i < ember.m_EmberMotionElements.size(); ++i)
|
||||
os << " " << ToString(ember.m_EmberMotionElements[i]);
|
||||
|
||||
//This is a grey area, what to do about symmetry to avoid duplicating the symmetry xforms when reading back?//TODO//BUG.
|
||||
//if (ember.m_Symmetry)
|
||||
// os << " <symmetry kind=\"" << ember.m_Symmetry << "\"/>\n";
|
||||
|
||||
for (i = 0; i < ember.XformCount(); i++)
|
||||
os << ToString(*ember.GetXform(i), ember.XformCount(), false, false);//Not final, don't do motion.
|
||||
|
||||
if (ember.UseFinalXform())
|
||||
os << ToString(*ember.NonConstFinalXform(), ember.XformCount(), true, false);//Final, don't do motion.
|
||||
|
||||
//Note that only embedded palettes are saved. The old style of specifying a palette index to look up in a default palette file
|
||||
//is no longer supported, as it makes no sense when using multiple palette files. The only way it could work is if the index was
|
||||
//always meant to refer to the default file, or if the filename was embedded as well. It's easier, more straightforward and
|
||||
//less error prone to just embed the palette.
|
||||
if (hexPalette)
|
||||
{
|
||||
os << " <palette count=\"256\" format=\"RGB\">\n";
|
||||
|
||||
for (i = 0; i < 32; i++)
|
||||
{
|
||||
os << " ";
|
||||
|
||||
for (j = 0; j < 8; j++)
|
||||
{
|
||||
size_t idx = 8 * i + j;
|
||||
os << hex << setw(2) << setfill('0') << int(std::rint(ember.m_Palette[idx][0] * 255));
|
||||
os << hex << setw(2) << setfill('0') << int(std::rint(ember.m_Palette[idx][1] * 255));
|
||||
os << hex << setw(2) << setfill('0') << int(std::rint(ember.m_Palette[idx][2] * 255));
|
||||
}
|
||||
|
||||
os << "\n";
|
||||
}
|
||||
|
||||
os << " </palette>\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
for (i = 0; i < 256; i++)
|
||||
{
|
||||
double r = ember.m_Palette[i][0] * 255;
|
||||
double g = ember.m_Palette[i][1] * 255;
|
||||
double b = ember.m_Palette[i][2] * 255;
|
||||
double a = ember.m_Palette[i][3] * 255;
|
||||
os << " ";
|
||||
|
||||
//The original used a precision of 6 which is totally unnecessary, use 2.
|
||||
if (IsClose(a, 255.0))
|
||||
os << "<color index=\"" << i << "\" rgb=\"" << std::fixed << std::setprecision(2) << r << " " << g << " " << b << "\"/>";
|
||||
else
|
||||
os << " <color index=\"" << i << "\" rgba=\"" << std::fixed << std::setprecision(2) << r << " " << g << " " << b << " " << a << "\"/>";
|
||||
|
||||
os << "\n";
|
||||
}
|
||||
}
|
||||
|
||||
if (doEdits && ember.m_Edits)
|
||||
os << ToString(xmlDocGetRootElement(ember.m_Edits), 1, true, printEditDepth);
|
||||
|
||||
os << "</flame>\n";
|
||||
return os.str();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Create a new editdoc optionally based on parents passed in.
|
||||
/// This is used when an ember is made out of some mutation or edit from one or two existing embers and
|
||||
/// the user wants to capture the genetic lineage history information in the edit doc of the new ember.
|
||||
/// </summary>
|
||||
/// <param name="parent0">The first parent, optionally nullptr.</param>
|
||||
/// <param name="parent1">The second parent, optionally nullptr.</param>
|
||||
/// <param name="action">The action that was taken to create the new ember</param>
|
||||
/// <param name="nick">The nickname of the author</param>
|
||||
/// <param name="url">The Url of the author</param>
|
||||
/// <param name="id">The id of the author</param>
|
||||
/// <param name="comment">The comment to include</param>
|
||||
/// <param name="sheepGen">The sheep generation used if > 0. Default: 0.</param>
|
||||
/// <param name="sheepId">The sheep id used if > 0. Default: 0.</param>
|
||||
/// <returns></returns>
|
||||
xmlDocPtr CreateNewEditdoc(Ember<T>* parent0, Ember<T>* parent1, const string& action, const string& nick, const string& url, const string& id, const string& comment, intmax_t sheepGen = 0, intmax_t sheepId = 0)
|
||||
{
|
||||
char timeString[128];
|
||||
time_t myTime;
|
||||
string s;
|
||||
xmlDocPtr commentDoc = nullptr;
|
||||
xmlDocPtr doc = xmlNewDoc(XC("1.0"));
|
||||
xmlNodePtr rootNode = nullptr, node = nullptr, nodeCopy = nullptr;
|
||||
xmlNodePtr rootComment = nullptr;
|
||||
ostringstream os;
|
||||
//Create the root node, called "edit".
|
||||
rootNode = xmlNewNode(nullptr, XC("edit"));
|
||||
xmlDocSetRootElement(doc, rootNode);
|
||||
//Add the edit attributes.
|
||||
//Date.
|
||||
myTime = time(nullptr);
|
||||
#ifdef _WIN32
|
||||
tm localt;
|
||||
localtime_s(&localt, &myTime);
|
||||
strftime(timeString, 128, "%a %b %d %H:%M:%S %z %Y", &localt);//XXX use standard time format including timezone.
|
||||
#else
|
||||
tm* localt;
|
||||
localt = localtime(&myTime);
|
||||
strftime(timeString, 128, "%a %b %d %H:%M:%S %z %Y", localt);//XXX use standard time format including timezone.
|
||||
#endif
|
||||
xmlNewProp(rootNode, XC("date"), XC(timeString));
|
||||
|
||||
//Nick.
|
||||
if (nick != "")
|
||||
xmlNewProp(rootNode, XC("nick"), XC(nick.c_str()));
|
||||
|
||||
//Url.
|
||||
if (url != "")
|
||||
xmlNewProp(rootNode, XC("url"), XC(url.c_str()));
|
||||
|
||||
if (id != "")
|
||||
xmlNewProp(rootNode, XC("id"), XC(id.c_str()));
|
||||
|
||||
//Action.
|
||||
xmlNewProp(rootNode, XC("action"), XC(action.c_str()));
|
||||
|
||||
//Sheep info.
|
||||
if (sheepGen > 0 && sheepId > 0)
|
||||
{
|
||||
//Create a child node of the root node called sheep.
|
||||
node = xmlNewChild(rootNode, nullptr, XC("sheep"), nullptr);
|
||||
//Create the sheep attributes.
|
||||
os << sheepGen;
|
||||
s = os.str();
|
||||
xmlNewProp(node, XC("generation"), XC(s.c_str()));
|
||||
os.str("");
|
||||
os << sheepId;
|
||||
s = os.str();
|
||||
xmlNewProp(node, XC("id"), XC(s.c_str()));
|
||||
os.str("");
|
||||
}
|
||||
|
||||
//Check for the parents.
|
||||
//If parent 0 not specified, this is a randomly generated genome.
|
||||
if (parent0)
|
||||
{
|
||||
os << parent0->m_Index;
|
||||
s = os.str();
|
||||
|
||||
if (parent0->m_Edits)
|
||||
{
|
||||
//Copy the node from the parent.
|
||||
node = xmlDocGetRootElement(parent0->m_Edits);
|
||||
nodeCopy = xmlCopyNode(node, 1);
|
||||
AddFilenameWithoutAmpersand(nodeCopy, parent0->m_ParentFilename);
|
||||
xmlNewProp(nodeCopy, XC("index"), XC(s.c_str()));
|
||||
xmlAddChild(rootNode, nodeCopy);
|
||||
}
|
||||
else
|
||||
{
|
||||
//Insert a (parent has no edit) message.
|
||||
nodeCopy = xmlNewChild(rootNode, nullptr, XC("edit"), nullptr);
|
||||
AddFilenameWithoutAmpersand(nodeCopy, parent0->m_ParentFilename);
|
||||
xmlNewProp(nodeCopy, XC("index"), XC(s.c_str()));
|
||||
}
|
||||
|
||||
os.str("");
|
||||
}
|
||||
|
||||
if (parent1)
|
||||
{
|
||||
os << parent1->m_Index;
|
||||
s = os.str();
|
||||
|
||||
if (parent1->m_Edits)
|
||||
{
|
||||
//Copy the node from the parent.
|
||||
node = xmlDocGetRootElement(parent1->m_Edits);
|
||||
nodeCopy = xmlCopyNode(node, 1);
|
||||
AddFilenameWithoutAmpersand(nodeCopy, parent1->m_ParentFilename);
|
||||
xmlNewProp(nodeCopy, XC("index"), XC(s.c_str()));
|
||||
xmlAddChild(rootNode, nodeCopy);
|
||||
}
|
||||
else
|
||||
{
|
||||
//Insert a (parent has no edit) message.
|
||||
nodeCopy = xmlNewChild(rootNode, nullptr, XC("edit"), nullptr);
|
||||
AddFilenameWithoutAmpersand(nodeCopy, parent1->m_ParentFilename);
|
||||
xmlNewProp(nodeCopy, XC("index"), XC(s.c_str()));
|
||||
}
|
||||
|
||||
os.str("");
|
||||
}
|
||||
|
||||
//Comment string:
|
||||
//This one's hard, since the comment string must be treated as
|
||||
//a valid XML document. Create a new document using the comment
|
||||
//string as the in-memory document, and then copy all children of
|
||||
//the root node into the edit structure
|
||||
//Parsing the comment string should be done once and then copied
|
||||
//for each new edit doc, but that's for later.
|
||||
if (comment != "")
|
||||
{
|
||||
os << "<comm>" << comment << "</comm>";
|
||||
s = os.str();
|
||||
commentDoc = xmlReadMemory(s.c_str(), int(s.length()), "comment.env", nullptr, XML_PARSE_NONET);
|
||||
os.str("");
|
||||
|
||||
//Check for errors.
|
||||
if (commentDoc)
|
||||
{
|
||||
//Loop through the children of the new document and copy them into the rootNode.
|
||||
rootComment = xmlDocGetRootElement(commentDoc);
|
||||
|
||||
for (node = rootComment->children; node; node = node->next)
|
||||
{
|
||||
nodeCopy = xmlCopyNode(node, 1);
|
||||
xmlAddChild(rootNode, nodeCopy);
|
||||
}
|
||||
|
||||
//Free the created document.
|
||||
xmlFreeDoc(commentDoc);
|
||||
}
|
||||
else
|
||||
{
|
||||
cout << "Failed to parse comment into Xml.\n";
|
||||
}
|
||||
}
|
||||
|
||||
//Return the Xml doc.
|
||||
return doc;
|
||||
}
|
||||
bool Save(const string& filename, C<Ember<T>, Alloc>& embers, size_t printEditDepth, bool doEdits, bool hexPalette, bool append = false, bool start = false, bool finish = false);
|
||||
string ToString(Ember<T>& ember, const string& extraAttributes, size_t printEditDepth, bool doEdits, bool hexPalette = true);
|
||||
xmlDocPtr CreateNewEditdoc(Ember<T>* parent0, Ember<T>* parent1, const string& action, const string& nick, const string& url, const string& id, const string& comment, intmax_t sheepGen = 0, intmax_t sheepId = 0);
|
||||
|
||||
private:
|
||||
/// <summary>
|
||||
/// Return the Xml string representation of an xform.
|
||||
/// </summary>
|
||||
/// <param name="xform">The xform to create the Xml with</param>
|
||||
/// <param name="xformCount">The number of non-final xforms in the ember to which this xform belongs. Used for xaos.</param>
|
||||
/// <param name="isFinal">True if the xform is the final xform in the ember, else false.</param>
|
||||
/// <param name="doMotion">If true, include motion elements in the Xml string, else omit.</param>
|
||||
/// <returns>The Xml string representation of the passed in xform</returns>
|
||||
string ToString(Xform<T>& xform, size_t xformCount, bool isFinal, bool doMotion)
|
||||
{
|
||||
size_t i, j;
|
||||
ostringstream os;
|
||||
|
||||
if (doMotion)
|
||||
{
|
||||
os << " <motion motion_frequency=\"" << xform.m_MotionFreq << "\" ";
|
||||
|
||||
if (xform.m_MotionFunc == eMotion::MOTION_SIN)
|
||||
os << "motion_function=\"sin\" ";
|
||||
else if (xform.m_MotionFunc == eMotion::MOTION_TRIANGLE)
|
||||
os << "motion_function=\"triangle\" ";
|
||||
else if (xform.m_MotionFunc == eMotion::MOTION_HILL)
|
||||
os << "motion_function=\"hill\" ";
|
||||
else if (xform.m_MotionFunc == eMotion::MOTION_SAW)
|
||||
os << "motion_function=\"saw\" ";
|
||||
|
||||
if (xform.m_MotionOffset != 0)
|
||||
os << "motion_offset=\"" << xform.m_MotionOffset << "\" ";
|
||||
}
|
||||
else
|
||||
{
|
||||
if (isFinal)
|
||||
os << " <finalxform ";
|
||||
else
|
||||
os << " <xform weight=\"" << xform.m_Weight << "\" ";
|
||||
}
|
||||
|
||||
if (!doMotion || xform.m_ColorX != EMPTYFIELD) os << "color=\"" << xform.m_ColorX << "\" ";
|
||||
|
||||
//if (!doMotion || xform.m_ColorY != EMPTYFIELD) os << "color=\"" << xform.m_ColorX << " " << xform.m_ColorY << "\" ";
|
||||
if (!doMotion || xform.m_DirectColor != EMPTYFIELD) os << "var_color=\"" << xform.m_DirectColor << "\" ";
|
||||
|
||||
if (!doMotion || xform.m_ColorSpeed != EMPTYFIELD) os << "color_speed=\"" << xform.m_ColorSpeed << "\" ";
|
||||
|
||||
//os << "symmetry=\"" << fabs(xform.m_ColorSpeed - 1) * 2 << "\" ";//Legacy support.
|
||||
|
||||
if (!doMotion)
|
||||
{
|
||||
string s = xform.m_Name;
|
||||
std::replace(s.begin(), s.end(), ' ', '_');
|
||||
os << "name=\"" << s << "\" ";//Flam3 didn't do this, but Apo does.
|
||||
|
||||
if (!isFinal)
|
||||
os << "animate=\"" << xform.m_Animate << "\" ";
|
||||
}
|
||||
|
||||
//Variation writing order differs slightly from the original to make it a bit more readable.
|
||||
//The original wrote out all of the variation names and weights. Then wrote out the parameters for
|
||||
//the parametric variations. Here, write out the params immediately after each parametric variation
|
||||
//so they are more closely grouped with the variation they apply to, rather than being all grouped at the end.
|
||||
for (i = 0; i < xform.TotalVariationCount(); i++)
|
||||
{
|
||||
Variation<T>* var = xform.GetVariation(i);
|
||||
ParametricVariation<T>* parVar = dynamic_cast<ParametricVariation<T>*>(var);
|
||||
|
||||
if (var->m_Weight != 0)
|
||||
{
|
||||
os << var->Name() << "=\"" << var->m_Weight << "\" ";
|
||||
|
||||
if (parVar)
|
||||
{
|
||||
auto params = parVar->Params();
|
||||
|
||||
for (j = 0; j < parVar->ParamCount(); j++)
|
||||
{
|
||||
if ((!doMotion || (doMotion && (params[j].ParamVal() != 0))) && !params[j].IsPrecalc())
|
||||
os << params[j].Name() << "=\"" << params[j].ParamVal() << "\" ";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!doMotion || (doMotion && !xform.m_Affine.IsZero() && !xform.m_Affine.IsEmpty()))
|
||||
{
|
||||
os << "coefs=\"" << xform.m_Affine.A() << " " << xform.m_Affine.D() << " " << xform.m_Affine.B() << " "
|
||||
<< xform.m_Affine.E() << " " << xform.m_Affine.C() << " " << xform.m_Affine.F() << "\"";
|
||||
}
|
||||
|
||||
if ((!doMotion && !xform.m_Post.IsID()) || (doMotion && !xform.m_Post.IsZero() && !xform.m_Post.IsEmpty()))
|
||||
{
|
||||
os << " post=\"" << xform.m_Post.A() << " " << xform.m_Post.D() << " " << xform.m_Post.B() << " "
|
||||
<< xform.m_Post.E() << " " << xform.m_Post.C() << " " << xform.m_Post.F() << "\"";
|
||||
}
|
||||
|
||||
//Original only printed xaos values that were not 1. Here, print them all out if any are present.
|
||||
if (!isFinal && !doMotion && xform.XaosPresent())//Applying motion to xaos not supported.
|
||||
{
|
||||
os << " chaos=\"";
|
||||
|
||||
for (i = 0; i < xformCount; i++)
|
||||
os << xform.Xaos(i) << " ";
|
||||
|
||||
os << "\"";
|
||||
}
|
||||
|
||||
if (!doMotion || xform.m_Opacity != EMPTYFIELD) os << " opacity=\"" << xform.m_Opacity << "\"";
|
||||
|
||||
if (!doMotion && !xform.m_Motion.empty())
|
||||
{
|
||||
os << ">\n";
|
||||
|
||||
for (i = 0; i < xform.m_Motion.size(); i++)
|
||||
os << ToString(xform.m_Motion[i], 0, false, true);
|
||||
|
||||
if (isFinal)//Fixed to properly close final.//SMOULDER
|
||||
os << " </finalxform>\n";
|
||||
else
|
||||
os << " </xform>\n";
|
||||
}
|
||||
else
|
||||
os << "/>\n";
|
||||
|
||||
return os.str();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Return an edit node Xml string.
|
||||
/// </summary>
|
||||
/// <param name="editNode">The edit node to get the string for</param>
|
||||
/// <param name="tabs">How many tabs to use</param>
|
||||
/// <param name="formatting">If true, include newlines and tabs, else don't.</param>
|
||||
/// <param name="printEditDepth">How deep the edit depth goes</param>
|
||||
/// <returns>The edit node Xml string</returns>
|
||||
string ToString(xmlNodePtr editNode, size_t tabs, bool formatting, size_t printEditDepth)
|
||||
{
|
||||
bool indentPrinted = false;
|
||||
const char* tabString = " ", *attStr;
|
||||
const char* editString = "edit";
|
||||
const char* sheepString = "sheep";
|
||||
size_t ti;//, editOrSheep = 0;
|
||||
xmlAttrPtr attPtr = nullptr, curAtt = nullptr;
|
||||
xmlNodePtr childPtr = nullptr, curChild = nullptr;
|
||||
ostringstream os;
|
||||
|
||||
if (printEditDepth > 0 && tabs > printEditDepth)
|
||||
return "";
|
||||
|
||||
//If this node is an XML_ELEMENT_NODE, print it and its attributes.
|
||||
if (editNode->type == XML_ELEMENT_NODE)
|
||||
{
|
||||
//Print the node at the tab specified.
|
||||
if (formatting)
|
||||
for (ti = 0; ti < tabs; ti++)
|
||||
os << tabString;
|
||||
|
||||
os << "<" << editNode->name;
|
||||
|
||||
//This can either be an edit node or a sheep node.
|
||||
//If it's an edit node, add one to the tab.
|
||||
if (!Compare(editNode->name, editString))
|
||||
{
|
||||
//editOrSheep = 1;
|
||||
tabs++;
|
||||
}
|
||||
else if (!Compare(editNode->name, sheepString)) { }
|
||||
//editOrSheep = 2;
|
||||
else { }
|
||||
|
||||
//editOrSheep = 0;
|
||||
//Print the attributes.
|
||||
attPtr = editNode->properties;
|
||||
|
||||
for (curAtt = attPtr; curAtt; curAtt = curAtt->next)
|
||||
{
|
||||
attStr = CX(xmlGetProp(editNode, curAtt->name));
|
||||
os << " " << curAtt->name << "=\"" << attStr << "\"";
|
||||
xmlFree(reinterpret_cast<void*>(const_cast<char*>(attStr)));
|
||||
}
|
||||
|
||||
//Does this node have children?
|
||||
if (!editNode->children || (printEditDepth > 0 && tabs > printEditDepth))
|
||||
{
|
||||
//Close the tag and subtract the tab.
|
||||
os << "/>";
|
||||
|
||||
if (formatting)
|
||||
os << "\n";
|
||||
|
||||
tabs--;
|
||||
}
|
||||
else
|
||||
{
|
||||
//Close the tag.
|
||||
os << ">";
|
||||
|
||||
if (formatting)
|
||||
os << "\n";
|
||||
|
||||
//Loop through the children and print them.
|
||||
childPtr = editNode->children;
|
||||
indentPrinted = false;
|
||||
|
||||
for (curChild = childPtr; curChild; curChild = curChild->next)
|
||||
{
|
||||
//If child is an element, indent first and then print it.
|
||||
if (curChild->type == XML_ELEMENT_NODE &&
|
||||
(!Compare(curChild->name, editString) || !Compare(curChild->name, sheepString)))
|
||||
{
|
||||
if (indentPrinted)
|
||||
{
|
||||
indentPrinted = false;
|
||||
os << "\n";
|
||||
}
|
||||
|
||||
os << ToString(curChild, tabs, true, printEditDepth);
|
||||
}
|
||||
else
|
||||
{
|
||||
//Child is a text node, don't want to indent more than once.
|
||||
if (xmlIsBlankNode(curChild))
|
||||
continue;
|
||||
|
||||
if (!indentPrinted && formatting)
|
||||
{
|
||||
for (ti = 0; ti < tabs; ti++)
|
||||
os << tabString;
|
||||
|
||||
indentPrinted = true;
|
||||
}
|
||||
|
||||
//Print nodes without formatting.
|
||||
os << ToString(curChild, tabs, false, printEditDepth);
|
||||
}
|
||||
}
|
||||
|
||||
if (indentPrinted && formatting)
|
||||
os << "\n";
|
||||
|
||||
tabs--;//Tab out.
|
||||
|
||||
if (formatting)
|
||||
for (ti = 0; ti < tabs; ti++)
|
||||
os << tabString;
|
||||
|
||||
os << "</" << editNode->name << ">";//Close the tag.
|
||||
|
||||
if (formatting)
|
||||
os << "\n";
|
||||
}
|
||||
}
|
||||
else if (editNode->type == XML_TEXT_NODE)
|
||||
{
|
||||
string s(reinterpret_cast<char*>(xmlNodeGetContent(editNode)));
|
||||
os << Trim(s);
|
||||
}
|
||||
|
||||
return os.str();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert a FlameMotion element to an xml string
|
||||
/// </summary>
|
||||
/// <param name="motion">The FlameMotion object to convert to XML</param>
|
||||
string ToString(const EmberMotion<T>& motion)
|
||||
{
|
||||
ostringstream os;
|
||||
os << "<flame_motion motion_frequency=\"" << motion.m_MotionFreq << "\" ";
|
||||
|
||||
if (motion.m_MotionOffset > 0)
|
||||
os << "motion_offset=\"" << motion.m_MotionOffset << "\" ";
|
||||
|
||||
os << "motion_func=";
|
||||
|
||||
switch (motion.m_MotionFunc)
|
||||
{
|
||||
case eMotion::MOTION_SIN:
|
||||
os << "\"sin\"";
|
||||
break;
|
||||
|
||||
case eMotion::MOTION_HILL:
|
||||
os << "\"hill\"";
|
||||
break;
|
||||
|
||||
case eMotion::MOTION_TRIANGLE:
|
||||
os << "\"triangle\"";
|
||||
break;
|
||||
|
||||
case eMotion::MOTION_SAW:
|
||||
default:
|
||||
os << "\"saw\"";
|
||||
break;
|
||||
}
|
||||
|
||||
T r = 0.0;
|
||||
T g = 0.0;
|
||||
T b = 0.0;
|
||||
T cx = 0.0;
|
||||
T cy = 0.0;
|
||||
|
||||
for (size_t i = 0; i < motion.m_MotionParams.size(); ++i)
|
||||
{
|
||||
switch (motion.m_MotionParams[i].first)
|
||||
{
|
||||
case eEmberMotionParam::FLAME_MOTION_ZOOM:
|
||||
os << " zoom=\"" << motion.m_MotionParams[i].second << "\"";
|
||||
break;
|
||||
|
||||
case eEmberMotionParam::FLAME_MOTION_ZPOS:
|
||||
os << " cam_zpos=\"" << motion.m_MotionParams[i].second << "\"";
|
||||
break;
|
||||
|
||||
case eEmberMotionParam::FLAME_MOTION_PERSPECTIVE:
|
||||
os << " cam_persp=\"" << motion.m_MotionParams[i].second << "\"";
|
||||
break;
|
||||
|
||||
case eEmberMotionParam::FLAME_MOTION_YAW:
|
||||
os << " cam_yaw=\"" << motion.m_MotionParams[i].second << "\"";
|
||||
break;
|
||||
|
||||
case eEmberMotionParam::FLAME_MOTION_PITCH:
|
||||
os << " cam_pitch=\"" << motion.m_MotionParams[i].second << "\"";
|
||||
break;
|
||||
|
||||
case eEmberMotionParam::FLAME_MOTION_DEPTH_BLUR:
|
||||
os << " cam_dof=\"" << motion.m_MotionParams[i].second << "\"";
|
||||
break;
|
||||
|
||||
case eEmberMotionParam::FLAME_MOTION_CENTER_X:
|
||||
cx = motion.m_MotionParams[i].second;
|
||||
break;
|
||||
|
||||
case eEmberMotionParam::FLAME_MOTION_CENTER_Y:
|
||||
cy = motion.m_MotionParams[i].second;
|
||||
break;
|
||||
|
||||
case eEmberMotionParam::FLAME_MOTION_ROTATE:
|
||||
os << " rotate=\"" << motion.m_MotionParams[i].second << "\"";
|
||||
break;
|
||||
|
||||
case eEmberMotionParam::FLAME_MOTION_BRIGHTNESS:
|
||||
os << " brightness=\"" << motion.m_MotionParams[i].second << "\"";
|
||||
break;
|
||||
|
||||
case eEmberMotionParam::FLAME_MOTION_GAMMA:
|
||||
os << " gamma=\"" << motion.m_MotionParams[i].second << "\"";
|
||||
break;
|
||||
|
||||
case eEmberMotionParam::FLAME_MOTION_GAMMA_THRESH:
|
||||
os << " gamma_threshold=\"" << motion.m_MotionParams[i].second << "\"";
|
||||
break;
|
||||
|
||||
case eEmberMotionParam::FLAME_MOTION_HIGHLIGHT_POWER:
|
||||
os << " highlight_power=\"" << motion.m_MotionParams[i].second << "\"";
|
||||
break;
|
||||
|
||||
case eEmberMotionParam::FLAME_MOTION_BACKGROUND_R:
|
||||
r = motion.m_MotionParams[i].second;
|
||||
break;
|
||||
|
||||
case eEmberMotionParam::FLAME_MOTION_BACKGROUND_G:
|
||||
g = motion.m_MotionParams[i].second;
|
||||
break;
|
||||
|
||||
case eEmberMotionParam::FLAME_MOTION_BACKGROUND_B:
|
||||
b = motion.m_MotionParams[i].second;
|
||||
break;
|
||||
|
||||
case eEmberMotionParam::FLAME_MOTION_VIBRANCY:
|
||||
os << " vibrancy=\"" << motion.m_MotionParams[i].second << "\"";
|
||||
break;
|
||||
|
||||
case eEmberMotionParam::FLAME_MOTION_NONE:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (r != 0.0 || g != 0.0 || b != 0.0)
|
||||
os << " background=\"" << r << " " << g << " " << b << "\"";
|
||||
|
||||
if (cx != 0.0 || cy != 0.0)
|
||||
os << " center=\"" << cx << " " << cy << "\"";
|
||||
|
||||
os << "/>\n";
|
||||
return os.str();
|
||||
}
|
||||
|
||||
void AddFilenameWithoutAmpersand(xmlNodePtr node, string& filename)
|
||||
{
|
||||
if (filename.find_first_of('&') != std::string::npos)
|
||||
{
|
||||
string filenameWithoutAmpersands = filename;
|
||||
FindAndReplace<string>(filenameWithoutAmpersands, "&", "&");
|
||||
xmlNewProp(node, XC("filename"), XC(filenameWithoutAmpersands.c_str()));
|
||||
}
|
||||
else
|
||||
{
|
||||
xmlNewProp(node, XC("filename"), XC(filename.c_str()));
|
||||
}
|
||||
}
|
||||
string ToString(Xform<T>& xform, size_t xformCount, bool isFinal, bool doMotion);
|
||||
string ToString(xmlNodePtr editNode, size_t tabs, bool formatting, size_t printEditDepth);
|
||||
string ToString(const EmberMotion<T>& motion);
|
||||
void AddFilenameWithoutAmpersand(xmlNodePtr node, string& filename);
|
||||
};
|
||||
}
|
||||
|
||||
@@ -145,7 +145,7 @@ public:
|
||||
throw "Out of bounds xform index in selection distribution.";
|
||||
|
||||
#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);
|
||||
tempDensity += densityPerElement;
|
||||
j++;
|
||||
|
||||
+33
-3
@@ -13,6 +13,9 @@ namespace EmberNs
|
||||
/// The palette stores a set of 256 colors which are what get accumulated to the histogram
|
||||
/// for each iteration. The colors come from either the main palette Xml file or directly
|
||||
/// from the ember parameter file. Either way, they come in as 0-255 and get normalized to 0-1.
|
||||
/// The palette may have also come from a palette editor where the user specifies key colors, then
|
||||
/// those are interpolated to make a smooth palette. In that case, the m_SourceColors map will
|
||||
/// be populated.
|
||||
/// In the future, 2D palette support might be added in which case this class will have to be modified.
|
||||
/// Template argument expected to be float or double.
|
||||
/// </summary>
|
||||
@@ -90,13 +93,27 @@ public:
|
||||
for (size_t i = 0; i < size; i++)
|
||||
{
|
||||
m_Entries[i].a = T(palette15[i * 4 + 0]);
|
||||
m_Entries[i].r = T(palette15[i * 4 + 1]);
|
||||
m_Entries[i].g = T(palette15[i * 4 + 2]);
|
||||
m_Entries[i].b = T(palette15[i * 4 + 3]);
|
||||
m_Entries[i].r = T(palette15[i * 4 + 1]) / T(255);
|
||||
m_Entries[i].g = T(palette15[i * 4 + 2]) / T(255);
|
||||
m_Entries[i].b = T(palette15[i * 4 + 3]) / T(255);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Constructor which takes the vector of colors as well as the source colors which were
|
||||
/// used to create it in a palette editor. The burden is on the user to not let the two get out of sync.
|
||||
/// </summary>
|
||||
/// <param name="name">The name of the palette</param>
|
||||
/// <param name="entries">A vector of color entries</param>
|
||||
/// <param name="sourceColors">A map of colors which was used to create entries in a palette editor</param>
|
||||
Palette(const string& name, vector<v4T>& entries, map<T, v4T>& sourceColors)
|
||||
{
|
||||
m_Name = name;
|
||||
m_Entries = entries;
|
||||
m_SourceColors = sourceColors;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Default copy constructor.
|
||||
/// </summary>
|
||||
@@ -145,6 +162,11 @@ public:
|
||||
m_Name = palette.m_Name;
|
||||
m_Filename = palette.m_Filename;
|
||||
CopyCont(m_Entries, palette.m_Entries);
|
||||
m_SourceColors.clear();
|
||||
|
||||
for (auto& kv : palette.m_SourceColors)
|
||||
m_SourceColors[T(kv.first)] = v4T(kv.second);
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
@@ -183,6 +205,13 @@ public:
|
||||
/// <returns>The size of the color entries vector</returns>
|
||||
size_t Size() { return m_Entries.size(); }
|
||||
|
||||
/// <summary>
|
||||
/// The size of the source color entries vector which was used to create the palette.
|
||||
/// Note this will only be non-zero if this palette was created in the palette editor.
|
||||
/// </summary>
|
||||
/// <returns>The size of the source colors map</returns>
|
||||
size_t SourceColorSize() { return m_SourceColors.size(); }
|
||||
|
||||
/// <summary>
|
||||
/// Set all colors to either black or white, including the alpha channel.
|
||||
/// </summary>
|
||||
@@ -585,5 +614,6 @@ public:
|
||||
string m_Name = "-";//Name of this palette.
|
||||
shared_ptr<string> m_Filename;//Name of the parent file this palette came from, can be empty.
|
||||
vector<v4T> m_Entries;
|
||||
map<T, v4T> m_SourceColors;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -0,0 +1,778 @@
|
||||
#include "EmberPch.h"
|
||||
#include "PaletteList.h"
|
||||
|
||||
namespace EmberNs
|
||||
{
|
||||
/// <summary>
|
||||
/// Empty constructor which initializes the palette map with the default palette file.
|
||||
/// </summary>
|
||||
template <typename T>
|
||||
PaletteList<T>::PaletteList()
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Destructor which saves any modifiable palettes to file, just in case they were modified.
|
||||
/// </summary>
|
||||
template <typename T>
|
||||
PaletteList<T>::~PaletteList()
|
||||
{
|
||||
for (auto& palFile : s_Palettes)
|
||||
{
|
||||
if (IsModifiable(palFile.first))
|
||||
Save(palFile.first);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Create a new palette file with the given name and vector of palettes, and save it.
|
||||
/// </summary>
|
||||
/// <param name="filename">The full path to the file to add</param>
|
||||
/// <param name="palettes">The list of palettes which comprise the file</param>
|
||||
/// <returns>True if the file did not exist, was successfully added and saved, else false.</returns>
|
||||
template <typename T>
|
||||
bool PaletteList<T>::AddPaletteFile(const string& filename, const vector<Palette<T>>& palettes)
|
||||
{
|
||||
if (!GetPaletteListByFullPath(filename))
|
||||
{
|
||||
auto item = s_Palettes.insert(make_pair(filename, palettes));
|
||||
Save(filename);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Create an new empty palette file with the given name with a single modifiable palette in it.
|
||||
/// </summary>
|
||||
/// <param name="filename">The full path to the file to add</param>
|
||||
/// <param name="palettes">The list of palettes which comprise the file</param>
|
||||
/// <returns>True if the file did not exist, was successfully added and saved, else false.</returns>
|
||||
template <typename T>
|
||||
bool PaletteList<T>::AddEmptyPaletteFile(const string& filename)
|
||||
{
|
||||
if (!GetPaletteListByFullPath(filename))
|
||||
{
|
||||
auto item = s_Palettes.insert(make_pair(filename, vector<Palette<T>>()));
|
||||
Palette<T> p;
|
||||
p.m_Index = 0;
|
||||
p.m_Name = "empty-default";
|
||||
p.m_Filename = make_shared<string>(filename);
|
||||
p.m_SourceColors = map<T, v4T>
|
||||
{
|
||||
{ T(0), v4T(T(0), T(0), T(0), T(1)) },
|
||||
{ T(1), v4T(T(0), T(0), T(0), T(1)) }
|
||||
};
|
||||
item.first->second.push_back(p);
|
||||
Save(filename);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Add a new palette to an existing palette file and save the file.
|
||||
/// </summary>
|
||||
/// <param name="filename">The full path to the existing palette file to add</param>
|
||||
/// <param name="palette">The new palette to add to the file</param>
|
||||
/// <returns>True if the palette file existed, the palette was added, and the file was successfully saved, else false.</returns>
|
||||
template <typename T>
|
||||
bool PaletteList<T>::AddPaletteToFile(const string& filename, const Palette<T>& palette)
|
||||
{
|
||||
if (auto p = GetPaletteListByFullPathOrFilename(filename))
|
||||
{
|
||||
p->push_back(palette);
|
||||
p->back().m_Index = int(p->size()) - 1;
|
||||
Save(filename);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Replace an existing palette in a palette file with a new one and save the file.
|
||||
/// The match is done based on palette name, so if there are duplicate names in
|
||||
/// the file, only the first one will be replaced.
|
||||
/// </summary>
|
||||
/// <param name="filename">The full path to the existing palette file to replace a palette in</param>
|
||||
/// <param name="palette">The new palette to use to replace an existing one in the file</param>
|
||||
/// <returns>True if the palette file existed, the palette was replaced, and the file was successfully saved, else false.</returns>
|
||||
template <typename T>
|
||||
bool PaletteList<T>::Replace(const string& filename, const Palette<T>& palette)
|
||||
{
|
||||
if (auto p = GetPaletteListByFullPathOrFilename(filename))
|
||||
{
|
||||
for (auto& pal : *p)
|
||||
{
|
||||
if (pal.m_Name == palette.m_Name)
|
||||
{
|
||||
auto index = pal.m_Index;
|
||||
pal = palette;
|
||||
pal.m_Index = index;
|
||||
Save(filename);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Replace an existing palette in a palette file with a new one and save the file.
|
||||
/// The match is done based on the passed in index.
|
||||
/// </summary>
|
||||
/// <param name="filename">The full path to the existing palette file to replace a palette in</param>
|
||||
/// <param name="palette">The new palette to use to replace an existing one in the file</param>
|
||||
/// <param name="index">The 0-based index of the palette to replace</param>
|
||||
/// <returns>True if the palette file existed, the palette was replaced, and the file was successfully saved, else false.</returns>
|
||||
template <typename T>
|
||||
bool PaletteList<T>::Replace(const string& filename, const Palette<T>& palette, int index)
|
||||
{
|
||||
if (auto p = GetPaletteListByFullPathOrFilename(filename))
|
||||
{
|
||||
if (index < p->size())
|
||||
{
|
||||
(*p)[index] = palette;
|
||||
(*p)[index].m_Index = index;
|
||||
Save(filename);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Delete an existing palette from a palette file.
|
||||
/// The match is done based on the passed in index.
|
||||
/// </summary>
|
||||
/// <param name="filename">The full path to the existing palette file to delete a palette from</param>
|
||||
/// <param name="index">The 0-based index of the palette to delete</param>
|
||||
/// <returns>True if the palette file existed, the palette was deleted, and the file was successfully saved, else false.</returns>
|
||||
template <typename T>
|
||||
bool PaletteList<T>::Delete(const string& filename, int index)
|
||||
{
|
||||
int i = 0;
|
||||
|
||||
if (auto p = GetPaletteListByFullPathOrFilename(filename))
|
||||
{
|
||||
if (index < p->size())
|
||||
{
|
||||
p->erase(p->begin() + index);
|
||||
|
||||
for (auto& pal : *p)
|
||||
pal.m_Index = i++;
|
||||
|
||||
Save(filename);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Read an Xml palette file into memory.
|
||||
/// This must be called before any palette file usage.
|
||||
/// </summary>
|
||||
/// <param name="filename">The full path to the file to read</param>
|
||||
/// <param name="force">If true, override the initialization state and force a read, else observe the initialization state.</param>
|
||||
/// <returns>Whether anything was read</returns>
|
||||
template <typename T>
|
||||
bool PaletteList<T>::Add(const string& filename, bool force)
|
||||
{
|
||||
bool added = true;
|
||||
bool contains = GetPaletteListByFullPathOrFilename(filename) != nullptr;
|
||||
auto filenameonly = GetFilename(filename);
|
||||
|
||||
if (contains && !force)//Don't allow any palettes with the same name, even if they reside in different paths.
|
||||
return false;
|
||||
|
||||
auto palettes = s_Palettes.insert(make_pair(filename, vector<Palette<T>>()));
|
||||
|
||||
if (force || palettes.second)
|
||||
{
|
||||
string buf;
|
||||
const char* loc = __FUNCTION__;
|
||||
|
||||
if (ReadFile(filename.c_str(), buf))
|
||||
{
|
||||
auto lower = ToLower(filename);
|
||||
auto pfilename = shared_ptr<string>(new string(filename));
|
||||
|
||||
if (EndsWith(lower, ".xml"))
|
||||
{
|
||||
xmlDocPtr doc = xmlReadMemory(static_cast<const char*>(buf.data()), int(buf.size()), filename.c_str(), nullptr, XML_PARSE_NONET);
|
||||
|
||||
if (doc)
|
||||
{
|
||||
auto rootNode = xmlDocGetRootElement(doc);
|
||||
palettes.first->second.clear();
|
||||
palettes.first->second.reserve(buf.size() / 2048);//Roughly what it takes per palette.
|
||||
ParsePalettes(rootNode, pfilename, palettes.first->second);
|
||||
xmlFreeDoc(doc);
|
||||
|
||||
if (palettes.first->second.empty())
|
||||
{
|
||||
added = false;//Reading failed, likely not a valid palette file.
|
||||
s_Palettes.erase(filename);
|
||||
AddToReport(string(loc) + " : Couldn't parse xml doc");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
added = false;
|
||||
s_Palettes.erase(filename);
|
||||
AddToReport(string(loc) + " : Couldn't load xml doc");
|
||||
}
|
||||
}
|
||||
else if (EndsWith(lower, ".ugr") || EndsWith(lower, ".gradient") || EndsWith(lower, ".gradients"))
|
||||
{
|
||||
if (!ParsePalettes(buf, pfilename, palettes.first->second))
|
||||
{
|
||||
added = false;
|
||||
s_Palettes.erase(filename);
|
||||
AddToReport(string(loc) + " : Couldn't read palette file " + filename);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
added = false;
|
||||
s_Palettes.erase(filename);
|
||||
AddToReport(string(loc) + " : Couldn't read palette file " + filename);
|
||||
}
|
||||
}
|
||||
|
||||
return added;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get the palette at a random index in a random file in the map.
|
||||
/// </summary>
|
||||
/// <returns>A pointer to a random palette in a random file if successful, else nullptr.</returns>
|
||||
template <typename T>
|
||||
Palette<T>* PaletteList<T>::GetRandomPalette()
|
||||
{
|
||||
auto p = s_Palettes.begin();
|
||||
size_t i = 0, paletteFileIndex = QTIsaac<ISAAC_SIZE, ISAAC_INT>::LockedRand() % Size();
|
||||
|
||||
//Move p forward i elements.
|
||||
while (i < paletteFileIndex && p != s_Palettes.end())
|
||||
{
|
||||
++i;
|
||||
++p;
|
||||
}
|
||||
|
||||
if (i < Size())
|
||||
{
|
||||
size_t paletteIndex = QTIsaac<ISAAC_SIZE, ISAAC_INT>::LockedRand() % p->second.size();
|
||||
|
||||
if (paletteIndex < p->second.size())
|
||||
return &p->second[paletteIndex];
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get the palette at a specified index in the specified file in the map.
|
||||
/// </summary>
|
||||
/// <param name="filename">The filename of the palette to retrieve</param>
|
||||
/// <param name="i">The index of the palette to read. A value of -1 indicates a random palette.</param>
|
||||
/// <returns>A pointer to the requested palette if the index was in range, else nullptr.</returns>
|
||||
template <typename T>
|
||||
Palette<T>* PaletteList<T>::GetPaletteByFilename(const string& filename, size_t i)
|
||||
{
|
||||
if (auto palettes = GetPaletteListByFilename(filename))
|
||||
if (i < palettes->size())
|
||||
return &(*palettes)[i];
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get the palette at a specified index in the specified file in the map.
|
||||
/// </summary>
|
||||
/// <param name="filename">The full path and filename of the palette to retrieve</param>
|
||||
/// <param name="i">The index of the palette to read. A value of -1 indicates a random palette.</param>
|
||||
/// <returns>A pointer to the requested palette if the index was in range, else nullptr.</returns>
|
||||
template <typename T>
|
||||
Palette<T>* PaletteList<T>::GetPaletteByFullPath(const string& filename, size_t i)
|
||||
{
|
||||
if (auto palettes = GetPaletteListByFullPath(filename))
|
||||
if (i < palettes->size())
|
||||
return &(*palettes)[i];
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get a pointer to a palette with a specified name in the specified full path and filename in the map.
|
||||
/// </summary>
|
||||
/// <param name="filename">The filename of the palette to retrieve</param>
|
||||
/// <param name="name">The name of the palette to retrieve</param>
|
||||
/// <returns>A pointer to the requested palette if found, else nullptr.</returns>
|
||||
template <typename T>
|
||||
Palette<T>* PaletteList<T>::GetPaletteByName(const string& filename, const string& name)
|
||||
{
|
||||
if (auto palettes = GetPaletteListByFullPathOrFilename(filename))
|
||||
for (auto& palette : *palettes)
|
||||
if (palette.m_Name == name)
|
||||
return &palette;
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get the palette file with the specified filename in the map.
|
||||
/// </summary>
|
||||
/// <param name="filename">The filename of the palette to retrieve</param>
|
||||
/// <returns>A pointer to the requested palette if found, else nullptr.</returns>
|
||||
template <typename T>
|
||||
vector<Palette<T>>* PaletteList<T>::GetPaletteListByFilename(const string& filename)
|
||||
{
|
||||
auto filenameonly = GetFilename(filename);
|
||||
|
||||
for (auto& palettes : s_Palettes)
|
||||
if (GetFilename(palettes.first) == filenameonly)
|
||||
return &palettes.second;
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get the palette file with the specified full path and filename in the map.
|
||||
/// </summary>
|
||||
/// <param name="filename">The full path and filename of the palette to retrieve</param>
|
||||
/// <returns>A pointer to the requested palette if found, else nullptr.</returns>
|
||||
template <typename T>
|
||||
vector<Palette<T>>* PaletteList<T>::GetPaletteListByFullPath(const string& filename)
|
||||
{
|
||||
auto palettes = s_Palettes.find(filename);
|
||||
|
||||
if (palettes != s_Palettes.end() && !palettes->second.empty())
|
||||
return &palettes->second;
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get the palette file with the specified full path and filename in the map.
|
||||
/// If that does not work, try getting it with the filename alone.
|
||||
/// </summary>
|
||||
/// <param name="filename">The full path and filename or just the filename of the palette to retrieve</param>
|
||||
/// <returns>A pointer to the requested palette if found, else nullptr.</returns>
|
||||
template <typename T>
|
||||
vector<Palette<T>>* PaletteList<T>::GetPaletteListByFullPathOrFilename(const string& filename)
|
||||
{
|
||||
auto p = GetPaletteListByFullPath(filename);
|
||||
|
||||
if (!p)
|
||||
p = GetPaletteListByFilename(filename);
|
||||
|
||||
return p;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get full path and filename of the pallete with the specified filename
|
||||
/// </summary>
|
||||
/// <param name="filename">The filename only of the palette to retrieve</param>
|
||||
/// <returns>A pointer to the requested palette if found, else nullptr.</returns>
|
||||
template <typename T>
|
||||
string PaletteList<T>::GetFullPathFromFilename(const string& filename)
|
||||
{
|
||||
auto filenameonly = GetFilename(filename);
|
||||
|
||||
for (auto& palettes : s_Palettes)
|
||||
if (GetFilename(palettes.first) == filenameonly)
|
||||
return palettes.first;
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get a copy of the palette at a specified index in the specified file in the map
|
||||
/// with its hue adjusted by the specified amount.
|
||||
/// </summary>
|
||||
/// <param name="filename">The filename of the palette to retrieve</param>
|
||||
/// <param name="i">The index of the palette to read.</param>
|
||||
/// <param name="hue">The hue adjustment to apply</param>
|
||||
/// <param name="palette">The palette to store the output</param>
|
||||
/// <returns>True if successful, else false.</returns>
|
||||
template <typename T>
|
||||
bool PaletteList<T>::GetHueAdjustedPalette(const string& filename, size_t i, T hue, Palette<T>& palette)
|
||||
{
|
||||
if (auto unadjustedPal = GetPaletteByFullPath(filename, i))
|
||||
{
|
||||
unadjustedPal->MakeHueAdjustedPalette(palette, hue);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Clear the palette list and reset the initialization state.
|
||||
/// </summary>
|
||||
template <typename T>
|
||||
void PaletteList<T>::Clear()
|
||||
{
|
||||
s_Palettes.clear();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get the size of the palettes map.
|
||||
/// This will be the number of files read.
|
||||
/// </summary>
|
||||
/// <returns>The size of the palettes map</returns>
|
||||
template <typename T>
|
||||
size_t PaletteList<T>::Size() { return s_Palettes.size(); }
|
||||
|
||||
/// <summary>
|
||||
/// Get the size of specified palette vector in the palettes map.
|
||||
/// </summary>
|
||||
/// <param name="index">The index of the palette in the map to retrieve</param>
|
||||
/// <returns>The size of the palette vector at the specified index in the palettes map</returns>
|
||||
template <typename T>
|
||||
size_t PaletteList<T>::Size(size_t index)
|
||||
{
|
||||
size_t i = 0;
|
||||
auto p = s_Palettes.begin();
|
||||
|
||||
while (i < index && p != s_Palettes.end())
|
||||
{
|
||||
++i;
|
||||
++p;
|
||||
}
|
||||
|
||||
return p->second.size();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get the size of specified palette vector in the palettes map.
|
||||
/// </summary>
|
||||
/// <param name="s">The filename of the palette in the map to retrieve</param>
|
||||
/// <returns>The size of the palette vector at the specified index in the palettes map</returns>
|
||||
template <typename T>
|
||||
size_t PaletteList<T>::Size(const string& s)
|
||||
{
|
||||
return s_Palettes[s].size();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get the name of specified palette in the palettes map.
|
||||
/// </summary>
|
||||
/// <param name="index">The index of the palette in the map to retrieve</param>
|
||||
/// <returns>The name of the palette vector at the specified index in the palettes map</returns>
|
||||
template <typename T>
|
||||
const string& PaletteList<T>::Name(size_t index)
|
||||
{
|
||||
size_t i = 0;
|
||||
auto p = s_Palettes.begin();
|
||||
|
||||
while (i < index && p != s_Palettes.end())
|
||||
{
|
||||
++i;
|
||||
++p;
|
||||
}
|
||||
|
||||
return p->first;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Determines whether at least one palette in the passed in palette file is modifiable,
|
||||
/// meaning whether the source colors have at least one element in them.
|
||||
/// </summary>
|
||||
/// <param name="filename">The full path to the existing palette file to search for a modifiable palette in</param>
|
||||
/// <returns>True if at least one palette in the file was modifiable, else false.</returns>
|
||||
template <typename T>
|
||||
bool PaletteList<T>::IsModifiable(const string& filename)
|
||||
{
|
||||
if (auto palFile = GetPaletteListByFullPathOrFilename(filename))
|
||||
{
|
||||
for (auto& pal : *palFile)
|
||||
if (!pal.m_SourceColors.empty())
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get a const ref to the underlying static palette structure.
|
||||
/// </summary>
|
||||
/// <returns>s_Palettes</returns>
|
||||
template <typename T>
|
||||
const map<string, vector<Palette<T>>>& PaletteList<T>::Palettes() const
|
||||
{
|
||||
return s_Palettes;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Saves an existing file to disk.
|
||||
/// </summary>
|
||||
/// <param name="filename">The full path to the existing palette file to save</param>
|
||||
/// <returns>True if successful, else false.</returns>
|
||||
template <typename T>
|
||||
bool PaletteList<T>::Save(const string& filename)
|
||||
{
|
||||
auto fullpath = GetFullPathFromFilename(filename);
|
||||
|
||||
try
|
||||
{
|
||||
size_t index = 0;
|
||||
ostringstream os;
|
||||
|
||||
if (auto palFile = GetPaletteListByFullPathOrFilename(filename))
|
||||
{
|
||||
ofstream f(fullpath);
|
||||
os << "<palettes>\n";
|
||||
|
||||
if (f.is_open())
|
||||
{
|
||||
for (auto& pal : *palFile)
|
||||
{
|
||||
os << "<palette number=\"" << index++ << "\" name=\"" << pal.m_Name << "\"";
|
||||
|
||||
if (!pal.m_SourceColors.empty())
|
||||
{
|
||||
os << " source_colors=\"";
|
||||
|
||||
for (auto& sc : pal.m_SourceColors)//Need to clamp these each from 0 to 1. Use our custom clamp funcs.//TODO
|
||||
os << sc.first << "," << sc.second.r << "," << sc.second.g << "," << sc.second.b << " ";
|
||||
|
||||
os << "\"";
|
||||
}
|
||||
|
||||
os << " data=\"";
|
||||
|
||||
for (int i = 0; i < 32; i++)
|
||||
{
|
||||
for (int j = 0; j < 8; j++)
|
||||
{
|
||||
size_t idx = 8 * i + j;
|
||||
os << "00";
|
||||
os << hex << setw(2) << setfill('0') << int(std::rint(pal[idx][0] * 255));
|
||||
os << hex << setw(2) << setfill('0') << int(std::rint(pal[idx][1] * 255));
|
||||
os << hex << setw(2) << setfill('0') << int(std::rint(pal[idx][2] * 255));
|
||||
}
|
||||
|
||||
os << "\n";
|
||||
}
|
||||
|
||||
os << "\"/>\n";
|
||||
}
|
||||
}
|
||||
|
||||
os << "</palettes>";
|
||||
string s = os.str();
|
||||
f.write(s.c_str(), s.size());
|
||||
return true;
|
||||
}
|
||||
}
|
||||
catch (const std::exception& e)
|
||||
{
|
||||
cout << "Error: Writing palette file " << fullpath << " failed: " << e.what() << "\n";
|
||||
return false;
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
cout << "Error: Writing palette file " << fullpath << " failed.\n";
|
||||
return false;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Parses an Xml node for all palettes present and stores them in the passed in palette vector.
|
||||
/// Note that although the Xml color values are expected to be 0-255, they are converted and
|
||||
/// stored as normalized colors, with values from 0-1.
|
||||
/// </summary>
|
||||
/// <param name="node">The parent note of all palettes in the Xml file.</param>
|
||||
/// <param name="filename">The name of the Xml file.</param>
|
||||
/// <param name="palettes">The vector to store the parsed palettes associated with this file in.</param>
|
||||
template <typename T>
|
||||
void PaletteList<T>::ParsePalettes(xmlNode* node, const shared_ptr<string>& filename, vector<Palette<T>>& palettes)
|
||||
{
|
||||
char* val;
|
||||
xmlAttrPtr attr;
|
||||
int index = 0;
|
||||
|
||||
while (node)
|
||||
{
|
||||
if (node->type == XML_ELEMENT_NODE && !Compare(node->name, "palette"))
|
||||
{
|
||||
attr = node->properties;
|
||||
Palette<T> palette;
|
||||
|
||||
while (attr)
|
||||
{
|
||||
val = reinterpret_cast<char*>(xmlGetProp(node, attr->name));
|
||||
|
||||
if (!Compare(attr->name, "data"))
|
||||
{
|
||||
string s1, s;
|
||||
size_t tmp, colorCount = 0;
|
||||
stringstream ss, temp(val); ss >> std::hex;
|
||||
s.reserve(2048);
|
||||
|
||||
while (temp >> s1)
|
||||
s += s1;
|
||||
|
||||
auto length = s.size();
|
||||
|
||||
for (size_t strIndex = 0; strIndex < length;)
|
||||
{
|
||||
strIndex += 2;//Skip past the 00 at the beginning of each RGB.
|
||||
|
||||
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].
|
||||
}
|
||||
|
||||
colorCount++;
|
||||
}
|
||||
}
|
||||
else if (!Compare(attr->name, "source_colors"))
|
||||
{
|
||||
string s(val);
|
||||
auto vec1 = Split(s, ' ');
|
||||
|
||||
for (auto& v : vec1)
|
||||
{
|
||||
auto vec2 = Split(v, ',');
|
||||
|
||||
if (vec2.size() == 4)
|
||||
{
|
||||
float d1 = Clamp(std::stof(vec2[0]), 0.0f, 1.0f);
|
||||
palette.m_SourceColors[d1] = v4F(Clamp(std::stof(vec2[1]), 0.0f, 1.0f),
|
||||
Clamp(std::stof(vec2[2]), 0.0f, 1.0f),
|
||||
Clamp(std::stof(vec2[3]), 0.0f, 1.0f), 1.0f);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (!Compare(attr->name, "name"))
|
||||
{
|
||||
palette.m_Name = string(val);
|
||||
}
|
||||
|
||||
xmlFree(val);
|
||||
attr = attr->next;
|
||||
}
|
||||
|
||||
palette.m_Index = index++;
|
||||
palette.m_Filename = filename;
|
||||
palettes.push_back(palette);
|
||||
}
|
||||
else
|
||||
{
|
||||
ParsePalettes(node->children, filename, palettes);
|
||||
}
|
||||
|
||||
node = node->next;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Parses a gradient file for all palettes present and stores them in the passed in palette vector.
|
||||
/// Note that although the Xml color values are expected to be 0-255, they are converted and
|
||||
/// stored as normalized colors, with values from 0-1.
|
||||
/// This format is from Ultra Fractal and Apophysis.
|
||||
/// </summary>
|
||||
/// <param name="buf">The data to parse.</param>
|
||||
/// <param name="filename">The name of the gradient file.</param>
|
||||
/// <param name="palettes">The vector to store the parsed palettes associated with this file in.</param>
|
||||
/// <returns>True if at least one palette is read, else false.</returns>
|
||||
template <typename T>
|
||||
bool PaletteList<T>::ParsePalettes(const string& buf, const shared_ptr<string>& filename, vector<Palette<T>>& palettes)
|
||||
{
|
||||
int paletteIndex = 0;
|
||||
size_t index = 0;
|
||||
string line;
|
||||
string name;
|
||||
bool reading = false;
|
||||
bool found = false;
|
||||
istringstream iss(buf);
|
||||
vector<string> splitVec;
|
||||
const char leftBrace = '{';
|
||||
const char rightBrace = '}';
|
||||
const string titleStr = "title=";
|
||||
const string indexStr = "index=";
|
||||
const string colorStr = "color=";
|
||||
const string titleDelStr = " =\"";
|
||||
const string colorDelStr = " =";
|
||||
Palette<T> palette;
|
||||
Color<T> col;
|
||||
palettes.clear();
|
||||
|
||||
while (std::getline(iss, line))
|
||||
{
|
||||
if (!reading && Contains(line, leftBrace))
|
||||
{
|
||||
reading = true;
|
||||
}
|
||||
else if (Contains(line, rightBrace))
|
||||
{
|
||||
if (found)
|
||||
palettes.push_back(palette);
|
||||
|
||||
reading = false;
|
||||
found = false;
|
||||
}
|
||||
|
||||
if (reading)
|
||||
{
|
||||
if (Find(line, titleStr))
|
||||
{
|
||||
splitVec = Split(line, titleDelStr, true);
|
||||
|
||||
if (splitVec.size() > 2)
|
||||
name = splitVec[1];
|
||||
}
|
||||
else if (Find(line, indexStr) && Find(line, colorStr))
|
||||
{
|
||||
if (!found)
|
||||
{
|
||||
index = 0;
|
||||
found = true;
|
||||
palette.Clear();
|
||||
palette.m_Index = paletteIndex++;
|
||||
palette.m_Name = name;
|
||||
palette.m_Filename = filename;
|
||||
}
|
||||
|
||||
splitVec = Split(line, colorDelStr, true);
|
||||
|
||||
if (splitVec.size() > 3 && index < 256)
|
||||
{
|
||||
int val = std::stoi(splitVec[3]);
|
||||
col.r = (val & 0xFF) / T(255);//Hex palette is [0..255], convert to [0..1].
|
||||
col.g = ((val >> 8) & 0xFF) / T(255);
|
||||
col.b = ((val >> 16) & 0xFF) / T(255);
|
||||
palette[index] = col;
|
||||
}
|
||||
|
||||
index++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return !palettes.empty();
|
||||
}
|
||||
|
||||
template EMBER_API class PaletteList<float>;
|
||||
|
||||
#ifdef DO_DOUBLE
|
||||
template EMBER_API class PaletteList<double>;
|
||||
#endif
|
||||
}
|
||||
+37
-297
@@ -1,6 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
#include "Palette.h"
|
||||
#include "Point.h"
|
||||
|
||||
/// <summary>
|
||||
/// PaletteList class.
|
||||
@@ -12,309 +13,48 @@ namespace EmberNs
|
||||
/// Holds a list of palettes read from an Xml file. Since the default list from flam3-palettes.xml is fairly large at 700 palettes,
|
||||
/// the list member is kept as a static. This class derives from EmberReport in order to report any errors that occurred while reading the Xml.
|
||||
/// Note that although the Xml color values are expected to be 0-255, they are converted and stored as normalized colors, with values from 0-1.
|
||||
/// Template argument expected to be float or double.
|
||||
/// This can hold read only palettes, as well as user created and modifiable ones.
|
||||
/// The key in the map is the fully qualified path and filename to each palette file.
|
||||
/// Despite the keys being full paths, the same filename cannot be inserted twice, even if they reside
|
||||
/// in different folders. Functions are provided to retrieve palette files via filename only, or full path.
|
||||
/// Template argument should always be float (which makes the templating of this class pointless).
|
||||
/// </summary>
|
||||
template <typename T>
|
||||
class EMBER_API PaletteList : public EmberReport
|
||||
class EMBER_API PaletteList : public EmberReport, public Singleton<PaletteList<T>>
|
||||
{
|
||||
public:
|
||||
static const char* m_DefaultFilename;
|
||||
const char* m_DefaultFilename = "flam3-palettes.xml";
|
||||
|
||||
/// <summary>
|
||||
/// Empty constructor which initializes the palette map with the default palette file.
|
||||
/// </summary>
|
||||
PaletteList()
|
||||
{
|
||||
Add(string(m_DefaultFilename));
|
||||
}
|
||||
|
||||
~PaletteList() = default;
|
||||
PaletteList(const PaletteList<T>& paletteList) = delete;
|
||||
|
||||
/// <summary>
|
||||
/// Read an Xml palette file into memory.
|
||||
/// This must be called before any palette file usage.
|
||||
/// </summary>
|
||||
/// <param name="filename">The full path to the file to read</param>
|
||||
/// <param name="force">If true, override the initialization state and force a read, else observe the initialization state.</param>
|
||||
/// <returns>Whether anything was read</returns>
|
||||
bool Add(const string& filename, bool force = false)
|
||||
{
|
||||
bool added = true;
|
||||
auto palettes = s_Palettes.insert(make_pair(filename, vector<Palette<T>>()));
|
||||
|
||||
if (force || palettes.second)
|
||||
{
|
||||
string buf;
|
||||
const char* loc = __FUNCTION__;
|
||||
|
||||
if (ReadFile(filename.c_str(), buf))
|
||||
{
|
||||
xmlDocPtr doc = xmlReadMemory(static_cast<const char*>(buf.data()), int(buf.size()), filename.c_str(), nullptr, XML_PARSE_NONET);
|
||||
|
||||
if (doc)
|
||||
{
|
||||
auto rootNode = xmlDocGetRootElement(doc);
|
||||
auto pfilename = shared_ptr<string>(new string(filename));
|
||||
palettes.first->second.clear();
|
||||
palettes.first->second.reserve(buf.size() / 2048);//Roughly what it takes per palette.
|
||||
ParsePalettes(rootNode, pfilename, palettes.first->second);
|
||||
xmlFreeDoc(doc);
|
||||
|
||||
if (palettes.first->second.empty())
|
||||
{
|
||||
added = false;//Reading failed, likely not a valid palette file.
|
||||
s_Palettes.erase(filename);
|
||||
AddToReport(string(loc) + " : Couldn't parse xml doc");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
added = false;
|
||||
s_Palettes.erase(filename);
|
||||
AddToReport(string(loc) + " : Couldn't load xml doc");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
added = false;
|
||||
s_Palettes.erase(filename);
|
||||
AddToReport(string(loc) + " : Couldn't read palette file " + filename);
|
||||
}
|
||||
}
|
||||
|
||||
return added;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get the palette at a random index in a random file in the map.
|
||||
/// </summary>
|
||||
Palette<T>* GetRandomPalette()
|
||||
{
|
||||
auto p = s_Palettes.begin();
|
||||
size_t i = 0, paletteFileIndex = QTIsaac<ISAAC_SIZE, ISAAC_INT>::LockedRand() % Size();
|
||||
|
||||
//Move p forward i elements.
|
||||
while (i < paletteFileIndex && p != s_Palettes.end())
|
||||
{
|
||||
++i;
|
||||
++p;
|
||||
}
|
||||
|
||||
if (i < Size())
|
||||
{
|
||||
size_t paletteIndex = QTIsaac<ISAAC_SIZE, ISAAC_INT>::LockedRand() % p->second.size();
|
||||
|
||||
if (paletteIndex < p->second.size())
|
||||
return &p->second[paletteIndex];
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get the palette at a specified index in the specified file in the map.
|
||||
/// </summary>
|
||||
/// <param name="filename">The filename of the palette to retrieve</param>
|
||||
/// <param name="i">The index of the palette to read. A value of -1 indicates a random palette.</param>
|
||||
/// <returns>A pointer to the requested palette if the index was in range, else nullptr.</returns>
|
||||
Palette<T>* GetPalette(const string& filename, size_t i)
|
||||
{
|
||||
auto& palettes = s_Palettes[filename];
|
||||
|
||||
if (!palettes.empty() && i < palettes.size())
|
||||
return &palettes[i];
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get a pointer to a palette with a specified name in the specified file in the map.
|
||||
/// </summary>
|
||||
/// <param name="filename">The filename of the palette to retrieve</param>
|
||||
/// <param name="name">The name of the palette to retrieve</param>
|
||||
/// <returns>A pointer to the palette if found, else nullptr</returns>
|
||||
Palette<T>* GetPaletteByName(const string& filename, const string& name)
|
||||
{
|
||||
for (auto& palettes : s_Palettes)
|
||||
if (palettes.first == filename)
|
||||
for (auto& palette : palettes.second)
|
||||
if (palette.m_Name == name)
|
||||
return &palette;
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get a copy of the palette at a specified index in the specified file in the map
|
||||
/// with its hue adjusted by the specified amount.
|
||||
/// </summary>
|
||||
/// <param name="filename">The filename of the palette to retrieve</param>
|
||||
/// <param name="i">The index of the palette to read.</param>
|
||||
/// <param name="hue">The hue adjustment to apply</param>
|
||||
/// <param name="palette">The palette to store the output</param>
|
||||
/// <returns>True if successful, else false.</returns>
|
||||
bool GetHueAdjustedPalette(const string& filename, size_t i, T hue, Palette<T>& palette)
|
||||
{
|
||||
bool b = false;
|
||||
|
||||
if (Palette<T>* unadjustedPal = GetPalette(filename, i))
|
||||
{
|
||||
unadjustedPal->MakeHueAdjustedPalette(palette, hue);
|
||||
b = true;
|
||||
}
|
||||
|
||||
return b;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Clear the palette list and reset the initialization state.
|
||||
/// </summary>
|
||||
void Clear()
|
||||
{
|
||||
s_Palettes.clear();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get the size of the palettes map.
|
||||
/// This will be the number of files read.
|
||||
/// </summary>
|
||||
/// <returns>The size of the palettes map</returns>
|
||||
size_t Size() { return s_Palettes.size(); }
|
||||
|
||||
/// <summary>
|
||||
/// Get the size of specified palette vector in the palettes map.
|
||||
/// </summary>
|
||||
/// <param name="index">The index of the palette in the map to retrieve</param>
|
||||
/// <returns>The size of the palette vector at the specified index in the palettes map</returns>
|
||||
size_t Size(size_t index)
|
||||
{
|
||||
size_t i = 0;
|
||||
auto p = s_Palettes.begin();
|
||||
|
||||
while (i < index && p != s_Palettes.end())
|
||||
{
|
||||
++i;
|
||||
++p;
|
||||
}
|
||||
|
||||
return p->second.size();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get the size of specified palette vector in the palettes map.
|
||||
/// </summary>
|
||||
/// <param name="s">The filename of the palette in the map to retrieve</param>
|
||||
/// <returns>The size of the palette vector at the specified index in the palettes map</returns>
|
||||
size_t Size(const string& s)
|
||||
{
|
||||
return s_Palettes[s].size();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get the name of specified palette in the palettes map.
|
||||
/// </summary>
|
||||
/// <param name="index">The index of the palette in the map to retrieve</param>
|
||||
/// <returns>The name of the palette vector at the specified index in the palettes map</returns>
|
||||
const string& Name(size_t index)
|
||||
{
|
||||
size_t i = 0;
|
||||
auto p = s_Palettes.begin();
|
||||
|
||||
while (i < index && p != s_Palettes.end())
|
||||
{
|
||||
++i;
|
||||
++p;
|
||||
}
|
||||
|
||||
return p->first;
|
||||
}
|
||||
bool AddPaletteFile(const string& filename, const vector<Palette<T>>& palettes);
|
||||
bool AddEmptyPaletteFile(const string& filename);
|
||||
bool AddPaletteToFile(const string& filename, const Palette<T>& palette);
|
||||
bool Replace(const string& filename, const Palette<T>& palette);
|
||||
bool Replace(const string& filename, const Palette<T>& palette, int index);
|
||||
bool Delete(const string& filename, int index);
|
||||
bool Add(const string& filename, bool force = false);
|
||||
Palette<T>* GetRandomPalette();
|
||||
Palette<T>* GetPaletteByFilename(const string& filename, size_t i);
|
||||
Palette<T>* GetPaletteByFullPath(const string& filename, size_t i);
|
||||
Palette<T>* GetPaletteByName(const string& filename, const string& name);
|
||||
vector<Palette<T>>* GetPaletteListByFilename(const string& filename);
|
||||
vector<Palette<T>>* GetPaletteListByFullPath(const string& filename);
|
||||
vector<Palette<T>>* GetPaletteListByFullPathOrFilename(const string& filename);
|
||||
string GetFullPathFromFilename(const string& filename);
|
||||
bool GetHueAdjustedPalette(const string& filename, size_t i, T hue, Palette<T>& palette);
|
||||
void Clear();
|
||||
size_t Size();
|
||||
size_t Size(size_t index);
|
||||
size_t Size(const string& s);
|
||||
const string& Name(size_t index);
|
||||
bool IsModifiable(const string& filename);
|
||||
const map<string, vector<Palette<T>>>& Palettes() const;
|
||||
|
||||
SINGLETON_DERIVED_DECL(PaletteList<T>);
|
||||
private:
|
||||
/// <summary>
|
||||
/// Parses an Xml node for all palettes present and stores them in the passed in palette vector.
|
||||
/// Note that although the Xml color values are expected to be 0-255, they are converted and
|
||||
/// stored as normalized colors, with values from 0-1.
|
||||
/// </summary>
|
||||
/// <param name="node">The parent note of all palettes in the Xml file.</param>
|
||||
/// <param name="filename">The name of the Xml file.</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)
|
||||
{
|
||||
bool hexError = false;
|
||||
char* val;
|
||||
const char* loc = __FUNCTION__;
|
||||
xmlAttrPtr attr;
|
||||
|
||||
while (node)
|
||||
{
|
||||
if (node->type == XML_ELEMENT_NODE && !Compare(node->name, "palette"))
|
||||
{
|
||||
attr = node->properties;
|
||||
Palette<T> palette;
|
||||
|
||||
while (attr)
|
||||
{
|
||||
val = reinterpret_cast<char*>(xmlGetProp(node, attr->name));
|
||||
|
||||
if (!Compare(attr->name, "data"))
|
||||
{
|
||||
int colorIndex = 0;
|
||||
uint r, g, b;
|
||||
int colorCount = 0;
|
||||
hexError = false;
|
||||
|
||||
do
|
||||
{
|
||||
int ret = sscanf_s(static_cast<char*>(&(val[colorIndex])), "00%2x%2x%2x", &r, &g, &b);
|
||||
|
||||
if (ret != 3)
|
||||
{
|
||||
AddToReport(string(loc) + " : Problem reading hexadecimal color data " + string(&val[colorIndex]));
|
||||
hexError = true;
|
||||
break;
|
||||
}
|
||||
|
||||
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++;
|
||||
}
|
||||
while (colorCount < COLORMAP_LENGTH);
|
||||
}
|
||||
else if (!Compare(attr->name, "number"))
|
||||
{
|
||||
palette.m_Index = atoi(val);
|
||||
}
|
||||
else if (!Compare(attr->name, "name"))
|
||||
{
|
||||
palette.m_Name = string(val);
|
||||
}
|
||||
|
||||
xmlFree(val);
|
||||
attr = attr->next;
|
||||
}
|
||||
|
||||
if (!hexError)
|
||||
{
|
||||
palette.m_Filename = filename;
|
||||
palettes.push_back(palette);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ParsePalettes(node->children, filename, palettes);
|
||||
}
|
||||
|
||||
node = node->next;
|
||||
}
|
||||
}
|
||||
|
||||
static map<string, vector<Palette<T>>> s_Palettes;//The map of filenames to vectors that store the palettes.
|
||||
PaletteList();
|
||||
bool Save(const string& filename);
|
||||
void ParsePalettes(xmlNode* node, const shared_ptr<string>& filename, vector<Palette<T>>& palettes);
|
||||
bool ParsePalettes(const string& buf, const shared_ptr<string>& filename, vector<Palette<T>>& palettes);
|
||||
map<string, vector<Palette<T>>> s_Palettes;//The map of filenames to vectors that store the palettes.
|
||||
};
|
||||
}
|
||||
|
||||
+221
-213
@@ -60,25 +60,6 @@ bool Renderer<T, bucketT>::AssignIterator()
|
||||
template <typename T, typename bucketT>
|
||||
void Renderer<T, bucketT>::ComputeBounds()
|
||||
{
|
||||
//size_t maxDEFilterWidth = 0;
|
||||
//Use type T to account for negative numbers which will occur with a larger supersample and smaller filter width.
|
||||
//The final value will be of type size_t.
|
||||
//m_GutterWidth = size_t(ClampGte<T>((T(m_SpatialFilter->FinalFilterWidth()) - T(Supersample())) / 2, 0));
|
||||
//
|
||||
////Check the size of the density estimation filter.
|
||||
////If the radius of the density estimation filter is greater than the
|
||||
////gutter width, have to pad with more. Otherwise, use the same value.
|
||||
//for (auto& ember : *m_EmbersP)
|
||||
// maxDEFilterWidth = std::max<size_t>(size_t(ceil(ember.m_MaxRadDE) * m_Ember.m_Supersample), maxDEFilterWidth);
|
||||
//
|
||||
////Need an extra ss = (int)floor(m_Supersample / 2.0) of pixels so that a local iteration count for DE can be determined.//SMOULDER
|
||||
//if (maxDEFilterWidth > 0)
|
||||
// maxDEFilterWidth += size_t(Floor<T>(m_Ember.m_Supersample / T(2)));
|
||||
//To have a fully present set of pixels for the spatial filter, must
|
||||
//add the DE filter width to the spatial filter width.//SMOULDER
|
||||
//m_DensityFilterOffset = maxDEFilterWidth;
|
||||
//m_GutterWidth += m_DensityFilterOffset;
|
||||
//
|
||||
//Original did a lot of work to compute a gutter that changes size based on various parameters, which seems to be of no benefit.
|
||||
//It also prevents the renderer from only performing filtering or final accum based on a filter parameter change, since that
|
||||
//change may have changed the gutter.
|
||||
@@ -354,9 +335,6 @@ eRenderStatus Renderer<T, bucketT>::Run(vector<byte>& finalImage, double time, s
|
||||
size_t i, temporalSample = 0;
|
||||
T deTime;
|
||||
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.
|
||||
if (!resume || accumOnly || filterAndAccumOnly)
|
||||
@@ -723,7 +701,7 @@ EmberImageComments Renderer<T, bucketT>::ImageComments(const EmberStats& stats,
|
||||
template <typename T, typename bucketT>
|
||||
void Renderer<T, bucketT>::MakeDmap(T colorScalar)
|
||||
{
|
||||
m_Ember.m_Palette.template MakeDmap<bucketT>(m_Dmap, colorScalar);
|
||||
m_Ember.m_Palette.template MakeDmap<bucketT>(m_Dmap, bucketT(colorScalar));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -866,48 +844,33 @@ eRenderStatus Renderer<T, bucketT>::LogScaleDensityFilter(bool forceOutput)
|
||||
size_t endRow = m_SuperRasH;
|
||||
size_t endCol = m_SuperRasW;
|
||||
//Timing t(4);
|
||||
//if (forceOutput)//Assume interactive render, so speed up at the expense of slight quality.
|
||||
//{
|
||||
// parallel_for(startRow, endRow, [&](size_t j)
|
||||
// {
|
||||
// if (!m_Abort)
|
||||
// {
|
||||
// size_t row = j * m_SuperRasW;
|
||||
// size_t rowEnd = row + endCol;
|
||||
// VectorizedLogScale(row, rowEnd);
|
||||
// }
|
||||
// });
|
||||
//}
|
||||
//else
|
||||
//Original didn't parallelize this, doing so gives a 50-75% speedup.
|
||||
//The value can be directly assigned, which is quicker than summing.
|
||||
parallel_for(startRow, endRow, size_t(1), [&](size_t j)
|
||||
{
|
||||
//Original didn't parallelize this, doing so gives a 50-75% speedup.
|
||||
//The value can be directly assigned, which is quicker than summing.
|
||||
parallel_for(startRow, endRow, [&](size_t j)
|
||||
size_t row = j * m_SuperRasW;
|
||||
size_t rowEnd = row + endCol;
|
||||
|
||||
if (!m_Abort)
|
||||
{
|
||||
size_t row = j * m_SuperRasW;
|
||||
size_t rowEnd = row + endCol;
|
||||
|
||||
if (!m_Abort)
|
||||
for (size_t i = row; i < rowEnd; i++)
|
||||
{
|
||||
for (size_t i = row; i < rowEnd; i++)
|
||||
//Check for visibility first before doing anything else to avoid all possible unnecessary calculations.
|
||||
if (m_HistBuckets[i].a != 0)
|
||||
{
|
||||
//Check for visibility first before doing anything else to avoid all possible unnecessary calculations.
|
||||
if (m_HistBuckets[i].a != 0)
|
||||
{
|
||||
bucketT logScale = (m_K1 * std::log(1 + m_HistBuckets[i].a * m_K2)) / m_HistBuckets[i].a;
|
||||
//Original did a temporary assignment, then *= logScale, then passed the result to bump_no_overflow().
|
||||
//Combine here into one operation for a slight speedup.
|
||||
//Vectorized version:
|
||||
bucketT* __restrict hist = glm::value_ptr(m_HistBuckets[i]);//Vectorizer can't tell these point to different locations.
|
||||
bucketT* __restrict acc = glm::value_ptr(m_AccumulatorBuckets[i]);
|
||||
bucketT logScale = (m_K1 * std::log(1 + m_HistBuckets[i].a * m_K2)) / m_HistBuckets[i].a;
|
||||
//Original did a temporary assignment, then *= logScale, then passed the result to bump_no_overflow().
|
||||
//Combine here into one operation for a slight speedup.
|
||||
//Vectorized version:
|
||||
bucketT* __restrict hist = glm::value_ptr(m_HistBuckets[i]);//Vectorizer can't tell these point to different locations.
|
||||
bucketT* __restrict acc = glm::value_ptr(m_AccumulatorBuckets[i]);
|
||||
|
||||
for (size_t v = 0; v < 4; v++)
|
||||
acc[v] = hist[v] * logScale;
|
||||
}
|
||||
for (size_t v = 0; v < 4; v++)
|
||||
acc[v] = hist[v] * logScale;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
//t.Toc(__FUNCTION__);
|
||||
return m_Abort ? eRenderStatus::RENDER_ABORT : eRenderStatus::RENDER_OK;
|
||||
}
|
||||
@@ -933,7 +896,7 @@ eRenderStatus Renderer<T, bucketT>::GaussianDensityFilter()
|
||||
intmax_t endCol = m_SuperRasW - (Supersample() - 1);
|
||||
size_t chunkSize = size_t(ceil(double(endRow - startRow) / double(threads)));
|
||||
//parallel_for scales very well, dividing the work almost perfectly among all processors.
|
||||
parallel_for(size_t(0), threads, [&] (size_t threadIndex)
|
||||
parallel_for(size_t(0), threads, size_t(1), [&] (size_t threadIndex)
|
||||
{
|
||||
size_t pixelNumber = 0;
|
||||
int localStartRow = int(std::min<size_t>(startRow + (threadIndex * chunkSize), endRow - 1));
|
||||
@@ -1118,7 +1081,7 @@ eRenderStatus Renderer<T, bucketT>::AccumulatorToFinalImage(byte* pixels, size_t
|
||||
//The original does it this way as well and it's roughly 11 times faster to do it this way than inline below with each pixel.
|
||||
if (EarlyClip())
|
||||
{
|
||||
parallel_for(size_t(0), m_SuperRasH, [&] (size_t j)
|
||||
parallel_for(size_t(0), m_SuperRasH, size_t(1), [&] (size_t j)
|
||||
{
|
||||
auto rowStart = m_AccumulatorBuckets.data() + (j * m_SuperRasW);//Pull out of inner loop for optimization.
|
||||
auto rowEnd = rowStart + m_SuperRasW;
|
||||
@@ -1141,7 +1104,7 @@ eRenderStatus Renderer<T, bucketT>::AccumulatorToFinalImage(byte* pixels, size_t
|
||||
//otherwise artifacts that resemble page tearing will occur in an interactive run. It's
|
||||
//critical to never exit this loop prematurely.
|
||||
//for (size_t j = 0; j < FinalRasH(); j++)//Keep around for debugging.
|
||||
parallel_for(size_t(0), FinalRasH(), [&](size_t j)
|
||||
parallel_for(size_t(0), FinalRasH(), size_t(1), [&](size_t j)
|
||||
{
|
||||
Color<bucketT> newBucket;
|
||||
size_t pixelsRowStart = (m_YAxisUp ? ((FinalRasH() - j) - 1) : j) * FinalRowSize();//Pull out of inner loop for optimization.
|
||||
@@ -1294,6 +1257,7 @@ EmberStats Renderer<T, bucketT>::Iterate(size_t iterCount, size_t temporalSample
|
||||
size_t totalItersPerThread = size_t(ceil(double(iterCount) / double(m_ThreadsToUse)));
|
||||
double percent, etaMs;
|
||||
EmberStats stats;
|
||||
//vector<double> accumTimes(4);
|
||||
|
||||
//Do this every iteration for an animation, or else do it once for a single image. CPU only.
|
||||
if (!m_LastIter)
|
||||
@@ -1302,106 +1266,91 @@ EmberStats Renderer<T, bucketT>::Iterate(size_t iterCount, size_t temporalSample
|
||||
m_ThreadEmbers.insert(m_ThreadEmbers.begin(), m_ThreadsToUse, m_Ember);
|
||||
}
|
||||
|
||||
#ifdef TG
|
||||
size_t threadIndex;
|
||||
|
||||
for (size_t i = 0; i < m_ThreadsToUse; i++)
|
||||
parallel_for(size_t(0), m_ThreadsToUse, size_t(1), [&] (size_t threadIndex)
|
||||
{
|
||||
threadIndex = i;
|
||||
m_TaskGroup.run([&, threadIndex] ()
|
||||
{
|
||||
#else
|
||||
parallel_for(size_t(0), m_ThreadsToUse, [&] (size_t threadIndex)
|
||||
{
|
||||
#endif
|
||||
#if defined(_WIN32)
|
||||
SetThreadPriority(GetCurrentThread(), int(m_Priority));
|
||||
SetThreadPriority(GetCurrentThread(), int(m_Priority));
|
||||
#elif defined(__APPLE__)
|
||||
sched_param sp = {0};
|
||||
sp.sched_priority = m_Priority;
|
||||
pthread_setschedparam(pthread_self(), SCHED_RR, &sp);
|
||||
sched_param sp = {0};
|
||||
sp.sched_priority = int(m_Priority);
|
||||
pthread_setschedparam(pthread_self(), SCHED_RR, &sp);
|
||||
#else
|
||||
pthread_setschedprio(pthread_self(), int(m_Priority));
|
||||
pthread_setschedprio(pthread_self(), int(m_Priority));
|
||||
#endif
|
||||
//Timing t;
|
||||
IterParams<T> params;
|
||||
m_BadVals[threadIndex] = 0;
|
||||
params.m_Count = std::min(totalItersPerThread, SubBatchSize());
|
||||
params.m_Skip = FuseCount();
|
||||
//params.m_OneColDiv2 = m_CarToRas.OneCol() / 2;
|
||||
//params.m_OneRowDiv2 = m_CarToRas.OneRow() / 2;
|
||||
//Timing t;
|
||||
IterParams<T> params;
|
||||
m_BadVals[threadIndex] = 0;
|
||||
params.m_Count = std::min(totalItersPerThread, SubBatchSize());
|
||||
params.m_Skip = FuseCount();
|
||||
//params.m_OneColDiv2 = m_CarToRas.OneCol() / 2;
|
||||
//params.m_OneRowDiv2 = m_CarToRas.OneRow() / 2;
|
||||
|
||||
//Sub batch iterations, loop 2.
|
||||
for (m_SubBatch[threadIndex] = 0; (m_SubBatch[threadIndex] < totalItersPerThread) && !m_Abort; m_SubBatch[threadIndex] += params.m_Count)
|
||||
//Sub batch iterations, loop 2.
|
||||
for (m_SubBatch[threadIndex] = 0; (m_SubBatch[threadIndex] < totalItersPerThread) && !m_Abort; m_SubBatch[threadIndex] += params.m_Count)
|
||||
{
|
||||
//Must recalculate the number of iters to run on each sub batch because the last batch will most likely have less than SubBatchSize iters.
|
||||
//For example, if 51,000 are requested, and the sbs is 10,000, it should run 5 sub batches of 10,000 iters, and one final sub batch of 1,000 iters.
|
||||
params.m_Count = std::min(params.m_Count, totalItersPerThread - m_SubBatch[threadIndex]);
|
||||
//Use first as random point, the rest are iterated points.
|
||||
//Note that this gets reset with a new random point for each subBatchSize iterations.
|
||||
//This helps correct if iteration happens to be on a bad trajectory.
|
||||
m_Samples[threadIndex][0].m_X = m_Rand[threadIndex].template Frand11<T>();
|
||||
m_Samples[threadIndex][0].m_Y = m_Rand[threadIndex].template Frand11<T>();
|
||||
m_Samples[threadIndex][0].m_Z = 0;//m_Ember.m_CamZPos;//Apo set this to 0, then made the user use special variations to kick it. It seems easier to just set it to zpos.
|
||||
m_Samples[threadIndex][0].m_ColorX = m_Rand[threadIndex].template Frand01<T>();
|
||||
//Finally, iterate.
|
||||
//t.Tic();
|
||||
//Iterating, loop 3.
|
||||
m_BadVals[threadIndex] += m_Iterator->Iterate(m_ThreadEmbers[threadIndex], params, m_Samples[threadIndex].data(), m_Rand[threadIndex]);
|
||||
//m_BadVals[threadIndex] += m_Iterator->Iterate(m_Ember, params, m_Samples[threadIndex].data(), m_Rand[threadIndex]);
|
||||
//iterationTime += t.Toc();
|
||||
|
||||
if (m_LockAccum)
|
||||
m_AccumCs.lock();
|
||||
|
||||
//t.Tic();
|
||||
//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);
|
||||
//accumTimes[threadIndex] += t.Toc();
|
||||
|
||||
if (m_LockAccum)
|
||||
m_AccumCs.unlock();
|
||||
|
||||
if (m_Callback && threadIndex == 0)
|
||||
{
|
||||
//Must recalculate the number of iters to run on each sub batch because the last batch will most likely have less than SubBatchSize iters.
|
||||
//For example, if 51,000 are requested, and the sbs is 10,000, it should run 5 sub batches of 10,000 iters, and one final sub batch of 1,000 iters.
|
||||
params.m_Count = std::min(params.m_Count, totalItersPerThread - m_SubBatch[threadIndex]);
|
||||
//Use first as random point, the rest are iterated points.
|
||||
//Note that this gets reset with a new random point for each subBatchSize iterations.
|
||||
//This helps correct if iteration happens to be on a bad trajectory.
|
||||
m_Samples[threadIndex][0].m_X = m_Rand[threadIndex].template Frand11<T>();
|
||||
m_Samples[threadIndex][0].m_Y = m_Rand[threadIndex].template Frand11<T>();
|
||||
m_Samples[threadIndex][0].m_Z = 0;//m_Ember.m_CamZPos;//Apo set this to 0, then made the user use special variations to kick it. It seems easier to just set it to zpos.
|
||||
m_Samples[threadIndex][0].m_ColorX = m_Rand[threadIndex].template Frand01<T>();
|
||||
//Finally, iterate.
|
||||
//t.Tic();
|
||||
//Iterating, loop 3.
|
||||
m_BadVals[threadIndex] += m_Iterator->Iterate(m_ThreadEmbers[threadIndex], params, m_Samples[threadIndex].data(), m_Rand[threadIndex]);
|
||||
//m_BadVals[threadIndex] += m_Iterator->Iterate(m_Ember, params, m_Samples[threadIndex].data(), m_Rand[threadIndex]);
|
||||
//iterationTime += t.Toc();
|
||||
|
||||
if (m_LockAccum)
|
||||
m_AccumCs.lock();
|
||||
|
||||
//t.Tic();
|
||||
//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);
|
||||
|
||||
//accumulationTime += t.Toc();
|
||||
if (m_LockAccum)
|
||||
m_AccumCs.unlock();
|
||||
|
||||
if (m_Callback && threadIndex == 0)
|
||||
{
|
||||
percent = 100.0 *
|
||||
percent = 100.0 *
|
||||
double
|
||||
(
|
||||
double
|
||||
(
|
||||
double
|
||||
(
|
||||
double
|
||||
(
|
||||
//Takes progress of current thread and multiplies by thread count.
|
||||
//This assumes the threads progress at roughly the same speed.
|
||||
double(m_LastIter + (m_SubBatch[threadIndex] * m_ThreadsToUse)) / double(ItersPerTemporalSample())
|
||||
) + temporalSample
|
||||
) / double(TemporalSamples())
|
||||
);
|
||||
double percentDiff = percent - m_LastIterPercent;
|
||||
double toc = m_ProgressTimer.Toc();
|
||||
//Takes progress of current thread and multiplies by thread count.
|
||||
//This assumes the threads progress at roughly the same speed.
|
||||
double(m_LastIter + (m_SubBatch[threadIndex] * m_ThreadsToUse)) / double(ItersPerTemporalSample())
|
||||
) + temporalSample
|
||||
) / double(TemporalSamples())
|
||||
);
|
||||
double percentDiff = percent - m_LastIterPercent;
|
||||
double toc = m_ProgressTimer.Toc();
|
||||
|
||||
if (percentDiff >= 10 || (toc > 1000 && percentDiff >= 1))//Call callback function if either 10% has passed, or one second (and 1%).
|
||||
{
|
||||
etaMs = ((100.0 - percent) / percent) * m_RenderTimer.Toc();
|
||||
if (percentDiff >= 10 || (toc > 1000 && percentDiff >= 1))//Call callback function if either 10% has passed, or one second (and 1%).
|
||||
{
|
||||
etaMs = ((100.0 - percent) / percent) * m_RenderTimer.Toc();
|
||||
|
||||
if (!m_Callback->ProgressFunc(m_Ember, m_ProgressParameter, percent, 0, etaMs))
|
||||
Abort();
|
||||
if (!m_Callback->ProgressFunc(m_Ember, m_ProgressParameter, percent, 0, etaMs))
|
||||
Abort();
|
||||
|
||||
m_LastIterPercent = percent;
|
||||
m_ProgressTimer.Tic();
|
||||
}
|
||||
m_LastIterPercent = percent;
|
||||
m_ProgressTimer.Tic();
|
||||
}
|
||||
}
|
||||
});
|
||||
#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_Badvals = std::accumulate(m_BadVals.begin(), m_BadVals.end(), 0ULL);
|
||||
stats.m_IterMs = m_IterTimer.Toc();
|
||||
//cout << "Accum time: " << std::accumulate(accumTimes.begin(), accumTimes.end(), 0.0) << endl;
|
||||
//t2.Toc(__FUNCTION__);
|
||||
return stats;
|
||||
}
|
||||
@@ -1458,31 +1407,31 @@ template <typename T, typename bucketT> DensityFilterBase* Renderer<T, bucketT>:
|
||||
/// Non-virtual ember wrappers, getters only.
|
||||
/// </summary>
|
||||
|
||||
template <typename T, typename bucketT> bool Renderer<T, bucketT>::XaosPresent() const { return m_Ember.XaosPresent(); }
|
||||
template <typename T, typename bucketT> size_t Renderer<T, bucketT>::Supersample() const { return m_Ember.m_Supersample; }
|
||||
template <typename T, typename bucketT> size_t Renderer<T, bucketT>::PaletteIndex() const { return m_Ember.PaletteIndex(); }
|
||||
template <typename T, typename bucketT> T Renderer<T, bucketT>::Time() const { return m_Ember.m_Time; }
|
||||
template <typename T, typename bucketT> T Renderer<T, bucketT>::Quality() const { return m_Ember.m_Quality; }
|
||||
template <typename T, typename bucketT> T Renderer<T, bucketT>::SpatialFilterRadius() const { return m_Ember.m_SpatialFilterRadius; }
|
||||
template <typename T, typename bucketT> T Renderer<T, bucketT>::PixelsPerUnit() const { return m_Ember.m_PixelsPerUnit; }
|
||||
template <typename T, typename bucketT> T Renderer<T, bucketT>::Zoom() const { return m_Ember.m_Zoom; }
|
||||
template <typename T, typename bucketT> T Renderer<T, bucketT>::CenterX() const { return m_Ember.m_CenterX; }
|
||||
template <typename T, typename bucketT> T Renderer<T, bucketT>::CenterY() const { return m_Ember.m_CenterY; }
|
||||
template <typename T, typename bucketT> T Renderer<T, bucketT>::Rotate() const { return m_Ember.m_Rotate; }
|
||||
template <typename T, typename bucketT> bucketT Renderer<T, bucketT>::Brightness() const { return bucketT(m_Ember.m_Brightness); }
|
||||
template <typename T, typename bucketT> bucketT Renderer<T, bucketT>::Gamma() const { return bucketT(m_Ember.m_Gamma); }
|
||||
template <typename T, typename bucketT> bucketT Renderer<T, bucketT>::Vibrancy() const { return bucketT(m_Ember.m_Vibrancy); }
|
||||
template <typename T, typename bucketT> bucketT Renderer<T, bucketT>::GammaThresh() const { return bucketT(m_Ember.m_GammaThresh); }
|
||||
template <typename T, typename bucketT> bucketT Renderer<T, bucketT>::HighlightPower() const { return bucketT(m_Ember.m_HighlightPower); }
|
||||
template <typename T, typename bucketT> Color<T> Renderer<T, bucketT>::Background() const { return m_Ember.m_Background; }
|
||||
template <typename T, typename bucketT> const Xform<T>* Renderer<T, bucketT>::Xforms() const { return m_Ember.Xforms(); }
|
||||
template <typename T, typename bucketT> Xform<T>* Renderer<T, bucketT>::NonConstXforms() { return m_Ember.NonConstXforms(); }
|
||||
template <typename T, typename bucketT> size_t Renderer<T, bucketT>::XformCount() const { return m_Ember.XformCount(); }
|
||||
template <typename T, typename bucketT> const Xform<T>* Renderer<T, bucketT>::FinalXform() const { return m_Ember.FinalXform(); }
|
||||
template <typename T, typename bucketT> Xform<T>* Renderer<T, bucketT>::NonConstFinalXform() { return m_Ember.NonConstFinalXform(); }
|
||||
template <typename T, typename bucketT> bool Renderer<T, bucketT>::UseFinalXform() const { return m_Ember.UseFinalXform(); }
|
||||
template <typename T, typename bucketT> const Palette<T>* Renderer<T, bucketT>::GetPalette() const { return &m_Ember.m_Palette; }
|
||||
template <typename T, typename bucketT> ePaletteMode Renderer<T, bucketT>::PaletteMode() const { return m_Ember.m_PaletteMode; }
|
||||
template <typename T, typename bucketT> bool Renderer<T, bucketT>::XaosPresent() const { return m_Ember.XaosPresent(); }
|
||||
template <typename T, typename bucketT> size_t Renderer<T, bucketT>::Supersample() const { return m_Ember.m_Supersample; }
|
||||
template <typename T, typename bucketT> size_t Renderer<T, bucketT>::PaletteIndex() const { return m_Ember.PaletteIndex(); }
|
||||
template <typename T, typename bucketT> T Renderer<T, bucketT>::Time() const { return m_Ember.m_Time; }
|
||||
template <typename T, typename bucketT> T Renderer<T, bucketT>::Quality() const { return m_Ember.m_Quality; }
|
||||
template <typename T, typename bucketT> T Renderer<T, bucketT>::SpatialFilterRadius() const { return m_Ember.m_SpatialFilterRadius; }
|
||||
template <typename T, typename bucketT> T Renderer<T, bucketT>::PixelsPerUnit() const { return m_Ember.m_PixelsPerUnit; }
|
||||
template <typename T, typename bucketT> T Renderer<T, bucketT>::Zoom() const { return m_Ember.m_Zoom; }
|
||||
template <typename T, typename bucketT> T Renderer<T, bucketT>::CenterX() const { return m_Ember.m_CenterX; }
|
||||
template <typename T, typename bucketT> T Renderer<T, bucketT>::CenterY() const { return m_Ember.m_CenterY; }
|
||||
template <typename T, typename bucketT> T Renderer<T, bucketT>::Rotate() const { return m_Ember.m_Rotate; }
|
||||
template <typename T, typename bucketT> bucketT Renderer<T, bucketT>::Brightness() const { return bucketT(m_Ember.m_Brightness); }
|
||||
template <typename T, typename bucketT> bucketT Renderer<T, bucketT>::Gamma() const { return bucketT(m_Ember.m_Gamma); }
|
||||
template <typename T, typename bucketT> bucketT Renderer<T, bucketT>::Vibrancy() const { return bucketT(m_Ember.m_Vibrancy); }
|
||||
template <typename T, typename bucketT> bucketT Renderer<T, bucketT>::GammaThresh() const { return bucketT(m_Ember.m_GammaThresh); }
|
||||
template <typename T, typename bucketT> bucketT Renderer<T, bucketT>::HighlightPower() const { return bucketT(m_Ember.m_HighlightPower); }
|
||||
template <typename T, typename bucketT> Color<T> Renderer<T, bucketT>::Background() const { return m_Ember.m_Background; }
|
||||
template <typename T, typename bucketT> const Xform<T>* Renderer<T, bucketT>::Xforms() const { return m_Ember.Xforms(); }
|
||||
template <typename T, typename bucketT> Xform<T>* Renderer<T, bucketT>::NonConstXforms() { return m_Ember.NonConstXforms(); }
|
||||
template <typename T, typename bucketT> size_t Renderer<T, bucketT>::XformCount() const { return m_Ember.XformCount(); }
|
||||
template <typename T, typename bucketT> const Xform<T>* Renderer<T, bucketT>::FinalXform() const { return m_Ember.FinalXform(); }
|
||||
template <typename T, typename bucketT> Xform<T>* Renderer<T, bucketT>::NonConstFinalXform() { return m_Ember.NonConstFinalXform(); }
|
||||
template <typename T, typename bucketT> bool Renderer<T, bucketT>::UseFinalXform() const { return m_Ember.UseFinalXform(); }
|
||||
template <typename T, typename bucketT> const Palette<float>* Renderer<T, bucketT>::GetPalette() const { return &m_Ember.m_Palette; }
|
||||
template <typename T, typename bucketT> ePaletteMode Renderer<T, bucketT>::PaletteMode() const { return m_Ember.m_PaletteMode; }
|
||||
|
||||
/// <summary>
|
||||
/// Virtual ember wrappers overridden from RendererBase, getters only.
|
||||
@@ -1545,53 +1494,52 @@ void Renderer<T, bucketT>::Accumulate(QTIsaac<ISAAC_SIZE, ISAAC_INT>& rand, Poin
|
||||
{
|
||||
size_t histIndex, intColorIndex, histSize = m_HistBuckets.size();
|
||||
bucketT colorIndex, colorIndexFrac;
|
||||
auto dmap = palette->m_Entries.data();
|
||||
|
||||
//It's critical to understand what's going on here as it's one of the most important parts of the algorithm.
|
||||
//A color value gets retrieved from the palette and
|
||||
//its RGB values are added to the existing RGB values in the histogram bucket.
|
||||
//Alpha is always 1 in the palettes, so that serves as the hit count.
|
||||
//This differs from the original since redundantly adding both an alpha component and a hit count is omitted.
|
||||
//This will eventually leave us with large values for pixels with many hits, which will be log scaled down later.
|
||||
//Original used a function called bump_no_overflow(). Just do a straight add because the type will always be float or double.
|
||||
//Doing so gives a 25% speed increase.
|
||||
//Splitting these conditionals into separate loops makes no speed difference.
|
||||
for (size_t i = 0; i < sampleCount && !m_Abort; i++)
|
||||
//Linear is a linear scale for when the color index is not a whole number, which is most of the time.
|
||||
//It uses a portion of the value of the index, and the remainder of the next index.
|
||||
//Example: index = 25.7
|
||||
//Fraction = 0.7
|
||||
//Color = (dmap[25] * 0.3) + (dmap[26] * 0.7)
|
||||
//Use overloaded addition and multiplication operators in vec4 to perform the accumulation.
|
||||
if (PaletteMode() == ePaletteMode::PALETTE_LINEAR)
|
||||
{
|
||||
Point<T> p(samples[i]);//Slightly faster to cache this.
|
||||
|
||||
if (Rotate() != 0)
|
||||
//It's critical to understand what's going on here as it's one of the most important parts of the algorithm.
|
||||
//A color value gets retrieved from the palette and
|
||||
//its RGB values are added to the existing RGB values in the histogram bucket.
|
||||
//Alpha is always 1 in the palettes, so that serves as the hit count.
|
||||
//This differs from the original since redundantly adding both an alpha component and a hit count is omitted.
|
||||
//This will eventually leave us with large values for pixels with many hits, which will be log scaled down later.
|
||||
//Original used a function called bump_no_overflow(). Just do a straight add because the type will always be float or double.
|
||||
//Doing so gives a 25% speed increase.
|
||||
//Splitting these conditionals into separate loops makes no speed difference.
|
||||
for (size_t i = 0; i < sampleCount && !m_Abort; i++)
|
||||
{
|
||||
T p00 = p.m_X - CenterX();
|
||||
T p11 = p.m_Y - m_Ember.m_RotCenterY;
|
||||
p.m_X = (p00 * m_RotMat.A()) + (p11 * m_RotMat.B()) + CenterX();
|
||||
p.m_Y = (p00 * m_RotMat.D()) + (p11 * m_RotMat.E()) + m_Ember.m_RotCenterY;
|
||||
}
|
||||
Point<T> p(samples[i]);//Slightly faster to cache this.
|
||||
|
||||
//Checking this first before converting gives better performance than converting and checking a single value, which the original did.
|
||||
//Second, an interesting optimization observation is that when keeping the bounds vars within m_CarToRas and calling its InBounds() member function,
|
||||
//rather than here as members, about a 7% speedup is achieved. This is possibly due to the fact that data from m_CarToRas is accessed
|
||||
//right after the call to Convert(), so some caching efficiencies get realized.
|
||||
if (m_CarToRas.InBounds(p))
|
||||
{
|
||||
if (p.m_VizAdjusted != 0)
|
||||
if (Rotate() != 0)
|
||||
{
|
||||
m_CarToRas.Convert(p, histIndex);
|
||||
T p00 = p.m_X - CenterX();
|
||||
T p11 = p.m_Y - m_Ember.m_RotCenterY;
|
||||
p.m_X = (p00 * m_RotMat.A()) + (p11 * m_RotMat.B()) + CenterX();
|
||||
p.m_Y = (p00 * m_RotMat.D()) + (p11 * m_RotMat.E()) + m_Ember.m_RotCenterY;
|
||||
}
|
||||
|
||||
//There is a very slim chance that a point will be right on the border and will technically be in bounds, passing the InBounds() test,
|
||||
//but ends up being mapped to a histogram bucket that is out of bounds due to roundoff error. Perform one final check before proceeding.
|
||||
//This will result in a few points at the very edges getting discarded, but prevents a crash and doesn't seem to make a speed difference.
|
||||
if (histIndex < histSize)
|
||||
//Checking this first before converting gives better performance than converting and checking a single value, which the original did.
|
||||
//Second, an interesting optimization observation is that when keeping the bounds vars within m_CarToRas and calling its InBounds() member function,
|
||||
//rather than here as members, about a 7% speedup is achieved. This is possibly due to the fact that data from m_CarToRas is accessed
|
||||
//right after the call to Convert(), so some caching efficiencies get realized.
|
||||
if (m_CarToRas.InBounds(p))
|
||||
{
|
||||
if (p.m_VizAdjusted != 0)
|
||||
{
|
||||
//Linear is a linear scale for when the color index is not a whole number, which is most of the time.
|
||||
//It uses a portion of the value of the index, and the remainder of the next index.
|
||||
//Example: index = 25.7
|
||||
//Fraction = 0.7
|
||||
//Color = (dmap[25] * 0.3) + (dmap[26] * 0.7)
|
||||
//Use overloaded addition and multiplication operators in vec4 to perform the accumulation.
|
||||
if (PaletteMode() == ePaletteMode::PALETTE_LINEAR)
|
||||
m_CarToRas.Convert(p, histIndex);
|
||||
|
||||
//There is a very slim chance that a point will be right on the border and will technically be in bounds, passing the InBounds() test,
|
||||
//but ends up being mapped to a histogram bucket that is out of bounds due to roundoff error. Perform one final check before proceeding.
|
||||
//This will result in a few points at the very edges getting discarded, but prevents a crash and doesn't seem to make a speed difference.
|
||||
if (histIndex < histSize)
|
||||
{
|
||||
colorIndex = bucketT(p.m_ColorX) * COLORMAP_LENGTH;
|
||||
colorIndex = bucketT(p.m_ColorX) * COLORMAP_LENGTH_MINUS_1;
|
||||
intColorIndex = size_t(colorIndex);
|
||||
|
||||
if (intColorIndex < 0)
|
||||
@@ -1609,19 +1557,73 @@ void Renderer<T, bucketT>::Accumulate(QTIsaac<ISAAC_SIZE, ISAAC_INT>& rand, Poin
|
||||
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)
|
||||
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
|
||||
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)//Duplicate of above, but for step mode.
|
||||
{
|
||||
for (size_t i = 0; i < sampleCount && !m_Abort; i++)
|
||||
{
|
||||
Point<T> p(samples[i]);//Slightly faster to cache this.
|
||||
|
||||
if (Rotate() != 0)
|
||||
{
|
||||
T p00 = p.m_X - CenterX();
|
||||
T p11 = p.m_Y - m_Ember.m_RotCenterY;
|
||||
p.m_X = (p00 * m_RotMat.A()) + (p11 * m_RotMat.B()) + CenterX();
|
||||
p.m_Y = (p00 * m_RotMat.D()) + (p11 * m_RotMat.E()) + m_Ember.m_RotCenterY;
|
||||
}
|
||||
|
||||
if (m_CarToRas.InBounds(p))
|
||||
{
|
||||
if (p.m_VizAdjusted != 0)
|
||||
{
|
||||
m_CarToRas.Convert(p, histIndex);
|
||||
|
||||
if (histIndex < histSize)
|
||||
{
|
||||
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_MINUS_1), 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)
|
||||
m_HistBuckets[histIndex] += dmap[intColorIndex];
|
||||
{
|
||||
hist[0] += pal[0];
|
||||
hist[1] += pal[1];
|
||||
hist[2] += pal[2];
|
||||
hist[3] += pal[3];
|
||||
}
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1641,7 +1643,13 @@ template <typename T, typename bucketT>
|
||||
void Renderer<T, bucketT>::AddToAccum(const tvec4<bucketT, glm::defaultp>& bucket, intmax_t i, intmax_t ii, intmax_t j, intmax_t jj)
|
||||
{
|
||||
if (j + jj >= 0 && j + jj < intmax_t(m_SuperRasH) && i + ii >= 0 && i + ii < intmax_t(m_SuperRasW))
|
||||
m_AccumulatorBuckets[(i + ii) + ((j + jj) * m_SuperRasW)] += bucket;
|
||||
{
|
||||
auto* __restrict accum = m_AccumulatorBuckets.data() + ((i + ii) + ((j + jj) * m_SuperRasW));//For vectorizer, results in a 33% speedup.
|
||||
accum->r += bucket.r;
|
||||
accum->g += bucket.g;
|
||||
accum->b += bucket.b;
|
||||
accum->a += bucket.a;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
+27
-27
@@ -107,33 +107,33 @@ public:
|
||||
virtual DensityFilterBase* GetDensityFilter() override;
|
||||
|
||||
//Non-virtual ember wrappers, getters only.
|
||||
inline bool XaosPresent() const;
|
||||
inline size_t Supersample() const;
|
||||
inline size_t PaletteIndex() const;
|
||||
inline T Time() const;
|
||||
inline T Quality() const;
|
||||
inline T SpatialFilterRadius() const;
|
||||
inline T PixelsPerUnit() const;
|
||||
inline T Zoom() const;
|
||||
inline T CenterX() const;
|
||||
inline T CenterY() const;
|
||||
inline T Rotate() const;
|
||||
inline T Hue() const;
|
||||
inline bucketT Brightness() const;
|
||||
inline bucketT Contrast() const;
|
||||
inline bucketT Gamma() const;
|
||||
inline bucketT Vibrancy() const;
|
||||
inline bucketT GammaThresh() const;
|
||||
inline bucketT HighlightPower() const;
|
||||
inline Color<T> Background() const;
|
||||
inline const Xform<T>* Xforms() const;
|
||||
inline Xform<T>* NonConstXforms();
|
||||
inline size_t XformCount() const;
|
||||
inline const Xform<T>* FinalXform() const;
|
||||
inline Xform<T>* NonConstFinalXform();
|
||||
inline bool UseFinalXform() const;
|
||||
inline const Palette<T>* GetPalette() const;
|
||||
inline ePaletteMode PaletteMode() const;
|
||||
inline bool XaosPresent() const;
|
||||
inline size_t Supersample() const;
|
||||
inline size_t PaletteIndex() const;
|
||||
inline T Time() const;
|
||||
inline T Quality() const;
|
||||
inline T SpatialFilterRadius() const;
|
||||
inline T PixelsPerUnit() const;
|
||||
inline T Zoom() const;
|
||||
inline T CenterX() const;
|
||||
inline T CenterY() const;
|
||||
inline T Rotate() const;
|
||||
inline T Hue() const;
|
||||
inline bucketT Brightness() const;
|
||||
inline bucketT Contrast() const;
|
||||
inline bucketT Gamma() const;
|
||||
inline bucketT Vibrancy() const;
|
||||
inline bucketT GammaThresh() const;
|
||||
inline bucketT HighlightPower() const;
|
||||
inline Color<T> Background() const;
|
||||
inline const Xform<T>* Xforms() const;
|
||||
inline Xform<T>* NonConstXforms();
|
||||
inline size_t XformCount() const;
|
||||
inline const Xform<T>* FinalXform() const;
|
||||
inline Xform<T>* NonConstFinalXform();
|
||||
inline bool UseFinalXform() const;
|
||||
inline const Palette<float>* GetPalette() const;
|
||||
inline ePaletteMode PaletteMode() const;
|
||||
|
||||
//Virtual ember wrappers overridden from RendererBase, getters only.
|
||||
virtual size_t TemporalSamples() const override;
|
||||
|
||||
@@ -229,7 +229,6 @@ protected:
|
||||
vector<size_t> m_SubBatch;
|
||||
vector<size_t> m_BadVals;
|
||||
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;
|
||||
Timing m_RenderTimer, m_IterTimer, m_ProgressTimer;
|
||||
};
|
||||
|
||||
+42
-34
@@ -62,10 +62,11 @@ public:
|
||||
/// <param name="palettePath">The full path and filename of the palette file</param>
|
||||
/// <param name="renderer">A pre-constructed renderer to use. The caller should not delete this.</param>
|
||||
SheepTools(const string& palettePath, Renderer<T, bucketT>* renderer)
|
||||
: m_VariationList(VariationList<T>::Instance())
|
||||
: m_VariationList(VariationList<T>::Instance()),
|
||||
m_PaletteList(PaletteList<float>::Instance())
|
||||
{
|
||||
Timing t;
|
||||
m_PaletteList.Add(palettePath);
|
||||
m_PaletteList->Add(palettePath);
|
||||
m_Renderer = unique_ptr<Renderer<T, bucketT>>(renderer);
|
||||
m_Rand = QTIsaac<ISAAC_SIZE, ISAAC_INT>(ISAAC_INT(t.Tic()), ISAAC_INT(t.Tic() * 2), ISAAC_INT(t.Tic() * 3));
|
||||
}
|
||||
@@ -90,8 +91,8 @@ public:
|
||||
ember.AddXform(xform2);
|
||||
ember.AddXform(xform3);
|
||||
|
||||
if (m_PaletteList.Size())
|
||||
ember.m_Palette = *m_PaletteList.GetRandomPalette();
|
||||
if (m_PaletteList->Size())
|
||||
ember.m_Palette = *m_PaletteList->GetRandomPalette();
|
||||
|
||||
return ember;
|
||||
}
|
||||
@@ -365,8 +366,8 @@ public:
|
||||
}
|
||||
else//Randomize palette only.
|
||||
{
|
||||
if (m_PaletteList.Size())
|
||||
ember.m_Palette = *m_PaletteList.GetRandomPalette();
|
||||
if (m_PaletteList->Size())
|
||||
ember.m_Palette = *m_PaletteList->GetRandomPalette();
|
||||
|
||||
//If the palette retrieval fails, skip the mutation.
|
||||
if (ember.m_Palette.m_Index >= 0)
|
||||
@@ -424,7 +425,6 @@ public:
|
||||
size_t i;
|
||||
T t;
|
||||
ostringstream os;
|
||||
char ministr[32];
|
||||
|
||||
if (crossMode == eCrossMode::CROSS_NOT_SPECIFIED)
|
||||
{
|
||||
@@ -463,8 +463,7 @@ public:
|
||||
for (i = 0; i < emberOut.TotalXformCount(); i++)
|
||||
emberOut.GetTotalXform(i)->DeleteMotionElements();
|
||||
|
||||
sprintf_s(ministr, 32, "%7.5g", t);
|
||||
os << "cross interpolate " << ministr;
|
||||
os << "cross interpolate " << std::to_string(t);
|
||||
}
|
||||
else//Alternate mode.
|
||||
{
|
||||
@@ -599,7 +598,6 @@ public:
|
||||
int var, samed, multid, samepost;
|
||||
glm::length_t i, j, k, n;
|
||||
size_t varCount = m_VariationList->Size();
|
||||
Palette<T> palette;
|
||||
static size_t xformDistrib[] =
|
||||
{
|
||||
2, 2, 2, 2,
|
||||
@@ -610,8 +608,8 @@ public:
|
||||
};
|
||||
ember.Clear();
|
||||
|
||||
if (m_PaletteList.Size())
|
||||
ember.m_Palette = *m_PaletteList.GetRandomPalette();
|
||||
if (m_PaletteList->Size())
|
||||
ember.m_Palette = *m_PaletteList->GetRandomPalette();
|
||||
|
||||
ember.m_Time = 0;
|
||||
ember.m_Interp = eInterp::EMBER_INTERP_LINEAR;
|
||||
@@ -865,8 +863,8 @@ public:
|
||||
for (i = 0; i < m_Renderer->FinalDimensions(); i++)
|
||||
{
|
||||
m_Hist[(p[0] * res / 256) +
|
||||
(p[1] * res / 256) * res +
|
||||
(p[2] * res / 256) * res * res]++;//A specific histogram index representing the sum of R,G,B values.
|
||||
(p[1] * res / 256) * res +
|
||||
(p[2] * res / 256) * res * res]++;//A specific histogram index representing the sum of R,G,B values.
|
||||
p += m_Renderer->PixelSize();//Advance the pointer by 1 pixel.
|
||||
}
|
||||
|
||||
@@ -886,9 +884,9 @@ public:
|
||||
{
|
||||
if (changePalette)
|
||||
{
|
||||
if (m_PaletteList.Size())
|
||||
if (m_PaletteList->Size())
|
||||
{
|
||||
ember.m_Palette = *m_PaletteList.GetRandomPalette();
|
||||
ember.m_Palette = *m_PaletteList->GetRandomPalette();
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -953,7 +951,8 @@ public:
|
||||
/// <param name="ember">The ember to rotate</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>
|
||||
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;
|
||||
|
||||
@@ -970,7 +969,7 @@ public:
|
||||
}
|
||||
|
||||
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.
|
||||
}
|
||||
|
||||
@@ -981,8 +980,10 @@ public:
|
||||
/// <param name="embers">The embers to interpolate</param>
|
||||
/// <param name="result">The result of the interpolation</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>
|
||||
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;
|
||||
|
||||
@@ -1016,9 +1017,15 @@ public:
|
||||
m_EdgeSpun[1].m_Time = 1;
|
||||
//Call this first to establish the asymmetric reference angles.
|
||||
Interpolater<T>::AsymmetricRefAngles(m_EdgeSpun, 2);
|
||||
|
||||
//Rotate the aligned xforms.
|
||||
m_EdgeSpun[0].RotateAffines(-blend * 360);
|
||||
m_EdgeSpun[1].RotateAffines(-blend * 360);
|
||||
if (rotations)
|
||||
{
|
||||
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);
|
||||
}
|
||||
|
||||
@@ -1037,11 +1044,13 @@ public:
|
||||
/// <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="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.
|
||||
Loop(parent, result, blend);
|
||||
Loop(parent, result, blend, cw);
|
||||
|
||||
//Apply the template if necessary.
|
||||
if (templ)
|
||||
@@ -1052,14 +1061,12 @@ public:
|
||||
result.m_Interp = eInterp::EMBER_INTERP_LINEAR;
|
||||
result.m_PaletteInterp = ePaletteInterp::INTERP_HSV;
|
||||
//Create the edit doc xml.
|
||||
sprintf_s(temp, 50, "rotate %g", blend * 360.0);
|
||||
result.ClearEdit();
|
||||
result.m_Edits = m_EmberToXml.CreateNewEditdoc(&parent, nullptr, temp, m_Nick, m_Url, m_Id, m_Comment, m_SheepGen, m_SheepId);
|
||||
//Subpixel jitter.
|
||||
Offset(result, m_OffsetX, m_OffsetY);
|
||||
//Make the name of the flame the time.
|
||||
sprintf_s(temp, 50, "%f", result.m_Time);
|
||||
result.m_Name = string(temp);
|
||||
result.m_Name = std::to_string(result.m_Time);
|
||||
}
|
||||
|
||||
/// <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="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>
|
||||
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.
|
||||
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
|
||||
|
||||
@@ -1089,14 +1099,12 @@ public:
|
||||
//Set ember parameters accordingly.
|
||||
result.m_Time = T(frame);
|
||||
//Create the edit doc xml.
|
||||
sprintf_s(temp, 50, "interpolate %g", blend * 360.0);
|
||||
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);
|
||||
//Subpixel jitter.
|
||||
Offset(result, m_OffsetX, m_OffsetY);
|
||||
//Make the name of the flame the time.
|
||||
sprintf_s(temp, 50, "%f", result.m_Time);
|
||||
result.m_Name = string(temp);
|
||||
result.m_Name = std::to_string(result.m_Time);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -1358,7 +1366,7 @@ private:
|
||||
unique_ptr<XaosIterator<T>> m_XaosIterator = make_unique<XaosIterator<T>>();
|
||||
unique_ptr<Renderer<T, bucketT>> m_Renderer;
|
||||
QTIsaac<ISAAC_SIZE, ISAAC_INT> m_Rand;
|
||||
PaletteList<T> m_PaletteList;
|
||||
shared_ptr<PaletteList<float>> m_PaletteList;
|
||||
shared_ptr<VariationList<T>> m_VariationList;
|
||||
};
|
||||
}
|
||||
|
||||
+103
-42
@@ -53,6 +53,18 @@ static inline bool Contains(c& container, const T& val)
|
||||
return std::find_if(container.begin(), container.end(), [&](const T & t) -> bool { return t == val; }) != container.end();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Thin specialization for string because the compiler can't figure out the container template type
|
||||
/// when passing string to the function above.
|
||||
/// </summary>
|
||||
/// <param name="str1">The string to call find() on</param>
|
||||
/// <param name="str2">The string to search for</param>
|
||||
/// <returns>True if str2 was present at least once, else false.</returns>
|
||||
static bool Find(const string& str1, const string& str2)
|
||||
{
|
||||
return str1.find(str2) != string::npos;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Thin wrapper around computing the total size of a vector.
|
||||
/// </summary>
|
||||
@@ -222,6 +234,28 @@ public:
|
||||
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:
|
||||
/// <summary>
|
||||
/// 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 +289,39 @@ protected:
|
||||
/// Open a file in binary mode and read its entire contents into a vector of bytes. Optionally null terminate.
|
||||
/// </summary>
|
||||
/// <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>
|
||||
/// <returns>True if successfully read and populated, else false</returns>
|
||||
static bool ReadFile(const char* filename, string& buf, bool nullTerminate = true)
|
||||
{
|
||||
bool b = false;
|
||||
FILE* f = nullptr;
|
||||
|
||||
try
|
||||
{
|
||||
fopen_s(&f, filename, "rb");//Open in binary mode.
|
||||
ifstream ifs;
|
||||
ifs.exceptions(ifstream::failbit);
|
||||
ifs.open(filename, ios::binary | ios::ate);
|
||||
|
||||
if (f)
|
||||
if (auto pos = ifs.tellg())//Ensure it exists and wasn't empty.
|
||||
{
|
||||
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
|
||||
buf.resize(pos + streampos(nullTerminate ? 1 : 0));
|
||||
ifs.seekg(0, ios::beg);
|
||||
ifs.read(&buf[0], pos);
|
||||
|
||||
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 (nullTerminate)//Optionally NULL terminate if they want to treat it as a string.
|
||||
buf[buf.size() - 1] = 0;
|
||||
|
||||
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;
|
||||
|
||||
b = true;//Success.
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fclose(f);
|
||||
f = nullptr;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
catch (const std::exception& e)
|
||||
{
|
||||
cout << "Error: Reading file " << filename << " failed: " << e.what() << "\n";
|
||||
b = false;
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
cout << "Error: Reading file " << filename << " failed.\n";
|
||||
b = false;
|
||||
}
|
||||
|
||||
if (f)
|
||||
fclose(f);
|
||||
|
||||
return b;
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -820,6 +829,18 @@ static inline T NormalizeDeg180(T angle)
|
||||
return a;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Determine whether the passed in string ends with the passed in suffix, case sensitive.
|
||||
/// </summary>
|
||||
/// <param name="str">The string to test</param>
|
||||
/// <param name="suffix">The string to test for</param>
|
||||
/// <returns>True if str ends with suffix, else false.</returns>
|
||||
static bool EndsWith(const std::string& str, const std::string& suffix)
|
||||
{
|
||||
return str.size() >= suffix.size() &&
|
||||
str.compare(str.size() - suffix.size(), suffix.size(), suffix) == 0;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Return a lower case copy of a string.
|
||||
/// </summary>
|
||||
@@ -875,21 +896,61 @@ static string Trim(const string& str, char ch = ' ')
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Return a copy of a file path string with the path portion removed.
|
||||
/// Split a string into tokens and place them in a vector.
|
||||
/// </summary>
|
||||
/// <param name="str">The string to split</param>
|
||||
/// <param name="del">The delimiter to split the string on. Note that only one character has to match, so this is a good way to use multiple delimiters</param>
|
||||
/// <param name="removeEmpty">True to omit empty strings, else false to keep them.</param>
|
||||
/// <returns>The vector containing the split tokens</returns>
|
||||
static vector<std::string> Split(const string& str, const string& del, bool removeEmpty = false)
|
||||
{
|
||||
int current = 0;
|
||||
int next = -1;
|
||||
vector<string> vec;
|
||||
|
||||
do
|
||||
{
|
||||
current = next + 1;
|
||||
next = int(str.find_first_of(del, current));
|
||||
string ent(Trim(str.substr(current, next - current)));
|
||||
|
||||
if (!removeEmpty || ent.length() > 0)
|
||||
vec.push_back(ent);
|
||||
}
|
||||
while (next != int(string::npos));
|
||||
|
||||
return vec;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Return a copy of a file path string with the file portion removed.
|
||||
/// </summary>
|
||||
/// <param name="filename">The string to retrieve the path from</param>
|
||||
/// <returns>The path portion of the string</returns>
|
||||
static string GetPath(const string& filename)
|
||||
{
|
||||
const size_t lastSlash = filename.find_last_of("\\/");
|
||||
|
||||
if (std::string::npos != lastSlash)
|
||||
return filename.substr(0, lastSlash + 1);
|
||||
else
|
||||
return filename;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Return a copy of a file path string with the path portion removed.
|
||||
/// </summary>
|
||||
/// <param name="filename">The string to retrieve the filename from</param>
|
||||
/// <returns>The filename portion of the string</returns>
|
||||
static string GetFilename(const string& filename)
|
||||
{
|
||||
string s;
|
||||
const size_t lastSlash = filename.find_last_of("\\/");
|
||||
|
||||
if (std::string::npos != lastSlash)
|
||||
s = filename.substr(0, lastSlash + 1);
|
||||
return filename.substr(lastSlash + 1, filename.size() - lastSlash);
|
||||
else
|
||||
s = "";
|
||||
|
||||
return s;
|
||||
return filename;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
+334
-319
@@ -44,329 +44,334 @@ enum class eVariationAssignType : et
|
||||
/// </summary>
|
||||
enum class eVariationId : et
|
||||
{
|
||||
VAR_ARCH ,
|
||||
VAR_AUGER ,
|
||||
VAR_BARYCENTROID ,
|
||||
VAR_BCIRCLE ,
|
||||
VAR_BCOLLIDE ,
|
||||
VAR_BENT ,
|
||||
VAR_BENT2 ,
|
||||
VAR_BIPOLAR ,
|
||||
VAR_BISPLIT ,
|
||||
VAR_BLADE ,
|
||||
VAR_BLADE3D ,
|
||||
VAR_BLOB ,
|
||||
VAR_BLOB2 ,
|
||||
VAR_BLOB3D ,
|
||||
VAR_BLOCKY ,
|
||||
VAR_BLUR ,
|
||||
VAR_BLUR_CIRCLE ,
|
||||
VAR_BLUR_HEART ,
|
||||
VAR_BLUR_LINEAR ,
|
||||
VAR_BLUR_PIXELIZE ,
|
||||
VAR_BLUR_SQUARE ,
|
||||
VAR_BLUR_ZOOM ,
|
||||
VAR_BLUR3D ,
|
||||
VAR_BMOD ,
|
||||
VAR_BOARDERS ,
|
||||
VAR_BOARDERS2 ,
|
||||
VAR_BSWIRL ,
|
||||
VAR_BTRANSFORM ,
|
||||
VAR_BUBBLE ,
|
||||
VAR_BUBBLE2 ,
|
||||
VAR_BUBBLET3D ,
|
||||
VAR_BUTTERFLY ,
|
||||
VAR_BWRAPS ,
|
||||
VAR_CARDIOID ,
|
||||
VAR_CELL ,
|
||||
VAR_CHECKS ,
|
||||
VAR_CIRCLEBLUR ,
|
||||
VAR_CIRCLECROP ,
|
||||
VAR_CIRCLELINEAR ,
|
||||
VAR_CIRCLERAND ,
|
||||
VAR_CIRCLETRANS1 ,
|
||||
VAR_CIRCLIZE ,
|
||||
VAR_CIRCLIZE2 ,
|
||||
VAR_CIRCUS ,
|
||||
VAR_COLLIDEOSCOPE ,
|
||||
VAR_CONIC ,
|
||||
VAR_COS ,
|
||||
VAR_COS_WRAP ,
|
||||
VAR_COSH ,
|
||||
VAR_COSHQ ,
|
||||
VAR_COSINE ,
|
||||
VAR_COSQ ,
|
||||
VAR_COT ,
|
||||
VAR_COTH ,
|
||||
VAR_COTHQ ,
|
||||
VAR_COTQ ,
|
||||
VAR_CPOW ,
|
||||
VAR_CPOW2 ,
|
||||
VAR_CRACKLE ,
|
||||
VAR_CRESCENTS ,
|
||||
VAR_CROB ,
|
||||
VAR_CROP ,
|
||||
VAR_CROPN ,
|
||||
VAR_CROSS ,
|
||||
VAR_CSC ,
|
||||
VAR_CSCH ,
|
||||
VAR_CSCHQ ,
|
||||
VAR_CSCQ ,
|
||||
VAR_CUBIC3D ,
|
||||
VAR_ARCH,
|
||||
VAR_AUGER ,
|
||||
VAR_BARYCENTROID,
|
||||
VAR_BCIRCLE ,
|
||||
VAR_BCOLLIDE ,
|
||||
VAR_BENT ,
|
||||
VAR_BENT2 ,
|
||||
VAR_BIPOLAR ,
|
||||
VAR_BISPLIT ,
|
||||
VAR_BLADE ,
|
||||
VAR_BLADE3D ,
|
||||
VAR_BLOB ,
|
||||
VAR_BLOB2 ,
|
||||
VAR_BLOB3D ,
|
||||
VAR_BLOCKY ,
|
||||
VAR_BLUR ,
|
||||
VAR_BLUR_CIRCLE ,
|
||||
VAR_BLUR_HEART,
|
||||
VAR_BLUR_LINEAR ,
|
||||
VAR_BLUR_PIXELIZE,
|
||||
VAR_BLUR_SQUARE ,
|
||||
VAR_BLUR_ZOOM ,
|
||||
VAR_BLUR3D ,
|
||||
VAR_BMOD ,
|
||||
VAR_BOARDERS ,
|
||||
VAR_BOARDERS2 ,
|
||||
VAR_BSWIRL ,
|
||||
VAR_BTRANSFORM ,
|
||||
VAR_BUBBLE ,
|
||||
VAR_BUBBLE2 ,
|
||||
VAR_BUBBLET3D ,
|
||||
VAR_BUTTERFLY ,
|
||||
VAR_BWRAPS ,
|
||||
VAR_CARDIOID ,
|
||||
VAR_CELL ,
|
||||
VAR_CHECKS ,
|
||||
VAR_CIRCLEBLUR ,
|
||||
VAR_CIRCLECROP,
|
||||
VAR_CIRCLELINEAR,
|
||||
VAR_CIRCLERAND,
|
||||
VAR_CIRCLESPLIT,
|
||||
VAR_CIRCLETRANS1,
|
||||
VAR_CIRCLIZE ,
|
||||
VAR_CIRCLIZE2 ,
|
||||
VAR_CIRCUS,
|
||||
VAR_COLLIDEOSCOPE,
|
||||
VAR_CONIC ,
|
||||
VAR_COS ,
|
||||
VAR_COS_WRAP ,
|
||||
VAR_COSH ,
|
||||
VAR_COSHQ,
|
||||
VAR_COSINE ,
|
||||
VAR_COSQ,
|
||||
VAR_COT ,
|
||||
VAR_COTH ,
|
||||
VAR_COTHQ ,
|
||||
VAR_COTQ ,
|
||||
VAR_CPOW ,
|
||||
VAR_CPOW2 ,
|
||||
VAR_CRACKLE ,
|
||||
VAR_CRESCENTS ,
|
||||
VAR_CROB ,
|
||||
VAR_CROP ,
|
||||
VAR_CROPN ,
|
||||
VAR_CROSS ,
|
||||
VAR_CSC ,
|
||||
VAR_CSCH ,
|
||||
VAR_CSCHQ ,
|
||||
VAR_CSCQ ,
|
||||
VAR_CUBIC3D ,
|
||||
VAR_CUBIC_LATTICE3D,
|
||||
VAR_CURL ,
|
||||
VAR_CURL3D ,
|
||||
VAR_CURL_SP ,
|
||||
VAR_CURVATURE ,
|
||||
VAR_CURVE ,
|
||||
VAR_CYLINDER ,
|
||||
VAR_DELTA_A ,
|
||||
VAR_DEPTH ,
|
||||
VAR_DIAMOND ,
|
||||
VAR_DISC ,
|
||||
VAR_DISC2 ,
|
||||
VAR_DISC3D ,
|
||||
VAR_ECLIPSE ,
|
||||
VAR_ECOLLIDE ,
|
||||
VAR_EDISC ,
|
||||
VAR_EJULIA ,
|
||||
VAR_ELLIPTIC ,
|
||||
VAR_EMOD ,
|
||||
VAR_EMOTION ,
|
||||
VAR_ENNEPERS ,
|
||||
VAR_EPISPIRAL ,
|
||||
VAR_EPUSH ,
|
||||
VAR_ERF ,
|
||||
VAR_EROTATE ,
|
||||
VAR_ESCALE ,
|
||||
VAR_ESCHER ,
|
||||
VAR_ESTIQ ,
|
||||
VAR_ESWIRL ,
|
||||
VAR_EX ,
|
||||
VAR_EXP ,
|
||||
VAR_EXPO ,
|
||||
VAR_EXPONENTIAL ,
|
||||
VAR_EXTRUDE ,
|
||||
VAR_EYEFISH ,
|
||||
VAR_FALLOFF ,
|
||||
VAR_FALLOFF2 ,
|
||||
VAR_FALLOFF3 ,
|
||||
VAR_FAN ,
|
||||
VAR_FAN2 ,
|
||||
VAR_FARBLUR ,
|
||||
VAR_FDISC ,
|
||||
VAR_FIBONACCI ,
|
||||
VAR_FIBONACCI2 ,
|
||||
VAR_FISHEYE ,
|
||||
VAR_FLATTEN ,
|
||||
VAR_FLIP_CIRCLE ,
|
||||
VAR_FLIP_Y ,
|
||||
VAR_FLOWER ,
|
||||
VAR_FLUX ,
|
||||
VAR_FOCI ,
|
||||
VAR_FOCI3D ,
|
||||
VAR_FOURTH ,
|
||||
VAR_FUNNEL ,
|
||||
VAR_GAMMA ,
|
||||
VAR_GAUSSIAN_BLUR ,
|
||||
VAR_GDOFFS ,
|
||||
VAR_GLYNNIA ,
|
||||
VAR_GLYNNSIM1 ,
|
||||
VAR_GLYNNSIM2 ,
|
||||
VAR_GLYNNSIM3 ,
|
||||
VAR_GRIDOUT ,
|
||||
VAR_HANDKERCHIEF ,
|
||||
VAR_HEART ,
|
||||
VAR_HEAT ,
|
||||
VAR_HEMISPHERE ,
|
||||
VAR_HEXAPLAY3D ,
|
||||
VAR_HEXCROP ,
|
||||
VAR_HEXES ,
|
||||
VAR_HEXNIX3D ,
|
||||
VAR_HO ,
|
||||
VAR_HOLE ,
|
||||
VAR_HORSESHOE ,
|
||||
VAR_HYPERBOLIC ,
|
||||
VAR_HYPERTILE ,
|
||||
VAR_HYPERTILE1 ,
|
||||
VAR_HYPERTILE2 ,
|
||||
VAR_HYPERTILE3D ,
|
||||
VAR_HYPERTILE3D1 ,
|
||||
VAR_HYPERTILE3D2 ,
|
||||
VAR_IDISC ,
|
||||
VAR_INTERFERENCE2 ,
|
||||
VAR_JAC_CN ,
|
||||
VAR_JAC_DN ,
|
||||
VAR_JAC_SN ,
|
||||
VAR_JULIA ,
|
||||
VAR_JULIA3D ,
|
||||
VAR_JULIA3DQ ,
|
||||
VAR_JULIA3DZ ,
|
||||
VAR_JULIAC ,
|
||||
VAR_JULIAN ,
|
||||
VAR_JULIAN2 ,
|
||||
VAR_JULIAN3DX ,
|
||||
VAR_JULIANAB ,
|
||||
VAR_JULIAQ ,
|
||||
VAR_JULIASCOPE ,
|
||||
VAR_KALEIDOSCOPE ,
|
||||
VAR_LAZY_TRAVIS ,
|
||||
VAR_LAZYSUSAN ,
|
||||
VAR_LINE ,
|
||||
VAR_LINEAR ,
|
||||
VAR_LINEAR_T ,
|
||||
VAR_LINEAR_T3D ,
|
||||
VAR_CURL ,
|
||||
VAR_CURL3D ,
|
||||
VAR_CURL_SP,
|
||||
VAR_CURVATURE,
|
||||
VAR_CURVE ,
|
||||
VAR_CYLINDER ,
|
||||
VAR_CYLINDER2,
|
||||
VAR_DELTA_A ,
|
||||
VAR_DEPTH,
|
||||
VAR_DIAMOND ,
|
||||
VAR_DISC ,
|
||||
VAR_DISC2 ,
|
||||
VAR_DISC3D ,
|
||||
VAR_ECLIPSE ,
|
||||
VAR_ECOLLIDE ,
|
||||
VAR_EDISC ,
|
||||
VAR_EJULIA ,
|
||||
VAR_ELLIPTIC ,
|
||||
VAR_EMOD ,
|
||||
VAR_EMOTION ,
|
||||
VAR_ENNEPERS ,
|
||||
VAR_EPISPIRAL ,
|
||||
VAR_EPUSH ,
|
||||
VAR_ERF ,
|
||||
VAR_EROTATE ,
|
||||
VAR_ESCALE ,
|
||||
VAR_ESCHER ,
|
||||
VAR_ESTIQ,
|
||||
VAR_ESWIRL ,
|
||||
VAR_EX ,
|
||||
VAR_EXP ,
|
||||
VAR_EXPO ,
|
||||
VAR_EXPONENTIAL ,
|
||||
VAR_EXTRUDE ,
|
||||
VAR_EYEFISH ,
|
||||
VAR_FALLOFF ,
|
||||
VAR_FALLOFF2 ,
|
||||
VAR_FALLOFF3 ,
|
||||
VAR_FAN ,
|
||||
VAR_FAN2 ,
|
||||
VAR_FARBLUR,
|
||||
VAR_FDISC ,
|
||||
VAR_FIBONACCI ,
|
||||
VAR_FIBONACCI2 ,
|
||||
VAR_FISHEYE ,
|
||||
VAR_FLATTEN ,
|
||||
VAR_FLIP_CIRCLE ,
|
||||
VAR_FLIP_Y ,
|
||||
VAR_FLOWER ,
|
||||
VAR_FLUX ,
|
||||
VAR_FOCI ,
|
||||
VAR_FOCI3D ,
|
||||
VAR_FOURTH,
|
||||
VAR_FUNNEL ,
|
||||
VAR_GAMMA ,
|
||||
VAR_GAUSSIAN_BLUR,
|
||||
VAR_GDOFFS,
|
||||
VAR_GLYNNIA ,
|
||||
VAR_GLYNNSIM1 ,
|
||||
VAR_GLYNNSIM2 ,
|
||||
VAR_GLYNNSIM3 ,
|
||||
VAR_GRIDOUT ,
|
||||
VAR_HANDKERCHIEF,
|
||||
VAR_HEART ,
|
||||
VAR_HEAT,
|
||||
VAR_HEMISPHERE ,
|
||||
VAR_HEXAPLAY3D ,
|
||||
VAR_HEXCROP ,
|
||||
VAR_HEXES ,
|
||||
VAR_HEXNIX3D ,
|
||||
VAR_HO ,
|
||||
VAR_HOLE ,
|
||||
VAR_HORSESHOE ,
|
||||
VAR_HYPERBOLIC ,
|
||||
VAR_HYPERTILE ,
|
||||
VAR_HYPERTILE1 ,
|
||||
VAR_HYPERTILE2 ,
|
||||
VAR_HYPERTILE3D ,
|
||||
VAR_HYPERTILE3D1,
|
||||
VAR_HYPERTILE3D2,
|
||||
VAR_IDISC ,
|
||||
VAR_INTERFERENCE2,
|
||||
VAR_JAC_CN ,
|
||||
VAR_JAC_DN ,
|
||||
VAR_JAC_SN ,
|
||||
VAR_JULIA ,
|
||||
VAR_JULIA3D ,
|
||||
VAR_JULIA3DQ ,
|
||||
VAR_JULIA3DZ ,
|
||||
VAR_JULIAC,
|
||||
VAR_JULIAN ,
|
||||
VAR_JULIAN2 ,
|
||||
VAR_JULIAN3DX,
|
||||
VAR_JULIANAB,
|
||||
VAR_JULIAQ ,
|
||||
VAR_JULIASCOPE ,
|
||||
VAR_KALEIDOSCOPE,
|
||||
VAR_LAZY_TRAVIS ,
|
||||
VAR_LAZYSUSAN ,
|
||||
VAR_LINE ,
|
||||
VAR_LINEAR ,
|
||||
VAR_LINEAR_T ,
|
||||
VAR_LINEAR_T3D ,
|
||||
//VAR_LINEAR_XZ ,
|
||||
//VAR_LINEAR_YZ ,
|
||||
VAR_LINEAR3D ,
|
||||
VAR_LISSAJOUS ,
|
||||
VAR_LOG ,
|
||||
VAR_LOG_DB ,
|
||||
VAR_LOQ ,
|
||||
VAR_LOONIE ,
|
||||
VAR_LOONIE2 ,
|
||||
VAR_LOONIE3 ,
|
||||
VAR_LOONIE3D ,
|
||||
VAR_MASK ,
|
||||
VAR_MCARPET ,
|
||||
VAR_MIRROR_X ,
|
||||
VAR_MIRROR_Y ,
|
||||
VAR_MIRROR_Z ,
|
||||
VAR_MOBIQ ,
|
||||
VAR_MOBIUS ,
|
||||
VAR_MOBIUS_STRIP ,
|
||||
VAR_MOBIUSN ,
|
||||
VAR_MODULUS ,
|
||||
VAR_MURL ,
|
||||
VAR_MURL2 ,
|
||||
VAR_NBLUR ,
|
||||
VAR_NGON ,
|
||||
VAR_NOISE ,
|
||||
VAR_NPOLAR ,
|
||||
VAR_OCTAGON ,
|
||||
VAR_OCTAPOL ,
|
||||
VAR_ORTHO ,
|
||||
VAR_OSCILLOSCOPE ,
|
||||
VAR_OVOID ,
|
||||
VAR_OVOID3D ,
|
||||
VAR_PARABOLA ,
|
||||
VAR_PDJ ,
|
||||
VAR_PERSPECTIVE ,
|
||||
VAR_PETAL ,
|
||||
VAR_PHOENIX_JULIA ,
|
||||
VAR_PIE ,
|
||||
VAR_PIE3D ,
|
||||
VAR_POINCARE ,
|
||||
VAR_POINCARE3D ,
|
||||
VAR_POLAR ,
|
||||
VAR_POLAR2 ,
|
||||
VAR_POLYNOMIAL ,
|
||||
VAR_POPCORN ,
|
||||
VAR_POPCORN2 ,
|
||||
VAR_POPCORN23D ,
|
||||
VAR_POW_BLOCK ,
|
||||
VAR_POWER ,
|
||||
VAR_PRESSURE_WAVE ,
|
||||
VAR_PROSE3D ,
|
||||
VAR_PSPHERE ,
|
||||
VAR_Q_ODE ,
|
||||
VAR_RADIAL_BLUR ,
|
||||
VAR_RATIONAL3 ,
|
||||
VAR_RAYS ,
|
||||
VAR_RBLUR ,
|
||||
VAR_RECTANGLES ,
|
||||
VAR_RINGS ,
|
||||
VAR_RINGS2 ,
|
||||
VAR_RIPPLE ,
|
||||
VAR_RIPPLED ,
|
||||
VAR_ROTATE_X ,
|
||||
VAR_ROTATE_Y ,
|
||||
VAR_ROTATE_Z ,
|
||||
VAR_ROUNDSPHER ,
|
||||
VAR_ROUNDSPHER3D ,
|
||||
VAR_SCRY ,
|
||||
VAR_SCRY3D ,
|
||||
VAR_SEC ,
|
||||
VAR_SECANT2 ,
|
||||
VAR_SECH ,
|
||||
VAR_SECHQ ,
|
||||
VAR_SECQ ,
|
||||
VAR_SEPARATION ,
|
||||
VAR_SHRED_RAD ,
|
||||
VAR_SHRED_LIN ,
|
||||
VAR_SIGMOID ,
|
||||
VAR_SIN ,
|
||||
VAR_SINEBLUR ,
|
||||
VAR_SINH ,
|
||||
VAR_SINHQ ,
|
||||
VAR_SINQ ,
|
||||
VAR_SINTRANGE ,
|
||||
VAR_SINUS_GRID ,
|
||||
VAR_SINUSOIDAL ,
|
||||
VAR_SINUSOIDAL3D ,
|
||||
VAR_LINEAR3D ,
|
||||
VAR_LISSAJOUS ,
|
||||
VAR_LOG ,
|
||||
VAR_LOG_DB ,
|
||||
VAR_LOQ ,
|
||||
VAR_LOONIE ,
|
||||
VAR_LOONIE2 ,
|
||||
VAR_LOONIE3 ,
|
||||
VAR_LOONIE3D ,
|
||||
VAR_MASK ,
|
||||
VAR_MCARPET ,
|
||||
VAR_MIRROR_X,
|
||||
VAR_MIRROR_Y,
|
||||
VAR_MIRROR_Z,
|
||||
VAR_MOBIQ,
|
||||
VAR_MOBIUS ,
|
||||
VAR_MOBIUS_STRIP,
|
||||
VAR_MOBIUSN ,
|
||||
VAR_MODULUS ,
|
||||
VAR_MURL ,
|
||||
VAR_MURL2 ,
|
||||
VAR_NBLUR ,
|
||||
VAR_NGON ,
|
||||
VAR_NOISE ,
|
||||
VAR_NPOLAR ,
|
||||
VAR_OCTAGON ,
|
||||
VAR_OCTAPOL ,
|
||||
VAR_ORTHO ,
|
||||
VAR_OSCILLOSCOPE,
|
||||
VAR_OVOID ,
|
||||
VAR_OVOID3D ,
|
||||
VAR_PARABOLA ,
|
||||
VAR_PDJ ,
|
||||
VAR_PERSPECTIVE ,
|
||||
VAR_PETAL ,
|
||||
VAR_PHOENIX_JULIA,
|
||||
VAR_PIE ,
|
||||
VAR_PIE3D ,
|
||||
VAR_POINCARE ,
|
||||
VAR_POINCARE3D ,
|
||||
VAR_POLAR ,
|
||||
VAR_POLAR2 ,
|
||||
VAR_POLYNOMIAL ,
|
||||
VAR_POPCORN ,
|
||||
VAR_POPCORN2 ,
|
||||
VAR_POPCORN23D ,
|
||||
VAR_POW_BLOCK ,
|
||||
VAR_POWER ,
|
||||
VAR_PRESSURE_WAVE,
|
||||
VAR_PROSE3D ,
|
||||
VAR_PSPHERE ,
|
||||
VAR_Q_ODE,
|
||||
VAR_RADIAL_BLUR ,
|
||||
VAR_RATIONAL3 ,
|
||||
VAR_RAYS ,
|
||||
VAR_RBLUR,
|
||||
VAR_RECTANGLES ,
|
||||
VAR_RINGS ,
|
||||
VAR_RINGS2 ,
|
||||
VAR_RIPPLE ,
|
||||
VAR_RIPPLED ,
|
||||
VAR_ROTATE_X,
|
||||
VAR_ROTATE_Y,
|
||||
VAR_ROTATE_Z,
|
||||
VAR_ROUNDSPHER ,
|
||||
VAR_ROUNDSPHER3D,
|
||||
VAR_SCRY ,
|
||||
VAR_SCRY3D ,
|
||||
VAR_SEC ,
|
||||
VAR_SECANT2 ,
|
||||
VAR_SECH ,
|
||||
VAR_SECHQ,
|
||||
VAR_SECQ,
|
||||
VAR_SEPARATION ,
|
||||
VAR_SHRED_RAD ,
|
||||
VAR_SHRED_LIN ,
|
||||
VAR_SIGMOID ,
|
||||
VAR_SIN ,
|
||||
VAR_SINEBLUR ,
|
||||
VAR_SINH ,
|
||||
VAR_SINHQ ,
|
||||
VAR_SINQ ,
|
||||
VAR_SINTRANGE,
|
||||
VAR_SINUS_GRID ,
|
||||
VAR_SINUSOIDAL ,
|
||||
VAR_SINUSOIDAL3D,
|
||||
//VAR_SMARTCROP ,
|
||||
VAR_SPHERICAL ,
|
||||
VAR_SPHERICAL3D ,
|
||||
VAR_SPHERICALN ,
|
||||
VAR_SPHERIVOID ,
|
||||
VAR_SPHYP3D ,
|
||||
VAR_SPIRAL ,
|
||||
VAR_SPIRAL_WING ,
|
||||
VAR_SPIROGRAPH ,
|
||||
VAR_SPLIT ,
|
||||
VAR_SPLIT_BRDR ,
|
||||
VAR_SPLITS ,
|
||||
VAR_SPLITS3D ,
|
||||
VAR_SQUARE ,
|
||||
VAR_SQUARE3D ,
|
||||
VAR_SQUARIZE ,
|
||||
VAR_SQUIRREL ,
|
||||
VAR_SQUISH ,
|
||||
VAR_SSCHECKS ,
|
||||
VAR_STARBLUR ,
|
||||
VAR_STRIPES ,
|
||||
VAR_STWIN ,
|
||||
VAR_SUPER_SHAPE ,
|
||||
VAR_SUPER_SHAPE3D ,
|
||||
VAR_SVF ,
|
||||
VAR_SWIRL ,
|
||||
VAR_SYNTH ,
|
||||
VAR_TAN ,
|
||||
VAR_TANCOS ,
|
||||
VAR_TANGENT ,
|
||||
VAR_TANH ,
|
||||
VAR_TANHQ ,
|
||||
VAR_TANQ ,
|
||||
VAR_TARGET ,
|
||||
VAR_TAURUS ,
|
||||
VAR_TRADE ,
|
||||
VAR_TRUCHET ,
|
||||
VAR_TWINTRIAN ,
|
||||
VAR_TWO_FACE ,
|
||||
VAR_UNPOLAR ,
|
||||
VAR_VORON ,
|
||||
VAR_W ,
|
||||
VAR_WAFFLE ,
|
||||
VAR_WAVES ,
|
||||
VAR_WAVES2 ,
|
||||
VAR_WAVES23D ,
|
||||
VAR_WAVES2B ,
|
||||
VAR_WAVESN ,
|
||||
VAR_WDISC ,
|
||||
VAR_WEDGE ,
|
||||
VAR_WEDGE_JULIA ,
|
||||
VAR_WEDGE_SPH ,
|
||||
VAR_WHORL ,
|
||||
VAR_X ,
|
||||
VAR_XERF ,
|
||||
VAR_XHEART ,
|
||||
VAR_XTRB ,
|
||||
VAR_Y ,
|
||||
VAR_Z ,
|
||||
VAR_ZBLUR ,
|
||||
VAR_ZCONE ,
|
||||
VAR_ZSCALE ,
|
||||
VAR_ZTRANSLATE ,
|
||||
VAR_SPHERICAL ,
|
||||
VAR_SPHERICAL3D ,
|
||||
VAR_SPHERICALN ,
|
||||
VAR_SPHERIVOID,
|
||||
VAR_SPHYP3D ,
|
||||
VAR_SPIRAL ,
|
||||
VAR_SPIRAL_WING ,
|
||||
VAR_SPIROGRAPH ,
|
||||
VAR_SPLIT ,
|
||||
VAR_SPLIT_BRDR,
|
||||
VAR_SPLITS ,
|
||||
VAR_SPLITS3D ,
|
||||
VAR_SQUARE ,
|
||||
VAR_SQUARE3D ,
|
||||
VAR_SQUARIZE ,
|
||||
VAR_SQUIRREL ,
|
||||
VAR_SQUISH,
|
||||
VAR_SSCHECKS ,
|
||||
VAR_STARBLUR ,
|
||||
VAR_STRIPES ,
|
||||
VAR_STWIN ,
|
||||
VAR_SUPER_SHAPE ,
|
||||
VAR_SUPER_SHAPE3D,
|
||||
VAR_SVF ,
|
||||
VAR_SWIRL ,
|
||||
VAR_SYNTH ,
|
||||
VAR_TAN ,
|
||||
VAR_TANCOS,
|
||||
VAR_TANGENT ,
|
||||
VAR_TANH ,
|
||||
VAR_TANHQ ,
|
||||
VAR_TANQ ,
|
||||
VAR_TARGET ,
|
||||
VAR_TAURUS ,
|
||||
VAR_TILE_LOG,
|
||||
VAR_TRADE ,
|
||||
VAR_TRUCHET,
|
||||
VAR_TRUCHET_FILL,
|
||||
VAR_TWINTRIAN ,
|
||||
VAR_TWO_FACE ,
|
||||
VAR_UNPOLAR ,
|
||||
VAR_VORON,
|
||||
VAR_W ,
|
||||
VAR_WAFFLE,
|
||||
VAR_WAVES ,
|
||||
VAR_WAVES2 ,
|
||||
VAR_WAVES2_RADIAL,
|
||||
VAR_WAVES23D ,
|
||||
VAR_WAVES2B ,
|
||||
VAR_WAVESN ,
|
||||
VAR_WDISC ,
|
||||
VAR_WEDGE ,
|
||||
VAR_WEDGE_JULIA ,
|
||||
VAR_WEDGE_SPH ,
|
||||
VAR_WHORL ,
|
||||
VAR_X ,
|
||||
VAR_XERF ,
|
||||
VAR_XHEART ,
|
||||
VAR_XTRB ,
|
||||
VAR_Y ,
|
||||
VAR_Z ,
|
||||
VAR_ZBLUR ,
|
||||
VAR_ZCONE ,
|
||||
VAR_ZSCALE ,
|
||||
VAR_ZTRANSLATE,
|
||||
|
||||
VAR_PRE_ARCH,
|
||||
VAR_PRE_AUGER,
|
||||
@@ -408,6 +413,7 @@ enum class eVariationId : et
|
||||
VAR_PRE_CIRCLECROP,
|
||||
VAR_PRE_CIRCLELINEAR,
|
||||
VAR_PRE_CIRCLERAND,
|
||||
VAR_PRE_CIRCLESPLIT,
|
||||
VAR_PRE_CIRCLETRANS1,
|
||||
VAR_PRE_CIRCLIZE,
|
||||
VAR_PRE_CIRCLIZE2,
|
||||
@@ -444,6 +450,7 @@ enum class eVariationId : et
|
||||
VAR_PRE_CURVATURE,
|
||||
VAR_PRE_CURVE,
|
||||
VAR_PRE_CYLINDER,
|
||||
VAR_PRE_CYLINDER2,
|
||||
VAR_PRE_DELTA_A,
|
||||
VAR_PRE_DEPTH,
|
||||
VAR_PRE_DIAMOND,
|
||||
@@ -663,8 +670,10 @@ enum class eVariationId : et
|
||||
VAR_PRE_TANQ,
|
||||
VAR_PRE_TARGET,
|
||||
VAR_PRE_TAURUS,
|
||||
VAR_PRE_TILE_LOG,
|
||||
VAR_PRE_TRADE,
|
||||
VAR_PRE_TRUCHET,
|
||||
VAR_PRE_TRUCHET_FILL,
|
||||
VAR_PRE_TWINTRIAN,
|
||||
VAR_PRE_TWO_FACE,
|
||||
VAR_PRE_UNPOLAR,
|
||||
@@ -673,6 +682,7 @@ enum class eVariationId : et
|
||||
VAR_PRE_WAFFLE,
|
||||
VAR_PRE_WAVES,
|
||||
VAR_PRE_WAVES2,
|
||||
VAR_PRE_WAVES2_RADIAL,
|
||||
VAR_PRE_WAVES23D,
|
||||
VAR_PRE_WAVES2B,
|
||||
VAR_PRE_WAVESN,
|
||||
@@ -732,6 +742,7 @@ enum class eVariationId : et
|
||||
VAR_POST_CIRCLECROP,
|
||||
VAR_POST_CIRCLELINEAR,
|
||||
VAR_POST_CIRCLERAND,
|
||||
VAR_POST_CIRCLESPLIT,
|
||||
VAR_POST_CIRCLETRANS1,
|
||||
VAR_POST_CIRCLIZE,
|
||||
VAR_POST_CIRCLIZE2,
|
||||
@@ -768,6 +779,7 @@ enum class eVariationId : et
|
||||
VAR_POST_CURVATURE,
|
||||
VAR_POST_CURVE,
|
||||
VAR_POST_CYLINDER,
|
||||
VAR_POST_CYLINDER2,
|
||||
VAR_POST_DELTA_A,
|
||||
VAR_POST_DEPTH,
|
||||
VAR_POST_DIAMOND,
|
||||
@@ -987,8 +999,10 @@ enum class eVariationId : et
|
||||
VAR_POST_TANQ,
|
||||
VAR_POST_TARGET,
|
||||
VAR_POST_TAURUS,
|
||||
VAR_POST_TILE_LOG,
|
||||
VAR_POST_TRADE,
|
||||
VAR_POST_TRUCHET,
|
||||
VAR_POST_TRUCHET_FILL,
|
||||
VAR_POST_TWINTRIAN,
|
||||
VAR_POST_TWO_FACE,
|
||||
VAR_POST_UNPOLAR,
|
||||
@@ -997,6 +1011,7 @@ enum class eVariationId : et
|
||||
VAR_POST_WAFFLE,
|
||||
VAR_POST_WAVES,
|
||||
VAR_POST_WAVES2,
|
||||
VAR_POST_WAVES2_RADIAL,
|
||||
VAR_POST_WAVES23D,
|
||||
VAR_POST_WAVES2B,
|
||||
VAR_POST_WAVESN,
|
||||
|
||||
@@ -344,6 +344,11 @@ VariationList<T>::VariationList()
|
||||
ADDPREPOSTREGVAR(Gamma)
|
||||
ADDPREPOSTREGVAR(PRose3D)
|
||||
ADDPREPOSTREGVAR(LogDB)
|
||||
ADDPREPOSTREGVAR(CircleSplit)
|
||||
ADDPREPOSTREGVAR(Cylinder2)
|
||||
ADDPREPOSTREGVAR(TileLog)
|
||||
ADDPREPOSTREGVAR(TruchetFill)
|
||||
ADDPREPOSTREGVAR(Waves2Radial)
|
||||
//ADDPREPOSTREGVAR(LinearXZ)
|
||||
//ADDPREPOSTREGVAR(LinearYZ)
|
||||
//DC are special.
|
||||
|
||||
@@ -3940,7 +3940,7 @@ public:
|
||||
virtual void Func(IteratorHelper<T>& helper, Point<T>& outPoint, QTIsaac<ISAAC_SIZE, ISAAC_INT>& rand) override
|
||||
{
|
||||
T expx = std::exp(helper.In.x) * T(0.5);
|
||||
T expnx = T(0.25) / expx;
|
||||
T expnx = T(0.25) / Zeps(expx);
|
||||
T sn, cn, tmp;
|
||||
sincos(helper.In.y, &sn, &cn);
|
||||
tmp = m_Weight / Zeps(expx + expnx - cn);
|
||||
@@ -3955,7 +3955,7 @@ public:
|
||||
intmax_t varIndex = IndexInXform();
|
||||
ss << "\t{\n"
|
||||
<< "\t\treal_t expx = exp(vIn.x) * (real_t)(0.5);\n"
|
||||
<< "\t\treal_t expnx = (real_t)(0.25) / expx;\n"
|
||||
<< "\t\treal_t expnx = (real_t)(0.25) / Zeps(expx);\n"
|
||||
<< "\t\treal_t sn = sin(vIn.y);\n"
|
||||
<< "\t\treal_t cn = cos(vIn.y);\n"
|
||||
<< "\t\treal_t tmp = Zeps(expx + expnx - cn);\n"
|
||||
|
||||
@@ -1951,7 +1951,6 @@ class DeltaAVariation : public Variation<T>
|
||||
{
|
||||
public:
|
||||
DeltaAVariation(T weight = 1.0) : Variation<T>("deltaa", eVariationId::VAR_DELTA_A, weight) { }
|
||||
|
||||
VARCOPY(DeltaAVariation)
|
||||
|
||||
virtual void Func(IteratorHelper<T>& helper, Point<T>& outPoint, QTIsaac<ISAAC_SIZE, ISAAC_INT>& rand) override
|
||||
@@ -4551,7 +4550,7 @@ protected:
|
||||
m_Params.push_back(ParamWithName<T>(true, &m_S, prefix + "ripple_s"));
|
||||
m_Params.push_back(ParamWithName<T>(true, &m_Is, prefix + "ripple_is"));
|
||||
m_Params.push_back(ParamWithName<T>(true, &m_Vxp, prefix + "ripple_vxp"));
|
||||
m_Params.push_back(ParamWithName<T>(true, &m_Pxa , prefix + "ripple_pxa"));
|
||||
m_Params.push_back(ParamWithName<T>(true, &m_Pxa, prefix + "ripple_pxa"));
|
||||
m_Params.push_back(ParamWithName<T>(true, &m_Pixa, prefix + "ripple_pixa"));
|
||||
}
|
||||
|
||||
@@ -5420,14 +5419,14 @@ public:
|
||||
virtual void Func(IteratorHelper<T>& helper, Point<T>& outPoint, QTIsaac<ISAAC_SIZE, ISAAC_INT>& rand) override
|
||||
{
|
||||
T a = helper.m_PrecalcAtanyx;
|
||||
int n = rand.Rand(uint(m_Spread));
|
||||
int n = rand.Rand(m_SpreadUint);
|
||||
|
||||
if (a < 0)
|
||||
n++;
|
||||
|
||||
a += M_2PI * n;
|
||||
|
||||
if (std::cos(a * m_InvSpread) < rand.Rand() * 2 / 0xFFFFFFFF - 1)//Rand max.
|
||||
if (std::cos(a * m_InvSpread) < rand.Rand() * T(2) / 0xFFFFFFFF - T(1))//Rand max.
|
||||
a -= m_FullSpread;
|
||||
|
||||
T lnr2 = std::log(helper.m_PrecalcSumSquares);
|
||||
@@ -5464,7 +5463,7 @@ public:
|
||||
<< "\n"
|
||||
<< "\t\ta += M_2PI * n;\n"
|
||||
<< "\n"
|
||||
<< "\t\tif (cos(a * " << invSpread << ") < MwcNext(mwc) * 2 / 0xFFFFFFFF - 1)\n"
|
||||
<< "\t\tif (cos(a * " << invSpread << ") < MwcNext(mwc) * (real_t)2.0 / 0xFFFFFFFF - (real_t)1.0)\n"
|
||||
<< "\t\t a -= " << fullSpread << ";\n"
|
||||
<< "\n"
|
||||
<< "\t\treal_t lnr2 = log(precalcSumSquares);\n"
|
||||
@@ -5487,6 +5486,7 @@ public:
|
||||
m_HalfD = m_D / 2;
|
||||
m_InvSpread = T(0.5) / m_Spread;
|
||||
m_FullSpread = M_2PI * m_Spread;
|
||||
m_SpreadUint = uint(m_Spread);
|
||||
}
|
||||
|
||||
protected:
|
||||
@@ -5512,7 +5512,8 @@ private:
|
||||
T m_A;
|
||||
T m_Divisor;
|
||||
T m_Spread;
|
||||
T m_C;//Precalc.
|
||||
uint m_SpreadUint;//Precalc.
|
||||
T m_C;
|
||||
T m_HalfC;
|
||||
T m_D;
|
||||
T m_HalfD;
|
||||
|
||||
@@ -1038,7 +1038,7 @@ public:
|
||||
T expx = std::exp(helper.In.x) * T(0.5);
|
||||
T expnx = T(0.25) / expx;
|
||||
T boot = helper.In.z == 0 ? helper.m_PrecalcAtanyx : helper.In.z;
|
||||
T tmp = m_Weight / (expx + expnx - (std::cos(helper.In.y) * std::cos(boot)));
|
||||
T tmp = m_Weight / Zeps(expx + expnx - (std::cos(helper.In.y) * std::cos(boot)));
|
||||
helper.Out.x = (expx - expnx) * tmp;
|
||||
helper.Out.y = std::sin(helper.In.y) * tmp;
|
||||
helper.Out.z = std::sin(boot) * tmp;
|
||||
@@ -1052,7 +1052,7 @@ public:
|
||||
<< "\t\treal_t expx = exp(vIn.x) * (real_t)(0.5);\n"
|
||||
<< "\t\treal_t expnx = (real_t)(0.25) / expx;\n"
|
||||
<< "\t\treal_t boot = vIn.z == 0 ? precalcAtanyx : vIn.z;\n"
|
||||
<< "\t\treal_t tmp = xform->m_VariationWeights[" << varIndex << "] / (expx + expnx - (cos(vIn.y) * cos(boot)));\n"
|
||||
<< "\t\treal_t tmp = xform->m_VariationWeights[" << varIndex << "] / Zeps(expx + expnx - (cos(vIn.y) * cos(boot)));\n"
|
||||
<< "\n"
|
||||
<< "\t\tvOut.x = (expx - expnx) * tmp;\n"
|
||||
<< "\t\tvOut.y = sin(vIn.y) * tmp;\n"
|
||||
@@ -1060,6 +1060,11 @@ public:
|
||||
<< "\t}\n";
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
virtual vector<string> OpenCLGlobalFuncNames() const override
|
||||
{
|
||||
return vector<string> { "Zeps" };
|
||||
}
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
|
||||
+13
-13
@@ -4379,17 +4379,17 @@ protected:
|
||||
{
|
||||
string prefix = Prefix();
|
||||
m_Params.clear();
|
||||
m_Params.push_back(ParamWithName<T>(&m_Power , prefix + "smartcrop_power", 4)); //Original used a prefix of scrop_, which is incompatible with Ember's design.
|
||||
m_Params.push_back(ParamWithName<T>(&m_Radius , prefix + "smartcrop_radius", 1));
|
||||
m_Params.push_back(ParamWithName<T>(&m_Roundstr , prefix + "smartcrop_roundstr"));
|
||||
m_Params.push_back(ParamWithName<T>(&m_Power, prefix + "smartcrop_power", 4)); //Original used a prefix of scrop_, which is incompatible with Ember's design.
|
||||
m_Params.push_back(ParamWithName<T>(&m_Radius, prefix + "smartcrop_radius", 1));
|
||||
m_Params.push_back(ParamWithName<T>(&m_Roundstr, prefix + "smartcrop_roundstr"));
|
||||
m_Params.push_back(ParamWithName<T>(&m_Roundwidth, prefix + "smartcrop_roundwidth", 1));
|
||||
m_Params.push_back(ParamWithName<T>(&m_Distortion, prefix + "smartcrop_distortion", 1));
|
||||
m_Params.push_back(ParamWithName<T>(&m_Edge , prefix + "smartcrop_edge"));
|
||||
m_Params.push_back(ParamWithName<T>(&m_Scatter , prefix + "smartcrop_scatter"));
|
||||
m_Params.push_back(ParamWithName<T>(&m_Offset , prefix + "smartcrop_offset"));
|
||||
m_Params.push_back(ParamWithName<T>(&m_Rotation , prefix + "smartcrop_rotation"));
|
||||
m_Params.push_back(ParamWithName<T>(&m_Cropmode , prefix + "smartcrop_cropmode", 1, eParamType::INTEGER, -1, 2));
|
||||
m_Params.push_back(ParamWithName<T>(&m_Static , prefix + "smartcrop_static", 1, eParamType::INTEGER, -1, 3));
|
||||
m_Params.push_back(ParamWithName<T>(&m_Edge, prefix + "smartcrop_edge"));
|
||||
m_Params.push_back(ParamWithName<T>(&m_Scatter, prefix + "smartcrop_scatter"));
|
||||
m_Params.push_back(ParamWithName<T>(&m_Offset, prefix + "smartcrop_offset"));
|
||||
m_Params.push_back(ParamWithName<T>(&m_Rotation, prefix + "smartcrop_rotation"));
|
||||
m_Params.push_back(ParamWithName<T>(&m_Cropmode, prefix + "smartcrop_cropmode", 1, eParamType::INTEGER, -1, 2));
|
||||
m_Params.push_back(ParamWithName<T>(&m_Static , prefix + "smartcrop_static", 1, eParamType::INTEGER, -1, 3));
|
||||
m_Params.push_back(ParamWithName<T>(true, &m_Mode, prefix + "smartcrop_mode"));//Precalc.
|
||||
m_Params.push_back(ParamWithName<T>(true, &m_Radial, prefix + "smartcrop_radial"));
|
||||
m_Params.push_back(ParamWithName<T>(true, &m_WorkRadius, prefix + "smartcrop_work_radius"));
|
||||
@@ -4649,7 +4649,7 @@ public:
|
||||
<< "\n"
|
||||
<< "\t\tif (" << hypergon << " != 0)\n"
|
||||
<< "\t\t{\n"
|
||||
<< "\t\t temp1 = fmod(fabs(a), M_2PI / " << hypergonN << ") - M_PI / " << hypergonN << ";\n"
|
||||
<< "\t\t temp1 = fmod(fabs(a), (real_t)M_2PI / " << hypergonN << ") - M_PI / " << hypergonN << ";\n"
|
||||
<< "\t\t temp2 = Sqr(tan(temp1)) + 1;\n"
|
||||
<< "\n"
|
||||
<< "\t\t if (temp2 >= Sqr(" << hypergonD << "))\n"
|
||||
@@ -4664,7 +4664,7 @@ public:
|
||||
<< "\n"
|
||||
<< "\t\tif (" << star << "!= 0)\n"
|
||||
<< "\t\t{\n"
|
||||
<< "\t\t temp1 = tan(fabs(fmod(fabs(a), M_2PI / " << starN << ") - M_PI / " << starN << "));\n"
|
||||
<< "\t\t temp1 = tan(fabs(fmod(fabs(a), (real_t)M_2PI / " << starN << ") - M_PI / " << starN << "));\n"
|
||||
<< "\t\t total += " << star << " * sqrt(Sqr(" << tanStarSlope << ") * (1 + Sqr(temp1)) / Sqr(temp1 + " << tanStarSlope << "));\n"
|
||||
<< "\t\t}\n"
|
||||
<< "\n"
|
||||
@@ -4684,7 +4684,7 @@ public:
|
||||
<< "\t\t{\n"
|
||||
<< "\t\t if (" << hypergon << " != 0.0)\n"
|
||||
<< "\t\t {\n"
|
||||
<< "\t\t temp1 = fmod(fabs(a2), M_2PI / " << hypergonN << ") - M_PI / " << hypergonN << ";\n"
|
||||
<< "\t\t temp1 = fmod(fabs(a2), (real_t)M_2PI / " << hypergonN << ") - M_PI / " << hypergonN << ";\n"
|
||||
<< "\t\t temp2 = Sqr(tan(temp1)) + 1;\n"
|
||||
<< "\n"
|
||||
<< "\t\t if (temp2 >= Sqr(" << hypergonD << "))\n"
|
||||
@@ -4699,7 +4699,7 @@ public:
|
||||
<< "\n"
|
||||
<< "\t\t if (" << star << " != 0)\n"
|
||||
<< "\t\t {\n"
|
||||
<< "\t\t temp1 = tan(fabs(fmod(fabs(a2), M_2PI / " << starN << ") - M_PI / " << starN << "));\n"
|
||||
<< "\t\t temp1 = tan(fabs(fmod(fabs(a2), (real_t)M_2PI / " << starN << ") - M_PI / " << starN << "));\n"
|
||||
<< "\t\t total2 += " << star << " * sqrt(Sqr(" << tanStarSlope << ") * (1 + Sqr(temp1)) / Sqr(temp1 + " << tanStarSlope << "));\n"
|
||||
<< "\t\t }\n"
|
||||
<< "\n"
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user