mirror of
https://bitbucket.org/mfeemster/fractorium.git
synced 2025-01-21 21:20:07 -05:00
--User changes
-Add new variations: crackle, dc_perlin. -Make default palette interp mode be linear instead of step. -Make summary tab the selected one in the Info tab. -Allow for highlight power of up to 10. It was previously limited to 2. --Bug fixes -Direct color calculations were wrong. -Flattening was not applied to final xform. -Fix "pure virtual function call" error on shutdown. --Code changes -Allow for array precalc params in variations by adding a size member to the ParamWithName class. -In IterOpenCLKernelCreator, memcpy precalc params instead of a direct assign since they can now be of variable length. -Add new file VarFuncs to consolidate some functions that are common to multiple variations. This also contains texture data for crackle and dc_perlin. -Place OpenCL versions of these functions in the FunctionMapper class in the EmberCL project. -Add new Singleton class that uses CRTP, is thread safe, and deletes after the last reference goes away. This fixes the usual "delete after main()" problem with singletons that use the static local function variable pattern. -Began saving files with AStyle autoformatter turned on. This will eventually touch all files as they are worked on. -Add missing backslash to CUDA include and library paths for builds on Nvidia systems. -Add missing gl.h include for Windows. -Remove glew include paths from Fractorium, it's not used. -Remove any Nvidia specific #defines and build targets, they are no longer needed with OpenCL 1.2. -Fix bad paths on linux build. -General cleanup.
This commit is contained in:
parent
914b5412c3
commit
6ba16888e3
13
.bzrignore
13
.bzrignore
@ -30,12 +30,13 @@
|
|||||||
*GeneratedFiles*
|
*GeneratedFiles*
|
||||||
*.unsuccessfulbuild
|
*.unsuccessfulbuild
|
||||||
*\Obj\*
|
*\Obj\*
|
||||||
Builds/MSVC/VS2010/Obj/x64/Debug/EmberCL_manifest.rc
|
Builds/MSVC/VS2013/Obj/x64/Debug/EmberCL_manifest.rc
|
||||||
Builds/MSVC/VS2010/Obj/EmberTester/x64/Debug/EmberTester_manifest.rc
|
Builds/MSVC/VS2013/Obj/EmberTester/x64/Debug/EmberTester_manifest.rc
|
||||||
Builds/MSVC/VS2010/Obj/EmberRender/x64/Debug/EmberRender_manifest.rc
|
Builds/MSVC/VS2013/Obj/EmberRender/x64/Debug/EmberRender_manifest.rc
|
||||||
Builds/MSVC/VS2010/Obj/EmberGenome/x64/Debug/EmberGenome_manifest.rc
|
Builds/MSVC/VS2013/Obj/EmberGenome/x64/Debug/EmberGenome_manifest.rc
|
||||||
Builds/MSVC/VS2010/Obj/EmberAnimate/x64/Debug/EmberAnimate_manifest.rc
|
Builds/MSVC/VS2013/Obj/EmberAnimate/x64/Debug/EmberAnimate_manifest.rc
|
||||||
Builds/MSVC/VS2010/Obj/Ember/x64/Debug/Ember_manifest.rc
|
Builds/MSVC/VS2013/Obj/Ember/x64/Debug/Ember_manifest.rc
|
||||||
|
Builds/MSVC/Installer/obj/
|
||||||
Bin/x64/Release/testallvarsout.flame
|
Bin/x64/Release/testallvarsout.flame
|
||||||
Data/~$Bench.xlsx
|
Data/~$Bench.xlsx
|
||||||
*.ps1
|
*.ps1
|
||||||
|
13
.gitignore
vendored
13
.gitignore
vendored
@ -30,12 +30,13 @@
|
|||||||
*GeneratedFiles*
|
*GeneratedFiles*
|
||||||
*.unsuccessfulbuild
|
*.unsuccessfulbuild
|
||||||
*\Obj\*
|
*\Obj\*
|
||||||
Builds/MSVC/VS2010/Obj/x64/Debug/EmberCL_manifest.rc
|
Builds/MSVC/VS2013/Obj/x64/Debug/EmberCL_manifest.rc
|
||||||
Builds/MSVC/VS2010/Obj/EmberTester/x64/Debug/EmberTester_manifest.rc
|
Builds/MSVC/VS2013/Obj/EmberTester/x64/Debug/EmberTester_manifest.rc
|
||||||
Builds/MSVC/VS2010/Obj/EmberRender/x64/Debug/EmberRender_manifest.rc
|
Builds/MSVC/VS2013/Obj/EmberRender/x64/Debug/EmberRender_manifest.rc
|
||||||
Builds/MSVC/VS2010/Obj/EmberGenome/x64/Debug/EmberGenome_manifest.rc
|
Builds/MSVC/VS2013/Obj/EmberGenome/x64/Debug/EmberGenome_manifest.rc
|
||||||
Builds/MSVC/VS2010/Obj/EmberAnimate/x64/Debug/EmberAnimate_manifest.rc
|
Builds/MSVC/VS2013/Obj/EmberAnimate/x64/Debug/EmberAnimate_manifest.rc
|
||||||
Builds/MSVC/VS2010/Obj/Ember/x64/Debug/Ember_manifest.rc
|
Builds/MSVC/VS2013/Obj/Ember/x64/Debug/Ember_manifest.rc
|
||||||
|
Builds/MSVC/Installer/obj/
|
||||||
Bin/x64/Release/testallvarsout.flame
|
Bin/x64/Release/testallvarsout.flame
|
||||||
Data/~$Bench.xlsx
|
Data/~$Bench.xlsx
|
||||||
*.ps1
|
*.ps1
|
||||||
|
@ -279,6 +279,7 @@
|
|||||||
<ClInclude Include="..\..\..\Source\Ember\Ember.h" />
|
<ClInclude Include="..\..\..\Source\Ember\Ember.h" />
|
||||||
<ClInclude Include="..\..\..\Source\Ember\DensityFilter.h" />
|
<ClInclude Include="..\..\..\Source\Ember\DensityFilter.h" />
|
||||||
<ClInclude Include="..\..\..\Source\Ember\Interpolate.h" />
|
<ClInclude Include="..\..\..\Source\Ember\Interpolate.h" />
|
||||||
|
<ClInclude Include="..\..\..\Source\Ember\VarFuncs.h" />
|
||||||
<ClInclude Include="..\..\..\Source\Ember\PaletteList.h" />
|
<ClInclude Include="..\..\..\Source\Ember\PaletteList.h" />
|
||||||
<ClInclude Include="..\..\..\Source\Ember\Renderer.h" />
|
<ClInclude Include="..\..\..\Source\Ember\Renderer.h" />
|
||||||
<ClInclude Include="..\..\..\Source\Ember\RendererBase.h" />
|
<ClInclude Include="..\..\..\Source\Ember\RendererBase.h" />
|
||||||
|
@ -119,6 +119,9 @@
|
|||||||
<ClInclude Include="..\..\..\Source\Ember\Variations06.h">
|
<ClInclude Include="..\..\..\Source\Ember\Variations06.h">
|
||||||
<Filter>Header Files\Variations</Filter>
|
<Filter>Header Files\Variations</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\..\Source\Ember\VarFuncs.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="..\..\..\Source\Ember\DllMain.cpp">
|
<ClCompile Include="..\..\..\Source\Ember\DllMain.cpp">
|
||||||
|
@ -154,7 +154,7 @@
|
|||||||
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;BUILDING_EMBERCL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;BUILDING_EMBERCL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<ProgramDataBaseFileName>$(TargetDir)$(TargetName).pdb</ProgramDataBaseFileName>
|
<ProgramDataBaseFileName>$(TargetDir)$(TargetName).pdb</ProgramDataBaseFileName>
|
||||||
<DisableSpecificWarnings>4251;4661</DisableSpecificWarnings>
|
<DisableSpecificWarnings>4251;4661</DisableSpecificWarnings>
|
||||||
<AdditionalIncludeDirectories>$(ProjectDir)..\..\..\Source\Ember\;$(ProjectDir)..\..\..\..\glm;$(ProjectDir)..\..\..\..\tbb\include;$(ProjectDir)..\..\..\..\libxml2\include;$(AMDAPPSDKROOT)\include;$(CUDA_PATH)include</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>$(ProjectDir)..\..\..\Source\Ember\;$(ProjectDir)..\..\..\..\glm;$(ProjectDir)..\..\..\..\tbb\include;$(ProjectDir)..\..\..\..\libxml2\include;$(AMDAPPSDKROOT)\include;$(CUDA_PATH)\include</AdditionalIncludeDirectories>
|
||||||
<StructMemberAlignment>Default</StructMemberAlignment>
|
<StructMemberAlignment>Default</StructMemberAlignment>
|
||||||
<PrecompiledHeaderFile>EmberCLPch.h</PrecompiledHeaderFile>
|
<PrecompiledHeaderFile>EmberCLPch.h</PrecompiledHeaderFile>
|
||||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
@ -166,7 +166,7 @@
|
|||||||
<SubSystem>Windows</SubSystem>
|
<SubSystem>Windows</SubSystem>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
<AdditionalDependencies>opencl.lib;Opengl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>opencl.lib;Opengl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
<AdditionalLibraryDirectories>$(AMDAPPSDKROOT)\lib\x86_64;$(CUDA_PATH)lib\$(PlatformName)</AdditionalLibraryDirectories>
|
<AdditionalLibraryDirectories>$(AMDAPPSDKROOT)\lib\x86_64;$(CUDA_PATH)\lib\$(PlatformName)</AdditionalLibraryDirectories>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
@ -227,7 +227,7 @@
|
|||||||
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;BUILDING_EMBERCL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;BUILDING_EMBERCL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<ProgramDataBaseFileName>$(TargetDir)$(TargetName).pdb</ProgramDataBaseFileName>
|
<ProgramDataBaseFileName>$(TargetDir)$(TargetName).pdb</ProgramDataBaseFileName>
|
||||||
<DisableSpecificWarnings>4251;4661</DisableSpecificWarnings>
|
<DisableSpecificWarnings>4251;4661</DisableSpecificWarnings>
|
||||||
<AdditionalIncludeDirectories>$(ProjectDir)..\..\..\Source\Ember\;$(ProjectDir)..\..\..\..\glm;$(ProjectDir)..\..\..\..\tbb\include;$(ProjectDir)..\..\..\..\libxml2\include;$(AMDAPPSDKROOT)\include;$(CUDA_PATH)include</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>$(ProjectDir)..\..\..\Source\Ember\;$(ProjectDir)..\..\..\..\glm;$(ProjectDir)..\..\..\..\tbb\include;$(ProjectDir)..\..\..\..\libxml2\include;$(AMDAPPSDKROOT)\include;$(CUDA_PATH)\include</AdditionalIncludeDirectories>
|
||||||
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
|
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
|
||||||
<PrecompiledHeaderFile>EmberCLPch.h</PrecompiledHeaderFile>
|
<PrecompiledHeaderFile>EmberCLPch.h</PrecompiledHeaderFile>
|
||||||
<AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
|
<AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
|
||||||
@ -243,7 +243,7 @@
|
|||||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
<OptimizeReferences>true</OptimizeReferences>
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
<AdditionalDependencies>opencl.lib;Opengl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>opencl.lib;Opengl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
<AdditionalLibraryDirectories>$(AMDAPPSDKROOT)\lib\x86_64;$(CUDA_PATH)lib\$(PlatformName)</AdditionalLibraryDirectories>
|
<AdditionalLibraryDirectories>$(AMDAPPSDKROOT)\lib\x86_64;$(CUDA_PATH)\lib\$(PlatformName)</AdditionalLibraryDirectories>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">
|
||||||
|
@ -158,7 +158,7 @@ xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\flam3-palettes.xml" "$(OutDir)"</
|
|||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<ProgramDataBaseFileName>$(TargetDir)$(TargetName).pdb</ProgramDataBaseFileName>
|
<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>
|
<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>4251</DisableSpecificWarnings>
|
<DisableSpecificWarnings>4251</DisableSpecificWarnings>
|
||||||
<PrecompiledHeaderFile>EmberCommonPch.h</PrecompiledHeaderFile>
|
<PrecompiledHeaderFile>EmberCommonPch.h</PrecompiledHeaderFile>
|
||||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
@ -170,7 +170,7 @@ xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\flam3-palettes.xml" "$(OutDir)"</
|
|||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
<AdditionalDependencies>opencl.lib;Ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>opencl.lib;Ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
<AdditionalLibraryDirectories>$(AMDAPPSDKROOT)\lib\x86_64;$(CUDA_PATH)lib\$(PlatformName)</AdditionalLibraryDirectories>
|
<AdditionalLibraryDirectories>$(AMDAPPSDKROOT)\lib\x86_64;$(CUDA_PATH)\lib\$(PlatformName)</AdditionalLibraryDirectories>
|
||||||
</Link>
|
</Link>
|
||||||
<PostBuildEvent>
|
<PostBuildEvent>
|
||||||
<Command>xcopy /F /Y /R /D "$(SolutionDir)$(Platform)\$(Configuration)\*.dll" "$(OutDir)"
|
<Command>xcopy /F /Y /R /D "$(SolutionDir)$(Platform)\$(Configuration)\*.dll" "$(OutDir)"
|
||||||
@ -244,7 +244,7 @@ xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\flam3-palettes.xml" "$(OutDir)"</
|
|||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<ProgramDataBaseFileName>$(TargetDir)$(TargetName).pdb</ProgramDataBaseFileName>
|
<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>
|
<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>4251</DisableSpecificWarnings>
|
<DisableSpecificWarnings>4251</DisableSpecificWarnings>
|
||||||
<PrecompiledHeaderFile>EmberCommonPch.h</PrecompiledHeaderFile>
|
<PrecompiledHeaderFile>EmberCommonPch.h</PrecompiledHeaderFile>
|
||||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
@ -258,7 +258,7 @@ xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\flam3-palettes.xml" "$(OutDir)"</
|
|||||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
<OptimizeReferences>true</OptimizeReferences>
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
<AdditionalDependencies>opencl.lib;Ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>opencl.lib;Ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
<AdditionalLibraryDirectories>$(AMDAPPSDKROOT)\lib\x86_64;$(CUDA_PATH)lib\$(PlatformName)</AdditionalLibraryDirectories>
|
<AdditionalLibraryDirectories>$(AMDAPPSDKROOT)\lib\x86_64;$(CUDA_PATH)\lib\$(PlatformName)</AdditionalLibraryDirectories>
|
||||||
</Link>
|
</Link>
|
||||||
<PostBuildEvent>
|
<PostBuildEvent>
|
||||||
<Command>xcopy /F /Y /R /D "$(SolutionDir)$(Platform)\$(Configuration)\*.dll" "$(OutDir)"
|
<Command>xcopy /F /Y /R /D "$(SolutionDir)$(Platform)\$(Configuration)\*.dll" "$(OutDir)"
|
||||||
|
@ -158,7 +158,7 @@ xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\flam3-palettes.xml" "$(OutDir)"</
|
|||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<ProgramDataBaseFileName>$(TargetDir)$(TargetName).pdb</ProgramDataBaseFileName>
|
<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>
|
<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>4251</DisableSpecificWarnings>
|
<DisableSpecificWarnings>4251</DisableSpecificWarnings>
|
||||||
<PrecompiledHeaderFile>EmberCommonPch.h</PrecompiledHeaderFile>
|
<PrecompiledHeaderFile>EmberCommonPch.h</PrecompiledHeaderFile>
|
||||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
@ -170,7 +170,7 @@ xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\flam3-palettes.xml" "$(OutDir)"</
|
|||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
<AdditionalDependencies>opencl.lib;Ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>opencl.lib;Ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
<AdditionalLibraryDirectories>$(AMDAPPSDKROOT)\lib\x86_64;$(CUDA_PATH)lib\$(PlatformName)</AdditionalLibraryDirectories>
|
<AdditionalLibraryDirectories>$(AMDAPPSDKROOT)\lib\x86_64;$(CUDA_PATH)\lib\$(PlatformName)</AdditionalLibraryDirectories>
|
||||||
</Link>
|
</Link>
|
||||||
<PostBuildEvent>
|
<PostBuildEvent>
|
||||||
<Command>xcopy /F /Y /R /D "$(SolutionDir)$(Platform)\$(Configuration)\*.dll" "$(OutDir)"
|
<Command>xcopy /F /Y /R /D "$(SolutionDir)$(Platform)\$(Configuration)\*.dll" "$(OutDir)"
|
||||||
@ -244,7 +244,7 @@ xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\flam3-palettes.xml" "$(OutDir)"</
|
|||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<ProgramDataBaseFileName>$(TargetDir)$(TargetName).pdb</ProgramDataBaseFileName>
|
<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>
|
<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>4251</DisableSpecificWarnings>
|
<DisableSpecificWarnings>4251</DisableSpecificWarnings>
|
||||||
<PrecompiledHeaderFile>EmberCommonPch.h</PrecompiledHeaderFile>
|
<PrecompiledHeaderFile>EmberCommonPch.h</PrecompiledHeaderFile>
|
||||||
<FloatingPointModel>Precise</FloatingPointModel>
|
<FloatingPointModel>Precise</FloatingPointModel>
|
||||||
@ -259,7 +259,7 @@ xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\flam3-palettes.xml" "$(OutDir)"</
|
|||||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
<OptimizeReferences>true</OptimizeReferences>
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
<AdditionalDependencies>opencl.lib;Ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>opencl.lib;Ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
<AdditionalLibraryDirectories>$(AMDAPPSDKROOT)\lib\x86_64;$(CUDA_PATH)lib\$(PlatformName)</AdditionalLibraryDirectories>
|
<AdditionalLibraryDirectories>$(AMDAPPSDKROOT)\lib\x86_64;$(CUDA_PATH)\lib\$(PlatformName)</AdditionalLibraryDirectories>
|
||||||
</Link>
|
</Link>
|
||||||
<PostBuildEvent>
|
<PostBuildEvent>
|
||||||
<Command>xcopy /F /Y /R /D "$(SolutionDir)$(Platform)\$(Configuration)\*.dll" "$(OutDir)"
|
<Command>xcopy /F /Y /R /D "$(SolutionDir)$(Platform)\$(Configuration)\*.dll" "$(OutDir)"
|
||||||
|
@ -158,7 +158,7 @@ xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\flam3-palettes.xml" "$(OutDir)"</
|
|||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<ProgramDataBaseFileName>$(TargetDir)$(TargetName).pdb</ProgramDataBaseFileName>
|
<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>
|
<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>4251</DisableSpecificWarnings>
|
<DisableSpecificWarnings>4251</DisableSpecificWarnings>
|
||||||
<PrecompiledHeaderFile>EmberCommonPch.h</PrecompiledHeaderFile>
|
<PrecompiledHeaderFile>EmberCommonPch.h</PrecompiledHeaderFile>
|
||||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
@ -170,7 +170,7 @@ xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\flam3-palettes.xml" "$(OutDir)"</
|
|||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
<AdditionalDependencies>opencl.lib;Ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>opencl.lib;Ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
<AdditionalLibraryDirectories>$(AMDAPPSDKROOT)\lib\x86_64;$(CUDA_PATH)lib\$(PlatformName)</AdditionalLibraryDirectories>
|
<AdditionalLibraryDirectories>$(AMDAPPSDKROOT)\lib\x86_64;$(CUDA_PATH)\lib\$(PlatformName)</AdditionalLibraryDirectories>
|
||||||
</Link>
|
</Link>
|
||||||
<PostBuildEvent>
|
<PostBuildEvent>
|
||||||
<Command>xcopy /F /Y /R /D "$(SolutionDir)$(Platform)\$(Configuration)\*.dll" "$(OutDir)"
|
<Command>xcopy /F /Y /R /D "$(SolutionDir)$(Platform)\$(Configuration)\*.dll" "$(OutDir)"
|
||||||
@ -244,7 +244,7 @@ xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\flam3-palettes.xml" "$(OutDir)"</
|
|||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<ProgramDataBaseFileName>$(TargetDir)$(TargetName).pdb</ProgramDataBaseFileName>
|
<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>
|
<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>4251</DisableSpecificWarnings>
|
<DisableSpecificWarnings>4251</DisableSpecificWarnings>
|
||||||
<PrecompiledHeaderFile>EmberCommonPch.h</PrecompiledHeaderFile>
|
<PrecompiledHeaderFile>EmberCommonPch.h</PrecompiledHeaderFile>
|
||||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
@ -258,7 +258,7 @@ xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\flam3-palettes.xml" "$(OutDir)"</
|
|||||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
<OptimizeReferences>true</OptimizeReferences>
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
<AdditionalDependencies>opencl.lib;Ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>opencl.lib;Ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
<AdditionalLibraryDirectories>$(AMDAPPSDKROOT)\lib\x86_64;$(CUDA_PATH)lib\$(PlatformName)</AdditionalLibraryDirectories>
|
<AdditionalLibraryDirectories>$(AMDAPPSDKROOT)\lib\x86_64;$(CUDA_PATH)\lib\$(PlatformName)</AdditionalLibraryDirectories>
|
||||||
</Link>
|
</Link>
|
||||||
<PostBuildEvent>
|
<PostBuildEvent>
|
||||||
<Command>xcopy /F /Y /R /D "$(SolutionDir)$(Platform)\$(Configuration)\*.dll" "$(OutDir)"
|
<Command>xcopy /F /Y /R /D "$(SolutionDir)$(Platform)\$(Configuration)\*.dll" "$(OutDir)"
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
# Visual Studio 2013
|
# Visual Studio 2013
|
||||||
VisualStudioVersion = 12.0.30723.0
|
VisualStudioVersion = 12.0.31101.0
|
||||||
MinimumVisualStudioVersion = 10.0.40219.1
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Ember", "Ember.vcxproj", "{2BDB7A54-BB1A-476B-A6E5-F81E90AD4E67}"
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Ember", "Ember.vcxproj", "{2BDB7A54-BB1A-476B-A6E5-F81E90AD4E67}"
|
||||||
EndProject
|
EndProject
|
||||||
@ -119,10 +119,6 @@ Global
|
|||||||
Release-MT|Win32 = Release-MT|Win32
|
Release-MT|Win32 = Release-MT|Win32
|
||||||
Release-MT|x64 = Release-MT|x64
|
Release-MT|x64 = Release-MT|x64
|
||||||
Release-MT|x86 = Release-MT|x86
|
Release-MT|x86 = Release-MT|x86
|
||||||
ReleaseNvidia|Mixed Platforms = ReleaseNvidia|Mixed Platforms
|
|
||||||
ReleaseNvidia|Win32 = ReleaseNvidia|Win32
|
|
||||||
ReleaseNvidia|x64 = ReleaseNvidia|x64
|
|
||||||
ReleaseNvidia|x86 = ReleaseNvidia|x86
|
|
||||||
ReleaseWithoutAsm|Mixed Platforms = ReleaseWithoutAsm|Mixed Platforms
|
ReleaseWithoutAsm|Mixed Platforms = ReleaseWithoutAsm|Mixed Platforms
|
||||||
ReleaseWithoutAsm|Win32 = ReleaseWithoutAsm|Win32
|
ReleaseWithoutAsm|Win32 = ReleaseWithoutAsm|Win32
|
||||||
ReleaseWithoutAsm|x64 = ReleaseWithoutAsm|x64
|
ReleaseWithoutAsm|x64 = ReleaseWithoutAsm|x64
|
||||||
@ -179,12 +175,6 @@ Global
|
|||||||
{2BDB7A54-BB1A-476B-A6E5-F81E90AD4E67}.Release-MT|x64.ActiveCfg = Release|x64
|
{2BDB7A54-BB1A-476B-A6E5-F81E90AD4E67}.Release-MT|x64.ActiveCfg = Release|x64
|
||||||
{2BDB7A54-BB1A-476B-A6E5-F81E90AD4E67}.Release-MT|x64.Build.0 = Release|x64
|
{2BDB7A54-BB1A-476B-A6E5-F81E90AD4E67}.Release-MT|x64.Build.0 = Release|x64
|
||||||
{2BDB7A54-BB1A-476B-A6E5-F81E90AD4E67}.Release-MT|x86.ActiveCfg = Release|x64
|
{2BDB7A54-BB1A-476B-A6E5-F81E90AD4E67}.Release-MT|x86.ActiveCfg = Release|x64
|
||||||
{2BDB7A54-BB1A-476B-A6E5-F81E90AD4E67}.ReleaseNvidia|Mixed Platforms.ActiveCfg = Release|x64
|
|
||||||
{2BDB7A54-BB1A-476B-A6E5-F81E90AD4E67}.ReleaseNvidia|Mixed Platforms.Build.0 = Release|x64
|
|
||||||
{2BDB7A54-BB1A-476B-A6E5-F81E90AD4E67}.ReleaseNvidia|Win32.ActiveCfg = Release|x64
|
|
||||||
{2BDB7A54-BB1A-476B-A6E5-F81E90AD4E67}.ReleaseNvidia|x64.ActiveCfg = ReleaseNvidia|x64
|
|
||||||
{2BDB7A54-BB1A-476B-A6E5-F81E90AD4E67}.ReleaseNvidia|x64.Build.0 = ReleaseNvidia|x64
|
|
||||||
{2BDB7A54-BB1A-476B-A6E5-F81E90AD4E67}.ReleaseNvidia|x86.ActiveCfg = Release|x64
|
|
||||||
{2BDB7A54-BB1A-476B-A6E5-F81E90AD4E67}.ReleaseWithoutAsm|Mixed Platforms.ActiveCfg = Release|x64
|
{2BDB7A54-BB1A-476B-A6E5-F81E90AD4E67}.ReleaseWithoutAsm|Mixed Platforms.ActiveCfg = Release|x64
|
||||||
{2BDB7A54-BB1A-476B-A6E5-F81E90AD4E67}.ReleaseWithoutAsm|Mixed Platforms.Build.0 = Release|x64
|
{2BDB7A54-BB1A-476B-A6E5-F81E90AD4E67}.ReleaseWithoutAsm|Mixed Platforms.Build.0 = Release|x64
|
||||||
{2BDB7A54-BB1A-476B-A6E5-F81E90AD4E67}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|x64
|
{2BDB7A54-BB1A-476B-A6E5-F81E90AD4E67}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|x64
|
||||||
@ -241,12 +231,6 @@ Global
|
|||||||
{320F611A-F9CE-4196-A8DC-FA24B2E8A320}.Release-MT|x64.ActiveCfg = Release|x64
|
{320F611A-F9CE-4196-A8DC-FA24B2E8A320}.Release-MT|x64.ActiveCfg = Release|x64
|
||||||
{320F611A-F9CE-4196-A8DC-FA24B2E8A320}.Release-MT|x64.Build.0 = Release|x64
|
{320F611A-F9CE-4196-A8DC-FA24B2E8A320}.Release-MT|x64.Build.0 = Release|x64
|
||||||
{320F611A-F9CE-4196-A8DC-FA24B2E8A320}.Release-MT|x86.ActiveCfg = Release|x64
|
{320F611A-F9CE-4196-A8DC-FA24B2E8A320}.Release-MT|x86.ActiveCfg = Release|x64
|
||||||
{320F611A-F9CE-4196-A8DC-FA24B2E8A320}.ReleaseNvidia|Mixed Platforms.ActiveCfg = Release|x64
|
|
||||||
{320F611A-F9CE-4196-A8DC-FA24B2E8A320}.ReleaseNvidia|Mixed Platforms.Build.0 = Release|x64
|
|
||||||
{320F611A-F9CE-4196-A8DC-FA24B2E8A320}.ReleaseNvidia|Win32.ActiveCfg = Release|x64
|
|
||||||
{320F611A-F9CE-4196-A8DC-FA24B2E8A320}.ReleaseNvidia|x64.ActiveCfg = ReleaseNvidia|x64
|
|
||||||
{320F611A-F9CE-4196-A8DC-FA24B2E8A320}.ReleaseNvidia|x64.Build.0 = ReleaseNvidia|x64
|
|
||||||
{320F611A-F9CE-4196-A8DC-FA24B2E8A320}.ReleaseNvidia|x86.ActiveCfg = Release|x64
|
|
||||||
{320F611A-F9CE-4196-A8DC-FA24B2E8A320}.ReleaseWithoutAsm|Mixed Platforms.ActiveCfg = Release|x64
|
{320F611A-F9CE-4196-A8DC-FA24B2E8A320}.ReleaseWithoutAsm|Mixed Platforms.ActiveCfg = Release|x64
|
||||||
{320F611A-F9CE-4196-A8DC-FA24B2E8A320}.ReleaseWithoutAsm|Mixed Platforms.Build.0 = Release|x64
|
{320F611A-F9CE-4196-A8DC-FA24B2E8A320}.ReleaseWithoutAsm|Mixed Platforms.Build.0 = Release|x64
|
||||||
{320F611A-F9CE-4196-A8DC-FA24B2E8A320}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|x64
|
{320F611A-F9CE-4196-A8DC-FA24B2E8A320}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|x64
|
||||||
@ -303,12 +287,6 @@ Global
|
|||||||
{6547D5FA-64CE-44BA-9D3C-B6E217456445}.Release-MT|x64.ActiveCfg = Release|x64
|
{6547D5FA-64CE-44BA-9D3C-B6E217456445}.Release-MT|x64.ActiveCfg = Release|x64
|
||||||
{6547D5FA-64CE-44BA-9D3C-B6E217456445}.Release-MT|x64.Build.0 = Release|x64
|
{6547D5FA-64CE-44BA-9D3C-B6E217456445}.Release-MT|x64.Build.0 = Release|x64
|
||||||
{6547D5FA-64CE-44BA-9D3C-B6E217456445}.Release-MT|x86.ActiveCfg = Release|x64
|
{6547D5FA-64CE-44BA-9D3C-B6E217456445}.Release-MT|x86.ActiveCfg = Release|x64
|
||||||
{6547D5FA-64CE-44BA-9D3C-B6E217456445}.ReleaseNvidia|Mixed Platforms.ActiveCfg = Release|x64
|
|
||||||
{6547D5FA-64CE-44BA-9D3C-B6E217456445}.ReleaseNvidia|Mixed Platforms.Build.0 = Release|x64
|
|
||||||
{6547D5FA-64CE-44BA-9D3C-B6E217456445}.ReleaseNvidia|Win32.ActiveCfg = Release|x64
|
|
||||||
{6547D5FA-64CE-44BA-9D3C-B6E217456445}.ReleaseNvidia|x64.ActiveCfg = ReleaseNvidia|x64
|
|
||||||
{6547D5FA-64CE-44BA-9D3C-B6E217456445}.ReleaseNvidia|x64.Build.0 = ReleaseNvidia|x64
|
|
||||||
{6547D5FA-64CE-44BA-9D3C-B6E217456445}.ReleaseNvidia|x86.ActiveCfg = Release|x64
|
|
||||||
{6547D5FA-64CE-44BA-9D3C-B6E217456445}.ReleaseWithoutAsm|Mixed Platforms.ActiveCfg = Release|x64
|
{6547D5FA-64CE-44BA-9D3C-B6E217456445}.ReleaseWithoutAsm|Mixed Platforms.ActiveCfg = Release|x64
|
||||||
{6547D5FA-64CE-44BA-9D3C-B6E217456445}.ReleaseWithoutAsm|Mixed Platforms.Build.0 = Release|x64
|
{6547D5FA-64CE-44BA-9D3C-B6E217456445}.ReleaseWithoutAsm|Mixed Platforms.Build.0 = Release|x64
|
||||||
{6547D5FA-64CE-44BA-9D3C-B6E217456445}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|x64
|
{6547D5FA-64CE-44BA-9D3C-B6E217456445}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|x64
|
||||||
@ -365,12 +343,6 @@ Global
|
|||||||
{4A191F4C-03AC-4F1B-AFFD-F5483ECEBD29}.Release-MT|x64.ActiveCfg = Release|x64
|
{4A191F4C-03AC-4F1B-AFFD-F5483ECEBD29}.Release-MT|x64.ActiveCfg = Release|x64
|
||||||
{4A191F4C-03AC-4F1B-AFFD-F5483ECEBD29}.Release-MT|x64.Build.0 = Release|x64
|
{4A191F4C-03AC-4F1B-AFFD-F5483ECEBD29}.Release-MT|x64.Build.0 = Release|x64
|
||||||
{4A191F4C-03AC-4F1B-AFFD-F5483ECEBD29}.Release-MT|x86.ActiveCfg = Release|x64
|
{4A191F4C-03AC-4F1B-AFFD-F5483ECEBD29}.Release-MT|x86.ActiveCfg = Release|x64
|
||||||
{4A191F4C-03AC-4F1B-AFFD-F5483ECEBD29}.ReleaseNvidia|Mixed Platforms.ActiveCfg = Release|x64
|
|
||||||
{4A191F4C-03AC-4F1B-AFFD-F5483ECEBD29}.ReleaseNvidia|Mixed Platforms.Build.0 = Release|x64
|
|
||||||
{4A191F4C-03AC-4F1B-AFFD-F5483ECEBD29}.ReleaseNvidia|Win32.ActiveCfg = Release|x64
|
|
||||||
{4A191F4C-03AC-4F1B-AFFD-F5483ECEBD29}.ReleaseNvidia|x64.ActiveCfg = ReleaseNvidia|x64
|
|
||||||
{4A191F4C-03AC-4F1B-AFFD-F5483ECEBD29}.ReleaseNvidia|x64.Build.0 = ReleaseNvidia|x64
|
|
||||||
{4A191F4C-03AC-4F1B-AFFD-F5483ECEBD29}.ReleaseNvidia|x86.ActiveCfg = Release|x64
|
|
||||||
{4A191F4C-03AC-4F1B-AFFD-F5483ECEBD29}.ReleaseWithoutAsm|Mixed Platforms.ActiveCfg = Release|x64
|
{4A191F4C-03AC-4F1B-AFFD-F5483ECEBD29}.ReleaseWithoutAsm|Mixed Platforms.ActiveCfg = Release|x64
|
||||||
{4A191F4C-03AC-4F1B-AFFD-F5483ECEBD29}.ReleaseWithoutAsm|Mixed Platforms.Build.0 = Release|x64
|
{4A191F4C-03AC-4F1B-AFFD-F5483ECEBD29}.ReleaseWithoutAsm|Mixed Platforms.Build.0 = Release|x64
|
||||||
{4A191F4C-03AC-4F1B-AFFD-F5483ECEBD29}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|x64
|
{4A191F4C-03AC-4F1B-AFFD-F5483ECEBD29}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|x64
|
||||||
@ -427,12 +399,6 @@ Global
|
|||||||
{35285FCF-6FA8-410E-841B-70AE744D38B8}.Release-MT|x64.ActiveCfg = Release|x64
|
{35285FCF-6FA8-410E-841B-70AE744D38B8}.Release-MT|x64.ActiveCfg = Release|x64
|
||||||
{35285FCF-6FA8-410E-841B-70AE744D38B8}.Release-MT|x64.Build.0 = Release|x64
|
{35285FCF-6FA8-410E-841B-70AE744D38B8}.Release-MT|x64.Build.0 = Release|x64
|
||||||
{35285FCF-6FA8-410E-841B-70AE744D38B8}.Release-MT|x86.ActiveCfg = Release|x64
|
{35285FCF-6FA8-410E-841B-70AE744D38B8}.Release-MT|x86.ActiveCfg = Release|x64
|
||||||
{35285FCF-6FA8-410E-841B-70AE744D38B8}.ReleaseNvidia|Mixed Platforms.ActiveCfg = Release|x64
|
|
||||||
{35285FCF-6FA8-410E-841B-70AE744D38B8}.ReleaseNvidia|Mixed Platforms.Build.0 = Release|x64
|
|
||||||
{35285FCF-6FA8-410E-841B-70AE744D38B8}.ReleaseNvidia|Win32.ActiveCfg = Release|x64
|
|
||||||
{35285FCF-6FA8-410E-841B-70AE744D38B8}.ReleaseNvidia|x64.ActiveCfg = ReleaseNvidia|x64
|
|
||||||
{35285FCF-6FA8-410E-841B-70AE744D38B8}.ReleaseNvidia|x64.Build.0 = ReleaseNvidia|x64
|
|
||||||
{35285FCF-6FA8-410E-841B-70AE744D38B8}.ReleaseNvidia|x86.ActiveCfg = Release|x64
|
|
||||||
{35285FCF-6FA8-410E-841B-70AE744D38B8}.ReleaseWithoutAsm|Mixed Platforms.ActiveCfg = Release|x64
|
{35285FCF-6FA8-410E-841B-70AE744D38B8}.ReleaseWithoutAsm|Mixed Platforms.ActiveCfg = Release|x64
|
||||||
{35285FCF-6FA8-410E-841B-70AE744D38B8}.ReleaseWithoutAsm|Mixed Platforms.Build.0 = Release|x64
|
{35285FCF-6FA8-410E-841B-70AE744D38B8}.ReleaseWithoutAsm|Mixed Platforms.Build.0 = Release|x64
|
||||||
{35285FCF-6FA8-410E-841B-70AE744D38B8}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|x64
|
{35285FCF-6FA8-410E-841B-70AE744D38B8}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|x64
|
||||||
@ -489,12 +455,6 @@ Global
|
|||||||
{7930CAAC-9FC4-4202-B6A3-E760F73F88B7}.Release-MT|x64.ActiveCfg = Release|x64
|
{7930CAAC-9FC4-4202-B6A3-E760F73F88B7}.Release-MT|x64.ActiveCfg = Release|x64
|
||||||
{7930CAAC-9FC4-4202-B6A3-E760F73F88B7}.Release-MT|x64.Build.0 = Release|x64
|
{7930CAAC-9FC4-4202-B6A3-E760F73F88B7}.Release-MT|x64.Build.0 = Release|x64
|
||||||
{7930CAAC-9FC4-4202-B6A3-E760F73F88B7}.Release-MT|x86.ActiveCfg = Release|x64
|
{7930CAAC-9FC4-4202-B6A3-E760F73F88B7}.Release-MT|x86.ActiveCfg = Release|x64
|
||||||
{7930CAAC-9FC4-4202-B6A3-E760F73F88B7}.ReleaseNvidia|Mixed Platforms.ActiveCfg = Release|x64
|
|
||||||
{7930CAAC-9FC4-4202-B6A3-E760F73F88B7}.ReleaseNvidia|Mixed Platforms.Build.0 = Release|x64
|
|
||||||
{7930CAAC-9FC4-4202-B6A3-E760F73F88B7}.ReleaseNvidia|Win32.ActiveCfg = Release|x64
|
|
||||||
{7930CAAC-9FC4-4202-B6A3-E760F73F88B7}.ReleaseNvidia|x64.ActiveCfg = ReleaseNvidia|x64
|
|
||||||
{7930CAAC-9FC4-4202-B6A3-E760F73F88B7}.ReleaseNvidia|x64.Build.0 = ReleaseNvidia|x64
|
|
||||||
{7930CAAC-9FC4-4202-B6A3-E760F73F88B7}.ReleaseNvidia|x86.ActiveCfg = Release|x64
|
|
||||||
{7930CAAC-9FC4-4202-B6A3-E760F73F88B7}.ReleaseWithoutAsm|Mixed Platforms.ActiveCfg = Release|x64
|
{7930CAAC-9FC4-4202-B6A3-E760F73F88B7}.ReleaseWithoutAsm|Mixed Platforms.ActiveCfg = Release|x64
|
||||||
{7930CAAC-9FC4-4202-B6A3-E760F73F88B7}.ReleaseWithoutAsm|Mixed Platforms.Build.0 = Release|x64
|
{7930CAAC-9FC4-4202-B6A3-E760F73F88B7}.ReleaseWithoutAsm|Mixed Platforms.Build.0 = Release|x64
|
||||||
{7930CAAC-9FC4-4202-B6A3-E760F73F88B7}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|x64
|
{7930CAAC-9FC4-4202-B6A3-E760F73F88B7}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|x64
|
||||||
@ -551,13 +511,6 @@ Global
|
|||||||
{F6A9102C-69A9-48FB-BC4B-49E49AF43236}.Release-MT|x64.ActiveCfg = Release|x64
|
{F6A9102C-69A9-48FB-BC4B-49E49AF43236}.Release-MT|x64.ActiveCfg = Release|x64
|
||||||
{F6A9102C-69A9-48FB-BC4B-49E49AF43236}.Release-MT|x64.Build.0 = Release|x64
|
{F6A9102C-69A9-48FB-BC4B-49E49AF43236}.Release-MT|x64.Build.0 = Release|x64
|
||||||
{F6A9102C-69A9-48FB-BC4B-49E49AF43236}.Release-MT|x86.ActiveCfg = Release|x64
|
{F6A9102C-69A9-48FB-BC4B-49E49AF43236}.Release-MT|x86.ActiveCfg = Release|x64
|
||||||
{F6A9102C-69A9-48FB-BC4B-49E49AF43236}.ReleaseNvidia|Mixed Platforms.ActiveCfg = ReleaseNvidia|x64
|
|
||||||
{F6A9102C-69A9-48FB-BC4B-49E49AF43236}.ReleaseNvidia|Mixed Platforms.Build.0 = ReleaseNvidia|x64
|
|
||||||
{F6A9102C-69A9-48FB-BC4B-49E49AF43236}.ReleaseNvidia|Win32.ActiveCfg = ReleaseNvidia|Win32
|
|
||||||
{F6A9102C-69A9-48FB-BC4B-49E49AF43236}.ReleaseNvidia|Win32.Build.0 = ReleaseNvidia|Win32
|
|
||||||
{F6A9102C-69A9-48FB-BC4B-49E49AF43236}.ReleaseNvidia|x64.ActiveCfg = ReleaseNvidia|x64
|
|
||||||
{F6A9102C-69A9-48FB-BC4B-49E49AF43236}.ReleaseNvidia|x64.Build.0 = ReleaseNvidia|x64
|
|
||||||
{F6A9102C-69A9-48FB-BC4B-49E49AF43236}.ReleaseNvidia|x86.ActiveCfg = ReleaseNvidia|x64
|
|
||||||
{F6A9102C-69A9-48FB-BC4B-49E49AF43236}.ReleaseWithoutAsm|Mixed Platforms.ActiveCfg = Release|x64
|
{F6A9102C-69A9-48FB-BC4B-49E49AF43236}.ReleaseWithoutAsm|Mixed Platforms.ActiveCfg = Release|x64
|
||||||
{F6A9102C-69A9-48FB-BC4B-49E49AF43236}.ReleaseWithoutAsm|Mixed Platforms.Build.0 = Release|x64
|
{F6A9102C-69A9-48FB-BC4B-49E49AF43236}.ReleaseWithoutAsm|Mixed Platforms.Build.0 = Release|x64
|
||||||
{F6A9102C-69A9-48FB-BC4B-49E49AF43236}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|x64
|
{F6A9102C-69A9-48FB-BC4B-49E49AF43236}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|x64
|
||||||
@ -616,12 +569,6 @@ Global
|
|||||||
{F62787DD-1327-448B-9818-030062BCFAA5}.Release-MT|x64.ActiveCfg = Release-MT|x64
|
{F62787DD-1327-448B-9818-030062BCFAA5}.Release-MT|x64.ActiveCfg = Release-MT|x64
|
||||||
{F62787DD-1327-448B-9818-030062BCFAA5}.Release-MT|x64.Build.0 = Release-MT|x64
|
{F62787DD-1327-448B-9818-030062BCFAA5}.Release-MT|x64.Build.0 = Release-MT|x64
|
||||||
{F62787DD-1327-448B-9818-030062BCFAA5}.Release-MT|x86.ActiveCfg = Release-MT|x64
|
{F62787DD-1327-448B-9818-030062BCFAA5}.Release-MT|x86.ActiveCfg = Release-MT|x64
|
||||||
{F62787DD-1327-448B-9818-030062BCFAA5}.ReleaseNvidia|Mixed Platforms.ActiveCfg = Release|x64
|
|
||||||
{F62787DD-1327-448B-9818-030062BCFAA5}.ReleaseNvidia|Mixed Platforms.Build.0 = Release|x64
|
|
||||||
{F62787DD-1327-448B-9818-030062BCFAA5}.ReleaseNvidia|Win32.ActiveCfg = Release|x64
|
|
||||||
{F62787DD-1327-448B-9818-030062BCFAA5}.ReleaseNvidia|x64.ActiveCfg = Release|x64
|
|
||||||
{F62787DD-1327-448B-9818-030062BCFAA5}.ReleaseNvidia|x64.Build.0 = Release|x64
|
|
||||||
{F62787DD-1327-448B-9818-030062BCFAA5}.ReleaseNvidia|x86.ActiveCfg = Release|x64
|
|
||||||
{F62787DD-1327-448B-9818-030062BCFAA5}.ReleaseWithoutAsm|Mixed Platforms.ActiveCfg = Release|x64
|
{F62787DD-1327-448B-9818-030062BCFAA5}.ReleaseWithoutAsm|Mixed Platforms.ActiveCfg = Release|x64
|
||||||
{F62787DD-1327-448B-9818-030062BCFAA5}.ReleaseWithoutAsm|Mixed Platforms.Build.0 = Release|x64
|
{F62787DD-1327-448B-9818-030062BCFAA5}.ReleaseWithoutAsm|Mixed Platforms.Build.0 = Release|x64
|
||||||
{F62787DD-1327-448B-9818-030062BCFAA5}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|x64
|
{F62787DD-1327-448B-9818-030062BCFAA5}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|x64
|
||||||
@ -678,12 +625,6 @@ Global
|
|||||||
{60F89955-91C6-3A36-8000-13C592FEC2DF}.Release-MT|Win32.Build.0 = Release|Win32
|
{60F89955-91C6-3A36-8000-13C592FEC2DF}.Release-MT|Win32.Build.0 = Release|Win32
|
||||||
{60F89955-91C6-3A36-8000-13C592FEC2DF}.Release-MT|x64.ActiveCfg = Release|Win32
|
{60F89955-91C6-3A36-8000-13C592FEC2DF}.Release-MT|x64.ActiveCfg = Release|Win32
|
||||||
{60F89955-91C6-3A36-8000-13C592FEC2DF}.Release-MT|x86.ActiveCfg = Release|Win32
|
{60F89955-91C6-3A36-8000-13C592FEC2DF}.Release-MT|x86.ActiveCfg = Release|Win32
|
||||||
{60F89955-91C6-3A36-8000-13C592FEC2DF}.ReleaseNvidia|Mixed Platforms.ActiveCfg = Release|x64
|
|
||||||
{60F89955-91C6-3A36-8000-13C592FEC2DF}.ReleaseNvidia|Mixed Platforms.Build.0 = Release|x64
|
|
||||||
{60F89955-91C6-3A36-8000-13C592FEC2DF}.ReleaseNvidia|Win32.ActiveCfg = Release|x64
|
|
||||||
{60F89955-91C6-3A36-8000-13C592FEC2DF}.ReleaseNvidia|x64.ActiveCfg = Release|x64
|
|
||||||
{60F89955-91C6-3A36-8000-13C592FEC2DF}.ReleaseNvidia|x64.Build.0 = Release|x64
|
|
||||||
{60F89955-91C6-3A36-8000-13C592FEC2DF}.ReleaseNvidia|x86.ActiveCfg = Release|x64
|
|
||||||
{60F89955-91C6-3A36-8000-13C592FEC2DF}.ReleaseWithoutAsm|Mixed Platforms.ActiveCfg = Release|Win32
|
{60F89955-91C6-3A36-8000-13C592FEC2DF}.ReleaseWithoutAsm|Mixed Platforms.ActiveCfg = Release|Win32
|
||||||
{60F89955-91C6-3A36-8000-13C592FEC2DF}.ReleaseWithoutAsm|Mixed Platforms.Build.0 = Release|Win32
|
{60F89955-91C6-3A36-8000-13C592FEC2DF}.ReleaseWithoutAsm|Mixed Platforms.Build.0 = Release|Win32
|
||||||
{60F89955-91C6-3A36-8000-13C592FEC2DF}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32
|
{60F89955-91C6-3A36-8000-13C592FEC2DF}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32
|
||||||
@ -740,12 +681,6 @@ Global
|
|||||||
{EB33566E-DA7F-4D28-9077-88C0B7C77E35}.Release-MT|Win32.Build.0 = Release|Win32
|
{EB33566E-DA7F-4D28-9077-88C0B7C77E35}.Release-MT|Win32.Build.0 = Release|Win32
|
||||||
{EB33566E-DA7F-4D28-9077-88C0B7C77E35}.Release-MT|x64.ActiveCfg = Release|Win32
|
{EB33566E-DA7F-4D28-9077-88C0B7C77E35}.Release-MT|x64.ActiveCfg = Release|Win32
|
||||||
{EB33566E-DA7F-4D28-9077-88C0B7C77E35}.Release-MT|x86.ActiveCfg = Release|Win32
|
{EB33566E-DA7F-4D28-9077-88C0B7C77E35}.Release-MT|x86.ActiveCfg = Release|Win32
|
||||||
{EB33566E-DA7F-4D28-9077-88C0B7C77E35}.ReleaseNvidia|Mixed Platforms.ActiveCfg = Release|x64
|
|
||||||
{EB33566E-DA7F-4D28-9077-88C0B7C77E35}.ReleaseNvidia|Mixed Platforms.Build.0 = Release|x64
|
|
||||||
{EB33566E-DA7F-4D28-9077-88C0B7C77E35}.ReleaseNvidia|Win32.ActiveCfg = Release|x64
|
|
||||||
{EB33566E-DA7F-4D28-9077-88C0B7C77E35}.ReleaseNvidia|x64.ActiveCfg = Release|x64
|
|
||||||
{EB33566E-DA7F-4D28-9077-88C0B7C77E35}.ReleaseNvidia|x64.Build.0 = Release|x64
|
|
||||||
{EB33566E-DA7F-4D28-9077-88C0B7C77E35}.ReleaseNvidia|x86.ActiveCfg = Release|x64
|
|
||||||
{EB33566E-DA7F-4D28-9077-88C0B7C77E35}.ReleaseWithoutAsm|Mixed Platforms.ActiveCfg = Release|Win32
|
{EB33566E-DA7F-4D28-9077-88C0B7C77E35}.ReleaseWithoutAsm|Mixed Platforms.ActiveCfg = Release|Win32
|
||||||
{EB33566E-DA7F-4D28-9077-88C0B7C77E35}.ReleaseWithoutAsm|Mixed Platforms.Build.0 = Release|Win32
|
{EB33566E-DA7F-4D28-9077-88C0B7C77E35}.ReleaseWithoutAsm|Mixed Platforms.Build.0 = Release|Win32
|
||||||
{EB33566E-DA7F-4D28-9077-88C0B7C77E35}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32
|
{EB33566E-DA7F-4D28-9077-88C0B7C77E35}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32
|
||||||
@ -802,12 +737,6 @@ Global
|
|||||||
{D6973076-9317-4EF2-A0B8-B7A18AC0713E}.Release-MT|Win32.Build.0 = Release|Win32
|
{D6973076-9317-4EF2-A0B8-B7A18AC0713E}.Release-MT|Win32.Build.0 = Release|Win32
|
||||||
{D6973076-9317-4EF2-A0B8-B7A18AC0713E}.Release-MT|x64.ActiveCfg = Release|Win32
|
{D6973076-9317-4EF2-A0B8-B7A18AC0713E}.Release-MT|x64.ActiveCfg = Release|Win32
|
||||||
{D6973076-9317-4EF2-A0B8-B7A18AC0713E}.Release-MT|x86.ActiveCfg = Release|Win32
|
{D6973076-9317-4EF2-A0B8-B7A18AC0713E}.Release-MT|x86.ActiveCfg = Release|Win32
|
||||||
{D6973076-9317-4EF2-A0B8-B7A18AC0713E}.ReleaseNvidia|Mixed Platforms.ActiveCfg = Release|x64
|
|
||||||
{D6973076-9317-4EF2-A0B8-B7A18AC0713E}.ReleaseNvidia|Mixed Platforms.Build.0 = Release|x64
|
|
||||||
{D6973076-9317-4EF2-A0B8-B7A18AC0713E}.ReleaseNvidia|Win32.ActiveCfg = Release|x64
|
|
||||||
{D6973076-9317-4EF2-A0B8-B7A18AC0713E}.ReleaseNvidia|x64.ActiveCfg = Release|x64
|
|
||||||
{D6973076-9317-4EF2-A0B8-B7A18AC0713E}.ReleaseNvidia|x64.Build.0 = Release|x64
|
|
||||||
{D6973076-9317-4EF2-A0B8-B7A18AC0713E}.ReleaseNvidia|x86.ActiveCfg = Release|x64
|
|
||||||
{D6973076-9317-4EF2-A0B8-B7A18AC0713E}.ReleaseWithoutAsm|Mixed Platforms.ActiveCfg = Release|Win32
|
{D6973076-9317-4EF2-A0B8-B7A18AC0713E}.ReleaseWithoutAsm|Mixed Platforms.ActiveCfg = Release|Win32
|
||||||
{D6973076-9317-4EF2-A0B8-B7A18AC0713E}.ReleaseWithoutAsm|Mixed Platforms.Build.0 = Release|Win32
|
{D6973076-9317-4EF2-A0B8-B7A18AC0713E}.ReleaseWithoutAsm|Mixed Platforms.Build.0 = Release|Win32
|
||||||
{D6973076-9317-4EF2-A0B8-B7A18AC0713E}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32
|
{D6973076-9317-4EF2-A0B8-B7A18AC0713E}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32
|
||||||
@ -864,12 +793,6 @@ Global
|
|||||||
{019DBD2A-273D-4BA4-BF86-B5EFE2ED76B1}.Release-MT|Win32.Build.0 = Release|Win32
|
{019DBD2A-273D-4BA4-BF86-B5EFE2ED76B1}.Release-MT|Win32.Build.0 = Release|Win32
|
||||||
{019DBD2A-273D-4BA4-BF86-B5EFE2ED76B1}.Release-MT|x64.ActiveCfg = Release|Win32
|
{019DBD2A-273D-4BA4-BF86-B5EFE2ED76B1}.Release-MT|x64.ActiveCfg = Release|Win32
|
||||||
{019DBD2A-273D-4BA4-BF86-B5EFE2ED76B1}.Release-MT|x86.ActiveCfg = Release|Win32
|
{019DBD2A-273D-4BA4-BF86-B5EFE2ED76B1}.Release-MT|x86.ActiveCfg = Release|Win32
|
||||||
{019DBD2A-273D-4BA4-BF86-B5EFE2ED76B1}.ReleaseNvidia|Mixed Platforms.ActiveCfg = Release|x64
|
|
||||||
{019DBD2A-273D-4BA4-BF86-B5EFE2ED76B1}.ReleaseNvidia|Mixed Platforms.Build.0 = Release|x64
|
|
||||||
{019DBD2A-273D-4BA4-BF86-B5EFE2ED76B1}.ReleaseNvidia|Win32.ActiveCfg = Release|x64
|
|
||||||
{019DBD2A-273D-4BA4-BF86-B5EFE2ED76B1}.ReleaseNvidia|x64.ActiveCfg = Release|x64
|
|
||||||
{019DBD2A-273D-4BA4-BF86-B5EFE2ED76B1}.ReleaseNvidia|x64.Build.0 = Release|x64
|
|
||||||
{019DBD2A-273D-4BA4-BF86-B5EFE2ED76B1}.ReleaseNvidia|x86.ActiveCfg = Release|x64
|
|
||||||
{019DBD2A-273D-4BA4-BF86-B5EFE2ED76B1}.ReleaseWithoutAsm|Mixed Platforms.ActiveCfg = Release|Win32
|
{019DBD2A-273D-4BA4-BF86-B5EFE2ED76B1}.ReleaseWithoutAsm|Mixed Platforms.ActiveCfg = Release|Win32
|
||||||
{019DBD2A-273D-4BA4-BF86-B5EFE2ED76B1}.ReleaseWithoutAsm|Mixed Platforms.Build.0 = Release|Win32
|
{019DBD2A-273D-4BA4-BF86-B5EFE2ED76B1}.ReleaseWithoutAsm|Mixed Platforms.Build.0 = Release|Win32
|
||||||
{019DBD2A-273D-4BA4-BF86-B5EFE2ED76B1}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32
|
{019DBD2A-273D-4BA4-BF86-B5EFE2ED76B1}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32
|
||||||
@ -926,12 +849,6 @@ Global
|
|||||||
{1D6039F6-5078-416F-A3AF-A36EFC7E6A1C}.Release-MT|Win32.Build.0 = Release|Win32
|
{1D6039F6-5078-416F-A3AF-A36EFC7E6A1C}.Release-MT|Win32.Build.0 = Release|Win32
|
||||||
{1D6039F6-5078-416F-A3AF-A36EFC7E6A1C}.Release-MT|x64.ActiveCfg = Release|Win32
|
{1D6039F6-5078-416F-A3AF-A36EFC7E6A1C}.Release-MT|x64.ActiveCfg = Release|Win32
|
||||||
{1D6039F6-5078-416F-A3AF-A36EFC7E6A1C}.Release-MT|x86.ActiveCfg = Release|Win32
|
{1D6039F6-5078-416F-A3AF-A36EFC7E6A1C}.Release-MT|x86.ActiveCfg = Release|Win32
|
||||||
{1D6039F6-5078-416F-A3AF-A36EFC7E6A1C}.ReleaseNvidia|Mixed Platforms.ActiveCfg = Release|x64
|
|
||||||
{1D6039F6-5078-416F-A3AF-A36EFC7E6A1C}.ReleaseNvidia|Mixed Platforms.Build.0 = Release|x64
|
|
||||||
{1D6039F6-5078-416F-A3AF-A36EFC7E6A1C}.ReleaseNvidia|Win32.ActiveCfg = Release|x64
|
|
||||||
{1D6039F6-5078-416F-A3AF-A36EFC7E6A1C}.ReleaseNvidia|x64.ActiveCfg = Release|x64
|
|
||||||
{1D6039F6-5078-416F-A3AF-A36EFC7E6A1C}.ReleaseNvidia|x64.Build.0 = Release|x64
|
|
||||||
{1D6039F6-5078-416F-A3AF-A36EFC7E6A1C}.ReleaseNvidia|x86.ActiveCfg = Release|x64
|
|
||||||
{1D6039F6-5078-416F-A3AF-A36EFC7E6A1C}.ReleaseWithoutAsm|Mixed Platforms.ActiveCfg = Release|Win32
|
{1D6039F6-5078-416F-A3AF-A36EFC7E6A1C}.ReleaseWithoutAsm|Mixed Platforms.ActiveCfg = Release|Win32
|
||||||
{1D6039F6-5078-416F-A3AF-A36EFC7E6A1C}.ReleaseWithoutAsm|Mixed Platforms.Build.0 = Release|Win32
|
{1D6039F6-5078-416F-A3AF-A36EFC7E6A1C}.ReleaseWithoutAsm|Mixed Platforms.Build.0 = Release|Win32
|
||||||
{1D6039F6-5078-416F-A3AF-A36EFC7E6A1C}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32
|
{1D6039F6-5078-416F-A3AF-A36EFC7E6A1C}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32
|
||||||
@ -1001,14 +918,6 @@ Global
|
|||||||
{C8096C47-E358-438C-A520-146D46B0637D}.Release-MT|x64.Build.0 = ReleaseNvidia|x64
|
{C8096C47-E358-438C-A520-146D46B0637D}.Release-MT|x64.Build.0 = ReleaseNvidia|x64
|
||||||
{C8096C47-E358-438C-A520-146D46B0637D}.Release-MT|x86.ActiveCfg = ReleaseNvidia|x86
|
{C8096C47-E358-438C-A520-146D46B0637D}.Release-MT|x86.ActiveCfg = ReleaseNvidia|x86
|
||||||
{C8096C47-E358-438C-A520-146D46B0637D}.Release-MT|x86.Build.0 = ReleaseNvidia|x86
|
{C8096C47-E358-438C-A520-146D46B0637D}.Release-MT|x86.Build.0 = ReleaseNvidia|x86
|
||||||
{C8096C47-E358-438C-A520-146D46B0637D}.ReleaseNvidia|Mixed Platforms.ActiveCfg = ReleaseNvidia|x86
|
|
||||||
{C8096C47-E358-438C-A520-146D46B0637D}.ReleaseNvidia|Mixed Platforms.Build.0 = ReleaseNvidia|x86
|
|
||||||
{C8096C47-E358-438C-A520-146D46B0637D}.ReleaseNvidia|Win32.ActiveCfg = ReleaseNvidia|x86
|
|
||||||
{C8096C47-E358-438C-A520-146D46B0637D}.ReleaseNvidia|Win32.Build.0 = ReleaseNvidia|x86
|
|
||||||
{C8096C47-E358-438C-A520-146D46B0637D}.ReleaseNvidia|x64.ActiveCfg = ReleaseNvidia|x64
|
|
||||||
{C8096C47-E358-438C-A520-146D46B0637D}.ReleaseNvidia|x64.Build.0 = ReleaseNvidia|x64
|
|
||||||
{C8096C47-E358-438C-A520-146D46B0637D}.ReleaseNvidia|x86.ActiveCfg = ReleaseNvidia|x86
|
|
||||||
{C8096C47-E358-438C-A520-146D46B0637D}.ReleaseNvidia|x86.Build.0 = ReleaseNvidia|x86
|
|
||||||
{C8096C47-E358-438C-A520-146D46B0637D}.ReleaseWithoutAsm|Mixed Platforms.ActiveCfg = ReleaseNvidia|x86
|
{C8096C47-E358-438C-A520-146D46B0637D}.ReleaseWithoutAsm|Mixed Platforms.ActiveCfg = ReleaseNvidia|x86
|
||||||
{C8096C47-E358-438C-A520-146D46B0637D}.ReleaseWithoutAsm|Mixed Platforms.Build.0 = ReleaseNvidia|x86
|
{C8096C47-E358-438C-A520-146D46B0637D}.ReleaseWithoutAsm|Mixed Platforms.Build.0 = ReleaseNvidia|x86
|
||||||
{C8096C47-E358-438C-A520-146D46B0637D}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseNvidia|x86
|
{C8096C47-E358-438C-A520-146D46B0637D}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseNvidia|x86
|
||||||
|
@ -147,7 +147,7 @@ xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\flam3-palettes.xml" "$(OutDir)"</
|
|||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
<ClCompile>
|
<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>
|
<PreprocessorDefinitions>UNICODE;WIN32;QT_DLL;QT_CORE_LIB;QT_GUI_LIB;QT_MULTIMEDIA_LIB;QT_HELP_LIB;QT_OPENGL_LIB;QT_WIDGETS_LIB;QT_XML_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>.;$(QTDIR)\include;$(ProjectDir)..\..\..\Fractorium\GeneratedFiles;$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName;$(QTDIR)\..\qtmultimedia\include\QtMultimedia;$(QTDIR)\..\qtmultimedia\include;$(QTDIR)\..\qttools\include;$(QTDIR)\..\qttools\include\QtHelp;$(QTDIR)\include\QtConcurrent;$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtOpenGL;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtXml;.\GeneratedFiles;$(ProjectDir)..\..\..\Source\Ember;$(ProjectDir)..\..\..\Source\EmberCL;$(ProjectDir)..\..\..\Source\EmberCommon;$(ProjectDir)..\..\..\..\glm;$(ProjectDir)..\..\..\..\tbb\include;$(ProjectDir)..\..\..\..\libjpeg;$(ProjectDir)..\..\..\..\libpng;$(ProjectDir)..\..\..\..\libxml2\include;$(ProjectDir)..\..\..\..\glew\include;$(AMDAPPSDKROOT)\include;.\GeneratedFiles\$(ConfigurationName);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>.;$(QTDIR)\include;$(ProjectDir)..\..\..\Fractorium\GeneratedFiles;$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName;$(QTDIR)\..\qtmultimedia\include\QtMultimedia;$(QTDIR)\..\qtmultimedia\include;$(QTDIR)\..\qttools\include;$(QTDIR)\..\qttools\include\QtHelp;$(QTDIR)\include\QtConcurrent;$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtOpenGL;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtXml;.\GeneratedFiles;$(ProjectDir)..\..\..\Source\Ember;$(ProjectDir)..\..\..\Source\EmberCL;$(ProjectDir)..\..\..\Source\EmberCommon;$(ProjectDir)..\..\..\..\glm;$(ProjectDir)..\..\..\..\tbb\include;$(ProjectDir)..\..\..\..\libjpeg;$(ProjectDir)..\..\..\..\libpng;$(ProjectDir)..\..\..\..\libxml2\include;$(AMDAPPSDKROOT)\include;$(CUDA_PATH)\include;.\GeneratedFiles\$(ConfigurationName);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||||
@ -165,7 +165,7 @@ xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\flam3-palettes.xml" "$(OutDir)"</
|
|||||||
<Link>
|
<Link>
|
||||||
<SubSystem>Windows</SubSystem>
|
<SubSystem>Windows</SubSystem>
|
||||||
<OutputFile>$(OutDir)\$(ProjectName).exe</OutputFile>
|
<OutputFile>$(OutDir)\$(ProjectName).exe</OutputFile>
|
||||||
<AdditionalLibraryDirectories>$(QTDIR)\lib;$(AMDAPPSDKROOT)\lib\x86_64;$(CUDA_PATH)lib\$(PlatformName);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
<AdditionalLibraryDirectories>$(QTDIR)\lib;$(AMDAPPSDKROOT)\lib\x86_64;$(CUDA_PATH)\lib\$(PlatformName);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<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;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>qtmaind.lib;Qt5Cored.lib;Qt5Guid.lib;Qt5OpenGLd.lib;opengl32.lib;glu32.lib;opencl.lib;Qt5Widgetsd.lib;Qt5Xmld.lib;Ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
</Link>
|
</Link>
|
||||||
@ -233,7 +233,7 @@ xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\flam3-palettes.xml" "$(OutDir)"</
|
|||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
<ClCompile>
|
<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>
|
<PreprocessorDefinitions>UNICODE;WIN32;QT_DLL;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_GUI_LIB;QT_MULTIMEDIA_LIB;QT_HELP_LIB;QT_OPENGL_LIB;QT_WIDGETS_LIB;QT_XML_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>.;$(QTDIR)\include;$(ProjectDir)..\..\..\Fractorium\GeneratedFiles;$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName;$(QTDIR)\..\qtmultimedia\include\QtMultimedia;$(QTDIR)\..\qtmultimedia\include;$(QTDIR)\..\qttools\include;$(QTDIR)\..\qttools\include\QtHelp;$(QTDIR)\include\QtConcurrent;$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtOpenGL;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtXml;.\GeneratedFiles;$(ProjectDir)..\..\..\Source\Ember;$(ProjectDir)..\..\..\Source\EmberCL;$(ProjectDir)..\..\..\Source\EmberCommon;$(ProjectDir)..\..\..\..\glm;$(ProjectDir)..\..\..\..\tbb\include;$(ProjectDir)..\..\..\..\libjpeg;$(ProjectDir)..\..\..\..\libpng;$(ProjectDir)..\..\..\..\libxml2\include;$(ProjectDir)..\..\..\..\glew\include;$(AMDAPPSDKROOT)\include;.\GeneratedFiles\$(ConfigurationName);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>.;$(QTDIR)\include;$(ProjectDir)..\..\..\Fractorium\GeneratedFiles;$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName;$(QTDIR)\..\qtmultimedia\include\QtMultimedia;$(QTDIR)\..\qtmultimedia\include;$(QTDIR)\..\qttools\include;$(QTDIR)\..\qttools\include\QtHelp;$(QTDIR)\include\QtConcurrent;$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtOpenGL;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtXml;.\GeneratedFiles;$(ProjectDir)..\..\..\Source\Ember;$(ProjectDir)..\..\..\Source\EmberCL;$(ProjectDir)..\..\..\Source\EmberCommon;$(ProjectDir)..\..\..\..\glm;$(ProjectDir)..\..\..\..\tbb\include;$(ProjectDir)..\..\..\..\libjpeg;$(ProjectDir)..\..\..\..\libpng;$(ProjectDir)..\..\..\..\libxml2\include;$(AMDAPPSDKROOT)\include;$(CUDA_PATH)\include;.\GeneratedFiles\$(ConfigurationName);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||||
<TreatWChar_tAsBuiltInType>false</TreatWChar_tAsBuiltInType>
|
<TreatWChar_tAsBuiltInType>false</TreatWChar_tAsBuiltInType>
|
||||||
@ -251,7 +251,7 @@ xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\flam3-palettes.xml" "$(OutDir)"</
|
|||||||
<Link>
|
<Link>
|
||||||
<SubSystem>Windows</SubSystem>
|
<SubSystem>Windows</SubSystem>
|
||||||
<OutputFile>$(OutDir)\$(ProjectName).exe</OutputFile>
|
<OutputFile>$(OutDir)\$(ProjectName).exe</OutputFile>
|
||||||
<AdditionalLibraryDirectories>$(QTDIR)\lib;$(AMDAPPSDKROOT)\lib\x86_64;$(CUDA_PATH)lib\$(PlatformName);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
<AdditionalLibraryDirectories>$(QTDIR)\lib;$(AMDAPPSDKROOT)\lib\x86_64;$(CUDA_PATH)\lib\$(PlatformName);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
<AdditionalDependencies>qtmain.lib;Qt5Core.lib;Qt5Gui.lib;Qt5OpenGL.lib;opengl32.lib;glu32.lib;opencl.lib;Qt5Widgets.lib;Ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>qtmain.lib;Qt5Core.lib;Qt5Gui.lib;Qt5OpenGL.lib;opengl32.lib;glu32.lib;opencl.lib;Qt5Widgets.lib;Ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
<Version>0.1</Version>
|
<Version>0.1</Version>
|
||||||
@ -680,7 +680,7 @@ xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\flam3-palettes.xml" "$(OutDir)"</
|
|||||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
|
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
|
||||||
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing VariationsDialog.h...</Message>
|
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing VariationsDialog.h...</Message>
|
||||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
||||||
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/VariationsDialog.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(ProjectDir)..\..\..\..\glew\include" "-I$(AMDAPPSDKROOT)\include" "-I.\GeneratedFiles\$(ConfigurationName)\."</Command>
|
<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$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(AMDAPPSDKROOT)\include" "-I$(CUDA_PATH)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/VariationsDialog.h"</Command>
|
||||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
|
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
|
||||||
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Moc%27ing VariationsDialog.h...</Message>
|
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Moc%27ing VariationsDialog.h...</Message>
|
||||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
||||||
@ -688,7 +688,7 @@ xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\flam3-palettes.xml" "$(OutDir)"</
|
|||||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
|
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
|
||||||
<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Moc%27ing VariationsDialog.h...</Message>
|
<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Moc%27ing VariationsDialog.h...</Message>
|
||||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
||||||
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/VariationsDialog.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(ProjectDir)..\..\..\..\glew\include" "-I$(AMDAPPSDKROOT)\include" "-I.\GeneratedFiles\$(ConfigurationName)\."</Command>
|
<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$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(AMDAPPSDKROOT)\include" "-I$(CUDA_PATH)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/VariationsDialog.h"</Command>
|
||||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
|
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
|
||||||
<Message Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">Moc%27ing VariationsDialog.h...</Message>
|
<Message Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">Moc%27ing VariationsDialog.h...</Message>
|
||||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
<Outputs Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
||||||
@ -706,7 +706,7 @@ xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\flam3-palettes.xml" "$(OutDir)"</
|
|||||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
|
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
|
||||||
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing QssDialog.h...</Message>
|
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing QssDialog.h...</Message>
|
||||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
||||||
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/QssDialog.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(ProjectDir)..\..\..\..\glew\include" "-I$(AMDAPPSDKROOT)\include" "-I.\GeneratedFiles\$(ConfigurationName)\."</Command>
|
<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$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(AMDAPPSDKROOT)\include" "-I$(CUDA_PATH)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/QssDialog.h"</Command>
|
||||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
|
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
|
||||||
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Moc%27ing QssDialog.h...</Message>
|
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Moc%27ing QssDialog.h...</Message>
|
||||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
||||||
@ -714,7 +714,7 @@ xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\flam3-palettes.xml" "$(OutDir)"</
|
|||||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
|
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
|
||||||
<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Moc%27ing QssDialog.h...</Message>
|
<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Moc%27ing QssDialog.h...</Message>
|
||||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
||||||
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/QssDialog.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(ProjectDir)..\..\..\..\glew\include" "-I$(AMDAPPSDKROOT)\include" "-I.\GeneratedFiles\$(ConfigurationName)\."</Command>
|
<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$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(AMDAPPSDKROOT)\include" "-I$(CUDA_PATH)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/QssDialog.h"</Command>
|
||||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
|
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
|
||||||
<Message Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">Moc%27ing QssDialog.h...</Message>
|
<Message Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">Moc%27ing QssDialog.h...</Message>
|
||||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
<Outputs Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
||||||
@ -732,7 +732,7 @@ xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\flam3-palettes.xml" "$(OutDir)"</
|
|||||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
|
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
|
||||||
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing csshighlighter.h...</Message>
|
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing csshighlighter.h...</Message>
|
||||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
||||||
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/csshighlighter.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(ProjectDir)..\..\..\..\glew\include" "-I$(AMDAPPSDKROOT)\include" "-I.\GeneratedFiles\$(ConfigurationName)\."</Command>
|
<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$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(AMDAPPSDKROOT)\include" "-I$(CUDA_PATH)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/csshighlighter.h"</Command>
|
||||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
|
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
|
||||||
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Moc%27ing csshighlighter.h...</Message>
|
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Moc%27ing csshighlighter.h...</Message>
|
||||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
||||||
@ -740,7 +740,7 @@ xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\flam3-palettes.xml" "$(OutDir)"</
|
|||||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
|
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
|
||||||
<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Moc%27ing csshighlighter.h...</Message>
|
<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Moc%27ing csshighlighter.h...</Message>
|
||||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
||||||
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/csshighlighter.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(ProjectDir)..\..\..\..\glew\include" "-I$(AMDAPPSDKROOT)\include" "-I.\GeneratedFiles\$(ConfigurationName)\."</Command>
|
<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$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(AMDAPPSDKROOT)\include" "-I$(CUDA_PATH)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/csshighlighter.h"</Command>
|
||||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">$(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
|
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">$(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
|
||||||
<Message Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">Moc%27ing csshighlighter.h...</Message>
|
<Message Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">Moc%27ing csshighlighter.h...</Message>
|
||||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
<Outputs Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
||||||
@ -760,7 +760,7 @@ xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\flam3-palettes.xml" "$(OutDir)"</
|
|||||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
|
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
|
||||||
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing QssTextEdit.h...</Message>
|
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing QssTextEdit.h...</Message>
|
||||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
||||||
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/QssTextEdit.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(ProjectDir)..\..\..\..\glew\include" "-I$(AMDAPPSDKROOT)\include" "-I.\GeneratedFiles\$(ConfigurationName)\."</Command>
|
<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$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(AMDAPPSDKROOT)\include" "-I$(CUDA_PATH)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/QssTextEdit.h"</Command>
|
||||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
|
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
|
||||||
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Moc%27ing QssTextEdit.h...</Message>
|
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Moc%27ing QssTextEdit.h...</Message>
|
||||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
||||||
@ -768,7 +768,7 @@ xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\flam3-palettes.xml" "$(OutDir)"</
|
|||||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
|
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
|
||||||
<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Moc%27ing QssTextEdit.h...</Message>
|
<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Moc%27ing QssTextEdit.h...</Message>
|
||||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
||||||
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/QssTextEdit.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(ProjectDir)..\..\..\..\glew\include" "-I$(AMDAPPSDKROOT)\include" "-I.\GeneratedFiles\$(ConfigurationName)\."</Command>
|
<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$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(AMDAPPSDKROOT)\include" "-I$(CUDA_PATH)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/QssTextEdit.h"</Command>
|
||||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
|
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
|
||||||
<Message Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">Moc%27ing QssTextEdit.h...</Message>
|
<Message Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">Moc%27ing QssTextEdit.h...</Message>
|
||||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
<Outputs Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
||||||
@ -788,7 +788,7 @@ xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\flam3-palettes.xml" "$(OutDir)"</
|
|||||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs)</AdditionalInputs>
|
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs)</AdditionalInputs>
|
||||||
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing OptionsDialog.h...</Message>
|
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing OptionsDialog.h...</Message>
|
||||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
<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$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(ProjectDir)..\..\..\..\glew\include" "-I$(AMDAPPSDKROOT)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/OptionsDialog.h"</Command>
|
<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$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(AMDAPPSDKROOT)\include" "-I$(CUDA_PATH)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/OptionsDialog.h"</Command>
|
||||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs)</AdditionalInputs>
|
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs)</AdditionalInputs>
|
||||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs)</AdditionalInputs>
|
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs)</AdditionalInputs>
|
||||||
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Moc%27ing OptionsDialog.h...</Message>
|
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Moc%27ing OptionsDialog.h...</Message>
|
||||||
@ -803,7 +803,7 @@ xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\flam3-palettes.xml" "$(OutDir)"</
|
|||||||
<Message Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">Moc%27ing OptionsDialog.h...</Message>
|
<Message Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">Moc%27ing OptionsDialog.h...</Message>
|
||||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
||||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
<Outputs Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|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$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(ProjectDir)..\..\..\..\glew\include" "-I$(AMDAPPSDKROOT)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/OptionsDialog.h"</Command>
|
<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$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(AMDAPPSDKROOT)\include" "-I$(CUDA_PATH)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/OptionsDialog.h"</Command>
|
||||||
<Command Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/OptionsDialog.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(ProjectDir)..\..\..\..\glew\include" "-I$(CUDA_PATH)include" "-I.\GeneratedFiles\$(ConfigurationName)\."</Command>
|
<Command Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/OptionsDialog.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(ProjectDir)..\..\..\..\glew\include" "-I$(CUDA_PATH)include" "-I.\GeneratedFiles\$(ConfigurationName)\."</Command>
|
||||||
</CustomBuild>
|
</CustomBuild>
|
||||||
<CustomBuild Include="..\..\..\Source\Fractorium\AboutDialog.h">
|
<CustomBuild Include="..\..\..\Source\Fractorium\AboutDialog.h">
|
||||||
@ -814,7 +814,7 @@ xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\flam3-palettes.xml" "$(OutDir)"</
|
|||||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs)</AdditionalInputs>
|
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs)</AdditionalInputs>
|
||||||
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing AboutDialog.h...</Message>
|
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing AboutDialog.h...</Message>
|
||||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
<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$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(ProjectDir)..\..\..\..\glew\include" "-I$(AMDAPPSDKROOT)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/AboutDialog.h"</Command>
|
<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$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(AMDAPPSDKROOT)\include" "-I$(CUDA_PATH)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/AboutDialog.h"</Command>
|
||||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs)</AdditionalInputs>
|
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs)</AdditionalInputs>
|
||||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs)</AdditionalInputs>
|
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs)</AdditionalInputs>
|
||||||
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Moc%27ing AboutDialog.h...</Message>
|
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Moc%27ing AboutDialog.h...</Message>
|
||||||
@ -829,7 +829,7 @@ xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\flam3-palettes.xml" "$(OutDir)"</
|
|||||||
<Message Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">Moc%27ing AboutDialog.h...</Message>
|
<Message Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">Moc%27ing AboutDialog.h...</Message>
|
||||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
||||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
<Outputs Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|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$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(ProjectDir)..\..\..\..\glew\include" "-I$(AMDAPPSDKROOT)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/AboutDialog.h"</Command>
|
<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$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(AMDAPPSDKROOT)\include" "-I$(CUDA_PATH)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/AboutDialog.h"</Command>
|
||||||
<Command Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/AboutDialog.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(ProjectDir)..\..\..\..\glew\include" "-I$(CUDA_PATH)include" "-I.\GeneratedFiles\$(ConfigurationName)\."</Command>
|
<Command Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/AboutDialog.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(ProjectDir)..\..\..\..\glew\include" "-I$(CUDA_PATH)include" "-I.\GeneratedFiles\$(ConfigurationName)\."</Command>
|
||||||
</CustomBuild>
|
</CustomBuild>
|
||||||
<CustomBuild Include="..\..\..\Source\Fractorium\FinalRenderDialog.h">
|
<CustomBuild Include="..\..\..\Source\Fractorium\FinalRenderDialog.h">
|
||||||
@ -840,7 +840,7 @@ xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\flam3-palettes.xml" "$(OutDir)"</
|
|||||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs)</AdditionalInputs>
|
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs)</AdditionalInputs>
|
||||||
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing FinalRenderDialog.h...</Message>
|
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing FinalRenderDialog.h...</Message>
|
||||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
<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$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(ProjectDir)..\..\..\..\glew\include" "-I$(AMDAPPSDKROOT)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/FinalRenderDialog.h"</Command>
|
<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$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(AMDAPPSDKROOT)\include" "-I$(CUDA_PATH)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/FinalRenderDialog.h"</Command>
|
||||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs)</AdditionalInputs>
|
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs)</AdditionalInputs>
|
||||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs)</AdditionalInputs>
|
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs)</AdditionalInputs>
|
||||||
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Moc%27ing FinalRenderDialog.h...</Message>
|
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Moc%27ing FinalRenderDialog.h...</Message>
|
||||||
@ -855,7 +855,7 @@ xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\flam3-palettes.xml" "$(OutDir)"</
|
|||||||
<Message Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">Moc%27ing FinalRenderDialog.h...</Message>
|
<Message Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">Moc%27ing FinalRenderDialog.h...</Message>
|
||||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
||||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
<Outputs Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|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$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(ProjectDir)..\..\..\..\glew\include" "-I$(AMDAPPSDKROOT)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/FinalRenderDialog.h"</Command>
|
<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$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(AMDAPPSDKROOT)\include" "-I$(CUDA_PATH)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/FinalRenderDialog.h"</Command>
|
||||||
<Command Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/FinalRenderDialog.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(ProjectDir)..\..\..\..\glew\include" "-I$(CUDA_PATH)include" "-I.\GeneratedFiles\$(ConfigurationName)\."</Command>
|
<Command Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/FinalRenderDialog.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(ProjectDir)..\..\..\..\glew\include" "-I$(CUDA_PATH)include" "-I.\GeneratedFiles\$(ConfigurationName)\."</Command>
|
||||||
</CustomBuild>
|
</CustomBuild>
|
||||||
<CustomBuild Include="..\..\..\Source\Fractorium\EmberTreeWidgetItem.h">
|
<CustomBuild Include="..\..\..\Source\Fractorium\EmberTreeWidgetItem.h">
|
||||||
@ -910,7 +910,7 @@ xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\flam3-palettes.xml" "$(OutDir)"</
|
|||||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs)</AdditionalInputs>
|
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs)</AdditionalInputs>
|
||||||
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing FractoriumSettings.h...</Message>
|
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing FractoriumSettings.h...</Message>
|
||||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
<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$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(ProjectDir)..\..\..\..\glew\include" "-I$(AMDAPPSDKROOT)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/FractoriumSettings.h"</Command>
|
<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$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(AMDAPPSDKROOT)\include" "-I$(CUDA_PATH)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/FractoriumSettings.h"</Command>
|
||||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs)</AdditionalInputs>
|
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs)</AdditionalInputs>
|
||||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs)</AdditionalInputs>
|
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs)</AdditionalInputs>
|
||||||
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Moc%27ing FractoriumSettings.h...</Message>
|
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Moc%27ing FractoriumSettings.h...</Message>
|
||||||
@ -925,7 +925,7 @@ xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\flam3-palettes.xml" "$(OutDir)"</
|
|||||||
<Message Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">Moc%27ing FractoriumSettings.h...</Message>
|
<Message Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">Moc%27ing FractoriumSettings.h...</Message>
|
||||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
||||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
<Outputs Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|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$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(ProjectDir)..\..\..\..\glew\include" "-I$(AMDAPPSDKROOT)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/FractoriumSettings.h"</Command>
|
<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$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(AMDAPPSDKROOT)\include" "-I$(CUDA_PATH)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/FractoriumSettings.h"</Command>
|
||||||
<Command Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/FractoriumSettings.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(ProjectDir)..\..\..\..\glew\include" "-I$(CUDA_PATH)include" "-I.\GeneratedFiles\$(ConfigurationName)\."</Command>
|
<Command Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/FractoriumSettings.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(ProjectDir)..\..\..\..\glew\include" "-I$(CUDA_PATH)include" "-I.\GeneratedFiles\$(ConfigurationName)\."</Command>
|
||||||
</CustomBuild>
|
</CustomBuild>
|
||||||
<CustomBuild Include="..\..\..\Source\Fractorium\TwoButtonComboWidget.h">
|
<CustomBuild Include="..\..\..\Source\Fractorium\TwoButtonComboWidget.h">
|
||||||
@ -963,7 +963,7 @@ xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\flam3-palettes.xml" "$(OutDir)"</
|
|||||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
|
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
|
||||||
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing CurvesGraphicsView.h...</Message>
|
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing CurvesGraphicsView.h...</Message>
|
||||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
||||||
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/CurvesGraphicsView.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(ProjectDir)..\..\..\..\glew\include" "-I$(AMDAPPSDKROOT)\include" "-I.\GeneratedFiles\$(ConfigurationName)\."</Command>
|
<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$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(AMDAPPSDKROOT)\include" "-I$(CUDA_PATH)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/CurvesGraphicsView.h"</Command>
|
||||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
|
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
|
||||||
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Moc%27ing CurvesGraphicsView.h...</Message>
|
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Moc%27ing CurvesGraphicsView.h...</Message>
|
||||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
||||||
@ -971,7 +971,7 @@ xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\flam3-palettes.xml" "$(OutDir)"</
|
|||||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
|
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
|
||||||
<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Moc%27ing CurvesGraphicsView.h...</Message>
|
<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Moc%27ing CurvesGraphicsView.h...</Message>
|
||||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
||||||
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/CurvesGraphicsView.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(ProjectDir)..\..\..\..\glew\include" "-I$(AMDAPPSDKROOT)\include" "-I.\GeneratedFiles\$(ConfigurationName)\."</Command>
|
<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$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(AMDAPPSDKROOT)\include" "-I$(CUDA_PATH)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/CurvesGraphicsView.h"</Command>
|
||||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
|
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
|
||||||
<Message Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">Moc%27ing CurvesGraphicsView.h...</Message>
|
<Message Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">Moc%27ing CurvesGraphicsView.h...</Message>
|
||||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
<Outputs Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
||||||
@ -1024,7 +1024,7 @@ xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\flam3-palettes.xml" "$(OutDir)"</
|
|||||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs)</AdditionalInputs>
|
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs)</AdditionalInputs>
|
||||||
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing GLWidget.h...</Message>
|
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing GLWidget.h...</Message>
|
||||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
<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$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(ProjectDir)..\..\..\..\glew\include" "-I$(AMDAPPSDKROOT)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/GLWidget.h"</Command>
|
<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$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(AMDAPPSDKROOT)\include" "-I$(CUDA_PATH)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/GLWidget.h"</Command>
|
||||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs)</AdditionalInputs>
|
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs)</AdditionalInputs>
|
||||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs)</AdditionalInputs>
|
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs)</AdditionalInputs>
|
||||||
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Moc%27ing GLWidget.h...</Message>
|
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Moc%27ing GLWidget.h...</Message>
|
||||||
@ -1039,7 +1039,7 @@ xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\flam3-palettes.xml" "$(OutDir)"</
|
|||||||
<Message Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">Moc%27ing GLWidget.h...</Message>
|
<Message Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">Moc%27ing GLWidget.h...</Message>
|
||||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
||||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
<Outputs Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|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$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(ProjectDir)..\..\..\..\glew\include" "-I$(AMDAPPSDKROOT)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/GLWidget.h"</Command>
|
<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$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(AMDAPPSDKROOT)\include" "-I$(CUDA_PATH)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/GLWidget.h"</Command>
|
||||||
<Command Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/GLWidget.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(ProjectDir)..\..\..\..\glew\include" "-I$(CUDA_PATH)include" "-I.\GeneratedFiles\$(ConfigurationName)\."</Command>
|
<Command Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/GLWidget.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(ProjectDir)..\..\..\..\glew\include" "-I$(CUDA_PATH)include" "-I.\GeneratedFiles\$(ConfigurationName)\."</Command>
|
||||||
</CustomBuild>
|
</CustomBuild>
|
||||||
<ClInclude Include="..\..\..\..\glm\glm\glm.hpp" />
|
<ClInclude Include="..\..\..\..\glm\glm\glm.hpp" />
|
||||||
@ -1051,7 +1051,7 @@ xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\flam3-palettes.xml" "$(OutDir)"</
|
|||||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs)</AdditionalInputs>
|
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs)</AdditionalInputs>
|
||||||
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing DoubleSpinBox.h...</Message>
|
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing DoubleSpinBox.h...</Message>
|
||||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
<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$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(ProjectDir)..\..\..\..\glew\include" "-I$(AMDAPPSDKROOT)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/DoubleSpinBox.h"</Command>
|
<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$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(AMDAPPSDKROOT)\include" "-I$(CUDA_PATH)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/DoubleSpinBox.h"</Command>
|
||||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs)</AdditionalInputs>
|
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs)</AdditionalInputs>
|
||||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs)</AdditionalInputs>
|
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs)</AdditionalInputs>
|
||||||
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Moc%27ing DoubleSpinBox.h...</Message>
|
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Moc%27ing DoubleSpinBox.h...</Message>
|
||||||
@ -1066,7 +1066,7 @@ xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\flam3-palettes.xml" "$(OutDir)"</
|
|||||||
<Message Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">Moc%27ing DoubleSpinBox.h...</Message>
|
<Message Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">Moc%27ing DoubleSpinBox.h...</Message>
|
||||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
||||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
<Outputs Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|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$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(ProjectDir)..\..\..\..\glew\include" "-I$(AMDAPPSDKROOT)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/DoubleSpinBox.h"</Command>
|
<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$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(AMDAPPSDKROOT)\include" "-I$(CUDA_PATH)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/DoubleSpinBox.h"</Command>
|
||||||
<Command Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/DoubleSpinBox.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(ProjectDir)..\..\..\..\glew\include" "-I$(CUDA_PATH)include" "-I.\GeneratedFiles\$(ConfigurationName)\."</Command>
|
<Command Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/DoubleSpinBox.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(ProjectDir)..\..\..\..\glew\include" "-I$(CUDA_PATH)include" "-I.\GeneratedFiles\$(ConfigurationName)\."</Command>
|
||||||
</CustomBuild>
|
</CustomBuild>
|
||||||
<CustomBuild Include="..\..\..\Source\Fractorium\SpinBox.h">
|
<CustomBuild Include="..\..\..\Source\Fractorium\SpinBox.h">
|
||||||
@ -1077,7 +1077,7 @@ xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\flam3-palettes.xml" "$(OutDir)"</
|
|||||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs)</AdditionalInputs>
|
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs)</AdditionalInputs>
|
||||||
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing SpinBox.h...</Message>
|
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing SpinBox.h...</Message>
|
||||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
<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$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(ProjectDir)..\..\..\..\glew\include" "-I$(AMDAPPSDKROOT)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/SpinBox.h"</Command>
|
<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$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(AMDAPPSDKROOT)\include" "-I$(CUDA_PATH)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/SpinBox.h"</Command>
|
||||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs)</AdditionalInputs>
|
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs)</AdditionalInputs>
|
||||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs)</AdditionalInputs>
|
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs)</AdditionalInputs>
|
||||||
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Moc%27ing SpinBox.h...</Message>
|
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Moc%27ing SpinBox.h...</Message>
|
||||||
@ -1092,7 +1092,7 @@ xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\flam3-palettes.xml" "$(OutDir)"</
|
|||||||
<Message Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">Moc%27ing SpinBox.h...</Message>
|
<Message Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">Moc%27ing SpinBox.h...</Message>
|
||||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
||||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
<Outputs Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|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$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(ProjectDir)..\..\..\..\glew\include" "-I$(AMDAPPSDKROOT)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/SpinBox.h"</Command>
|
<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$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(AMDAPPSDKROOT)\include" "-I$(CUDA_PATH)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/SpinBox.h"</Command>
|
||||||
<Command Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/SpinBox.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(ProjectDir)..\..\..\..\glew\include" "-I$(CUDA_PATH)include" "-I.\GeneratedFiles\$(ConfigurationName)\."</Command>
|
<Command Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/SpinBox.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(ProjectDir)..\..\..\..\glew\include" "-I$(CUDA_PATH)include" "-I.\GeneratedFiles\$(ConfigurationName)\."</Command>
|
||||||
</CustomBuild>
|
</CustomBuild>
|
||||||
<CustomBuild Include="..\..\..\Source\Fractorium\StealthComboBox.h">
|
<CustomBuild Include="..\..\..\Source\Fractorium\StealthComboBox.h">
|
||||||
@ -1201,7 +1201,7 @@ xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\flam3-palettes.xml" "$(OutDir)"</
|
|||||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs)</AdditionalInputs>
|
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs)</AdditionalInputs>
|
||||||
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing Fractorium.h...</Message>
|
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing Fractorium.h...</Message>
|
||||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
<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$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(ProjectDir)..\..\..\..\glew\include" "-I$(AMDAPPSDKROOT)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/Fractorium.h"</Command>
|
<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$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(AMDAPPSDKROOT)\include" "-I$(CUDA_PATH)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/Fractorium.h"</Command>
|
||||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs)</AdditionalInputs>
|
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs)</AdditionalInputs>
|
||||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs)</AdditionalInputs>
|
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs)</AdditionalInputs>
|
||||||
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Moc%27ing Fractorium.h...</Message>
|
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Moc%27ing Fractorium.h...</Message>
|
||||||
@ -1216,7 +1216,7 @@ xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\flam3-palettes.xml" "$(OutDir)"</
|
|||||||
<Message Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">Moc%27ing Fractorium.h...</Message>
|
<Message Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">Moc%27ing Fractorium.h...</Message>
|
||||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
||||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
<Outputs Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|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$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(ProjectDir)..\..\..\..\glew\include" "-I$(AMDAPPSDKROOT)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/Fractorium.h"</Command>
|
<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$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(AMDAPPSDKROOT)\include" "-I$(CUDA_PATH)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/Fractorium.h"</Command>
|
||||||
<Command Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/Fractorium.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(ProjectDir)..\..\..\..\glew\include" "-I$(CUDA_PATH)include" "-I.\GeneratedFiles\$(ConfigurationName)\."</Command>
|
<Command Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/Fractorium.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(ProjectDir)..\..\..\..\glew\include" "-I$(CUDA_PATH)include" "-I.\GeneratedFiles\$(ConfigurationName)\."</Command>
|
||||||
</CustomBuild>
|
</CustomBuild>
|
||||||
<ClInclude Include="..\..\..\Source\Fractorium\FractoriumPch.h" />
|
<ClInclude Include="..\..\..\Source\Fractorium\FractoriumPch.h" />
|
||||||
|
@ -301,9 +301,6 @@
|
|||||||
<ClCompile Include="GeneratedFiles\ReleaseNvidia\moc_QssTextEdit.cpp">
|
<ClCompile Include="GeneratedFiles\ReleaseNvidia\moc_QssTextEdit.cpp">
|
||||||
<Filter>Generated Files\ReleaseNvidia</Filter>
|
<Filter>Generated Files\ReleaseNvidia</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\..\..\Source\Fractorium\qcssscanner.h">
|
|
||||||
<Filter>Dialogs\Qss</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\..\Source\Fractorium\qcssscanner.cpp">
|
<ClCompile Include="..\..\..\Source\Fractorium\qcssscanner.cpp">
|
||||||
<Filter>Dialogs\Qss</Filter>
|
<Filter>Dialogs\Qss</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
@ -60,6 +60,7 @@ HEADERS += \
|
|||||||
$$PRJ_DIR/Variations05.h \
|
$$PRJ_DIR/Variations05.h \
|
||||||
$$PRJ_DIR/Variations06.h \
|
$$PRJ_DIR/Variations06.h \
|
||||||
$$PRJ_DIR/VariationsDC.h \
|
$$PRJ_DIR/VariationsDC.h \
|
||||||
|
$$PRJ_DIR/VarFuncs.h \
|
||||||
$$PRJ_DIR/Xform.h \
|
$$PRJ_DIR/Xform.h \
|
||||||
$$PRJ_DIR/XmlToEmber.h
|
$$PRJ_DIR/XmlToEmber.h
|
||||||
|
|
||||||
|
@ -12,19 +12,20 @@ unix|macx {
|
|||||||
SHARE_INSTALL_DIR = /usr/share/fractorium
|
SHARE_INSTALL_DIR = /usr/share/fractorium
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EMBER_ROOT = ./../../../
|
||||||
|
SRC_DIR = $$EMBER_ROOT/Source
|
||||||
|
SRC_COMMON_DIR = $$EMBER_ROOT/Source/EmberCommon
|
||||||
|
ASSETS_DIR = $$EMBER_ROOT/Data
|
||||||
|
|
||||||
CONFIG(release, debug|release) {
|
CONFIG(release, debug|release) {
|
||||||
CONFIG += warn_off
|
CONFIG += warn_off
|
||||||
DESTDIR = $$(PWD)/../../../Bin/release
|
DESTDIR = $$EMBER_ROOT/Bin/release
|
||||||
}
|
}
|
||||||
|
|
||||||
CONFIG(debug, debug|release) {
|
CONFIG(debug, debug|release) {
|
||||||
DESTDIR = $$(PWD)/../../../Bin/debug
|
DESTDIR = $$EMBER_ROOT/Bin/debug
|
||||||
}
|
}
|
||||||
|
|
||||||
SRC_DIR = $$(PWD)/../../../Source
|
|
||||||
SRC_COMMON_DIR = $$(PWD)/../../../Source/EmberCommon
|
|
||||||
ASSETS_DIR = $$(PWD)/../../../Data
|
|
||||||
|
|
||||||
macx {
|
macx {
|
||||||
LIBS += -framework OpenGL
|
LIBS += -framework OpenGL
|
||||||
LIBS += -framework OpenCL
|
LIBS += -framework OpenCL
|
||||||
@ -48,10 +49,6 @@ macx {
|
|||||||
QMAKE_LFLAGS_RELEASE += -s
|
QMAKE_LFLAGS_RELEASE += -s
|
||||||
}
|
}
|
||||||
|
|
||||||
nvidia {
|
|
||||||
QMAKE_CXXFLAGS += -DNVIDIA
|
|
||||||
}
|
|
||||||
|
|
||||||
native {
|
native {
|
||||||
QMAKE_CXXFLAGS += -march=native
|
QMAKE_CXXFLAGS += -march=native
|
||||||
} else {
|
} else {
|
||||||
|
Binary file not shown.
@ -15,6 +15,7 @@ template<> CriticalSection QTIsaac<ISAAC_SIZE, ISAAC_INT>::m_CS = CriticalSectio
|
|||||||
#include "Palette.h"
|
#include "Palette.h"
|
||||||
#include "PaletteList.h"
|
#include "PaletteList.h"
|
||||||
#include "Point.h"
|
#include "Point.h"
|
||||||
|
#include "VarFuncs.h"
|
||||||
#include "Variation.h"
|
#include "Variation.h"
|
||||||
#include "Variations01.h"
|
#include "Variations01.h"
|
||||||
#include "Variations02.h"
|
#include "Variations02.h"
|
||||||
@ -42,7 +43,6 @@ template<> CriticalSection QTIsaac<ISAAC_SIZE, ISAAC_INT>::m_CS = CriticalSectio
|
|||||||
/// All new templated classes, such as new variations, must be added here.
|
/// All new templated classes, such as new variations, must be added here.
|
||||||
/// Additional instances of static class member variables.
|
/// Additional instances of static class member variables.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
||||||
namespace EmberNs
|
namespace EmberNs
|
||||||
{
|
{
|
||||||
bool Timing::m_TimingInit = false;
|
bool Timing::m_TimingInit = false;
|
||||||
@ -71,6 +71,7 @@ uint Timing::m_ProcessorCount;
|
|||||||
template EMBER_API class MotionParam<T>; \
|
template EMBER_API class MotionParam<T>; \
|
||||||
template EMBER_API class EmberMotion<T>; \
|
template EMBER_API class EmberMotion<T>; \
|
||||||
template EMBER_API class IteratorHelper<T>; \
|
template EMBER_API class IteratorHelper<T>; \
|
||||||
|
template EMBER_API class VarFuncs<T>; \
|
||||||
template EMBER_API class Variation<T>; \
|
template EMBER_API class Variation<T>; \
|
||||||
template EMBER_API class ParamWithName<T>; \
|
template EMBER_API class ParamWithName<T>; \
|
||||||
template EMBER_API class ParametricVariation<T>; \
|
template EMBER_API class ParametricVariation<T>; \
|
||||||
@ -377,12 +378,14 @@ uint Timing::m_ProcessorCount;
|
|||||||
EXPORTPREPOSTREGVAR(Crob, T) \
|
EXPORTPREPOSTREGVAR(Crob, T) \
|
||||||
EXPORTPREPOSTREGVAR(BubbleT3D, T) \
|
EXPORTPREPOSTREGVAR(BubbleT3D, T) \
|
||||||
EXPORTPREPOSTREGVAR(Synth, T) \
|
EXPORTPREPOSTREGVAR(Synth, T) \
|
||||||
|
EXPORTPREPOSTREGVAR(Crackle, T) \
|
||||||
EXPORTPREPOSTREGVAR(DCBubble, T) \
|
EXPORTPREPOSTREGVAR(DCBubble, T) \
|
||||||
EXPORTPREPOSTREGVAR(DCCarpet, T) \
|
EXPORTPREPOSTREGVAR(DCCarpet, T) \
|
||||||
EXPORTPREPOSTREGVAR(DCCube, T) \
|
EXPORTPREPOSTREGVAR(DCCube, T) \
|
||||||
EXPORTPREPOSTREGVAR(DCCylinder, T) \
|
EXPORTPREPOSTREGVAR(DCCylinder, T) \
|
||||||
EXPORTPREPOSTREGVAR(DCGridOut, T) \
|
EXPORTPREPOSTREGVAR(DCGridOut, T) \
|
||||||
EXPORTPREPOSTREGVAR(DCLinear, T) \
|
EXPORTPREPOSTREGVAR(DCLinear, T) \
|
||||||
|
EXPORTPREPOSTREGVAR(DCPerlin, T) \
|
||||||
EXPORTPREPOSTREGVAR(DCZTransl, T) \
|
EXPORTPREPOSTREGVAR(DCZTransl, T) \
|
||||||
EXPORTPREPOSTREGVAR(DCTriangle, T) \
|
EXPORTPREPOSTREGVAR(DCTriangle, T) \
|
||||||
template EMBER_API class VariationList<T>; \
|
template EMBER_API class VariationList<T>; \
|
||||||
@ -410,7 +413,6 @@ uint Timing::m_ProcessorCount;
|
|||||||
template EMBER_API class TemporalFilterCreator<T>; \
|
template EMBER_API class TemporalFilterCreator<T>; \
|
||||||
template EMBER_API class Interpolater<T>; \
|
template EMBER_API class Interpolater<T>; \
|
||||||
template EMBER_API class Ember<T>; \
|
template EMBER_API class Ember<T>; \
|
||||||
/*template EMBER_API class RenderCallback<T>;*/ \
|
|
||||||
template EMBER_API class CarToRas<T>; \
|
template EMBER_API class CarToRas<T>; \
|
||||||
template EMBER_API class Curves<T>; \
|
template EMBER_API class Curves<T>; \
|
||||||
template EMBER_API class XmlToEmber<T>; \
|
template EMBER_API class XmlToEmber<T>; \
|
||||||
|
@ -107,7 +107,6 @@ public:
|
|||||||
m_Supersample = ember.m_Supersample;
|
m_Supersample = ember.m_Supersample;
|
||||||
m_TemporalSamples = ember.m_TemporalSamples;
|
m_TemporalSamples = ember.m_TemporalSamples;
|
||||||
m_Symmetry = ember.m_Symmetry;
|
m_Symmetry = ember.m_Symmetry;
|
||||||
|
|
||||||
m_Quality = T(ember.m_Quality);
|
m_Quality = T(ember.m_Quality);
|
||||||
m_PixelsPerUnit = T(ember.m_PixelsPerUnit);
|
m_PixelsPerUnit = T(ember.m_PixelsPerUnit);
|
||||||
m_Zoom = T(ember.m_Zoom);
|
m_Zoom = T(ember.m_Zoom);
|
||||||
@ -130,29 +129,22 @@ public:
|
|||||||
m_Background = ember.m_Background;
|
m_Background = ember.m_Background;
|
||||||
m_Interp = ember.m_Interp;
|
m_Interp = ember.m_Interp;
|
||||||
m_AffineInterp = ember.m_AffineInterp;
|
m_AffineInterp = ember.m_AffineInterp;
|
||||||
|
|
||||||
m_MinRadDE = T(ember.m_MinRadDE);
|
m_MinRadDE = T(ember.m_MinRadDE);
|
||||||
m_MaxRadDE = T(ember.m_MaxRadDE);
|
m_MaxRadDE = T(ember.m_MaxRadDE);
|
||||||
m_CurveDE = T(ember.m_CurveDE);
|
m_CurveDE = T(ember.m_CurveDE);
|
||||||
|
|
||||||
m_SpatialFilterType = ember.m_SpatialFilterType;
|
m_SpatialFilterType = ember.m_SpatialFilterType;
|
||||||
m_SpatialFilterRadius = T(ember.m_SpatialFilterRadius);
|
m_SpatialFilterRadius = T(ember.m_SpatialFilterRadius);
|
||||||
|
|
||||||
m_TemporalFilterType = ember.m_TemporalFilterType;
|
m_TemporalFilterType = ember.m_TemporalFilterType;
|
||||||
m_TemporalFilterExp = T(ember.m_TemporalFilterExp);
|
m_TemporalFilterExp = T(ember.m_TemporalFilterExp);
|
||||||
m_TemporalFilterWidth = T(ember.m_TemporalFilterWidth);
|
m_TemporalFilterWidth = T(ember.m_TemporalFilterWidth);
|
||||||
|
|
||||||
m_PaletteMode = ember.m_PaletteMode;
|
m_PaletteMode = ember.m_PaletteMode;
|
||||||
m_PaletteInterp = ember.m_PaletteInterp;
|
m_PaletteInterp = ember.m_PaletteInterp;
|
||||||
|
|
||||||
m_Name = ember.m_Name;
|
m_Name = ember.m_Name;
|
||||||
m_ParentFilename = ember.m_ParentFilename;
|
m_ParentFilename = ember.m_ParentFilename;
|
||||||
|
|
||||||
m_Index = ember.m_Index;
|
m_Index = ember.m_Index;
|
||||||
m_ScaleType = ember.ScaleType();
|
m_ScaleType = ember.ScaleType();
|
||||||
m_Palette = ember.m_Palette;
|
m_Palette = ember.m_Palette;
|
||||||
m_Curves = ember.m_Curves;
|
m_Curves = ember.m_Curves;
|
||||||
|
|
||||||
m_Xforms.clear();
|
m_Xforms.clear();
|
||||||
|
|
||||||
for (size_t i = 0; i < ember.XformCount(); i++)
|
for (size_t i = 0; i < ember.XformCount(); i++)
|
||||||
@ -160,13 +152,11 @@ public:
|
|||||||
if (Xform<U>* p = ember.GetXform(i))
|
if (Xform<U>* p = ember.GetXform(i))
|
||||||
{
|
{
|
||||||
Xform<T> xform = *p;//Will call assignment operator to convert between types T and U.
|
Xform<T> xform = *p;//Will call assignment operator to convert between types T and U.
|
||||||
|
|
||||||
AddXform(xform);
|
AddXform(xform);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Xform<T> finalXform = *ember.FinalXform();//Will call assignment operator to convert between types T and U.
|
Xform<T> finalXform = *ember.FinalXform();//Will call assignment operator to convert between types T and U.
|
||||||
|
|
||||||
SetFinalXform(finalXform);
|
SetFinalXform(finalXform);
|
||||||
|
|
||||||
//Interpolated-against final xforms need animate & color speed set to 0.
|
//Interpolated-against final xforms need animate & color speed set to 0.
|
||||||
@ -184,7 +174,6 @@ public:
|
|||||||
m_Edits = xmlCopyDoc(ember.m_Edits, 1);
|
m_Edits = xmlCopyDoc(ember.m_Edits, 1);
|
||||||
|
|
||||||
CopyVec(m_EmberMotionElements, ember.m_EmberMotionElements);
|
CopyVec(m_EmberMotionElements, ember.m_EmberMotionElements);
|
||||||
|
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -227,36 +216,28 @@ public:
|
|||||||
m_Background.Reset();
|
m_Background.Reset();
|
||||||
m_Interp = EMBER_INTERP_LINEAR;
|
m_Interp = EMBER_INTERP_LINEAR;
|
||||||
m_AffineInterp = AFFINE_INTERP_LOG;
|
m_AffineInterp = AFFINE_INTERP_LOG;
|
||||||
|
|
||||||
//DE filter.
|
//DE filter.
|
||||||
m_MinRadDE = 0;
|
m_MinRadDE = 0;
|
||||||
m_MaxRadDE = 9;
|
m_MaxRadDE = 9;
|
||||||
m_CurveDE = T(0.4);
|
m_CurveDE = T(0.4);
|
||||||
|
|
||||||
//Spatial filter.
|
//Spatial filter.
|
||||||
m_SpatialFilterType = GAUSSIAN_SPATIAL_FILTER;
|
m_SpatialFilterType = GAUSSIAN_SPATIAL_FILTER;
|
||||||
m_SpatialFilterRadius = T(0.5);
|
m_SpatialFilterRadius = T(0.5);
|
||||||
|
|
||||||
//Temporal filter.
|
//Temporal filter.
|
||||||
m_TemporalFilterType = BOX_TEMPORAL_FILTER;
|
m_TemporalFilterType = BOX_TEMPORAL_FILTER;
|
||||||
m_TemporalFilterExp = 0;
|
m_TemporalFilterExp = 0;
|
||||||
m_TemporalFilterWidth = 1;
|
m_TemporalFilterWidth = 1;
|
||||||
|
|
||||||
//Palette.
|
//Palette.
|
||||||
m_PaletteMode = PALETTE_STEP;
|
m_PaletteMode = PALETTE_LINEAR;
|
||||||
m_PaletteInterp = INTERP_HSV;
|
m_PaletteInterp = INTERP_HSV;
|
||||||
|
|
||||||
//Curves.
|
//Curves.
|
||||||
m_Curves.Init();
|
m_Curves.Init();
|
||||||
|
|
||||||
m_Name = "No name";
|
m_Name = "No name";
|
||||||
m_ParentFilename = "No parent";
|
m_ParentFilename = "No parent";
|
||||||
|
|
||||||
//Internal values.
|
//Internal values.
|
||||||
m_Index = 0;
|
m_Index = 0;
|
||||||
m_ScaleType = eScaleType::SCALE_NONE;
|
m_ScaleType = eScaleType::SCALE_NONE;
|
||||||
m_Xforms.reserve(12);
|
m_Xforms.reserve(12);
|
||||||
|
|
||||||
m_Edits = nullptr;
|
m_Edits = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -280,7 +261,6 @@ public:
|
|||||||
for (size_t i = 0; i < count; i++)
|
for (size_t i = 0; i < count; i++)
|
||||||
{
|
{
|
||||||
Xform<T> xform;
|
Xform<T> xform;
|
||||||
|
|
||||||
AddXform(xform);
|
AddXform(xform);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -304,7 +284,6 @@ public:
|
|||||||
Ember<T> Copy(size_t xformPad = 0, bool doFinal = false)
|
Ember<T> Copy(size_t xformPad = 0, bool doFinal = false)
|
||||||
{
|
{
|
||||||
Ember<T> ember(*this);
|
Ember<T> ember(*this);
|
||||||
|
|
||||||
ember.PadXforms(xformPad);
|
ember.PadXforms(xformPad);
|
||||||
|
|
||||||
if (doFinal)
|
if (doFinal)
|
||||||
@ -485,7 +464,6 @@ public:
|
|||||||
for (size_t i = 0; i < TotalXformCount(); i++)
|
for (size_t i = 0; i < TotalXformCount(); i++)
|
||||||
{
|
{
|
||||||
Xform<T>* xform = GetTotalXform(i);
|
Xform<T>* xform = GetTotalXform(i);
|
||||||
|
|
||||||
xform->CacheColorVals();
|
xform->CacheColorVals();
|
||||||
xform->SetPrecalcFlags();
|
xform->SetPrecalcFlags();
|
||||||
}
|
}
|
||||||
@ -624,6 +602,7 @@ public:
|
|||||||
normalizedWeights.resize(m_Xforms.size());
|
normalizedWeights.resize(m_Xforms.size());
|
||||||
|
|
||||||
for (auto& xform : m_Xforms) norm += xform.m_Weight;
|
for (auto& xform : m_Xforms) norm += xform.m_Weight;
|
||||||
|
|
||||||
for (auto& weight : normalizedWeights) { weight = (norm == T(0) ? T(0) : m_Xforms[i].m_Weight / norm); i++; }
|
for (auto& weight : normalizedWeights) { weight = (norm == T(0) ? T(0) : m_Xforms[i].m_Weight / norm); i++; }
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -636,13 +615,15 @@ public:
|
|||||||
void GetPresentVariations(vector<Variation<T>*>& variations, bool baseOnly = true) const
|
void GetPresentVariations(vector<Variation<T>*>& variations, bool baseOnly = true) const
|
||||||
{
|
{
|
||||||
size_t i = 0, xformIndex = 0, totalVarCount = m_FinalXform.TotalVariationCount();
|
size_t i = 0, xformIndex = 0, totalVarCount = m_FinalXform.TotalVariationCount();
|
||||||
|
|
||||||
variations.clear();
|
variations.clear();
|
||||||
for (auto& xform : m_Xforms) totalVarCount += xform.TotalVariationCount();
|
|
||||||
|
|
||||||
|
while (auto xform = GetTotalXform(xformIndex++))
|
||||||
|
totalVarCount += xform->TotalVariationCount();
|
||||||
|
|
||||||
|
xformIndex = 0;
|
||||||
variations.reserve(totalVarCount);
|
variations.reserve(totalVarCount);
|
||||||
|
|
||||||
while (Xform<T>* xform = GetTotalXform(xformIndex++))
|
while (auto xform = GetTotalXform(xformIndex++))
|
||||||
{
|
{
|
||||||
i = 0;
|
i = 0;
|
||||||
totalVarCount = xform->TotalVariationCount();
|
totalVarCount = xform->TotalVariationCount();
|
||||||
@ -676,24 +657,29 @@ public:
|
|||||||
{
|
{
|
||||||
bool flattened = false;
|
bool flattened = false;
|
||||||
|
|
||||||
for (auto& xform : m_Xforms) flattened |= xform.Flatten(names);
|
for (auto& xform : m_Xforms)
|
||||||
|
flattened |= xform.Flatten(names);
|
||||||
|
|
||||||
|
if (UseFinalXform())
|
||||||
|
flattened |= m_FinalXform.Flatten(names);
|
||||||
|
|
||||||
return flattened;
|
return flattened;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Flatten all xforms by adding a flatten variation in each if not already present.
|
/// Unflatten all xforms by removing flatten, pre_flatten and post_flatten.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns>True if flatten was removed, false if it wasn't present.</returns>
|
/// <returns>True if any flatten was removed, false if it wasn't present.</returns>
|
||||||
bool Unflatten()
|
bool Unflatten()
|
||||||
{
|
{
|
||||||
|
size_t xformIndex = 0;
|
||||||
bool unflattened = false;
|
bool unflattened = false;
|
||||||
|
|
||||||
for (auto& xform : m_Xforms)
|
while (auto xform = GetTotalXform(xformIndex++))
|
||||||
{
|
{
|
||||||
unflattened |= xform.DeleteVariationById(VAR_PRE_FLATTEN);
|
unflattened |= xform->DeleteVariationById(VAR_PRE_FLATTEN);
|
||||||
unflattened |= xform.DeleteVariationById(VAR_FLATTEN);
|
unflattened |= xform->DeleteVariationById(VAR_FLATTEN);
|
||||||
unflattened |= xform.DeleteVariationById(VAR_POST_FLATTEN);
|
unflattened |= xform->DeleteVariationById(VAR_POST_FLATTEN);
|
||||||
}
|
}
|
||||||
|
|
||||||
return unflattened;
|
return unflattened;
|
||||||
@ -770,7 +756,6 @@ public:
|
|||||||
m_TemporalFilterType = embers[0].m_TemporalFilterType;
|
m_TemporalFilterType = embers[0].m_TemporalFilterType;
|
||||||
m_PaletteMode = embers[0].m_PaletteMode;
|
m_PaletteMode = embers[0].m_PaletteMode;
|
||||||
m_AffineInterp = embers[0].m_AffineInterp;
|
m_AffineInterp = embers[0].m_AffineInterp;
|
||||||
|
|
||||||
//Interpolate ember parameters, these should be in the same order the members are declared.
|
//Interpolate ember parameters, these should be in the same order the members are declared.
|
||||||
InterpI<&Ember<T>::m_FinalRasW>(embers, coefs, size);
|
InterpI<&Ember<T>::m_FinalRasW>(embers, coefs, size);
|
||||||
InterpI<&Ember<T>::m_FinalRasH>(embers, coefs, size);
|
InterpI<&Ember<T>::m_FinalRasH>(embers, coefs, size);
|
||||||
@ -804,10 +789,8 @@ public:
|
|||||||
InterpT<&Ember<T>::m_CurveDE>(embers, coefs, size);
|
InterpT<&Ember<T>::m_CurveDE>(embers, coefs, size);
|
||||||
InterpT<&Ember<T>::m_SpatialFilterRadius>(embers, coefs, size);
|
InterpT<&Ember<T>::m_SpatialFilterRadius>(embers, coefs, size);
|
||||||
InterpX<Curves<T>, &Ember<T>::m_Curves>(embers, coefs, size);
|
InterpX<Curves<T>, &Ember<T>::m_Curves>(embers, coefs, size);
|
||||||
|
|
||||||
//Normally done in assignment, must manually do here.
|
//Normally done in assignment, must manually do here.
|
||||||
SetProjFunc();
|
SetProjFunc();
|
||||||
|
|
||||||
//An extra step needed here due to the OOD that was not needed in the original.
|
//An extra step needed here due to the OOD that was not needed in the original.
|
||||||
//A small price to pay for the conveniences it affords us elsewhere.
|
//A small price to pay for the conveniences it affords us elsewhere.
|
||||||
//First clear the xforms, and find out the max number of xforms in all of the embers in the list.
|
//First clear the xforms, and find out the max number of xforms in all of the embers in the list.
|
||||||
@ -855,7 +838,6 @@ public:
|
|||||||
{
|
{
|
||||||
Variation<T>* var = thisXform->GetVariation(j);
|
Variation<T>* var = thisXform->GetVariation(j);
|
||||||
ParametricVariation<T>* parVar = dynamic_cast<ParametricVariation<T>*>(var);//Will use below if it's parametric.
|
ParametricVariation<T>* parVar = dynamic_cast<ParametricVariation<T>*>(var);//Will use below if it's parametric.
|
||||||
|
|
||||||
var->m_Weight = 0;
|
var->m_Weight = 0;
|
||||||
|
|
||||||
if (parVar)
|
if (parVar)
|
||||||
@ -901,7 +883,6 @@ public:
|
|||||||
InterpXform<&Xform<T>::m_ColorSpeed>(thisXform, i, embers, coefs, size);
|
InterpXform<&Xform<T>::m_ColorSpeed>(thisXform, i, embers, coefs, size);
|
||||||
InterpXform<&Xform<T>::m_Opacity> (thisXform, i, embers, coefs, size);
|
InterpXform<&Xform<T>::m_Opacity> (thisXform, i, embers, coefs, size);
|
||||||
InterpXform<&Xform<T>::m_Animate> (thisXform, i, embers, coefs, size);
|
InterpXform<&Xform<T>::m_Animate> (thisXform, i, embers, coefs, size);
|
||||||
|
|
||||||
ClampGte0Ref(thisXform->m_Weight);
|
ClampGte0Ref(thisXform->m_Weight);
|
||||||
ClampRef<T>(thisXform->m_ColorX, 0, 1);
|
ClampRef<T>(thisXform->m_ColorX, 0, 1);
|
||||||
ClampRef<T>(thisXform->m_ColorSpeed, -1, 1);
|
ClampRef<T>(thisXform->m_ColorSpeed, -1, 1);
|
||||||
@ -912,13 +893,10 @@ public:
|
|||||||
vector<v2T> cxMag(size);
|
vector<v2T> cxMag(size);
|
||||||
vector<v2T> cxAng(size);
|
vector<v2T> cxAng(size);
|
||||||
vector<v2T> cxTrn(size);
|
vector<v2T> cxTrn(size);
|
||||||
|
|
||||||
thisXform->m_Affine.m_Mat = m23T(0);
|
thisXform->m_Affine.m_Mat = m23T(0);
|
||||||
|
|
||||||
//Affine part.
|
//Affine part.
|
||||||
Interpolater<T>::ConvertLinearToPolar(embers, size, i, 0, cxAng, cxMag, cxTrn);
|
Interpolater<T>::ConvertLinearToPolar(embers, size, i, 0, cxAng, cxMag, cxTrn);
|
||||||
Interpolater<T>::InterpAndConvertBack(coefs, cxAng, cxMag, cxTrn, thisXform->m_Affine);
|
Interpolater<T>::InterpAndConvertBack(coefs, cxAng, cxMag, cxTrn, thisXform->m_Affine);
|
||||||
|
|
||||||
//Post part.
|
//Post part.
|
||||||
allID = true;
|
allID = true;
|
||||||
|
|
||||||
@ -1032,12 +1010,10 @@ public:
|
|||||||
T t2 = t * t;
|
T t2 = t * t;
|
||||||
T t3 = t2 * t;
|
T t3 = t2 * t;
|
||||||
vector<T> cmc(4);
|
vector<T> cmc(4);
|
||||||
|
|
||||||
cmc[0] = (2 * t2 - t - t3) / 2;
|
cmc[0] = (2 * t2 - t - t3) / 2;
|
||||||
cmc[1] = (3 * t3 - 5 * t2 + 2) / 2;
|
cmc[1] = (3 * t3 - 5 * t2 + 2) / 2;
|
||||||
cmc[2] = (4 * t2 - 3 * t3 + t) / 2;
|
cmc[2] = (4 * t2 - 3 * t3 + t) / 2;
|
||||||
cmc[3] = (t3 - t2) / 2;
|
cmc[3] = (t3 - t2) / 2;
|
||||||
|
|
||||||
Interpolate(embers, size, cmc, 0);
|
Interpolate(embers, size, cmc, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1083,7 +1059,8 @@ public:
|
|||||||
|
|
||||||
if (sym == 0)
|
if (sym == 0)
|
||||||
{
|
{
|
||||||
static intmax_t symDistrib[] = {
|
static intmax_t symDistrib[] =
|
||||||
|
{
|
||||||
-4, -3,
|
-4, -3,
|
||||||
-2, -2, -2,
|
-2, -2, -2,
|
||||||
-1, -1, -1,
|
-1, -1, -1,
|
||||||
@ -1110,7 +1087,6 @@ public:
|
|||||||
i = XformCount();//Don't apply sym to final.
|
i = XformCount();//Don't apply sym to final.
|
||||||
Xform<T> xform;
|
Xform<T> xform;
|
||||||
AddXform(xform);
|
AddXform(xform);
|
||||||
|
|
||||||
m_Xforms[i].m_Weight = 1;
|
m_Xforms[i].m_Weight = 1;
|
||||||
m_Xforms[i].m_ColorSpeed = 0;
|
m_Xforms[i].m_ColorSpeed = 0;
|
||||||
m_Xforms[i].m_Animate = 0;
|
m_Xforms[i].m_Animate = 0;
|
||||||
@ -1123,7 +1099,6 @@ public:
|
|||||||
m_Xforms[i].m_Affine.E(1);
|
m_Xforms[i].m_Affine.E(1);
|
||||||
m_Xforms[i].m_Affine.F(0);
|
m_Xforms[i].m_Affine.F(0);
|
||||||
m_Xforms[i].AddVariation(new LinearVariation<T>());
|
m_Xforms[i].AddVariation(new LinearVariation<T>());
|
||||||
|
|
||||||
result++;
|
result++;
|
||||||
sym = -sym;
|
sym = -sym;
|
||||||
}
|
}
|
||||||
@ -1135,7 +1110,6 @@ public:
|
|||||||
i = XformCount();
|
i = XformCount();
|
||||||
Xform<T> xform;
|
Xform<T> xform;
|
||||||
AddXform(xform);
|
AddXform(xform);
|
||||||
|
|
||||||
m_Xforms[i].m_Weight = 1;
|
m_Xforms[i].m_Weight = 1;
|
||||||
m_Xforms[i].m_ColorSpeed = 0;
|
m_Xforms[i].m_ColorSpeed = 0;
|
||||||
m_Xforms[i].m_Animate = 0;
|
m_Xforms[i].m_Animate = 0;
|
||||||
@ -1147,7 +1121,6 @@ public:
|
|||||||
m_Xforms[i].m_Affine.C(0);
|
m_Xforms[i].m_Affine.C(0);
|
||||||
m_Xforms[i].m_Affine.F(0);
|
m_Xforms[i].m_Affine.F(0);
|
||||||
m_Xforms[i].AddVariation(new LinearVariation<T>());
|
m_Xforms[i].AddVariation(new LinearVariation<T>());
|
||||||
|
|
||||||
result++;
|
result++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1164,9 +1137,13 @@ public:
|
|||||||
size_t val = 0;
|
size_t val = 0;
|
||||||
|
|
||||||
if (m_CamZPos != 0) val |= PROJBITS_ZPOS;
|
if (m_CamZPos != 0) val |= PROJBITS_ZPOS;
|
||||||
|
|
||||||
if (m_CamPerspective != 0) val |= PROJBITS_PERSP;
|
if (m_CamPerspective != 0) val |= PROJBITS_PERSP;
|
||||||
|
|
||||||
if (m_CamPitch != 0) val |= PROJBITS_PITCH;
|
if (m_CamPitch != 0) val |= PROJBITS_PITCH;
|
||||||
|
|
||||||
if (m_CamYaw != 0) val |= PROJBITS_YAW;
|
if (m_CamYaw != 0) val |= PROJBITS_YAW;
|
||||||
|
|
||||||
if (m_CamDepthBlur != 0) val |= PROJBITS_BLUR;
|
if (m_CamDepthBlur != 0) val |= PROJBITS_BLUR;
|
||||||
|
|
||||||
return val;
|
return val;
|
||||||
@ -1199,7 +1176,6 @@ public:
|
|||||||
void ProjectZPerspective(Point<T>& point, QTIsaac<ISAAC_SIZE, ISAAC_INT>& rand)
|
void ProjectZPerspective(Point<T>& point, QTIsaac<ISAAC_SIZE, ISAAC_INT>& rand)
|
||||||
{
|
{
|
||||||
T zr = Zeps(1 - m_CamPerspective * (point.m_Z - m_CamZPos));
|
T zr = Zeps(1 - m_CamPerspective * (point.m_Z - m_CamZPos));
|
||||||
|
|
||||||
point.m_X /= zr;
|
point.m_X /= zr;
|
||||||
point.m_Y /= zr;
|
point.m_Y /= zr;
|
||||||
point.m_Z -= m_CamZPos;
|
point.m_Z -= m_CamZPos;
|
||||||
@ -1215,7 +1191,6 @@ public:
|
|||||||
T z = point.m_Z - m_CamZPos;
|
T z = point.m_Z - m_CamZPos;
|
||||||
T y = m_CamMat[1][1] * point.m_Y + m_CamMat[2][1] * z;
|
T y = m_CamMat[1][1] * point.m_Y + m_CamMat[2][1] * z;
|
||||||
T zr = Zeps(1 - m_CamPerspective * (m_CamMat[1][2] * point.m_Y + m_CamMat[2][2] * z));
|
T zr = Zeps(1 - m_CamPerspective * (m_CamMat[1][2] * point.m_Y + m_CamMat[2][2] * z));
|
||||||
|
|
||||||
point.m_X /= zr;
|
point.m_X /= zr;
|
||||||
point.m_Y = y / zr;
|
point.m_Y = y / zr;
|
||||||
point.m_Z -= m_CamZPos;
|
point.m_Z -= m_CamZPos;
|
||||||
@ -1231,16 +1206,12 @@ public:
|
|||||||
T y, z, zr;
|
T y, z, zr;
|
||||||
T dsin, dcos;
|
T dsin, dcos;
|
||||||
T t = rand.Frand01<T>() * M_2PI;
|
T t = rand.Frand01<T>() * M_2PI;
|
||||||
|
|
||||||
z = point.m_Z - m_CamZPos;
|
z = point.m_Z - m_CamZPos;
|
||||||
y = m_CamMat[1][1] * point.m_Y + m_CamMat[2][1] * z;
|
y = m_CamMat[1][1] * point.m_Y + m_CamMat[2][1] * z;
|
||||||
z = m_CamMat[1][2] * point.m_Y + m_CamMat[2][2] * z;
|
z = m_CamMat[1][2] * point.m_Y + m_CamMat[2][2] * z;
|
||||||
zr = Zeps(1 - m_CamPerspective * z);
|
zr = Zeps(1 - m_CamPerspective * z);
|
||||||
|
|
||||||
sincos(t, &dsin, &dcos);
|
sincos(t, &dsin, &dcos);
|
||||||
|
|
||||||
T dr = rand.Frand01<T>() * m_BlurCoef * z;
|
T dr = rand.Frand01<T>() * m_BlurCoef * z;
|
||||||
|
|
||||||
point.m_X = (point.m_X + dr * dcos) / zr;
|
point.m_X = (point.m_X + dr * dcos) / zr;
|
||||||
point.m_Y = (y + dr * dsin) / zr;
|
point.m_Y = (y + dr * dsin) / zr;
|
||||||
point.m_Z -= m_CamZPos;
|
point.m_Z -= m_CamZPos;
|
||||||
@ -1258,14 +1229,10 @@ public:
|
|||||||
T z = point.m_Z - m_CamZPos;
|
T z = point.m_Z - m_CamZPos;
|
||||||
T x = m_CamMat[0][0] * point.m_X + m_CamMat[1][0] * point.m_Y;
|
T x = m_CamMat[0][0] * point.m_X + m_CamMat[1][0] * point.m_Y;
|
||||||
T y = m_CamMat[0][1] * point.m_X + m_CamMat[1][1] * point.m_Y + m_CamMat[2][1] * z;
|
T y = m_CamMat[0][1] * point.m_X + m_CamMat[1][1] * point.m_Y + m_CamMat[2][1] * z;
|
||||||
|
|
||||||
z = m_CamMat[0][2] * point.m_X + m_CamMat[1][2] * point.m_Y + m_CamMat[2][2] * z;
|
z = m_CamMat[0][2] * point.m_X + m_CamMat[1][2] * point.m_Y + m_CamMat[2][2] * z;
|
||||||
|
|
||||||
T zr = Zeps(1 - m_CamPerspective * z);
|
T zr = Zeps(1 - m_CamPerspective * z);
|
||||||
T dr = rand.Frand01<T>() * m_BlurCoef * z;
|
T dr = rand.Frand01<T>() * m_BlurCoef * z;
|
||||||
|
|
||||||
sincos(t, &dsin, &dcos);
|
sincos(t, &dsin, &dcos);
|
||||||
|
|
||||||
point.m_X = (x + dr * dcos) / zr;
|
point.m_X = (x + dr * dcos) / zr;
|
||||||
point.m_Y = (y + dr * dsin) / zr;
|
point.m_Y = (y + dr * dsin) / zr;
|
||||||
point.m_Z -= m_CamZPos;
|
point.m_Z -= m_CamZPos;
|
||||||
@ -1282,7 +1249,6 @@ public:
|
|||||||
T x = m_CamMat[0][0] * point.m_X + m_CamMat[1][0] * point.m_Y;
|
T x = m_CamMat[0][0] * point.m_X + m_CamMat[1][0] * point.m_Y;
|
||||||
T y = m_CamMat[0][1] * point.m_X + m_CamMat[1][1] * point.m_Y + m_CamMat[2][1] * z;
|
T y = m_CamMat[0][1] * point.m_X + m_CamMat[1][1] * point.m_Y + m_CamMat[2][1] * z;
|
||||||
T zr = Zeps(1 - m_CamPerspective * (m_CamMat[0][2] * point.m_X + m_CamMat[1][2] * point.m_Y + m_CamMat[2][2] * z));
|
T zr = Zeps(1 - m_CamPerspective * (m_CamMat[0][2] * point.m_X + m_CamMat[1][2] * point.m_Y + m_CamMat[2][2] * z));
|
||||||
|
|
||||||
point.m_X = x / zr;
|
point.m_X = x / zr;
|
||||||
point.m_Y = y / zr;
|
point.m_Y = y / zr;
|
||||||
point.m_Z -= m_CamZPos;
|
point.m_Z -= m_CamZPos;
|
||||||
@ -1309,54 +1275,71 @@ public:
|
|||||||
case FLAME_MOTION_ZOOM:
|
case FLAME_MOTION_ZOOM:
|
||||||
APP_FMP(m_Zoom);
|
APP_FMP(m_Zoom);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FLAME_MOTION_ZPOS:
|
case FLAME_MOTION_ZPOS:
|
||||||
APP_FMP(m_CamZPos);
|
APP_FMP(m_CamZPos);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FLAME_MOTION_PERSPECTIVE:
|
case FLAME_MOTION_PERSPECTIVE:
|
||||||
APP_FMP(m_CamPerspective);
|
APP_FMP(m_CamPerspective);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FLAME_MOTION_YAW:
|
case FLAME_MOTION_YAW:
|
||||||
APP_FMP(m_CamYaw);
|
APP_FMP(m_CamYaw);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FLAME_MOTION_PITCH:
|
case FLAME_MOTION_PITCH:
|
||||||
APP_FMP(m_CamPitch);
|
APP_FMP(m_CamPitch);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FLAME_MOTION_DEPTH_BLUR:
|
case FLAME_MOTION_DEPTH_BLUR:
|
||||||
APP_FMP(m_CamDepthBlur);
|
APP_FMP(m_CamDepthBlur);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FLAME_MOTION_CENTER_X:
|
case FLAME_MOTION_CENTER_X:
|
||||||
APP_FMP(m_CenterX);
|
APP_FMP(m_CenterX);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FLAME_MOTION_CENTER_Y:
|
case FLAME_MOTION_CENTER_Y:
|
||||||
APP_FMP(m_CenterY);
|
APP_FMP(m_CenterY);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FLAME_MOTION_ROTATE:
|
case FLAME_MOTION_ROTATE:
|
||||||
APP_FMP(m_Rotate);
|
APP_FMP(m_Rotate);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FLAME_MOTION_BRIGHTNESS:
|
case FLAME_MOTION_BRIGHTNESS:
|
||||||
APP_FMP(m_Brightness);
|
APP_FMP(m_Brightness);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FLAME_MOTION_GAMMA:
|
case FLAME_MOTION_GAMMA:
|
||||||
APP_FMP(m_Gamma);
|
APP_FMP(m_Gamma);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FLAME_MOTION_GAMMA_THRESH:
|
case FLAME_MOTION_GAMMA_THRESH:
|
||||||
APP_FMP(m_GammaThresh);
|
APP_FMP(m_GammaThresh);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FLAME_MOTION_HIGHLIGHT_POWER:
|
case FLAME_MOTION_HIGHLIGHT_POWER:
|
||||||
APP_FMP(m_HighlightPower);
|
APP_FMP(m_HighlightPower);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FLAME_MOTION_BACKGROUND_R:
|
case FLAME_MOTION_BACKGROUND_R:
|
||||||
APP_FMP(m_Background.r);
|
APP_FMP(m_Background.r);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FLAME_MOTION_BACKGROUND_G:
|
case FLAME_MOTION_BACKGROUND_G:
|
||||||
APP_FMP(m_Background.g);
|
APP_FMP(m_Background.g);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FLAME_MOTION_BACKGROUND_B:
|
case FLAME_MOTION_BACKGROUND_B:
|
||||||
APP_FMP(m_Background.b);
|
APP_FMP(m_Background.b);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FLAME_MOTION_VIBRANCY:
|
case FLAME_MOTION_VIBRANCY:
|
||||||
APP_FMP(m_Vibrancy);
|
APP_FMP(m_Vibrancy);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FLAME_MOTION_NONE:
|
case FLAME_MOTION_NONE:
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@ -1475,70 +1458,62 @@ public:
|
|||||||
{
|
{
|
||||||
size_t i;
|
size_t i;
|
||||||
ostringstream ss;
|
ostringstream ss;
|
||||||
|
ss << "Final Raster Width: " << m_FinalRasW << "\n"
|
||||||
ss << "Final Raster Width: " << m_FinalRasW << endl
|
<< "Final Raster Height: " << m_FinalRasH << "\n"
|
||||||
<< "Final Raster Height: " << m_FinalRasH << endl
|
<< "Original Raster Width: " << m_OrigFinalRasW << "\n"
|
||||||
<< "Original Raster Width: " << m_OrigFinalRasW << endl
|
<< "Original Raster Height: " << m_OrigFinalRasH << "\n"
|
||||||
<< "Original Raster Height: " << m_OrigFinalRasH << endl
|
<< "Supersample: " << m_Supersample << "\n"
|
||||||
<< "Supersample: " << m_Supersample << endl
|
<< "Temporal Samples: " << m_TemporalSamples << "\n"
|
||||||
<< "Temporal Samples: " << m_TemporalSamples << endl
|
<< "Symmetry: " << m_Symmetry << "\n"
|
||||||
<< "Symmetry: " << m_Symmetry << endl
|
<< "Quality: " << m_Quality << "\n"
|
||||||
|
<< "Pixels Per Unit: " << m_PixelsPerUnit << "\n"
|
||||||
<< "Quality: " << m_Quality << endl
|
<< "Original Pixels Per Unit: " << m_OrigPixPerUnit << "\n"
|
||||||
<< "Pixels Per Unit: " << m_PixelsPerUnit << endl
|
<< "Sub Batch Size: " << m_SubBatchSize << "\n"
|
||||||
<< "Original Pixels Per Unit: " << m_OrigPixPerUnit << endl
|
<< "Fuse Count: " << m_FuseCount << "\n"
|
||||||
<< "Sub Batch Size: " << m_SubBatchSize << endl
|
<< "Zoom: " << m_Zoom << "\n"
|
||||||
<< "Fuse Count: " << m_FuseCount << endl
|
<< "ZPos: " << m_CamZPos << "\n"
|
||||||
<< "Zoom: " << m_Zoom << endl
|
<< "Perspective: " << m_CamPerspective << "\n"
|
||||||
<< "ZPos: " << m_CamZPos << endl
|
<< "Yaw: " << m_CamYaw << "\n"
|
||||||
<< "Perspective: " << m_CamPerspective << endl
|
<< "Pitch: " << m_CamPitch << "\n"
|
||||||
<< "Yaw: " << m_CamYaw << endl
|
<< "Depth Blur: " << m_CamDepthBlur << "\n"
|
||||||
<< "Pitch: " << m_CamPitch << endl
|
<< "CenterX: " << m_CenterX << "\n"
|
||||||
<< "Depth Blur: " << m_CamDepthBlur << endl
|
<< "CenterY: " << m_CenterY << "\n"
|
||||||
<< "CenterX: " << m_CenterX << endl
|
<< "RotCenterY: " << m_RotCenterY << "\n"
|
||||||
<< "CenterY: " << m_CenterY << endl
|
<< "Rotate: " << m_Rotate << "\n"
|
||||||
<< "RotCenterY: " << m_RotCenterY << endl
|
<< "Brightness: " << m_Brightness << "\n"
|
||||||
<< "Rotate: " << m_Rotate << endl
|
<< "Gamma: " << m_Gamma << "\n"
|
||||||
<< "Brightness: " << m_Brightness << endl
|
<< "Vibrancy: " << m_Vibrancy << "\n"
|
||||||
<< "Gamma: " << m_Gamma << endl
|
<< "Gamma Threshold: " << m_GammaThresh << "\n"
|
||||||
<< "Vibrancy: " << m_Vibrancy << endl
|
<< "Highlight Power: " << m_HighlightPower << "\n"
|
||||||
<< "Gamma Threshold: " << m_GammaThresh << endl
|
<< "Time: " << m_Time << "\n"
|
||||||
<< "Highlight Power: " << m_HighlightPower << endl
|
<< "Background: " << m_Background.r << ", " << m_Background.g << ", " << m_Background.b << ", " << m_Background.a << "\n"
|
||||||
<< "Time: " << m_Time << endl
|
<< "Interp: " << m_Interp << "\n"
|
||||||
<< "Background: " << m_Background.r << ", " << m_Background.g << ", " << m_Background.b << ", " << m_Background.a << endl
|
<< "Affine Interp Type: " << m_AffineInterp << "\n"
|
||||||
|
<< "Minimum DE Radius: " << m_MinRadDE << "\n"
|
||||||
<< "Interp: " << m_Interp << endl
|
<< "Maximum DE Radius: " << m_MaxRadDE << "\n"
|
||||||
<< "Affine Interp Type: " << m_AffineInterp << endl
|
<< "DE Curve: " << m_CurveDE << "\n"
|
||||||
|
<< "Spatial Filter Type: " << m_SpatialFilterType << "\n"
|
||||||
<< "Minimum DE Radius: " << m_MinRadDE << endl
|
<< "Spatial Filter Radius: " << m_SpatialFilterRadius << "\n"
|
||||||
<< "Maximum DE Radius: " << m_MaxRadDE << endl
|
<< "Temporal Filter Type: " << m_TemporalFilterType << "\n"
|
||||||
<< "DE Curve: " << m_CurveDE << endl
|
<< "Temporal Filter Exp: " << m_TemporalFilterExp << "\n"
|
||||||
|
<< "Temporal Filter Width: " << m_TemporalFilterWidth << "\n"
|
||||||
<< "Spatial Filter Type: " << m_SpatialFilterType << endl
|
<< "Palette Mode: " << m_PaletteMode << "\n"
|
||||||
<< "Spatial Filter Radius: " << m_SpatialFilterRadius << endl
|
<< "Palette Interp: " << m_PaletteInterp << "\n"
|
||||||
|
<< "Palette Index: " << m_Palette.m_Index << "\n"
|
||||||
<< "Temporal Filter Type: " << m_TemporalFilterType << endl
|
|
||||||
<< "Temporal Filter Exp: " << m_TemporalFilterExp << endl
|
|
||||||
<< "Temporal Filter Width: " << m_TemporalFilterWidth << endl
|
|
||||||
|
|
||||||
<< "Palette Mode: " << m_PaletteMode << endl
|
|
||||||
<< "Palette Interp: " << m_PaletteInterp << endl
|
|
||||||
<< "Palette Index: " << m_Palette.m_Index << endl
|
|
||||||
//Add palette info here if needed.
|
//Add palette info here if needed.
|
||||||
|
<< "Name: " << m_Name << "\n"
|
||||||
<< "Name: " << m_Name << endl
|
<< "Index: " << m_Index << "\n"
|
||||||
<< "Index: " << m_Index << endl
|
<< "Scale Type: " << m_ScaleType << "\n"
|
||||||
<< "Scale Type: " << m_ScaleType << endl
|
<< "Parent Filename: " << m_ParentFilename << "\n"
|
||||||
<< "Parent Filename: " << m_ParentFilename << endl
|
<< "\n";
|
||||||
<< endl;
|
|
||||||
|
|
||||||
for (i = 0; i < XformCount(); i++)
|
for (i = 0; i < XformCount(); i++)
|
||||||
{
|
{
|
||||||
ss << "Xform " << i << ":" << endl << m_Xforms[i].ToString() << endl;
|
ss << "Xform " << i << ":\n" << m_Xforms[i].ToString() << "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (UseFinalXform())
|
if (UseFinalXform())
|
||||||
ss << "Final Xform: " << m_FinalXform.ToString() << endl;
|
ss << "Final Xform: " << m_FinalXform.ToString() << "\n";
|
||||||
|
|
||||||
return ss.str();
|
return ss.str();
|
||||||
}
|
}
|
||||||
|
@ -28,6 +28,7 @@
|
|||||||
|
|
||||||
//Standard headers.
|
//Standard headers.
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
#include <array>
|
||||||
#include <chrono>
|
#include <chrono>
|
||||||
#include <complex>
|
#include <complex>
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
@ -38,9 +39,9 @@
|
|||||||
#include <iomanip>
|
#include <iomanip>
|
||||||
#include <limits>
|
#include <limits>
|
||||||
#ifdef __APPLE__
|
#ifdef __APPLE__
|
||||||
#include <malloc/malloc.h>
|
#include <malloc/malloc.h>
|
||||||
#else
|
#else
|
||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
#endif
|
#endif
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
@ -57,9 +58,9 @@
|
|||||||
|
|
||||||
//Third party headers.
|
//Third party headers.
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#include "libxml/parser.h"
|
#include "libxml/parser.h"
|
||||||
#else
|
#else
|
||||||
#include "libxml2/libxml/parser.h"
|
#include "libxml2/libxml/parser.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//Intel's Threading Building Blocks is what's used for all threading.
|
//Intel's Threading Building Blocks is what's used for all threading.
|
||||||
@ -69,7 +70,7 @@
|
|||||||
|
|
||||||
#define GLM_FORCE_RADIANS 1
|
#define GLM_FORCE_RADIANS 1
|
||||||
#ifndef __APPLE__
|
#ifndef __APPLE__
|
||||||
#define GLM_FORCE_INLINE 1
|
#define GLM_FORCE_INLINE 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//glm is what's used for matrix math.
|
//glm is what's used for matrix math.
|
||||||
|
@ -124,7 +124,6 @@ public:
|
|||||||
//Original returned false if all were 0, but it's allowed here
|
//Original returned false if all were 0, but it's allowed here
|
||||||
//which will just end up setting all elements to 0 which means
|
//which will just end up setting all elements to 0 which means
|
||||||
//only the first xform will get used.
|
//only the first xform will get used.
|
||||||
|
|
||||||
//Calculate how much of a fraction of a the total density each element represents.
|
//Calculate how much of a fraction of a the total density each element represents.
|
||||||
size_t j = 0;
|
size_t j = 0;
|
||||||
//These must be double, else roundoff error will prevent the last element of m_XformDistributions from being set.
|
//These must be double, else roundoff error will prevent the last element of m_XformDistributions from being set.
|
||||||
@ -147,9 +146,11 @@ public:
|
|||||||
while (tempDensity < currentDensityLimit && j < CHOOSE_XFORM_GRAIN)
|
while (tempDensity < currentDensityLimit && j < CHOOSE_XFORM_GRAIN)
|
||||||
{
|
{
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
|
|
||||||
//Ensure distribution contains no out of bounds indices.
|
//Ensure distribution contains no out of bounds indices.
|
||||||
if (byte(i) >= ember.XformCount())
|
if (byte(i) >= ember.XformCount())
|
||||||
throw "Out of bounds xform index in selection distribution.";
|
throw "Out of bounds xform index in selection distribution.";
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
//printf("offset = %d, xform = %d, running sum = %f\n", j, i, tempDensity);
|
//printf("offset = %d, xform = %d, running sum = %f\n", j, i, tempDensity);
|
||||||
m_XformDistributions[(distrib * CHOOSE_XFORM_GRAIN) + j] = byte(i);
|
m_XformDistributions[(distrib * CHOOSE_XFORM_GRAIN) + j] = byte(i);
|
||||||
@ -159,10 +160,16 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
|
|
||||||
//Ensure every element of the distribution was populated.
|
//Ensure every element of the distribution was populated.
|
||||||
if (j < CHOOSE_XFORM_GRAIN)
|
if (j < CHOOSE_XFORM_GRAIN)
|
||||||
throw "Not all distribution elements set, undefined behavior.";
|
throw "Not all distribution elements set, undefined behavior.";
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
for (; j < CHOOSE_XFORM_GRAIN; j++)//Make absolutely sure they are set to a valid value.
|
||||||
|
m_XformDistributions[(distrib * CHOOSE_XFORM_GRAIN) + j] = byte(i - 1);
|
||||||
|
|
||||||
//Flam3 did this, which gives the same result.
|
//Flam3 did this, which gives the same result.
|
||||||
//T t = xforms[0].m_Weight;
|
//T t = xforms[0].m_Weight;
|
||||||
//
|
//
|
||||||
@ -217,7 +224,6 @@ protected:
|
|||||||
firstBadPoint.m_Z = 0;
|
firstBadPoint.m_Z = 0;
|
||||||
firstBadPoint.m_ColorX = point->m_ColorX;
|
firstBadPoint.m_ColorX = point->m_ColorX;
|
||||||
firstBadPoint.m_VizAdjusted = point->m_VizAdjusted;
|
firstBadPoint.m_VizAdjusted = point->m_VizAdjusted;
|
||||||
|
|
||||||
xformIndex = NextXformFromIndex(rand.Rand());
|
xformIndex = NextXformFromIndex(rand.Rand());
|
||||||
|
|
||||||
if (!xforms[xformIndex].Apply(&firstBadPoint, point, rand))
|
if (!xforms[xformIndex].Apply(&firstBadPoint, point, rand))
|
||||||
@ -250,7 +256,6 @@ protected:
|
|||||||
if (IsClose<T>(ember.FinalXform()->m_Opacity, 1) || rand.Frand01<T>() < ember.FinalXform()->m_Opacity)
|
if (IsClose<T>(ember.FinalXform()->m_Opacity, 1) || rand.Frand01<T>() < ember.FinalXform()->m_Opacity)
|
||||||
{
|
{
|
||||||
T tempVizAdjusted = tempPoint.m_VizAdjusted;
|
T tempVizAdjusted = tempPoint.m_VizAdjusted;
|
||||||
|
|
||||||
ember.NonConstFinalXform()->Apply(&tempPoint, sample, rand);
|
ember.NonConstFinalXform()->Apply(&tempPoint, sample, rand);
|
||||||
sample->m_VizAdjusted = tempVizAdjusted;
|
sample->m_VizAdjusted = tempVizAdjusted;
|
||||||
}
|
}
|
||||||
@ -282,7 +287,7 @@ protected:
|
|||||||
template <typename T>
|
template <typename T>
|
||||||
class EMBER_API StandardIterator : public Iterator<T>
|
class EMBER_API StandardIterator : public Iterator<T>
|
||||||
{
|
{
|
||||||
ITERATORUSINGS
|
ITERATORUSINGS
|
||||||
public:
|
public:
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Empty constructor.
|
/// Empty constructor.
|
||||||
@ -405,7 +410,7 @@ public:
|
|||||||
template <typename T>
|
template <typename T>
|
||||||
class EMBER_API XaosIterator : public Iterator<T>
|
class EMBER_API XaosIterator : public Iterator<T>
|
||||||
{
|
{
|
||||||
ITERATORUSINGS
|
ITERATORUSINGS
|
||||||
public:
|
public:
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Empty constructor.
|
/// Empty constructor.
|
||||||
@ -439,7 +444,6 @@ public:
|
|||||||
firstBadPoint.m_Z = 0;
|
firstBadPoint.m_Z = 0;
|
||||||
firstBadPoint.m_ColorX = point->m_ColorX;
|
firstBadPoint.m_ColorX = point->m_ColorX;
|
||||||
firstBadPoint.m_VizAdjusted = point->m_VizAdjusted;
|
firstBadPoint.m_VizAdjusted = point->m_VizAdjusted;
|
||||||
|
|
||||||
xformIndex = NextXformFromIndex(rand.Rand(), lastXformUsed);
|
xformIndex = NextXformFromIndex(rand.Rand(), lastXformUsed);
|
||||||
|
|
||||||
if (!xforms[xformIndex].Apply(&firstBadPoint, point, rand))
|
if (!xforms[xformIndex].Apply(&firstBadPoint, point, rand))
|
||||||
|
@ -50,7 +50,7 @@ static inline bool FindIf(c& container, pr pred)
|
|||||||
template<class c, class T>
|
template<class c, class T>
|
||||||
static inline bool Contains(c& container, const T& val)
|
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();
|
return std::find_if(container.begin(), container.end(), [&](const T & t) -> bool { return t == val; }) != container.end();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -178,6 +178,67 @@ private:
|
|||||||
vector<string> m_ErrorReport;
|
vector<string> m_ErrorReport;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// A base class for handling singletons that ensures only one instance exists, but
|
||||||
|
/// also deletes the instance after there are no more references to it.
|
||||||
|
/// This fixes the problem of the normal singleton pattern that uses a static function
|
||||||
|
/// variable. That pattern does not delete the instance until after main() exits
|
||||||
|
/// which can cause serious problems with certain libraries.
|
||||||
|
/// This class will delete before main exits.
|
||||||
|
/// Note that it still uses a local static variable because static templated
|
||||||
|
/// member variables cannot be exported across module boundaries.
|
||||||
|
/// Derived classes should inherit from this using the CRTP, and declare a friend to it.
|
||||||
|
/// They also should make their constructors private and destructors public.
|
||||||
|
/// Attribution: This class is a combination of
|
||||||
|
/// http://btorpey.github.io/blog/2014/02/12/shared-singletons/
|
||||||
|
/// and
|
||||||
|
/// http://enki-tech.blogspot.com/2012/08/c11-generic-singleton.html
|
||||||
|
/// </summary>
|
||||||
|
template <class T>
|
||||||
|
class Singleton
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
/// <summary>
|
||||||
|
/// Create and return an instance of T.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="...args">The args to forward to the constructor of T</param>
|
||||||
|
/// <returns>A shared_ptr<T></returns>
|
||||||
|
template <typename... Args>
|
||||||
|
static shared_ptr<T> Instance(Args... args)
|
||||||
|
{
|
||||||
|
static weak_ptr<T> staticInstance;
|
||||||
|
auto temp = staticInstance.lock();
|
||||||
|
|
||||||
|
if (!temp)
|
||||||
|
{
|
||||||
|
temp.reset(new T(std::forward<Args>(args)...));
|
||||||
|
staticInstance = temp;
|
||||||
|
}
|
||||||
|
|
||||||
|
return temp;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
//Use this if the body of the destructor will be implemented in a cpp file.
|
||||||
|
#define SINGLETON_DERIVED_DECL(x) \
|
||||||
|
friend class Singleton<x>; \
|
||||||
|
public: \
|
||||||
|
~x(); \
|
||||||
|
\
|
||||||
|
private: \
|
||||||
|
x(const x& other) = delete; \
|
||||||
|
const x& operator=(const x& other) = delete//Semicolon deliberately omitted to force it on the caller.
|
||||||
|
|
||||||
|
//Use this if the body of the destructor is empty and is will be implemented inline in the header file.
|
||||||
|
#define SINGLETON_DERIVED_IMPL(x) \
|
||||||
|
friend class Singleton<x>; \
|
||||||
|
public: \
|
||||||
|
~x(){} \
|
||||||
|
\
|
||||||
|
private: \
|
||||||
|
x(const x& other) = delete; \
|
||||||
|
const x& operator=(const x& other) = delete
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Open a file in binary mode and read its entire contents into a vector of bytes. Optionally null terminate.
|
/// Open a file in binary mode and read its entire contents into a vector of bytes. Optionally null terminate.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -197,7 +258,6 @@ static bool ReadFile(const char* filename, string& buf, bool nullTerminate = tru
|
|||||||
if (f)
|
if (f)
|
||||||
{
|
{
|
||||||
struct _stat statBuf;
|
struct _stat statBuf;
|
||||||
|
|
||||||
#if defined(_WIN32) || defined(__APPLE__)
|
#if defined(_WIN32) || defined(__APPLE__)
|
||||||
int statResult = _fstat(f->_file, &statBuf);//Get data associated with file.
|
int statResult = _fstat(f->_file, &statBuf);//Get data associated with file.
|
||||||
#else
|
#else
|
||||||
@ -582,7 +642,7 @@ static inline T SafeTan(T x)
|
|||||||
|
|
||||||
template <>
|
template <>
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
static
|
static
|
||||||
#endif
|
#endif
|
||||||
float SafeTan<float>(float x)
|
float SafeTan<float>(float x)
|
||||||
{
|
{
|
||||||
@ -591,7 +651,7 @@ float SafeTan<float>(float x)
|
|||||||
|
|
||||||
template <>
|
template <>
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
static
|
static
|
||||||
#endif
|
#endif
|
||||||
double SafeTan<double>(double x)
|
double SafeTan<double>(double x)
|
||||||
{
|
{
|
||||||
@ -694,7 +754,6 @@ template <typename T>
|
|||||||
static inline T Fabsmod(T v)
|
static inline T Fabsmod(T v)
|
||||||
{
|
{
|
||||||
T dummy;
|
T dummy;
|
||||||
|
|
||||||
return modf(v, &dummy);
|
return modf(v, &dummy);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -831,7 +890,6 @@ static inline T NormalizeDeg360(T angle)
|
|||||||
static string ToLower(const string& str)
|
static string ToLower(const string& str)
|
||||||
{
|
{
|
||||||
string lower;
|
string lower;
|
||||||
|
|
||||||
lower.resize(str.size());//Allocate the destination space.
|
lower.resize(str.size());//Allocate the destination space.
|
||||||
std::transform(str.begin(), str.end(), lower.begin(), ::tolower);//Convert the source string to lower case storing the result in the destination string.
|
std::transform(str.begin(), str.end(), lower.begin(), ::tolower);//Convert the source string to lower case storing the result in the destination string.
|
||||||
return lower;
|
return lower;
|
||||||
@ -845,7 +903,6 @@ static string ToLower(const string& str)
|
|||||||
static string ToUpper(const string& str)
|
static string ToUpper(const string& str)
|
||||||
{
|
{
|
||||||
string upper;
|
string upper;
|
||||||
|
|
||||||
upper.resize(str.size());//Allocate the destination space.
|
upper.resize(str.size());//Allocate the destination space.
|
||||||
std::transform(str.begin(), str.end(), upper.begin(), ::toupper);//Convert the source string to lower case storing the result in the destination string.
|
std::transform(str.begin(), str.end(), upper.begin(), ::toupper);//Convert the source string to lower case storing the result in the destination string.
|
||||||
return upper;
|
return upper;
|
||||||
@ -924,7 +981,6 @@ static inline T Arg(char* name, T def)
|
|||||||
{
|
{
|
||||||
T tempVal;
|
T tempVal;
|
||||||
istringstream istr(ch);
|
istringstream istr(ch);
|
||||||
|
|
||||||
istr >> tempVal;
|
istr >> tempVal;
|
||||||
|
|
||||||
if (!istr.bad() && !istr.fail())
|
if (!istr.bad() && !istr.fail())
|
||||||
@ -947,7 +1003,7 @@ static inline T Arg(char* name, T def)
|
|||||||
/// <returns>The value of the specified environment variable if found, else default</returns>
|
/// <returns>The value of the specified environment variable if found, else default</returns>
|
||||||
template <>
|
template <>
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
static
|
static
|
||||||
#endif
|
#endif
|
||||||
bool Arg<bool>(char* name, bool def)
|
bool Arg<bool>(char* name, bool def)
|
||||||
{
|
{
|
||||||
@ -962,7 +1018,7 @@ bool Arg<bool>(char* name, bool def)
|
|||||||
/// <returns>The value of the specified environment variable if found, else default</returns>
|
/// <returns>The value of the specified environment variable if found, else default</returns>
|
||||||
template <>
|
template <>
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
static
|
static
|
||||||
#endif
|
#endif
|
||||||
string Arg<string>(char* name, string def)
|
string Arg<string>(char* name, string def)
|
||||||
{
|
{
|
||||||
|
710
Source/Ember/VarFuncs.h
Normal file
710
Source/Ember/VarFuncs.h
Normal file
@ -0,0 +1,710 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "Utils.h"
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// VarFuncs class.
|
||||||
|
/// </summary>
|
||||||
|
|
||||||
|
namespace EmberNs
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Central coordinating place for code and data common to some variations.
|
||||||
|
/// This class is a singleton since all of its data is shared and read-only.
|
||||||
|
/// </summary>
|
||||||
|
template <typename T>
|
||||||
|
class EMBER_API VarFuncs : public Singleton<VarFuncs<T>>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
/// <summary>
|
||||||
|
/// Retrieve information about a piece of shared data by looking
|
||||||
|
/// up its name.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="name">The name of the shared data to retrieve</param>
|
||||||
|
/// <returns>A pointer to the beginning of the data and its size in terms of sizeof(T)</returns>
|
||||||
|
std::pair<const T*, size_t>* GetSharedData(const string& name)
|
||||||
|
{
|
||||||
|
const auto& data = m_GlobalMap.find(name);
|
||||||
|
|
||||||
|
if (data != m_GlobalMap.end())
|
||||||
|
return &data->second;
|
||||||
|
else
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The size of the index array.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>size_t</returns>
|
||||||
|
inline size_t IndexCount() const
|
||||||
|
{
|
||||||
|
return m_P.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Get the index value at the specified index.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="i">The index to retrieve</param>
|
||||||
|
/// <returns>int</returns>
|
||||||
|
inline int Index(int i) const
|
||||||
|
{
|
||||||
|
return m_P[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Get a const reference to the 3 component vector at the specified index.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="i">The index to retrieve</param>
|
||||||
|
/// <returns>v3T&</returns>
|
||||||
|
inline v3T& Grad(int i)
|
||||||
|
{
|
||||||
|
return m_Grad[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Get the size of the gradient vector.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>size_t</returns>
|
||||||
|
inline size_t GradCount() const
|
||||||
|
{
|
||||||
|
return m_Grad.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Get a pointer to the floating point index values.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>T*</returns>
|
||||||
|
inline T* IndexFloats() const
|
||||||
|
{
|
||||||
|
return const_cast<T*>(m_PFloats.data());
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Compute 3D simplex nosie value based on the 3 component vector passed in.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="v">The vector to use to compute the value</param>
|
||||||
|
/// <returns>T</returns>
|
||||||
|
T SimplexNoise3D(const v3T& v)
|
||||||
|
{
|
||||||
|
v3T c[4]; // Co-ordinates of four simplex shape corners in (x,y,z)
|
||||||
|
T n = 0; // Noise total value
|
||||||
|
int gi[4]; // Hashed grid index for each corner, used to determine gradient
|
||||||
|
T t; // Temp double
|
||||||
|
// Convert input co-ordinates ( x, y, z ) to
|
||||||
|
// integer-based simplex grid ( i, j, k )
|
||||||
|
T skewIn = (v.x + v.y + v.z) * T(0.3333);
|
||||||
|
intmax_t i = Floor<T>(v.x + skewIn);
|
||||||
|
intmax_t j = Floor<T>(v.y + skewIn);
|
||||||
|
intmax_t k = Floor<T>(v.z + skewIn);
|
||||||
|
t = (i + j + k) * T(0.16666);
|
||||||
|
// Cell origin co-ordinates in input space (x,y,z)
|
||||||
|
T x0 = i - t;
|
||||||
|
T y0 = j - t;
|
||||||
|
T z0 = k - t;
|
||||||
|
// This value of t finished with, not used later . . .
|
||||||
|
// Point offset within cell, in input space (x,y,z)
|
||||||
|
c[0].x = v.x - x0;
|
||||||
|
c[0].y = v.y - y0;
|
||||||
|
c[0].z = v.z - z0;
|
||||||
|
// For the 3D case, the simplex shape is a slightly irregular tetrahedron.
|
||||||
|
// The nested logic determines which simplex we are in, and therefore in which
|
||||||
|
// order to get gradients for the four corners
|
||||||
|
int i1, j1, k1; // Offsets for second corner of simplex in (i,j,k) coords
|
||||||
|
int i2, j2, k2; // Offsets for third corner of simplex in (i,j,k) coords
|
||||||
|
|
||||||
|
// The fourth corner is always i3 = 1, j3 = 1, k3 = 1, so no need to
|
||||||
|
// calculate values
|
||||||
|
if (c[0].x >= c[0].y)
|
||||||
|
{
|
||||||
|
if (c[0].y >= c[0].z)
|
||||||
|
{
|
||||||
|
i1 = 1; j1 = 0; k1 = 0; i2 = 1; j2 = 1; k2 = 0;
|
||||||
|
}
|
||||||
|
else // y0<z0
|
||||||
|
{
|
||||||
|
if (c[0].x >= c[0].z)
|
||||||
|
{
|
||||||
|
i1 = 1; j1 = 0; k1 = 0; i2 = 1; j2 = 0; k2 = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
i1 = 0; j1 = 0; k1 = 1; i2 = 1; j2 = 0; k2 = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else // x0<y0
|
||||||
|
{
|
||||||
|
if (c[0].y < c[0].z)
|
||||||
|
{
|
||||||
|
i1 = 0; j1 = 0; k1 = 1; i2 = 0; j2 = 1; k2 = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (c[0].x < c[0].z)
|
||||||
|
{
|
||||||
|
i1 = 0; j1 = 1; k1 = 0; i2 = 0; j2 = 1; k2 = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
i1 = 0; j1 = 1; k1 = 0; i2 = 1; j2 = 1; k2 = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// A step of 1i in (i,j,k) is a step of (1-T(0.16666), -T(0.16666), -T(0.16666)) in (x,y,z),
|
||||||
|
// and this is similar for j and k . . .
|
||||||
|
// Offsets for second corner in (x,y,z) coords
|
||||||
|
c[1].x = c[0].x - i1 + T(0.16666);
|
||||||
|
c[1].y = c[0].y - j1 + T(0.16666);
|
||||||
|
c[1].z = c[0].z - k1 + T(0.16666);
|
||||||
|
// Offsets for third corner in (x,y,z) coords
|
||||||
|
c[2].x = c[0].x - i2 + 2 * T(0.16666);
|
||||||
|
c[2].y = c[0].y - j2 + 2 * T(0.16666);
|
||||||
|
c[2].z = c[0].z - k2 + 2 * T(0.16666);
|
||||||
|
// Offsets for last corner in (x,y,z) coords
|
||||||
|
c[3].x = c[0].x - 1 + 3 * T(0.16666);
|
||||||
|
c[3].y = c[0].y - 1 + 3 * T(0.16666);
|
||||||
|
c[3].z = c[0].z - 1 + 3 * T(0.16666);
|
||||||
|
// Work out the hashed gradient indices of the four simplex corners
|
||||||
|
int ii = i & 0x3ff;
|
||||||
|
int jj = j & 0x3ff;
|
||||||
|
int kk = k & 0x3ff;
|
||||||
|
gi[0] = m_P[ii + m_P[jj + m_P[kk]]];
|
||||||
|
gi[1] = m_P[ii + i1 + m_P[jj + j1 + m_P[kk + k1]]];
|
||||||
|
gi[2] = m_P[ii + i2 + m_P[jj + j2 + m_P[kk + k2]]];
|
||||||
|
gi[3] = m_P[ii + 1 + m_P[jj + 1 + m_P[kk + 1]]];
|
||||||
|
|
||||||
|
// Calculate the contribution from the four corners, and add to total
|
||||||
|
for (int corner = 0; corner < 4; corner++)
|
||||||
|
{
|
||||||
|
t = T(0.6) - c[corner].x * c[corner].x - c[corner].y * c[corner].y - c[corner].z * c[corner].z;
|
||||||
|
|
||||||
|
if (t > 0)
|
||||||
|
{
|
||||||
|
v3T u = m_Grad[gi[corner]];
|
||||||
|
t *= t;
|
||||||
|
n += t * t * (u.x * c[corner].x + u.y * c[corner].y + u.z * c[corner].z);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// The result is scaled be fit -1.0 to 1.0
|
||||||
|
return 32 * n;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Compute a perlin noise value based on the values passed in.
|
||||||
|
/// This will iteratively call SimplexNoise3D().
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="v">The vector</param>
|
||||||
|
/// <param name="aScale">A value to scale a by</param>
|
||||||
|
/// <param name="fScale">A value to scale f by</param>
|
||||||
|
/// <param name="octaves">The number of iterations to perform</param>
|
||||||
|
/// <returns>T</returns>
|
||||||
|
T PerlinNoise3D(v3T& v, T aScale, T fScale, int octaves)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
T n = 0, a = 1;
|
||||||
|
v3T u = v;
|
||||||
|
|
||||||
|
for (i = 0; i < octaves; i++)
|
||||||
|
{
|
||||||
|
n += SimplexNoise3D(u) / a;
|
||||||
|
a *= aScale;
|
||||||
|
u.x *= fScale;
|
||||||
|
u.y *= fScale;
|
||||||
|
u.x *= fScale;
|
||||||
|
}
|
||||||
|
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Find the element in p which is closest to u and return
|
||||||
|
/// the index of that element.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="p">The vector of points to examine</param>
|
||||||
|
/// <param name="n">The number of points in p to examine</param>
|
||||||
|
/// <param name="u">The point to compare p gainst</param>
|
||||||
|
/// <returns>Integer index in p which contained the closest point</returns>
|
||||||
|
static int Closest(v2T* p, int n, v2T& u)
|
||||||
|
{
|
||||||
|
T d2;
|
||||||
|
T d2min = TMAX;
|
||||||
|
int i, j = 0;
|
||||||
|
|
||||||
|
for (i = 0; i < n; i++)
|
||||||
|
{
|
||||||
|
d2 = Sqr<T>(p[i].x - u.x) + Sqr<T>(p[i].y - u.y);
|
||||||
|
|
||||||
|
if (d2 < d2min)
|
||||||
|
{
|
||||||
|
d2min = d2;
|
||||||
|
j = i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return j;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Unsure.
|
||||||
|
/// </summary>
|
||||||
|
static T Vratio(const v2T& p, const v2T& q, const v2T& u)
|
||||||
|
{
|
||||||
|
v2T pmq = p - q;
|
||||||
|
|
||||||
|
if (pmq.x == 0 || pmq.y == 0)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
return 2 * ((u.x - q.x) * pmq.x + (u.y - q.y) * pmq.y) / (pmq.x * pmq.x + pmq.y * pmq.y);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Unsure.
|
||||||
|
/// </summary>
|
||||||
|
static T Voronoi(v2T* p, int n, int q, v2T& u)
|
||||||
|
{
|
||||||
|
T ratio;
|
||||||
|
T ratiomax = TLOW;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < n; i++)
|
||||||
|
{
|
||||||
|
if (i != q)
|
||||||
|
{
|
||||||
|
ratio = Vratio(p[i], p[q], u);
|
||||||
|
|
||||||
|
if (ratio > ratiomax)
|
||||||
|
ratiomax = ratio;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ratiomax;
|
||||||
|
}
|
||||||
|
|
||||||
|
SINGLETON_DERIVED_IMPL(VarFuncs<T>);
|
||||||
|
|
||||||
|
private:
|
||||||
|
/// <summary>
|
||||||
|
/// Constructor which initializes data and adds information about them to a global map.
|
||||||
|
/// </summary>
|
||||||
|
VarFuncs()
|
||||||
|
{
|
||||||
|
m_P = InitInts();
|
||||||
|
m_Grad = InitGrad();
|
||||||
|
m_GlobalMap["NOISE_INDEX"] = make_pair(m_PFloats.data(), m_PFloats.size());
|
||||||
|
m_GlobalMap["NOISE_POINTS"] = make_pair(static_cast<T*>(&(m_Grad[0].x)), SizeOf(m_Grad) / sizeof(T));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Initializes integer indices via initializer list.
|
||||||
|
/// Called once from the constructor.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>A copy of the locally declared vector</returns>
|
||||||
|
std::vector<int> InitInts()
|
||||||
|
{
|
||||||
|
std::vector<int> p =
|
||||||
|
{
|
||||||
|
127, 71, 882, 898, 798, 463, 517, 451, 454, 634, 578, 695, 728, 742, 325, 350, 684, 153, 340,
|
||||||
|
311, 992, 706, 218, 285, 96, 486, 160, 98, 686, 288, 193, 119, 410, 246, 536, 415, 953, 417,
|
||||||
|
784, 573, 734, 1, 136, 381, 177, 678, 773, 22, 301, 51, 874, 844, 775, 744, 633, 468, 1019,
|
||||||
|
287, 475, 78, 294, 724, 519, 17, 323, 191, 187, 446, 262, 212, 170, 33, 7, 227, 566, 526, 264,
|
||||||
|
556, 717, 477, 815, 671, 225, 207, 692, 663, 969, 393, 658, 877, 353, 788, 128, 303, 614, 501,
|
||||||
|
490, 387, 53, 941, 951, 736, 539, 102, 163, 175, 584, 988, 35, 347, 442, 649, 642, 198, 727,
|
||||||
|
939, 913, 811, 894, 858, 181, 412, 307, 830, 154, 479, 704, 326, 681, 619, 698, 621, 552, 598,
|
||||||
|
74, 890, 299, 922, 701, 481, 867, 214, 817, 731, 768, 673, 315, 338, 576, 222, 484, 305, 623,
|
||||||
|
239, 269, 46, 748, 608, 546, 537, 125, 667, 998, 714, 529, 823, 247, 289, 771, 808, 973, 735,
|
||||||
|
516, 974, 702, 636, 357, 455, 600, 80, 336, 696, 963, 297, 92, 980, 670, 958, 625, 712, 406,
|
||||||
|
173, 19, 763, 470, 793, 283, 655, 59, 421, 1016, 219, 13, 105, 840, 111, 38, 408, 945, 242,
|
||||||
|
559, 206, 443, 331, 737, 580, 767, 1020, 220, 31, 968, 15, 527, 833, 139, 129, 859, 739, 418,
|
||||||
|
783, 933, 49, 789, 178, 124, 772, 627, 0, 23, 388, 950, 976, 940, 485, 685, 21, 523, 723, 244,
|
||||||
|
637, 488, 835, 379, 342, 452, 862, 295, 765, 897, 507, 370, 567, 416, 100, 914, 300, 120, 392,
|
||||||
|
694, 94, 265, 791, 171, 200, 787, 441, 868, 672, 769, 983, 911, 427, 82, 69, 224, 176, 920,
|
||||||
|
500, 462, 263, 513, 797, 293, 322, 645, 469, 635, 40, 215, 687, 960, 818, 826, 34, 603, 316,
|
||||||
|
994, 611, 511, 93, 899, 114, 73, 241, 585, 327, 674, 280, 957, 471, 24, 502, 355, 159, 1017,
|
||||||
|
855, 270, 538, 521, 162, 880, 334, 986, 740, 719, 266, 820, 97, 41, 52, 750, 893, 838, 616, 83,
|
||||||
|
896, 777, 464, 562, 183, 362, 411, 478, 398, 384, 912, 599, 587, 609, 822, 243, 504, 753, 857,
|
||||||
|
157, 964, 65, 261, 81, 371, 435, 924, 885, 884, 863, 613, 721, 669, 121, 639, 989, 487, 238,
|
||||||
|
448, 216, 852, 643, 713, 676, 277, 879, 133, 123, 304, 547, 396, 70, 141, 909, 848, 900, 318,
|
||||||
|
146, 356, 802, 4, 807, 558, 764, 545, 588, 872, 554, 467, 544, 505, 149, 62, 901, 64, 45, 813,
|
||||||
|
27, 109, 718, 803, 853, 996, 1014, 476, 575, 28, 199, 688, 6, 482, 703, 560, 395, 66, 341, 794,
|
||||||
|
422, 376, 601, 76, 14, 569, 480, 39, 1011, 1001, 854, 55, 89, 335, 761, 363, 419, 252, 799,
|
||||||
|
358, 324, 1012, 152, 312, 496, 235, 916, 582, 615, 979, 1005, 891, 1013, 641, 18, 148, 185,
|
||||||
|
512, 378, 58, 211, 495, 594, 87, 762, 366, 660, 449, 520, 424, 886, 819, 281, 147, 290, 390,
|
||||||
|
32, 572, 993, 720, 683, 309, 254, 607, 568, 256, 533, 394, 620, 429, 67, 831, 103, 423, 668,
|
||||||
|
693, 518, 551, 697, 253, 949, 54, 875, 116, 434, 743, 644, 590, 279, 843, 589, 11, 647, 586,
|
||||||
|
806, 549, 375, 226, 851, 499, 450, 978, 29, 982, 189, 107, 508, 373, 796, 20, 700, 110, 26,
|
||||||
|
461, 782, 591, 828, 57, 904, 847, 328, 122, 630, 711, 44, 397, 404, 209, 365, 84, 194, 1021,
|
||||||
|
675, 135, 965, 329, 557, 691, 79, 352, 498, 629, 869, 90, 921, 233, 622, 871, 755, 439, 955,
|
||||||
|
228, 63, 825, 43, 943, 438, 144, 961, 359, 330, 682, 626, 425, 259, 249, 801, 754, 1003, 230,
|
||||||
|
377, 217, 878, 1007, 313, 2, 915, 550, 271, 437, 846, 548, 145, 715, 346, 251, 372, 99, 543,
|
||||||
|
16, 47, 195, 679, 174, 905, 188, 804, 169, 785, 231, 726, 814, 339, 531, 420, 258, 1009, 134,
|
||||||
|
972, 458, 234, 690, 260, 666, 646, 142, 184, 91, 628, 987, 10, 210, 926, 348, 386, 161, 60,
|
||||||
|
409, 680, 204, 164, 444, 708, 276, 68, 383, 491, 382, 42, 816, 483, 699, 150, 9, 565, 555, 433,
|
||||||
|
593, 86, 952, 839, 618, 751, 889, 108, 361, 595, 677, 407, 856, 255, 604, 85, 648, 928, 824,
|
||||||
|
213, 192, 267, 902, 792, 656, 631, 403, 389, 493, 333, 756, 602, 925, 113, 632, 354, 37, 873,
|
||||||
|
577, 56, 278, 930, 367, 428, 332, 317, 530, 364, 800, 774, 497, 1023, 12, 137, 845, 653, 101,
|
||||||
|
888, 542, 167, 48, 158, 1002, 745, 292, 944, 456, 990, 574, 25, 1018, 937, 298, 966, 430, 400,
|
||||||
|
349, 860, 689, 320, 117, 778, 104, 314, 786, 205, 606, 440, 936, 457, 932, 934, 948, 168, 445,
|
||||||
|
931, 757, 291, 571, 919, 360, 284, 509, 296, 245, 836, 166, 3, 257, 50, 282, 151, 810, 344,
|
||||||
|
947, 236, 946, 865, 752, 77, 610, 967, 795, 131, 302, 760, 781, 190, 938, 61, 1022, 652, 138,
|
||||||
|
984, 832, 202, 140, 985, 5, 657, 997, 401, 319, 431, 662, 405, 275, 650, 651, 887, 310, 1004,
|
||||||
|
368, 208, 596, 248, 758, 8, 126, 730, 489, 343, 337, 506, 515, 432, 232, 250, 532, 954, 524,
|
||||||
|
115, 229, 522, 908, 729, 186, 561, 995, 156, 196, 118, 805, 399, 918, 991, 849, 273, 747, 640,
|
||||||
|
143, 321, 624, 268, 306, 30, 722, 540, 534, 710, 130, 155, 883, 716, 525, 426, 812, 345, 929,
|
||||||
|
975, 472, 837, 605, 664, 391, 581, 272, 746, 112, 659, 665, 780, 240, 841, 474, 563, 36, 579,
|
||||||
|
286, 436, 907, 369, 201, 402, 962, 106, 749, 172, 494, 88, 466, 473, 414, 597, 374, 942, 308,
|
||||||
|
766, 459, 821, 592, 881, 380, 759, 866, 779, 809, 876, 541, 829, 528, 999, 221, 661, 927, 413,
|
||||||
|
977, 182, 583, 733, 892, 741, 570, 351, 617, 956, 72, 709, 850, 732, 770, 870, 95, 935, 223,
|
||||||
|
179, 861, 917, 447, 385, 132, 827, 923, 75, 465, 612, 460, 725, 492, 553, 1008, 910, 981, 503,
|
||||||
|
165, 895, 834, 1000, 180, 638, 906, 510, 274, 776, 971, 564, 738, 903, 654, 864, 959, 1015,
|
||||||
|
453, 535, 237, 197, 1006, 790, 514, 842, 970, 705, 707, 1010, 203,
|
||||||
|
|
||||||
|
// 1k Block repeats here
|
||||||
|
|
||||||
|
127, 71, 882, 898, 798, 463, 517, 451, 454, 634, 578, 695, 728, 742, 325, 350, 684, 153, 340,
|
||||||
|
311, 992, 706, 218, 285, 96, 486, 160, 98, 686, 288, 193, 119, 410, 246, 536, 415, 953, 417,
|
||||||
|
784, 573, 734, 1, 136, 381, 177, 678, 773, 22, 301, 51, 874, 844, 775, 744, 633, 468, 1019,
|
||||||
|
287, 475, 78, 294, 724, 519, 17, 323, 191, 187, 446, 262, 212, 170, 33, 7, 227, 566, 526, 264,
|
||||||
|
556, 717, 477, 815, 671, 225, 207, 692, 663, 969, 393, 658, 877, 353, 788, 128, 303, 614, 501,
|
||||||
|
490, 387, 53, 941, 951, 736, 539, 102, 163, 175, 584, 988, 35, 347, 442, 649, 642, 198, 727,
|
||||||
|
939, 913, 811, 894, 858, 181, 412, 307, 830, 154, 479, 704, 326, 681, 619, 698, 621, 552, 598,
|
||||||
|
74, 890, 299, 922, 701, 481, 867, 214, 817, 731, 768, 673, 315, 338, 576, 222, 484, 305, 623,
|
||||||
|
239, 269, 46, 748, 608, 546, 537, 125, 667, 998, 714, 529, 823, 247, 289, 771, 808, 973, 735,
|
||||||
|
516, 974, 702, 636, 357, 455, 600, 80, 336, 696, 963, 297, 92, 980, 670, 958, 625, 712, 406,
|
||||||
|
173, 19, 763, 470, 793, 283, 655, 59, 421, 1016, 219, 13, 105, 840, 111, 38, 408, 945, 242,
|
||||||
|
559, 206, 443, 331, 737, 580, 767, 1020, 220, 31, 968, 15, 527, 833, 139, 129, 859, 739, 418,
|
||||||
|
783, 933, 49, 789, 178, 124, 772, 627, 0, 23, 388, 950, 976, 940, 485, 685, 21, 523, 723, 244,
|
||||||
|
637, 488, 835, 379, 342, 452, 862, 295, 765, 897, 507, 370, 567, 416, 100, 914, 300, 120, 392,
|
||||||
|
694, 94, 265, 791, 171, 200, 787, 441, 868, 672, 769, 983, 911, 427, 82, 69, 224, 176, 920,
|
||||||
|
500, 462, 263, 513, 797, 293, 322, 645, 469, 635, 40, 215, 687, 960, 818, 826, 34, 603, 316,
|
||||||
|
994, 611, 511, 93, 899, 114, 73, 241, 585, 327, 674, 280, 957, 471, 24, 502, 355, 159, 1017,
|
||||||
|
855, 270, 538, 521, 162, 880, 334, 986, 740, 719, 266, 820, 97, 41, 52, 750, 893, 838, 616, 83,
|
||||||
|
896, 777, 464, 562, 183, 362, 411, 478, 398, 384, 912, 599, 587, 609, 822, 243, 504, 753, 857,
|
||||||
|
157, 964, 65, 261, 81, 371, 435, 924, 885, 884, 863, 613, 721, 669, 121, 639, 989, 487, 238,
|
||||||
|
448, 216, 852, 643, 713, 676, 277, 879, 133, 123, 304, 547, 396, 70, 141, 909, 848, 900, 318,
|
||||||
|
146, 356, 802, 4, 807, 558, 764, 545, 588, 872, 554, 467, 544, 505, 149, 62, 901, 64, 45, 813,
|
||||||
|
27, 109, 718, 803, 853, 996, 1014, 476, 575, 28, 199, 688, 6, 482, 703, 560, 395, 66, 341, 794,
|
||||||
|
422, 376, 601, 76, 14, 569, 480, 39, 1011, 1001, 854, 55, 89, 335, 761, 363, 419, 252, 799,
|
||||||
|
358, 324, 1012, 152, 312, 496, 235, 916, 582, 615, 979, 1005, 891, 1013, 641, 18, 148, 185,
|
||||||
|
512, 378, 58, 211, 495, 594, 87, 762, 366, 660, 449, 520, 424, 886, 819, 281, 147, 290, 390,
|
||||||
|
32, 572, 993, 720, 683, 309, 254, 607, 568, 256, 533, 394, 620, 429, 67, 831, 103, 423, 668,
|
||||||
|
693, 518, 551, 697, 253, 949, 54, 875, 116, 434, 743, 644, 590, 279, 843, 589, 11, 647, 586,
|
||||||
|
806, 549, 375, 226, 851, 499, 450, 978, 29, 982, 189, 107, 508, 373, 796, 20, 700, 110, 26,
|
||||||
|
461, 782, 591, 828, 57, 904, 847, 328, 122, 630, 711, 44, 397, 404, 209, 365, 84, 194, 1021,
|
||||||
|
675, 135, 965, 329, 557, 691, 79, 352, 498, 629, 869, 90, 921, 233, 622, 871, 755, 439, 955,
|
||||||
|
228, 63, 825, 43, 943, 438, 144, 961, 359, 330, 682, 626, 425, 259, 249, 801, 754, 1003, 230,
|
||||||
|
377, 217, 878, 1007, 313, 2, 915, 550, 271, 437, 846, 548, 145, 715, 346, 251, 372, 99, 543,
|
||||||
|
16, 47, 195, 679, 174, 905, 188, 804, 169, 785, 231, 726, 814, 339, 531, 420, 258, 1009, 134,
|
||||||
|
972, 458, 234, 690, 260, 666, 646, 142, 184, 91, 628, 987, 10, 210, 926, 348, 386, 161, 60,
|
||||||
|
409, 680, 204, 164, 444, 708, 276, 68, 383, 491, 382, 42, 816, 483, 699, 150, 9, 565, 555, 433,
|
||||||
|
593, 86, 952, 839, 618, 751, 889, 108, 361, 595, 677, 407, 856, 255, 604, 85, 648, 928, 824,
|
||||||
|
213, 192, 267, 902, 792, 656, 631, 403, 389, 493, 333, 756, 602, 925, 113, 632, 354, 37, 873,
|
||||||
|
577, 56, 278, 930, 367, 428, 332, 317, 530, 364, 800, 774, 497, 1023, 12, 137, 845, 653, 101,
|
||||||
|
888, 542, 167, 48, 158, 1002, 745, 292, 944, 456, 990, 574, 25, 1018, 937, 298, 966, 430, 400,
|
||||||
|
349, 860, 689, 320, 117, 778, 104, 314, 786, 205, 606, 440, 936, 457, 932, 934, 948, 168, 445,
|
||||||
|
931, 757, 291, 571, 919, 360, 284, 509, 296, 245, 836, 166, 3, 257, 50, 282, 151, 810, 344,
|
||||||
|
947, 236, 946, 865, 752, 77, 610, 967, 795, 131, 302, 760, 781, 190, 938, 61, 1022, 652, 138,
|
||||||
|
984, 832, 202, 140, 985, 5, 657, 997, 401, 319, 431, 662, 405, 275, 650, 651, 887, 310, 1004,
|
||||||
|
368, 208, 596, 248, 758, 8, 126, 730, 489, 343, 337, 506, 515, 432, 232, 250, 532, 954, 524,
|
||||||
|
115, 229, 522, 908, 729, 186, 561, 995, 156, 196, 118, 805, 399, 918, 991, 849, 273, 747, 640,
|
||||||
|
143, 321, 624, 268, 306, 30, 722, 540, 534, 710, 130, 155, 883, 716, 525, 426, 812, 345, 929,
|
||||||
|
975, 472, 837, 605, 664, 391, 581, 272, 746, 112, 659, 665, 780, 240, 841, 474, 563, 36, 579,
|
||||||
|
286, 436, 907, 369, 201, 402, 962, 106, 749, 172, 494, 88, 466, 473, 414, 597, 374, 942, 308,
|
||||||
|
766, 459, 821, 592, 881, 380, 759, 866, 779, 809, 876, 541, 829, 528, 999, 221, 661, 927, 413,
|
||||||
|
977, 182, 583, 733, 892, 741, 570, 351, 617, 956, 72, 709, 850, 732, 770, 870, 95, 935, 223,
|
||||||
|
179, 861, 917, 447, 385, 132, 827, 923, 75, 465, 612, 460, 725, 492, 553, 1008, 910, 981, 503,
|
||||||
|
165, 895, 834, 1000, 180, 638, 906, 510, 274, 776, 971, 564, 738, 903, 654, 864, 959, 1015,
|
||||||
|
453, 535, 237, 197, 1006, 790, 514, 842, 970, 705, 707, 1010, 203,
|
||||||
|
|
||||||
|
// 2k block overlaps by two items here . . . (to allow for over-runs caused by taking
|
||||||
|
// "next item in sequence")
|
||||||
|
|
||||||
|
127, 71
|
||||||
|
};
|
||||||
|
//Make a copy of all ints as floats. This is used
|
||||||
|
//when passed to the OpenCL since the global shared array
|
||||||
|
//is of type T.
|
||||||
|
m_PFloats.clear();
|
||||||
|
m_PFloats.reserve(p.size());
|
||||||
|
|
||||||
|
for (size_t i = 0; i < p.size(); i++)
|
||||||
|
m_PFloats.push_back(T(p[i]));
|
||||||
|
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Initializes the gradient texture.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>A copy of the locally declared vector</returns>
|
||||||
|
std::vector<v3T> InitGrad()
|
||||||
|
{
|
||||||
|
std::vector<v3T> g =
|
||||||
|
{
|
||||||
|
v3T{ 0.79148875, 0.11986299, -0.59931496 }, v3T{ 0.51387411, -0.61170974, 0.60145208 }, v3T{ -0.95395128, -0.21599571, 0.20814132 }, v3T{ 0.59830026, 0.67281067, 0.43515813 },
|
||||||
|
v3T{ -0.93971346, 0.16019818, -0.30211777 }, v3T{ -0.74549699, -0.35758846, 0.56246309 }, v3T{ -0.78850321, -0.29060783, 0.54204223 }, v3T{ 0.61332339, 0.38915256, 0.68730976 },
|
||||||
|
v3T{ -0.64370632, -0.40843865, 0.64716307 }, v3T{ -0.23922684, 0.70399949, -0.66869667 }, v3T{ -0.82882802, -0.00130741, 0.55950192 }, v3T{ 0.07987672, 0.62439350, -0.77701510 },
|
||||||
|
v3T{ -0.46863456, -0.57517073, 0.67049257 }, v3T{ 0.30792870, 0.42464616, -0.85138449 }, v3T{ -0.06972001, 0.30439513, 0.94999091 }, v3T{ 0.58798450, -0.00151777, 0.80887077 },
|
||||||
|
v3T{ -0.32757867, 0.51578941, 0.79161449 }, v3T{ -0.44745031, 0.86883688, 0.21192142 }, v3T{ -0.38042636, 0.71222019, 0.58993066 }, v3T{ -0.32616370, 0.61421101, -0.71858339 },
|
||||||
|
v3T{ 0.45483340, 0.19928843, -0.86799234 }, v3T{ -0.81020233, -0.05930352, 0.58314259 }, v3T{ 0.81994145, 0.39825895, 0.41120046 }, v3T{ 0.49257662, 0.74240487, 0.45409612 },
|
||||||
|
v3T{ 0.95124863, -0.26667257, -0.15495734 }, v3T{ -0.95745656, 0.09203090, -0.27350914 }, v3T{ 0.20842499, -0.82482150, -0.52557446 }, v3T{ 0.46829293, -0.47740985, -0.74349282 },
|
||||||
|
v3T{ -0.65000311, -0.74754355, 0.13665502 }, v3T{ 0.83566743, 0.53294928, -0.13275921 }, v3T{ 0.90454761, -0.35449497, -0.23691126 }, v3T{ -0.64270969, 0.21532175, 0.73522839 },
|
||||||
|
v3T{ -0.39693478, -0.17553935, -0.90090439 }, v3T{ 0.45073049, 0.65155528, 0.61017845 }, v3T{ 0.69618384, -0.07989842, 0.71340333 }, v3T{ 0.09059934, 0.85274641, -0.51440773 },
|
||||||
|
v3T{ -0.00560267, 0.69197466, 0.72190005 }, v3T{ 0.23586856, -0.95830502, 0.16129945 }, v3T{ 0.20354340, -0.96925430, -0.13826128 }, v3T{ -0.45516395, 0.63885905, 0.62022970 },
|
||||||
|
v3T{ 0.80792021, 0.47917579, 0.34300946 }, v3T{ 0.40886670, -0.32579857, -0.85245722 }, v3T{ -0.83819701, -0.30910810, 0.44930831 }, v3T{ -0.57602641, -0.75801200, 0.30595978 },
|
||||||
|
v3T{ -0.16591524, -0.96579983, -0.19925569 }, v3T{ 0.27174061, 0.93638167, -0.22214053 }, v3T{ -0.45758922, 0.73185326, -0.50497812 }, v3T{ -0.18029934, -0.78067110, -0.59836843 },
|
||||||
|
v3T{ 0.14087163, -0.39189764, -0.90915974 }, v3T{ -0.03534787, -0.02750024, 0.99899663 }, v3T{ 0.91016878, 0.06772570, 0.40866370 }, v3T{ 0.70142578, 0.70903193, 0.07263332 },
|
||||||
|
v3T{ -0.49486157, -0.54111502, -0.67993129 }, v3T{ -0.26972486, -0.84418773, -0.46324462 }, v3T{ 0.91931005, 0.03121901, 0.39229378 }, v3T{ -0.15332070, -0.87495538, 0.45928842 },
|
||||||
|
v3T{ -0.59010107, -0.66883868, 0.45214549 }, v3T{ 0.51964273, -0.78565398, -0.33573688 }, v3T{ -0.25845001, 0.87348329, -0.41259003 }, v3T{ -0.64741807, -0.59846669, 0.47189773 },
|
||||||
|
v3T{ -0.79348688, -0.32782128, -0.51274923 }, v3T{ -0.86280237, -0.14342378, -0.48476972 }, v3T{ 0.19469709, -0.76349966, 0.61576076 }, v3T{ 0.39371236, -0.70742193, -0.58697938 },
|
||||||
|
v3T{ 0.62103834, -0.50000004, -0.60358209 }, v3T{ -0.19652824, -0.51508695, 0.83430335 }, v3T{ -0.96016549, -0.26826630, -0.07820118 }, v3T{ 0.52655683, 0.84118729, 0.12305219 },
|
||||||
|
v3T{ 0.56222101, 0.70557745, -0.43135599 }, v3T{ 0.06395307, 0.99025162, -0.12374061 }, v3T{ -0.65379289, 0.52521996, 0.54470070 }, v3T{ 0.81206590, -0.38643765, 0.43728128 },
|
||||||
|
v3T{ -0.69449067, -0.71926243, -0.01855435 }, v3T{ 0.33968533, 0.75504287, 0.56082452 }, v3T{ -0.52402654, -0.70537870, -0.47732282 }, v3T{ -0.65379327, -0.46369816, 0.59794512 },
|
||||||
|
v3T{ -0.08582021, -0.01217948, 0.99623619 }, v3T{ -0.66287577, 0.49604924, 0.56083051 }, v3T{ 0.70911302, 0.68748287, -0.15660789 }, v3T{ -0.58662137, -0.46475685, 0.66323181 },
|
||||||
|
v3T{ -0.76681755, 0.63310950, -0.10565607 }, v3T{ 0.68601816, -0.59353001, 0.42083395 }, v3T{ 0.64792478, -0.72668696, 0.22829704 }, v3T{ 0.68756542, -0.69062543, 0.22425499 },
|
||||||
|
v3T{ -0.46901797, -0.72307343, -0.50713604 }, v3T{ -0.71418521, -0.11738817, 0.69004312 }, v3T{ 0.50880449, -0.80611081, 0.30216445 }, v3T{ 0.27793962, -0.58372922, -0.76289565 },
|
||||||
|
v3T{ -0.39417207, 0.91575060, -0.07764800 }, v3T{ -0.84724113, -0.47860304, 0.23048124 }, v3T{ 0.67628991, 0.54362408, -0.49709638 }, v3T{ 0.65073821, -0.09420630, 0.75343544 },
|
||||||
|
v3T{ 0.66910202, 0.73566783, -0.10533437 }, v3T{ 0.72191995, -0.00305613, 0.69196983 }, v3T{ -0.00313125, 0.06634333, 0.99779194 }, v3T{ -0.06908811, 0.28990653, -0.95455803 },
|
||||||
|
v3T{ 0.17507626, 0.73870621, 0.65089280 }, v3T{ -0.57470594, 0.75735703, 0.31003777 }, v3T{ -0.91870733, 0.08883536, 0.38481830 }, v3T{ -0.27399536, 0.39846316, 0.87530203 },
|
||||||
|
v3T{ 0.99772699, -0.05473919, 0.03929993 }, v3T{ 0.22663907, 0.97393801, -0.00891541 }, v3T{ 0.62338001, 0.59656797, -0.50547405 }, v3T{ 0.59177247, 0.49473684, -0.63642816 },
|
||||||
|
v3T{ -0.24457664, -0.31345545, 0.91756632 }, v3T{ -0.44691491, -0.89198404, -0.06805539 }, v3T{ -0.83115967, -0.44685014, 0.33090566 }, v3T{ -0.39940345, 0.67719937, -0.61796270 },
|
||||||
|
v3T{ 0.55460272, -0.63265953, -0.54051619 }, v3T{ 0.82284412, 0.14794174, -0.54867185 }, v3T{ -0.39887172, -0.82890906, -0.39218761 }, v3T{ 0.28591109, 0.71270085, 0.64055628 },
|
||||||
|
v3T{ -0.15438831, 0.66966606, 0.72643762 }, v3T{ -0.75134796, 0.54289699, 0.37515211 }, v3T{ 0.32016243, 0.77691605, -0.54212311 }, v3T{ 0.50884942, 0.15171482, -0.84738119 },
|
||||||
|
v3T{ 0.08945627, 0.73684807, 0.67011379 }, v3T{ -0.68792851, -0.71885270, -0.10002580 }, v3T{ 0.02292266, -0.07249674, 0.99710520 }, v3T{ 0.94083723, -0.10191422, 0.32316993 },
|
||||||
|
v3T{ -0.81053204, 0.43703808, 0.38991733 }, v3T{ -0.19558496, -0.07485841, 0.97782552 }, v3T{ 0.68911052, -0.49915226, -0.52533200 }, v3T{ 0.19796974, 0.93342057, 0.29922235 },
|
||||||
|
v3T{ -0.79540501, -0.26473293, 0.54520395 }, v3T{ -0.27945416, -0.91288360, 0.29757168 }, v3T{ 0.82074194, 0.43648314, 0.36859889 }, v3T{ -0.20594999, -0.70696486, -0.67659832 },
|
||||||
|
v3T{ -0.05687654, -0.70968577, 0.70221874 }, v3T{ -0.26280466, 0.69993747, -0.66409430 }, v3T{ -0.54551347, -0.78469719, 0.29438983 }, v3T{ 0.90609571, 0.39319111, 0.15617717 },
|
||||||
|
v3T{ 0.69129692, 0.67317351, 0.26257571 }, v3T{ 0.98391565, -0.05206160, 0.17087883 }, v3T{ 0.63806303, 0.67740288, -0.36606134 }, v3T{ -0.50096077, 0.83542684, -0.22605378 },
|
||||||
|
v3T{ 0.65237128, 0.35509583, 0.66956603 }, v3T{ -0.85711882, -0.19885856, 0.47518691 }, v3T{ 0.79383271, -0.12451513, 0.59525256 }, v3T{ -0.63301076, 0.07907192, 0.77009416 },
|
||||||
|
v3T{ 0.57925311, -0.49077742, 0.65084818 }, v3T{ 0.14070842, 0.97298117, 0.18305403 }, v3T{ -0.59601232, 0.69646383, -0.39963413 }, v3T{ -0.68205637, -0.47455943, 0.55641033 },
|
||||||
|
v3T{ 0.47997775, -0.84805982, -0.22453484 }, v3T{ 0.83562547, -0.48273957, 0.26209270 }, v3T{ 0.59180830, 0.36411758, 0.71915320 }, v3T{ 0.66057023, -0.66033264, 0.35722231 },
|
||||||
|
v3T{ 0.53319130, 0.75511965, 0.38144639 }, v3T{ -0.21631797, -0.12712992, 0.96801060 }, v3T{ -0.23971441, 0.89928294, -0.36582400 }, v3T{ -0.72825564, 0.27377922, -0.62824252 },
|
||||||
|
v3T{ 0.02135570, 0.73882696, 0.67355672 }, v3T{ 0.48112026, 0.78759215, 0.38499597 }, v3T{ -0.58250985, -0.09956878, 0.80670213 }, v3T{ 0.21323385, 0.36856735, 0.90481459 },
|
||||||
|
v3T{ -0.36459960, -0.93062781, -0.03160697 }, v3T{ -0.68684541, 0.17314748, -0.70587771 }, v3T{ 0.68032531, -0.07909205, -0.72863017 }, v3T{ 0.25007484, -0.61882132, 0.74466284 },
|
||||||
|
v3T{ 0.77055613, 0.59380162, 0.23160935 }, v3T{ 0.67996118, -0.03835970, 0.73224403 }, v3T{ 0.43079959, 0.38901749, -0.81429547 }, v3T{ 0.76815116, -0.63831184, 0.05001794 },
|
||||||
|
v3T{ -0.13601015, 0.75596033, -0.64033211 }, v3T{ 0.36884321, -0.45188838, -0.81225093 }, v3T{ 0.79562623, -0.43647179, 0.42008485 }, v3T{ -0.65875496, 0.39126701, -0.64261344 },
|
||||||
|
v3T{ -0.68899899, 0.44217527, 0.57424858 }, v3T{ 0.25292617, 0.96620732, -0.04971687 }, v3T{ -0.68558843, -0.70460233, 0.18304118 }, v3T{ 0.86382379, 0.29507865, 0.40833448 },
|
||||||
|
v3T{ 0.13627838, 0.31500179, 0.93925613 }, v3T{ 0.67187940, 0.64336667, 0.36695693 }, v3T{ 0.37977583, 0.31123423, 0.87115072 }, v3T{ -0.03326050, -0.99451574, -0.09915731 },
|
||||||
|
v3T{ -0.66427749, -0.01424397, -0.74735033 }, v3T{ 0.68859558, 0.44744486, -0.57063931 }, v3T{ -0.56738045, 0.30154774, -0.76625608 }, v3T{ -0.58488004, 0.63357146, 0.50646080 },
|
||||||
|
v3T{ 0.38842469, 0.92016339, 0.04925032 }, v3T{ 0.15316057, -0.97495961, -0.16123153 }, v3T{ 0.57623375, 0.51659393, 0.63331301 }, v3T{ 0.32392581, -0.79816566, -0.50794059 },
|
||||||
|
v3T{ 0.73136440, -0.54179646, 0.41420129 }, v3T{ -0.58929886, -0.58690534, -0.55521975 }, v3T{ 0.64030162, 0.32487137, -0.69604054 }, v3T{ 0.80502987, -0.00635101, 0.59320028 },
|
||||||
|
v3T{ 0.46595373, 0.62005710, -0.63120227 }, v3T{ 0.83612498, 0.53677947, 0.11297261 }, v3T{ -0.60753284, -0.29028728, -0.73934913 }, v3T{ -0.45583848, 0.84488003, 0.27998037 },
|
||||||
|
v3T{ -0.27320563, -0.39709327, 0.87617100 }, v3T{ 0.84893256, -0.09000823, 0.52078021 }, v3T{ -0.35708766, -0.73203774, 0.58018027 }, v3T{ 0.10507148, -0.71032871, 0.69598355 },
|
||||||
|
v3T{ 0.68468508, 0.26788814, -0.67782172 }, v3T{ -0.94602428, -0.13594737, -0.29420466 }, v3T{ 0.27104088, 0.95431757, 0.12575696 }, v3T{ -0.55840113, 0.14909310, 0.81606337 },
|
||||||
|
v3T{ 0.47553129, 0.80729730, 0.34948685 }, v3T{ -0.01891509, -0.97526220, 0.22024047 }, v3T{ -0.65760518, -0.45924250, -0.59720327 }, v3T{ -0.70549425, 0.70862555, 0.01129989 },
|
||||||
|
v3T{ -0.88864223, 0.43707946, -0.13883994 }, v3T{ 0.49252849, -0.43814774, 0.75195894 }, v3T{ -0.01398277, 0.69598571, 0.71791947 }, v3T{ -0.67265622, 0.27228276, -0.68803758 },
|
||||||
|
v3T{ -0.91724038, -0.01083918, -0.39818663 }, v3T{ -0.24468025, 0.75690032, 0.60599792 }, v3T{ -0.49070434, -0.48530058, 0.72366608 }, v3T{ 0.67110346, -0.55453760, -0.49204492 },
|
||||||
|
v3T{ -0.95532877, -0.26328211, -0.13427388 }, v3T{ -0.66012945, 0.41730904, 0.62456567 }, v3T{ 0.96822786, -0.03273592, 0.24791766 }, v3T{ 0.91952853, 0.23575545, -0.31446248 },
|
||||||
|
v3T{ 0.63712542, 0.06762652, 0.76778763 }, v3T{ -0.21680947, 0.65843559, 0.72073312 }, v3T{ 0.06143588, 0.47272235, -0.87906724 }, v3T{ 0.70541616, -0.21884659, 0.67416186 },
|
||||||
|
v3T{ -0.04396589, -0.67487644, -0.73661984 }, v3T{ -0.65032618, 0.75012744, 0.11993615 }, v3T{ -0.78840054, 0.58187068, -0.19962741 }, v3T{ 0.99318416, 0.11467779, 0.02083796 },
|
||||||
|
v3T{ 0.76775820, 0.46845611, -0.43714554 }, v3T{ -0.70891635, -0.54302381, -0.45006972 }, v3T{ 0.55548849, -0.71825576, -0.41897638 }, v3T{ -0.62167600, 0.77500231, 0.11353575 },
|
||||||
|
v3T{ 0.38413022, -0.79687865, 0.46629218 }, v3T{ -0.56271512, 0.54186596, -0.62428597 }, v3T{ 0.62019121, -0.70563211, -0.34270424 }, v3T{ 0.85913131, 0.50529005, 0.08108862 },
|
||||||
|
v3T{ 0.54973106, -0.66129569, -0.51037612 }, v3T{ -0.74254469, -0.49670185, -0.44934914 }, v3T{ -0.75780366, 0.59195518, -0.27444976 }, v3T{ -0.40050287, 0.04302113, -0.91528500 },
|
||||||
|
v3T{ -0.60859484, 0.35063171, 0.71180736 }, v3T{ -0.57297537, 0.81938865, -0.01736289 }, v3T{ 0.98721933, 0.09373543, -0.12888621 }, v3T{ 0.30397213, 0.87942861, 0.36634172 },
|
||||||
|
v3T{ 0.32615126, -0.64515144, -0.69094498 }, v3T{ 0.83015604, 0.30783918, 0.46483974 }, v3T{ 0.42822875, -0.04288671, -0.90265213 }, v3T{ 0.16585965, 0.53714643, 0.82702133 },
|
||||||
|
v3T{ -0.37193298, 0.88497229, 0.28016051 }, v3T{ 0.73544877, 0.67744273, 0.01365471 }, v3T{ -0.66150496, 0.09327263, -0.74411787 }, v3T{ 0.41664753, -0.23786298, -0.87739731 },
|
||||||
|
v3T{ -0.78513086, -0.42653313, 0.44904233 }, v3T{ 0.08029855, 0.84803303, 0.52382451 }, v3T{ -0.09507221, 0.50524394, -0.85772364 }, v3T{ 0.66939507, -0.17805679, 0.72125309 },
|
||||||
|
v3T{ -0.76923153, 0.41652205, -0.48455364 }, v3T{ 0.51989556, 0.79632686, 0.30914743 }, v3T{ 0.85617969, -0.51024476, 0.08128121 }, v3T{ 0.71830013, 0.03208003, 0.69499337 },
|
||||||
|
v3T{ -0.96000528, -0.11640072, -0.25463844 }, v3T{ 0.66084196, -0.19355993, 0.72513617 }, v3T{ -0.57661819, -0.54757438, 0.60636109 }, v3T{ 0.65123443, -0.64818909, -0.39464494 },
|
||||||
|
v3T{ 0.36952748, -0.22540306, -0.90146708 }, v3T{ 0.34048182, -0.33515083, 0.87849078 }, v3T{ 0.11132435, -0.75280467, 0.64876191 }, v3T{ 0.67563520, 0.64934616, -0.34909404 },
|
||||||
|
v3T{ 0.23316576, 0.69276343, -0.68243135 }, v3T{ 0.30368064, -0.87532007, 0.37628825 }, v3T{ -0.27080673, -0.74246398, 0.61270789 }, v3T{ -0.21655683, -0.49565083, -0.84109060 },
|
||||||
|
v3T{ -0.98776592, -0.14473189, 0.05806181 }, v3T{ 0.64562720, 0.38598860, 0.65892209 }, v3T{ -0.63746045, -0.57205546, 0.51613635 }, v3T{ 0.06117405, -0.78423981, -0.61743474 },
|
||||||
|
v3T{ 0.74829362, 0.59119862, 0.30090006 }, v3T{ -0.42571462, 0.51302568, -0.74536683 }, v3T{ -0.56331794, 0.48608227, -0.66812943 }, v3T{ -0.75919788, -0.64885422, 0.05105673 },
|
||||||
|
v3T{ 0.14385006, -0.53933953, 0.82971081 }, v3T{ -0.77031548, -0.28344830, 0.57120148 }, v3T{ -0.98358057, 0.17900745, 0.02292584 }, v3T{ -0.25051205, 0.10358351, 0.96255606 },
|
||||||
|
v3T{ -0.32867861, -0.83176115, -0.44737430 }, v3T{ -0.36281449, -0.92995082, -0.05964161 }, v3T{ -0.53796595, -0.03614791, 0.84219117 }, v3T{ 0.92960703, 0.10461247, 0.35339354 },
|
||||||
|
v3T{ 0.64021850, 0.61360003, 0.46218532 }, v3T{ 0.22343529, 0.69409296, 0.68433299 }, v3T{ 0.01781074, 0.89088149, 0.45388648 }, v3T{ -0.63004672, -0.26934609, 0.72835007 },
|
||||||
|
v3T{ 0.48560056, -0.35192051, -0.80021500 }, v3T{ 0.62050161, 0.57366872, 0.53467931 }, v3T{ 0.00265452, 0.71539198, -0.69871830 }, v3T{ 0.64229521, 0.41380752, 0.64515130 },
|
||||||
|
v3T{ 0.23080049, -0.43573115, 0.86998247 }, v3T{ 0.14620517, 0.61171896, -0.77744708 }, v3T{ -0.27436021, -0.61900378, 0.73590814 }, v3T{ 0.69959023, 0.71050058, 0.07591065 },
|
||||||
|
v3T{ 0.70362024, 0.62044755, -0.34635731 }, v3T{ -0.29622242, -0.71700405, -0.63099721 }, v3T{ 0.31094340, -0.84299864, -0.43893905 }, v3T{ 0.07704196, -0.46344069, -0.88277248 },
|
||||||
|
v3T{ -0.94533514, -0.04418570, 0.32309301 }, v3T{ 0.65845027, -0.36172634, -0.65999795 }, v3T{ 0.76069300, -0.18013255, 0.62361721 }, v3T{ 0.18607691, -0.45751624, -0.86951382 },
|
||||||
|
v3T{ -0.67626808, -0.39178398, -0.62383235 }, v3T{ -0.58782719, 0.55645189, -0.58721418 }, v3T{ 0.37531624, 0.80640206, 0.45700485 }, v3T{ 0.32610790, -0.50457786, 0.79940905 },
|
||||||
|
v3T{ 0.62915643, 0.76094546, -0.15850616 }, v3T{ 0.62803678, -0.75273385, -0.19738681 }, v3T{ 0.42539119, -0.89094420, 0.15893638 }, v3T{ 0.17668676, -0.40626331, 0.89651096 },
|
||||||
|
v3T{ 0.02778178, -0.78957083, -0.61303024 }, v3T{ -0.25950053, -0.16244258, 0.95198313 }, v3T{ -0.44117714, 0.73727502, -0.51165249 }, v3T{ -0.30827444, 0.94136275, 0.13712420 },
|
||||||
|
v3T{ 0.97572111, -0.04258044, -0.21483768 }, v3T{ 0.55607688, 0.60474525, -0.57014181 }, v3T{ -0.67430479, 0.12532345, 0.72774109 }, v3T{ -0.31325824, -0.81393777, -0.48925921 },
|
||||||
|
v3T{ -0.34811982, -0.70956566, 0.61264114 }, v3T{ 0.22583632, 0.72502572, -0.65064250 }, v3T{ 0.76936493, 0.63742123, -0.04209247 }, v3T{ -0.55303394, -0.38417341, -0.73929984 },
|
||||||
|
v3T{ -0.20953448, -0.92686077, -0.31148742 }, v3T{ -0.18786352, 0.39920999, 0.89740664 }, v3T{ 0.46307517, -0.88470611, 0.05344618 }, v3T{ -0.70328479, 0.30353783, 0.64284935 },
|
||||||
|
v3T{ 0.85916171, 0.15710234, 0.48699077 }, v3T{ -0.26398391, 0.42122173, 0.86768932 }, v3T{ 0.82468427, 0.55134621, 0.12614757 }, v3T{ 0.05993298, 0.63414584, 0.77088721 },
|
||||||
|
v3T{ -0.57291678, 0.81909656, -0.02910645 }, v3T{ 0.64075141, 0.74416542, -0.18882655 }, v3T{ 0.67112660, -0.55747979, -0.48867716 }, v3T{ 0.89932863, 0.23426637, -0.36922525 },
|
||||||
|
v3T{ 0.59146340, -0.44386974, 0.67316469 }, v3T{ 0.46684506, 0.19781570, -0.86193076 }, v3T{ 0.18536399, 0.76259887, 0.61974443 }, v3T{ 0.84144446, -0.53500771, -0.07574940 },
|
||||||
|
v3T{ 0.31212800, 0.82898453, -0.46406977 }, v3T{ -0.88440729, -0.27020677, -0.38054178 }, v3T{ 0.20051055, 0.77523319, 0.59900670 }, v3T{ 0.48749115, 0.44082691, -0.75367368 },
|
||||||
|
v3T{ 0.24971103, -0.88242146, 0.39871892 }, v3T{ -0.29777449, -0.95158243, -0.07629705 }, v3T{ -0.37776905, -0.58777023, 0.71541366 }, v3T{ 0.22179317, 0.14730715, -0.96390269 },
|
||||||
|
v3T{ 0.58348153, 0.68630504, 0.43420582 }, v3T{ -0.96759942, 0.14572096, 0.20619593 }, v3T{ -0.15181654, 0.47495708, 0.86681458 }, v3T{ 0.26580537, 0.74350537, -0.61363447 },
|
||||||
|
v3T{ -0.39189499, 0.72950601, 0.56057051 }, v3T{ -0.01888074, 0.73557245, -0.67718290 }, v3T{ 0.73486517, 0.20569655, -0.64626783 }, v3T{ -0.26354754, -0.23595215, -0.93534447 },
|
||||||
|
v3T{ -0.62584298, -0.65116585, 0.42930594 }, v3T{ -0.66666701, 0.61406968, 0.42246127 }, v3T{ 0.71799877, 0.67101619, 0.18497305 }, v3T{ 0.80098282, -0.45681211, -0.38697444 },
|
||||||
|
v3T{ 0.13205975, 0.91574792, -0.37942847 }, v3T{ 0.68891728, 0.72389791, -0.03694308 }, v3T{ 0.50346408, 0.46323331, -0.72934136 }, v3T{ 0.84557323, 0.53378861, -0.00869685 },
|
||||||
|
v3T{ 0.08666773, -0.81879883, 0.56750082 }, v3T{ -0.50044423, 0.65858460, -0.56198033 }, v3T{ 0.35669785, 0.32248792, -0.87679427 }, v3T{ -0.97346629, -0.22237373, -0.05397509 },
|
||||||
|
v3T{ -0.53358835, -0.29312069, -0.79332448 }, v3T{ 0.12615748, 0.47083230, 0.87315591 }, v3T{ -0.97022570, 0.19065350, 0.14937651 }, v3T{ -0.57777643, 0.36008023, 0.73247295 },
|
||||||
|
v3T{ 0.60132454, 0.72398065, 0.33802488 }, v3T{ 0.19047827, -0.94729649, -0.25757988 }, v3T{ -0.45904437, 0.69100108, 0.55838676 }, v3T{ 0.39148612, -0.51878308, 0.76000180 },
|
||||||
|
v3T{ 0.04137949, -0.75662546, -0.65253786 }, v3T{ 0.20020542, -0.76439245, -0.61288006 }, v3T{ 0.07933739, -0.21074410, 0.97431643 }, v3T{ -0.40807425, 0.80614533, 0.42849166 },
|
||||||
|
v3T{ -0.95397962, -0.09342040, -0.28494828 }, v3T{ -0.31365384, 0.14377778, -0.93858895 }, v3T{ 0.84618575, -0.39191761, 0.36106822 }, v3T{ -0.90177404, 0.07825801, -0.42506385 },
|
||||||
|
v3T{ -0.19689944, -0.97296956, 0.12066831 }, v3T{ 0.61145370, 0.51715369, -0.59889601 }, v3T{ -0.57329050, -0.80450317, -0.15528251 }, v3T{ -0.27749150, -0.76245284, 0.58452044 },
|
||||||
|
v3T{ -0.74877628, 0.66124357, 0.04572758 }, v3T{ 0.60284514, 0.58208119, 0.54567318 }, v3T{ 0.17695878, -0.67360184, 0.71759748 }, v3T{ -0.83953853, 0.41240184, 0.35369447 },
|
||||||
|
v3T{ 0.37802442, -0.60322405, 0.70229501 }, v3T{ 0.51050450, -0.42970396, 0.74480847 }, v3T{ -0.48366785, -0.20902730, -0.84992529 }, v3T{ -0.87971286, -0.14820690, -0.45181855 },
|
||||||
|
v3T{ -0.11520437, -0.59044778, -0.79881123 }, v3T{ 0.38877393, 0.92116844, -0.01742240 }, v3T{ 0.94330646, -0.27385756, -0.18754989 }, v3T{ -0.66585548, 0.46928680, -0.58000550 },
|
||||||
|
v3T{ 0.20659390, -0.97226278, -0.10965425 }, v3T{ 0.70114934, 0.70875543, -0.07781609 }, v3T{ 0.50683262, 0.81003447, 0.29489803 }, v3T{ -0.75501572, 0.56485827, -0.33299610 },
|
||||||
|
v3T{ -0.43930454, -0.48824131, 0.75407688 }, v3T{ -0.43442626, 0.51174617, 0.74120826 }, v3T{ -0.97139119, -0.22722375, 0.06905442 }, v3T{ -0.27189670, 0.51890879, -0.81043559 },
|
||||||
|
v3T{ 0.34109465, 0.91412005, -0.21917797 }, v3T{ 0.23216825, -0.66497033, 0.70986785 }, v3T{ 0.87281521, 0.48669099, 0.03640737 }, v3T{ -0.60266004, -0.34235001, -0.72083101 },
|
||||||
|
v3T{ -0.01994494, -0.52747354, 0.84933731 }, v3T{ -0.27000504, -0.77679344, -0.56893693 }, v3T{ -0.12330809, 0.85744248, -0.49958734 }, v3T{ -0.69270982, 0.61145042, -0.38246763 },
|
||||||
|
v3T{ -0.60277814, 0.55015465, 0.57791727 }, v3T{ 0.64946165, -0.22132925, -0.72747023 }, v3T{ 0.24257305, 0.26557728, 0.93307397 }, v3T{ -0.66814908, 0.64881591, -0.36416303 },
|
||||||
|
v3T{ -0.74538727, -0.44634982, -0.49514609 }, v3T{ 0.25115903, 0.38535072, -0.88793241 }, v3T{ -0.61584597, -0.69782826, -0.36574509 }, v3T{ 0.13745929, 0.92666227, 0.34985995 },
|
||||||
|
v3T{ -0.50342245, -0.82980249, -0.24081874 }, v3T{ 0.11249648, 0.99333196, -0.02522230 }, v3T{ 0.83241096, 0.21922825, -0.50895085 }, v3T{ 0.50175590, 0.86108612, 0.08229039 },
|
||||||
|
v3T{ -0.35527286, -0.56925625, -0.74143679 }, v3T{ 0.31441654, -0.91653449, 0.24719782 }, v3T{ 0.62936968, 0.70222610, 0.33282475 }, v3T{ 0.77755375, -0.56236234, -0.28135169 },
|
||||||
|
v3T{ -0.80098254, -0.37712493, 0.46497715 }, v3T{ 0.59310190, -0.68181911, -0.42819720 }, v3T{ 0.15392285, -0.98282954, 0.10175390 }, v3T{ -0.96618662, 0.25781497, 0.00385483 },
|
||||||
|
v3T{ 0.33750940, -0.86020836, 0.38226820 }, v3T{ -0.09597976, -0.40348179, -0.90993974 }, v3T{ -0.70910783, 0.60681107, -0.35909108 }, v3T{ 0.41726791, -0.90380775, 0.09496860 },
|
||||||
|
v3T{ -0.03646000, 0.99581799, -0.08376873 }, v3T{ 0.35348135, -0.70899268, 0.61022972 }, v3T{ 0.66002017, 0.74115740, -0.12271547 }, v3T{ 0.18515044, 0.96534454, -0.18392727 },
|
||||||
|
v3T{ -0.29364182, -0.88826809, -0.35320572 }, v3T{ 0.99692330, 0.02436644, -0.07449968 }, v3T{ -0.13529570, 0.35908874, 0.92344483 }, v3T{ -0.76888326, -0.29702475, 0.56621095 },
|
||||||
|
v3T{ -0.31931644, 0.72859881, 0.60595444 }, v3T{ 0.52827199, -0.82385659, 0.20539968 }, v3T{ -0.83281688, -0.27413556, 0.48090097 }, v3T{ -0.76899198, 0.23377782, 0.59497837 },
|
||||||
|
v3T{ -0.60599231, 0.54438401, -0.58001670 }, v3T{ -0.59616975, -0.18605791, 0.78100198 }, v3T{ -0.83753036, 0.32458912, -0.43952794 }, v3T{ 0.62016934, 0.71285793, 0.32745011 },
|
||||||
|
v3T{ -0.62489231, 0.01790151, 0.78050570 }, v3T{ -0.44050813, -0.31396367, 0.84105850 }, v3T{ 0.82831903, 0.51349534, 0.22407615 }, v3T{ -0.54638365, -0.42878084, -0.71945250 },
|
||||||
|
v3T{ -0.30690837, -0.54588407, -0.77962673 }, v3T{ -0.51419246, 0.49668914, 0.69921814 }, v3T{ 0.12759508, 0.79794754, 0.58906640 }, v3T{ 0.59812622, 0.53597438, 0.59579904 },
|
||||||
|
v3T{ 0.75450428, 0.31026344, 0.57832507 }, v3T{ -0.34806954, -0.09710281, 0.93242621 }, v3T{ -0.40140375, -0.85287390, 0.33388792 }, v3T{ 0.57290191, 0.32347021, -0.75309390 },
|
||||||
|
v3T{ -0.53362688, -0.81285892, 0.23345818 }, v3T{ -0.74679447, 0.64927639, 0.14400758 }, v3T{ -0.80251380, -0.59638095, 0.01736004 }, v3T{ -0.56868668, 0.61763086, -0.54325646 },
|
||||||
|
v3T{ -0.72976559, 0.04179896, -0.68241852 }, v3T{ 0.57244144, -0.09255805, -0.81470474 }, v3T{ 0.97741613, 0.07186077, -0.19873032 }, v3T{ 0.72298477, 0.06613486, 0.68769121 },
|
||||||
|
v3T{ -0.42596585, -0.65375247, -0.62542850 }, v3T{ 0.64840687, 0.16136696, -0.74399545 }, v3T{ 0.34352050, -0.92950264, 0.13423304 }, v3T{ 0.74687236, 0.45351768, -0.48631613 },
|
||||||
|
v3T{ -0.51873425, -0.73762481, -0.43223191 }, v3T{ 0.29790392, 0.44209023, 0.84605525 }, v3T{ -0.67740274, 0.46717430, -0.56821977 }, v3T{ -0.36224935, -0.42773177, 0.82814307 },
|
||||||
|
v3T{ -0.44192484, 0.73919980, 0.50821855 }, v3T{ -0.92680658, -0.18163204, -0.32869343 }, v3T{ -0.71384582, -0.70014113, 0.01505111 }, v3T{ 0.70600729, -0.70152253, 0.09705589 },
|
||||||
|
v3T{ 0.90031692, -0.36943663, 0.23010002 }, v3T{ 0.25264659, -0.65121757, -0.71560141 }, v3T{ 0.96727807, 0.19056552, 0.16750499 }, v3T{ -0.65770755, -0.65887301, 0.36511251 },
|
||||||
|
v3T{ 0.05208955, -0.10417910, 0.99319353 }, v3T{ -0.65282932, -0.40832320, 0.63803294 }, v3T{ -0.00628739, -0.99502463, -0.09943061 }, v3T{ -0.51900794, -0.62993523, 0.57776497 },
|
||||||
|
v3T{ 0.83046729, -0.16527060, 0.53198657 }, v3T{ 0.66869945, -0.56606479, -0.48209097 }, v3T{ -0.54299772, -0.48639669, -0.68452300 }, v3T{ 0.52407156, -0.42268239, 0.73938393 },
|
||||||
|
v3T{ 0.71446999, -0.30844019, -0.62801057 }, v3T{ -0.67320882, 0.39978543, 0.62206228 }, v3T{ -0.53289859, -0.05079670, -0.84465306 }, v3T{ 0.67708925, -0.71979254, 0.15313018 },
|
||||||
|
v3T{ -0.61369683, 0.65230332, 0.44483321 }, v3T{ -0.26453665, -0.69129417, -0.67240816 }, v3T{ 0.85045794, 0.03075140, 0.52514345 }, v3T{ -0.76757885, -0.10940324, 0.63154861 },
|
||||||
|
v3T{ 0.72754104, -0.17450402, -0.66350011 }, v3T{ -0.34075755, -0.67303082, 0.65644026 }, v3T{ 0.70044829, 0.13095479, -0.70158609 }, v3T{ 0.43950040, -0.88211196, 0.16946353 },
|
||||||
|
v3T{ -0.35706397, 0.48041126, 0.80106825 }, v3T{ -0.77687193, 0.33320308, -0.53427120 }, v3T{ 0.51274543, 0.77662232, 0.36599165 }, v3T{ 0.33380578, 0.79591657, 0.50506486 },
|
||||||
|
v3T{ -0.76587225, -0.03670574, 0.64194422 }, v3T{ -0.23491078, 0.43695339, -0.86826762 }, v3T{ 0.25698923, -0.62346599, 0.73840822 }, v3T{ 0.13009757, -0.93331414, -0.33466303 },
|
||||||
|
v3T{ -0.54841950, 0.64297666, -0.53461861 }, v3T{ 0.69823865, 0.51710521, -0.49504039 }, v3T{ -0.64058874, -0.76638614, -0.04794108 }, v3T{ -0.99383538, 0.10829476, 0.02373760 },
|
||||||
|
v3T{ 0.53702674, -0.26620457, -0.80046075 }, v3T{ 0.95618706, 0.14762618, 0.25280983 }, v3T{ 0.46882627, -0.32353926, -0.82190284 }, v3T{ 0.37771393, -0.17580406, -0.90907927 },
|
||||||
|
v3T{ -0.38046162, 0.14393199, -0.91352752 }, v3T{ 0.99319923, -0.09757638, -0.06351493 }, v3T{ 0.50851715, 0.83898531, 0.19368521 }, v3T{ 0.32506349, -0.66811447, 0.66929574 },
|
||||||
|
v3T{ -0.48035988, -0.63636898, -0.60356351 }, v3T{ -0.06435942, 0.26733173, 0.96145286 }, v3T{ 0.60598929, -0.04278909, 0.79432114 }, v3T{ -0.24869997, 0.88809619, -0.38656626 },
|
||||||
|
v3T{ 0.37370464, 0.04464997, -0.92647246 }, v3T{ -0.48971589, -0.59472073, 0.63756224 }, v3T{ 0.69752714, 0.12358938, 0.70581978 }, v3T{ 0.52787180, 0.64468756, -0.55292794 },
|
||||||
|
v3T{ -0.10489693, 0.16880171, -0.98005235 }, v3T{ -0.63336451, -0.45121552, -0.62869226 }, v3T{ 0.54866356, 0.65678858, 0.51729785 }, v3T{ -0.85968969, 0.49557488, -0.12385145 },
|
||||||
|
v3T{ -0.47320716, -0.15150042, 0.86782637 }, v3T{ 0.19900943, -0.10259966, 0.97461200 }, v3T{ -0.52893938, 0.84740153, 0.04619294 }, v3T{ 0.65121421, -0.49243156, -0.57743503 },
|
||||||
|
v3T{ 0.45693424, 0.73751862, 0.49726994 }, v3T{ -0.47661222, -0.77374319, -0.41732752 }, v3T{ -0.04808540, 0.90050093, 0.43218730 }, v3T{ 0.91129978, -0.31013948, 0.27082507 },
|
||||||
|
v3T{ 0.58778939, -0.42668247, -0.68734686 }, v3T{ 0.82297839, -0.34772114, -0.44921773 }, v3T{ 0.29494223, -0.86544442, -0.40498769 }, v3T{ -0.39161493, 0.79055212, 0.47081322 },
|
||||||
|
v3T{ 0.79434783, -0.59398096, -0.12727195 }, v3T{ 0.77174313, 0.29796481, 0.56180915 }, v3T{ 0.78482345, -0.44974833, 0.42635500 }, v3T{ -0.58988658, -0.54565594, 0.59522551 },
|
||||||
|
v3T{ -0.97115669, 0.13450224, 0.19688532 }, v3T{ 0.42988246, 0.15513097, -0.88945796 }, v3T{ -0.30013401, -0.45617888, 0.83774722 }, v3T{ 0.50990724, -0.38026491, -0.77161727 },
|
||||||
|
v3T{ -0.68923129, 0.29274099, -0.66276914 }, v3T{ -0.81531731, -0.42344291, -0.39490984 }, v3T{ 0.26048163, -0.96468719, -0.03908901 }, v3T{ 0.32147033, 0.32614689, -0.88897977 },
|
||||||
|
v3T{ 0.70055924, -0.70700997, 0.09671429 }, v3T{ -0.58890140, -0.17999683, 0.78790626 }, v3T{ 0.70222863, 0.69308083, -0.16283095 }, v3T{ -0.75366081, -0.65098223, -0.09065052 },
|
||||||
|
v3T{ -0.19053922, -0.78772343, -0.58582130 }, v3T{ -0.58846812, 0.34955220, 0.72905317 }, v3T{ -0.60563594, -0.40529546, -0.68479244 }, v3T{ -0.71315551, 0.69904447, 0.05240265 },
|
||||||
|
v3T{ -0.45479055, 0.81186703, -0.36611129 }, v3T{ -0.29059626, 0.05377439, 0.95533352 }, v3T{ 0.56290473, 0.78501299, 0.25863657 }, v3T{ -0.43010366, -0.47609705, 0.76703484 },
|
||||||
|
v3T{ 0.63372606, -0.06214270, -0.77105744 }, v3T{ 0.28788198, -0.78226752, -0.55243234 }, v3T{ -0.55506056, 0.67832002, -0.48144545 }, v3T{ -0.47229498, 0.84794057, -0.24069533 },
|
||||||
|
v3T{ -0.27628326, 0.87423025, -0.39923556 }, v3T{ 0.97754921, -0.01429369, -0.21022189 }, v3T{ -0.78483628, 0.30941478, -0.53693064 }, v3T{ -0.35769150, -0.53057471, 0.76847073 },
|
||||||
|
v3T{ 0.56804560, 0.59946775, -0.56388173 }, v3T{ 0.80328735, -0.57298006, -0.16255243 }, v3T{ -0.34327107, -0.35133498, -0.87105034 }, v3T{ 0.80357102, -0.01979284, -0.59487970 },
|
||||||
|
v3T{ -0.87804782, 0.46346126, 0.11931336 }, v3T{ -0.11872912, -0.93845057, 0.32436695 }, v3T{ 0.68065237, 0.69467363, 0.23268195 }, v3T{ -0.71974506, -0.36713686, 0.58921776 },
|
||||||
|
v3T{ 0.52822234, 0.82314813, -0.20834663 }, v3T{ -0.67654042, -0.73158271, 0.08414148 }, v3T{ -0.39062516, 0.89358947, -0.22115571 }, v3T{ -0.62142505, 0.43386674, -0.65237302 },
|
||||||
|
v3T{ -0.48099381, -0.18611372, -0.85674188 }, v3T{ 0.05036514, -0.74987003, 0.65966528 }, v3T{ -0.49984895, -0.80920390, -0.30877188 }, v3T{ 0.50496868, 0.85618105, 0.10936472 },
|
||||||
|
v3T{ -0.54084761, 0.24485715, 0.80469176 }, v3T{ -0.81973873, -0.50777759, 0.26493457 }, v3T{ 0.72082268, -0.43713926, -0.53788839 }, v3T{ 0.91725234, -0.15187152, 0.36821621 },
|
||||||
|
v3T{ -0.17151325, 0.57985483, 0.79646192 }, v3T{ -0.74076471, 0.06061813, -0.66902398 }, v3T{ 0.32541463, -0.08200506, 0.94200875 }, v3T{ -0.10818362, 0.99402161, -0.01474260 },
|
||||||
|
v3T{ -0.61710380, -0.78296663, 0.07839742 }, v3T{ -0.38878719, -0.57916742, 0.71652608 }, v3T{ 0.37911419, 0.92170992, 0.08199541 }, v3T{ -0.60810067, -0.43108035, 0.66662082 },
|
||||||
|
v3T{ -0.11745691, 0.38395577, 0.91585034 }, v3T{ 0.47694470, -0.81050760, 0.34000174 }, v3T{ 0.40287244, 0.88894800, 0.21786522 }, v3T{ 0.46780815, -0.54966937, 0.69211207 },
|
||||||
|
v3T{ 0.07109649, 0.79259959, -0.60558333 }, v3T{ -0.52073054, -0.06778631, 0.85102569 }, v3T{ -0.36866700, 0.77676019, -0.51061556 }, v3T{ -0.71702100, -0.35727116, 0.59853004 },
|
||||||
|
v3T{ -0.59010862, -0.73536014, -0.33319257 }, v3T{ -0.66875911, 0.58597660, 0.45759445 }, v3T{ -0.59798034, -0.69169805, 0.40493619 }, v3T{ -0.20490060, 0.79048994, 0.57718402 },
|
||||||
|
v3T{ 0.48765302, 0.85851673, 0.15856717 }, v3T{ 0.88918101, 0.10371433, 0.44564612 }, v3T{ 0.48664272, 0.83596000, 0.25367252 }, v3T{ -0.24554119, 0.50230038, -0.82909822 },
|
||||||
|
v3T{ 0.03554055, -0.41884154, -0.90736356 }, v3T{ -0.03701100, -0.61772404, 0.78552352 }, v3T{ 0.42824046, 0.20582938, -0.87991158 }, v3T{ -0.06839464, -0.43555129, -0.89756183 },
|
||||||
|
v3T{ -0.40866952, -0.70331213, -0.58167111 }, v3T{ -0.74822692, 0.38256599, 0.54203297 }, v3T{ 0.71541445, 0.51615594, 0.47091953 }, v3T{ 0.60759905, -0.70288934, -0.36982423 },
|
||||||
|
v3T{ -0.01648745, -0.13394229, -0.99085197 }, v3T{ -0.64568452, -0.13342451, 0.75185730 }, v3T{ -0.42008783, 0.33302268, 0.84416948 }, v3T{ -0.63557180, -0.46817632, 0.61388877 },
|
||||||
|
v3T{ -0.82478405, -0.45636029, 0.33386606 }, v3T{ -0.66628051, 0.24058840, 0.70582399 }, v3T{ -0.60499178, -0.78374178, -0.14047697 }, v3T{ 0.63041860, -0.60894989, -0.48140672 },
|
||||||
|
v3T{ -0.07945150, -0.91288865, -0.40040202 }, v3T{ -0.66942344, 0.18523930, 0.71941550 }, v3T{ -0.00849762, -0.47038898, 0.88241827 }, v3T{ 0.66223413, -0.33585751, 0.66981019 },
|
||||||
|
v3T{ 0.82512667, -0.23099667, -0.51556427 }, v3T{ -0.75186864, 0.65450118, -0.07950940 }, v3T{ 0.87383910, 0.08193441, 0.47926192 }, v3T{ -0.26554211, 0.78650504, 0.55758158 },
|
||||||
|
v3T{ -0.49574252, 0.70523568, 0.50683527 }, v3T{ -0.49212635, -0.64694353, 0.58247381 }, v3T{ 0.32264136, 0.78159510, -0.53386482 }, v3T{ 0.71510371, -0.22498049, 0.66182359 },
|
||||||
|
v3T{ 0.61434883, -0.51790453, 0.59527340 }, v3T{ -0.82551670, -0.14228251, -0.54614821 }, v3T{ -0.46251954, 0.64306734, -0.61036060 }, v3T{ -0.52117891, -0.69061769, 0.50141773 },
|
||||||
|
v3T{ 0.27468699, -0.88951139, -0.36512537 }, v3T{ 0.65713642, -0.75365863, -0.01305358 }, v3T{ 0.94136220, -0.21960140, -0.25614924 }, v3T{ -0.85554460, 0.30842011, -0.41583708 },
|
||||||
|
v3T{ -0.35233681, -0.15379949, 0.92314922 }, v3T{ -0.74432132, 0.44164975, -0.50093040 }, v3T{ 0.53994954, -0.79953954, -0.26304184 }, v3T{ 0.42964607, 0.11880600, 0.89514769 },
|
||||||
|
v3T{ -0.87921789, 0.18018271, 0.44103298 }, v3T{ -0.80353079, 0.36514238, 0.47011628 }, v3T{ 0.50404538, 0.65465655, -0.56334986 }, v3T{ -0.92083981, -0.30381360, -0.24444087 },
|
||||||
|
v3T{ 0.13956423, -0.96009192, -0.24237437 }, v3T{ -0.71698508, 0.68682212, 0.11919639 }, v3T{ -0.76698836, 0.61675487, -0.17703754 }, v3T{ -0.21874818, -0.57847904, -0.78581883 },
|
||||||
|
v3T{ 0.55494484, -0.79971185, 0.22912262 }, v3T{ 0.79660662, -0.41090893, 0.44336412 }, v3T{ 0.66489466, 0.00947646, -0.74687703 }, v3T{ -0.59920476, 0.36935905, 0.71030103 },
|
||||||
|
v3T{ -0.57524868, -0.51402380, -0.63629277 }, v3T{ 0.20536135, -0.69296940, 0.69110066 }, v3T{ -0.05544564, -0.99802158, 0.02964287 }, v3T{ 0.13201661, 0.16519726, -0.97738502 },
|
||||||
|
v3T{ 0.46510187, 0.64584669, -0.60544390 }, v3T{ -0.80108393, -0.59762086, 0.03337417 }, v3T{ -0.39806873, -0.44410006, -0.80269323 }, v3T{ 0.95136791, -0.21916666, -0.21648342 },
|
||||||
|
v3T{ -0.82086395, 0.17982074, 0.54207645 }, v3T{ 0.79513089, 0.37056075, 0.48005374 }, v3T{ 0.77112323, 0.56616567, 0.29124800 }, v3T{ 0.81176337, -0.24837815, 0.52853432 },
|
||||||
|
v3T{ -0.81842091, 0.50060656, 0.28209979 }, v3T{ -0.38248924, -0.72602893, 0.57147525 }, v3T{ 0.46198573, 0.37950267, 0.80159024 }, v3T{ -0.59524911, 0.04222053, 0.80243126 },
|
||||||
|
v3T{ -0.52273882, 0.79497643, -0.30782561 }, v3T{ -0.79922245, 0.45390541, 0.39397125 }, v3T{ 0.38051244, -0.76512679, 0.51941436 }, v3T{ 0.83818590, 0.22605420, 0.49633043 },
|
||||||
|
v3T{ 0.63218067, 0.48127057, 0.60722832 }, v3T{ 0.59242495, 0.18424992, -0.78427333 }, v3T{ 0.85249021, -0.48552132, 0.19372531 }, v3T{ -0.43548364, -0.58439144, 0.68471939 },
|
||||||
|
v3T{ 0.73179011, 0.29594379, -0.61392223 }, v3T{ -0.45280534, -0.80755156, 0.37792566 }, v3T{ 0.55557939, 0.30092870, -0.77509578 }, v3T{ 0.42575514, 0.70893498, 0.56226662 },
|
||||||
|
v3T{ 0.60528173, -0.51550786, 0.60653580 }, v3T{ -0.51076670, 0.84729685, -0.14562083 }, v3T{ -0.33474095, 0.69713420, -0.63399716 }, v3T{ -0.48650711, 0.74561924, 0.45537104 },
|
||||||
|
v3T{ -0.41670009, -0.87381546, -0.25061440 }, v3T{ 0.92586094, -0.34254116, -0.15952140 }, v3T{ -0.10682502, 0.59910669, 0.79351092 }, v3T{ -0.44718479, -0.59299328, 0.66961536 },
|
||||||
|
v3T{ 0.69862855, -0.48858264, 0.52269031 }, v3T{ -0.74718902, 0.51933770, -0.41472512 }, v3T{ -0.56931667, 0.42835158, 0.70170753 }, v3T{ 0.05154068, 0.16647211, 0.98469823 },
|
||||||
|
v3T{ 0.74568360, -0.66371406, 0.05864824 }, v3T{ 0.64686641, 0.41668704, 0.63869849 }, v3T{ 0.27796256, -0.73021674, 0.62411563 }, v3T{ 0.77079499, -0.62615383, 0.11750087 },
|
||||||
|
v3T{ -0.06833979, 0.90160690, 0.42712371 }, v3T{ -0.98003087, -0.09480635, 0.17478914 }, v3T{ -0.85191651, 0.47279136, 0.22518122 }, v3T{ 0.52473004, -0.19693989, -0.82817454 },
|
||||||
|
v3T{ 0.16081399, 0.75081437, -0.64063768 }, v3T{ 0.71441816, 0.52488995, -0.46270642 }, v3T{ -0.23333515, -0.88652173, 0.39954216 }, v3T{ 0.54760612, -0.74897952, -0.37303782 },
|
||||||
|
v3T{ 0.48186221, -0.57810371, 0.65848683 }, v3T{ -0.21255857, -0.53489421, -0.81774509 }, v3T{ 0.77930308, 0.57549405, -0.24797842 }, v3T{ 0.60279872, -0.76604104, -0.22319235 },
|
||||||
|
v3T{ 0.37230136, -0.52720909, 0.76383393 }, v3T{ -0.13321231, -0.92277683, 0.36157627 }, v3T{ -0.47833070, -0.49076061, -0.72825392 }, v3T{ 0.28828612, -0.93601402, 0.20191301 },
|
||||||
|
v3T{ -0.66460360, -0.65589055, 0.35792406 }, v3T{ 0.90686144, 0.30403802, 0.29182738 }, v3T{ -0.00682204, 0.42199214, 0.90657382 }, v3T{ -0.33221520, 0.26584830, -0.90496284 },
|
||||||
|
v3T{ -0.59515132, 0.55081686, 0.58514588 }, v3T{ 0.77123373, 0.59869357, -0.21625109 }, v3T{ -0.69765329, -0.61042387, 0.37505011 }, v3T{ 0.02426772, -0.55656860, -0.83044715 },
|
||||||
|
v3T{ 0.65180023, 0.75814507, 0.01930051 }, v3T{ -0.01531784, -0.78276243, 0.62213209 }, v3T{ 0.63847163, 0.03936370, 0.76863807 }, v3T{ 0.40703600, -0.09783879, -0.90815707 },
|
||||||
|
v3T{ -0.46223121, -0.64783550, -0.60551753 }, v3T{ 0.82788442, -0.46539053, 0.31307993 }, v3T{ -0.75467147, 0.24001984, 0.61062382 }, v3T{ -0.70062375, -0.69087941, 0.17835919 },
|
||||||
|
v3T{ 0.35457466, 0.88605939, -0.29862279 }, v3T{ 0.20159504, -0.88658663, -0.41632150 }, v3T{ -0.32096612, 0.72494426, -0.60945597 }, v3T{ 0.14147986, 0.53949815, -0.83001518 },
|
||||||
|
v3T{ 0.28297638, 0.93772862, 0.20146813 }, v3T{ 0.67192636, 0.43759891, -0.59751332 }, v3T{ 0.98497844, 0.01967209, 0.17155312 }, v3T{ 0.60388215, -0.68969665, 0.39955586 },
|
||||||
|
v3T{ 0.41200242, 0.85002960, 0.32818240 }, v3T{ -0.83375884, 0.39266173, -0.38815328 }, v3T{ -0.70938505, -0.58502714, -0.39308535 }, v3T{ -0.63048972, 0.77513872, 0.04053013 },
|
||||||
|
v3T{ 0.10261233, -0.69355480, -0.71305852 }, v3T{ 0.65702752, -0.38976767, -0.64528753 }, v3T{ -0.41388260, 0.33890875, 0.84489174 }, v3T{ 0.03028400, -0.46424256, -0.88519022 },
|
||||||
|
v3T{ 0.45068344, -0.52775066, -0.71997478 }, v3T{ 0.48930093, 0.41323002, -0.76800101 }, v3T{ 0.28350070, 0.66390322, 0.69199701 }, v3T{ 0.42450922, -0.60916900, 0.66985450 },
|
||||||
|
v3T{ 0.67306932, 0.51724488, -0.52861652 }, v3T{ 0.31095891, 0.94487804, -0.10251852 }, v3T{ -0.25569777, 0.90632689, -0.33643754 }, v3T{ -0.21431592, 0.07778980, -0.97366187 },
|
||||||
|
v3T{ 0.27676605, -0.87464593, 0.39798876 }, v3T{ 0.00288072, -0.88726140, -0.46125796 }, v3T{ 0.51138622, 0.12353356, 0.85042554 }, v3T{ 0.59734197, 0.76052363, 0.25453168 },
|
||||||
|
v3T{ -0.43336730, -0.76588813, 0.47498227 }, v3T{ 0.34180565, -0.68750195, -0.64071052 }, v3T{ -0.65078280, 0.51803512, 0.55508681 }, v3T{ -0.89824124, 0.40466264, -0.17149586 },
|
||||||
|
v3T{ 0.54253116, 0.81082175, -0.21960883 }, v3T{ -0.53994336, 0.54836630, 0.63855741 }, v3T{ 0.68778819, 0.33483595, -0.64407475 }, v3T{ -0.63530446, -0.39864092, 0.66141792 },
|
||||||
|
v3T{ 0.80728009, -0.58358794, -0.08788616 }, v3T{ 0.94835277, 0.26419320, 0.17558181 }, v3T{ -0.15823843, -0.51165316, 0.84449490 }, v3T{ 0.17510951, -0.22389002, 0.95875436 },
|
||||||
|
v3T{ 0.13697442, -0.88598087, 0.44303037 }, v3T{ -0.73457485, -0.23332652, -0.63714874 }, v3T{ 0.95521505, -0.11801760, 0.27135964 }, v3T{ -0.40184319, -0.90170455, -0.15953355 },
|
||||||
|
v3T{ 0.16857866, -0.70975159, -0.68398386 }, v3T{ -0.55230772, 0.37144476, 0.74631426 }, v3T{ 0.29875717, -0.61848962, -0.72678383 }, v3T{ 0.62465217, -0.76131685, 0.17379963 },
|
||||||
|
v3T{ 0.75759704, 0.19352541, 0.62337360 }, v3T{ -0.10375594, 0.61563856, 0.78116827 }, v3T{ 0.52725731, 0.25296549, 0.81117704 }, v3T{ -0.71292545, -0.53989924, -0.44748867 },
|
||||||
|
v3T{ 0.78246146, 0.54867457, 0.29446609 }, v3T{ 0.31458005, 0.63401883, -0.70644145 }, v3T{ -0.09360697, -0.99481997, -0.03963538 }, v3T{ -0.59000956, 0.10880136, -0.80003186 },
|
||||||
|
v3T{ 0.49713243, 0.77379744, -0.39255173 }, v3T{ -0.92985377, 0.17383167, 0.32427537 }, v3T{ 0.73574353, -0.63730495, -0.22918086 }, v3T{ -0.04383386, -0.80273910, -0.59471719 },
|
||||||
|
v3T{ 0.68411849, 0.52929683, -0.50182344 }, v3T{ -0.19561815, -0.57428906, -0.79493749 }, v3T{ 0.90257811, -0.06366895, -0.42579222 }, v3T{ 0.62294256, 0.39027502, -0.67795868 },
|
||||||
|
v3T{ -0.39046281, -0.70398950, 0.59324327 }, v3T{ 0.70990020, 0.62433400, -0.32595821 }, v3T{ -0.99157404, 0.01300690, 0.12888658 }, v3T{ -0.55765988, -0.46179257, 0.68975581 },
|
||||||
|
v3T{ -0.53736280, -0.34635255, -0.76894807 }, v3T{ 0.25083685, 0.44726649, -0.85850659 }, v3T{ 0.45758528, 0.86982087, -0.18446507 }, v3T{ -0.18615519, 0.23441065, -0.95414773 },
|
||||||
|
v3T{ 0.56359579, -0.41325118, -0.71525048 }, v3T{ -0.48542469, 0.59678985, -0.63890903 }, v3T{ -0.72243931, -0.40815930, 0.55811059 }, v3T{ -0.23748605, 0.68466361, -0.68908354 },
|
||||||
|
v3T{ -0.69257361, 0.27959985, -0.66495543 }, v3T{ -0.10352601, -0.17369566, -0.97934273 }, v3T{ 0.00192480, -0.09194122, 0.99576258 }, v3T{ 0.36297645, 0.86362173, 0.34986513 },
|
||||||
|
v3T{ -0.71118388, -0.10242990, 0.69550385 }, v3T{ 0.45146824, 0.43080300, 0.78139952 }, v3T{ -0.13265094, -0.68773403, -0.71374059 }, v3T{ 0.56016516, -0.56270148, -0.60793259 },
|
||||||
|
v3T{ -0.95871022, -0.27465634, -0.07374694 }, v3T{ -0.84169709, 0.06533746, -0.53598230 }, v3T{ 0.69711911, -0.61618111, -0.36653212 }, v3T{ -0.01620384, 0.59778204, -0.80149490 },
|
||||||
|
v3T{ -0.34911215, 0.65899531, -0.66621760 }, v3T{ -0.19279427, -0.50540811, -0.84106659 }, v3T{ -0.60506152, 0.72292944, 0.33357695 }, v3T{ 0.79789244, -0.59553505, 0.09330415 },
|
||||||
|
v3T{ -0.48173680, -0.74189415, 0.46639331 }, v3T{ 0.84140763, 0.31839867, 0.43664115 }, v3T{ 0.79614481, 0.60391839, -0.03789486 }, v3T{ 0.19384456, 0.57096572, 0.79776089 },
|
||||||
|
v3T{ 0.83441754, -0.25078854, -0.49076723 }, v3T{ -0.62605441, 0.72550166, 0.28583776 }, v3T{ 0.55337866, -0.75558589, 0.35051679 }, v3T{ 0.80543476, -0.01571309, 0.59247611 },
|
||||||
|
v3T{ -0.00851542, 0.98991715, 0.14139139 }, v3T{ -0.94076275, -0.29730096, -0.16302633 }, v3T{ -0.75465549, -0.41353736, -0.50939371 }, v3T{ 0.37739255, -0.63080384, 0.67798332 },
|
||||||
|
v3T{ 0.47325376, -0.73145333, -0.49092453 }, v3T{ 0.12930721, -0.49066326, -0.86170135 }, v3T{ 0.71173142, -0.11663112, 0.69270165 }, v3T{ 0.41952295, -0.63051086, -0.65303641 },
|
||||||
|
v3T{ 0.85916103, 0.42641569, 0.28286390 }, v3T{ 0.54792224, -0.66418740, 0.50856299 }, v3T{ 0.28479416, 0.43856869, 0.85237890 }, v3T{ -0.59050384, -0.68486024, -0.42693285 },
|
||||||
|
v3T{ 0.54884141, 0.60847988, 0.57317130 }, v3T{ 0.87567478, 0.25649070, -0.40915304 }, v3T{ 0.02961573, 0.33496172, 0.94176619 }, v3T{ 0.67428181, 0.70665199, 0.21444580 },
|
||||||
|
v3T{ 0.23609059, -0.51982231, 0.82100305 }, v3T{ 0.93726653, 0.00671493, 0.34854893 }, v3T{ -0.39891590, -0.91536143, -0.05458531 }, v3T{ 0.93359117, -0.35793085, 0.01711843 },
|
||||||
|
v3T{ 0.53572079, -0.56879583, 0.62407896 }, v3T{ -0.61516933, -0.36856434, -0.69694119 }, v3T{ 0.74630703, -0.65946218, -0.09019675 }, v3T{ 0.50607373, -0.59204544, -0.62719342 },
|
||||||
|
v3T{ -0.89793356, 0.43675114, 0.05444050 }, v3T{ -0.91682171, 0.07126199, 0.39288634 }, v3T{ -0.61178292, -0.15203616, -0.77627744 }, v3T{ -0.14028895, 0.63023583, 0.76362413 },
|
||||||
|
v3T{ 0.71475895, -0.54060748, 0.44369268 }, v3T{ -0.31764961, 0.92630790, -0.20261391 }, v3T{ 0.59833443, -0.58864018, -0.54359788 }, v3T{ -0.81450219, 0.22699691, -0.53390879 },
|
||||||
|
v3T{ 0.00452737, -0.06652318, 0.99777461 }, v3T{ 0.59311614, 0.19797584, -0.78039657 }, v3T{ -0.71375488, -0.02586188, 0.69991795 }, v3T{ -0.75600145, -0.26384588, -0.59903853 },
|
||||||
|
v3T{ 0.25716644, 0.77480857, -0.57752671 }, v3T{ 0.71712423, 0.61984999, -0.31862018 }, v3T{ -0.28194922, -0.55108799, 0.78537040 }, v3T{ 0.57068285, -0.67066160, 0.47385030 },
|
||||||
|
v3T{ 0.48969101, -0.22604767, -0.84208382 }, v3T{ -0.93763991, -0.34062289, 0.06933579 }, v3T{ -0.67376035, 0.15110895, -0.72333469 }, v3T{ -0.72414406, -0.65877431, -0.20403872 },
|
||||||
|
v3T{ -0.71204285, 0.41163046, -0.56881926 }, v3T{ 0.23641604, -0.86280490, 0.44685026 }, v3T{ 0.84208951, 0.19949878, -0.50108432 }, v3T{ -0.67481860, 0.67904385, -0.28899707 },
|
||||||
|
v3T{ 0.52167146, 0.66360202, 0.53618211 }, v3T{ -0.49330390, -0.48590434, 0.72149029 }, v3T{ -0.18240720, 0.04137646, -0.98235208 }, v3T{ 0.30714395, 0.55170433, 0.77542564 },
|
||||||
|
v3T{ -0.14577549, 0.95376355, -0.26283949 }, v3T{ -0.54373260, -0.69781662, -0.46626905 }, v3T{ 0.01799205, -0.81833182, 0.57446437 }, v3T{ 0.51019037, -0.56615200, -0.64743934 },
|
||||||
|
v3T{ 0.48463473, 0.59436639, 0.64176146 }, v3T{ 0.09115853, -0.52830175, -0.84414891 }, v3T{ -0.62962436, -0.38408030, -0.67531880 }, v3T{ 0.50864721, -0.48401592, -0.71204396 },
|
||||||
|
v3T{ -0.69669235, -0.63427804, -0.33512853 }, v3T{ 0.60735178, -0.18339351, 0.77297518 }, v3T{ 0.74102699, 0.67064566, 0.03336744 }, v3T{ -0.47352242, -0.76145583, -0.44267543 },
|
||||||
|
v3T{ 0.47751531, -0.79737827, -0.36900816 }, v3T{ 0.74175025, -0.64892413, 0.16942269 }, v3T{ 0.65484829, -0.70924167, -0.26105549 }, v3T{ 0.60455058, -0.64392987, -0.46890608 },
|
||||||
|
v3T{ -0.61878613, -0.77223405, 0.14407742 }, v3T{ -0.72376655, -0.65562529, 0.21521492 }, v3T{ 0.24420910, -0.52118606, -0.81775731 }, v3T{ 0.61291622, 0.39870471, -0.68217906 },
|
||||||
|
v3T{ 0.67751893, 0.65970488, 0.32520389 }, v3T{ -0.04366879, -0.96113671, 0.27259726 }, v3T{ 0.36541094, 0.62808212, 0.68701361 }, v3T{ -0.92572867, 0.10611717, -0.36299528 },
|
||||||
|
v3T{ 0.80766374, -0.02031352, -0.58929335 }, v3T{ -0.82117076, 0.53034081, 0.21075390 }, v3T{ -0.62778197, -0.51872129, 0.58036025 }, v3T{ 0.37696186, 0.57743439, -0.72420251 },
|
||||||
|
v3T{ -0.56818895, -0.47089866, -0.67484500 }, v3T{ -0.61126182, -0.69853192, 0.37203783 }, v3T{ 0.57901952, 0.81284241, -0.06343191 }, v3T{ -0.53287943, 0.70445351, 0.46881208 },
|
||||||
|
v3T{ 0.22300157, -0.93258969, 0.28380764 }, v3T{ -0.63832115, -0.40157013, -0.65672486 }, v3T{ -0.22074780, 0.50999380, 0.83137040 }, v3T{ -0.59081050, -0.13684815, -0.79511982 },
|
||||||
|
v3T{ -0.79824305, 0.52060475, -0.30295004 }, v3T{ -0.56871170, 0.76435226, 0.30386284 }, v3T{ 0.12786983, -0.64236825, -0.75565358 }, v3T{ -0.17631562, -0.76167939, -0.62350405 },
|
||||||
|
v3T{ 0.34713709, 0.61125835, -0.71123770 }, v3T{ -0.39238887, -0.52886732, 0.75254922 }, v3T{ 0.38116332, 0.71358998, -0.58779577 }, v3T{ -0.72949527, -0.67040404, 0.13562844 },
|
||||||
|
v3T{ -0.62057913, 0.45165344, -0.64100757 }, v3T{ -0.10668918, -0.98309252, -0.14881706 }, v3T{ 0.59490400, -0.46196716, -0.65778079 }, v3T{ 0.22433782, 0.49054463, 0.84204424 },
|
||||||
|
v3T{ 0.77498791, -0.57220981, 0.26827165 }, v3T{ 0.26474565, 0.93986866, -0.21576987 }, v3T{ -0.01328623, 0.99975439, 0.01773780 }, v3T{ 0.53097408, 0.47771884, 0.69989373 },
|
||||||
|
v3T{ 0.24635212, -0.37499947, -0.89369236 }, v3T{ 0.31300988, -0.54171955, 0.78010560 }, v3T{ 0.77494650, -0.52634980, 0.34987684 }, v3T{ 0.65518408, 0.51410661, -0.55355958 },
|
||||||
|
v3T{ 0.78000762, -0.61855443, -0.09475515 }, v3T{ 0.58176976, 0.62638121, 0.51883574 }, v3T{ -0.62371886, -0.59433046, 0.50768699 }, v3T{ 0.85206333, 0.17478222, -0.49339564 },
|
||||||
|
v3T{ 0.69974170, -0.42963013, 0.57077098 }, v3T{ -0.44953934, 0.62956163, -0.63369277 }, v3T{ 0.63562255, 0.51965998, -0.57090935 }, v3T{ -0.02766532, -0.52812789, -0.84871406 },
|
||||||
|
v3T{ 0.78698609, 0.04742916, -0.61514500 }, v3T{ 0.37827449, 0.78614098, 0.48876454 }, v3T{ 0.90534508, -0.25600916, -0.33883565 }, v3T{ -0.37701605, 0.47347359, -0.79604124 },
|
||||||
|
v3T{ -0.43802429, 0.40756165, -0.80126664 }, v3T{ -0.87945568, -0.47372426, -0.04629300 }, v3T{ -0.22787901, -0.82242670, 0.52123457 }, v3T{ 0.48721529, 0.74652617, -0.45312243 },
|
||||||
|
v3T{ -0.68473990, -0.68222429, 0.25632263 }, v3T{ -0.33289944, 0.62102263, -0.70958358 }, v3T{ -0.07838790, -0.85438083, -0.51370101 }, v3T{ 0.18575601, 0.96209034, 0.19969195 },
|
||||||
|
v3T{ 0.09048656, -0.68256793, -0.72519874 }, v3T{ 0.29506068, -0.68306389, -0.66810397 }, v3T{ -0.94937153, -0.17748927, 0.25921277 }, v3T{ -0.38725072, 0.16372291, 0.90732116 },
|
||||||
|
v3T{ -0.02691563, 0.81898594, 0.57318198 }, v3T{ -0.65244629, -0.52276924, -0.54865851 }, v3T{ 0.15270967, -0.00097578, 0.98827061 }, v3T{ 0.39108739, 0.55471383, -0.73439990 },
|
||||||
|
v3T{ 0.85379797, -0.05140234, 0.51806064 }, v3T{ 0.31443713, 0.14998906, -0.93735403 }, v3T{ -0.44277186, -0.56474741, -0.69642907 }, v3T{ -0.31521736, 0.37268196, 0.87278071 },
|
||||||
|
v3T{ 0.97997903, -0.16829529, 0.10638514 }, v3T{ -0.25174419, -0.84939324, 0.46384910 }, v3T{ 0.03867740, -0.72044135, 0.69243651 }, v3T{ -0.80207202, 0.48047131, 0.35472214 },
|
||||||
|
v3T{ 0.48200634, -0.48413492, 0.73026246 }, v3T{ -0.41800015, 0.44068588, -0.79440029 }, v3T{ 0.58661859, -0.43233611, 0.68480955 }, v3T{ 0.40830998, -0.53710845, 0.73810397 },
|
||||||
|
v3T{ 0.61242611, -0.72220206, -0.32149407 }, v3T{ -0.34159283, -0.62199145, -0.70458567 }, v3T{ -0.29885191, 0.58492128, -0.75402562 }, v3T{ -0.62924060, 0.77130626, -0.09561862 },
|
||||||
|
v3T{ 0.91118189, 0.27762192, 0.30442344 }, v3T{ 0.08064464, -0.99213777, -0.09570315 }, v3T{ 0.93083382, -0.34928416, -0.10746612 }, v3T{ 0.66101659, -0.67569323, 0.32633681 },
|
||||||
|
v3T{ 0.07148482, -0.97619739, -0.20476469 }, v3T{ 0.30440743, -0.78193565, -0.54397863 }, v3T{ -0.35656518, -0.19962907, 0.91269355 }, v3T{ 0.82151650, -0.31061678, 0.47815045 },
|
||||||
|
v3T{ -0.69709423, -0.71173375, -0.08657198 }, v3T{ -0.46044170, -0.78565215, -0.41321197 }, v3T{ -0.70275364, -0.21121895, 0.67935548 }, v3T{ 0.38087769, 0.63933041, 0.66797366 }
|
||||||
|
};
|
||||||
|
return g;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector<int> m_P;
|
||||||
|
std::vector<T> m_PFloats;
|
||||||
|
std::vector<v3T> m_Grad;
|
||||||
|
std::unordered_map<string, pair<const T*, size_t>> m_GlobalMap;
|
||||||
|
};
|
||||||
|
}
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
#include "Point.h"
|
#include "Point.h"
|
||||||
#include "Isaac.h"
|
#include "Isaac.h"
|
||||||
|
#include "VarFuncs.h"
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Base variation classes. Individual variations will be grouped into files of roughly 50
|
/// Base variation classes. Individual variations will be grouped into files of roughly 50
|
||||||
@ -101,6 +102,7 @@ enum eVariationId
|
|||||||
VAR_COTQ ,
|
VAR_COTQ ,
|
||||||
VAR_CPOW ,
|
VAR_CPOW ,
|
||||||
VAR_CPOW2 ,
|
VAR_CPOW2 ,
|
||||||
|
VAR_CRACKLE ,
|
||||||
VAR_CRESCENTS ,
|
VAR_CRESCENTS ,
|
||||||
VAR_CROB ,
|
VAR_CROB ,
|
||||||
VAR_CROP ,
|
VAR_CROP ,
|
||||||
@ -409,6 +411,7 @@ enum eVariationId
|
|||||||
VAR_PRE_COTQ,
|
VAR_PRE_COTQ,
|
||||||
VAR_PRE_CPOW,
|
VAR_PRE_CPOW,
|
||||||
VAR_PRE_CPOW2,
|
VAR_PRE_CPOW2,
|
||||||
|
VAR_PRE_CRACKLE,
|
||||||
VAR_PRE_CRESCENTS,
|
VAR_PRE_CRESCENTS,
|
||||||
VAR_PRE_CROB,
|
VAR_PRE_CROB,
|
||||||
VAR_PRE_CROP,
|
VAR_PRE_CROP,
|
||||||
@ -717,6 +720,7 @@ enum eVariationId
|
|||||||
VAR_POST_COTQ,
|
VAR_POST_COTQ,
|
||||||
VAR_POST_CPOW,
|
VAR_POST_CPOW,
|
||||||
VAR_POST_CPOW2,
|
VAR_POST_CPOW2,
|
||||||
|
VAR_POST_CRACKLE,
|
||||||
VAR_POST_CRESCENTS,
|
VAR_POST_CRESCENTS,
|
||||||
VAR_POST_CROB,
|
VAR_POST_CROB,
|
||||||
VAR_POST_CROP,
|
VAR_POST_CROP,
|
||||||
@ -974,6 +978,7 @@ enum eVariationId
|
|||||||
VAR_DC_CYLINDER,
|
VAR_DC_CYLINDER,
|
||||||
VAR_DC_GRIDOUT,
|
VAR_DC_GRIDOUT,
|
||||||
VAR_DC_LINEAR,
|
VAR_DC_LINEAR,
|
||||||
|
VAR_DC_PERLIN,
|
||||||
VAR_DC_TRIANGLE,
|
VAR_DC_TRIANGLE,
|
||||||
VAR_DC_ZTRANSL,
|
VAR_DC_ZTRANSL,
|
||||||
|
|
||||||
@ -983,6 +988,7 @@ enum eVariationId
|
|||||||
VAR_PRE_DC_CYLINDER,
|
VAR_PRE_DC_CYLINDER,
|
||||||
VAR_PRE_DC_GRIDOUT,
|
VAR_PRE_DC_GRIDOUT,
|
||||||
VAR_PRE_DC_LINEAR,
|
VAR_PRE_DC_LINEAR,
|
||||||
|
VAR_PRE_DC_PERLIN,
|
||||||
VAR_PRE_DC_TRIANGLE,
|
VAR_PRE_DC_TRIANGLE,
|
||||||
VAR_PRE_DC_ZTRANSL,
|
VAR_PRE_DC_ZTRANSL,
|
||||||
|
|
||||||
@ -992,6 +998,7 @@ enum eVariationId
|
|||||||
VAR_POST_DC_CYLINDER,
|
VAR_POST_DC_CYLINDER,
|
||||||
VAR_POST_DC_GRIDOUT,
|
VAR_POST_DC_GRIDOUT,
|
||||||
VAR_POST_DC_LINEAR,
|
VAR_POST_DC_LINEAR,
|
||||||
|
VAR_POST_DC_PERLIN,
|
||||||
VAR_POST_DC_TRIANGLE,
|
VAR_POST_DC_TRIANGLE,
|
||||||
VAR_POST_DC_ZTRANSL,
|
VAR_POST_DC_ZTRANSL,
|
||||||
|
|
||||||
@ -1133,7 +1140,6 @@ public:
|
|||||||
m_NeedPrecalcAngles = variation.NeedPrecalcAngles();
|
m_NeedPrecalcAngles = variation.NeedPrecalcAngles();
|
||||||
m_NeedPrecalcAtanXY = variation.NeedPrecalcAtanXY();
|
m_NeedPrecalcAtanXY = variation.NeedPrecalcAtanXY();
|
||||||
m_NeedPrecalcAtanYX = variation.NeedPrecalcAtanYX();
|
m_NeedPrecalcAtanYX = variation.NeedPrecalcAtanYX();
|
||||||
|
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1288,9 +1294,7 @@ public:
|
|||||||
virtual string ToString() const
|
virtual string ToString() const
|
||||||
{
|
{
|
||||||
ostringstream ss;
|
ostringstream ss;
|
||||||
|
|
||||||
ss << m_Name << "(" << m_Weight << ")";
|
ss << m_Name << "(" << m_Weight << ")";
|
||||||
|
|
||||||
return ss.str();
|
return ss.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1346,6 +1350,12 @@ public:
|
|||||||
/// <returns>The names for global OpenCL functions specific to this variation</returns>
|
/// <returns>The names for global OpenCL functions specific to this variation</returns>
|
||||||
virtual vector<string> OpenCLGlobalFuncNames() const { return vector<string>(); }
|
virtual vector<string> OpenCLGlobalFuncNames() const { return vector<string>(); }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// If the OpenCL string depends on any global static data specific to this variation, and possibly shared among others, return their names.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>The names for global OpenCL data specific to this variation</returns>
|
||||||
|
virtual vector<string> OpenCLGlobalDataNames() const { return vector<string>(); }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// If the OpenCL string depends on any functions specific to this variation, return them.
|
/// If the OpenCL string depends on any functions specific to this variation, return them.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -1462,6 +1472,7 @@ template <typename T> class ParametricVariation;
|
|||||||
/// Also, some of them can be considered precalculated values, rather than
|
/// Also, some of them can be considered precalculated values, rather than
|
||||||
/// formal parameters.
|
/// formal parameters.
|
||||||
/// Further, some can change state between iterations.
|
/// Further, some can change state between iterations.
|
||||||
|
/// The constructors for each case are deliberately different to prevent errors.
|
||||||
/// This class encapsulates a single parameter.
|
/// This class encapsulates a single parameter.
|
||||||
/// Template argument expected to be float or double.
|
/// Template argument expected to be float or double.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -1485,11 +1496,13 @@ public:
|
|||||||
/// <param name="isPrecalc">Whether the parameter is actually a precalculated value. Always true.</param>
|
/// <param name="isPrecalc">Whether the parameter is actually a precalculated value. Always true.</param>
|
||||||
/// <param name="param">A pointer to the parameter</param>
|
/// <param name="param">A pointer to the parameter</param>
|
||||||
/// <param name="name">The name of the parameter</param>
|
/// <param name="name">The name of the parameter</param>
|
||||||
|
/// <param name="size">The length of the underlying memory in bytes. Needed for array types. Default: sizeof(T).</param>
|
||||||
ParamWithName(bool isPrecalc,
|
ParamWithName(bool isPrecalc,
|
||||||
T* param,
|
T* param,
|
||||||
string name)
|
string name,
|
||||||
|
size_t size = sizeof(T))
|
||||||
{
|
{
|
||||||
Init(param, name, 0, REAL, TLOW, TMAX, true);
|
Init(param, name, 0, REAL, TLOW, TMAX, true, false, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -1555,6 +1568,7 @@ public:
|
|||||||
m_Name = paramWithName.m_Name;
|
m_Name = paramWithName.m_Name;
|
||||||
m_IsPrecalc = paramWithName.m_IsPrecalc;
|
m_IsPrecalc = paramWithName.m_IsPrecalc;
|
||||||
m_IsState = paramWithName.m_IsState;
|
m_IsState = paramWithName.m_IsState;
|
||||||
|
m_Size = paramWithName.m_Size;
|
||||||
}
|
}
|
||||||
|
|
||||||
return *this;
|
return *this;
|
||||||
@ -1571,7 +1585,8 @@ public:
|
|||||||
/// <param name="max">The maximum value the parameter can be</param>
|
/// <param name="max">The maximum value the parameter can be</param>
|
||||||
/// <param name="isPrecalc">Whether the parameter is actually a precalculated value. Default: false.</param>
|
/// <param name="isPrecalc">Whether the parameter is actually a precalculated value. Default: false.</param>
|
||||||
/// <param name="isState">Whether the parameter changes state between iterations. Default: false.</param>
|
/// <param name="isState">Whether the parameter changes state between iterations. Default: false.</param>
|
||||||
void Init(T* param, const string& name, T def = 0, eParamType type = REAL, T min = TLOW, T max = TMAX, bool isPrecalc = false, bool isState = false)
|
/// <param name="size">The length of the underlying memory in bytes. Needed for array types. Default: sizeof(T).</param>
|
||||||
|
void Init(T* param, const string& name, T def = 0, eParamType type = REAL, T min = TLOW, T max = TMAX, bool isPrecalc = false, bool isState = false, size_t size = sizeof(T))
|
||||||
{
|
{
|
||||||
m_Param = param;
|
m_Param = param;
|
||||||
m_Def = def;
|
m_Def = def;
|
||||||
@ -1581,7 +1596,7 @@ public:
|
|||||||
m_Name = name;
|
m_Name = name;
|
||||||
m_IsPrecalc = isPrecalc;
|
m_IsPrecalc = isPrecalc;
|
||||||
m_IsState = isState;
|
m_IsState = isState;
|
||||||
|
m_Size = size;
|
||||||
Set(m_Def);//Initial value.
|
Set(m_Def);//Initial value.
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1652,17 +1667,16 @@ public:
|
|||||||
string ToString() const
|
string ToString() const
|
||||||
{
|
{
|
||||||
ostringstream ss;
|
ostringstream ss;
|
||||||
|
ss << "Param Name: " << m_Name << "\n"
|
||||||
ss << "Param Name: " << m_Name << endl
|
<< "Param Pointer: " << m_Param << "\n"
|
||||||
<< "Param Pointer: " << m_Param << endl
|
<< "Param Value: " << *m_Param << "\n"
|
||||||
<< "Param Value: " << *m_Param << endl
|
<< "Param Def: " << m_Def << "\n"
|
||||||
<< "Param Def: " << m_Def << endl
|
<< "Param Min: " << m_Min << "\n"
|
||||||
<< "Param Min: " << m_Min << endl
|
<< "Param Max: " << m_Max << "\n"
|
||||||
<< "Param Max: " << m_Max << endl
|
<< "Param Type: " << m_Type << "\n"
|
||||||
<< "Param Type: " << m_Type << endl
|
<< "Is Precalc: " << m_IsPrecalc << "\n"
|
||||||
<< "Is Precalc: " << m_IsPrecalc << endl
|
<< "Is State: " << m_IsState << "\n"
|
||||||
<< "Is State: " << m_IsState << endl;
|
<< "Size: " << m_Size << "\n";
|
||||||
|
|
||||||
return ss.str();
|
return ss.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1678,6 +1692,7 @@ public:
|
|||||||
string Name() const { return m_Name; }
|
string Name() const { return m_Name; }
|
||||||
bool IsPrecalc() const { return m_IsPrecalc; }
|
bool IsPrecalc() const { return m_IsPrecalc; }
|
||||||
bool IsState() const { return m_IsState; }
|
bool IsState() const { return m_IsState; }
|
||||||
|
size_t Size() const { return m_Size; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
T* m_Param;//Pointer to the parameter value.
|
T* m_Param;//Pointer to the parameter value.
|
||||||
@ -1688,6 +1703,7 @@ private:
|
|||||||
string m_Name;//Name of the parameter.
|
string m_Name;//Name of the parameter.
|
||||||
bool m_IsPrecalc;//Whether the parameter is actually a precalculated value.
|
bool m_IsPrecalc;//Whether the parameter is actually a precalculated value.
|
||||||
bool m_IsState;//Whether the parameter changes state between iterations. This is also considered precalc.
|
bool m_IsState;//Whether the parameter changes state between iterations. This is also considered precalc.
|
||||||
|
size_t m_Size;//The size of the field in bytes. Default: sizeof(T).
|
||||||
};
|
};
|
||||||
|
|
||||||
#define VARUSINGS \
|
#define VARUSINGS \
|
||||||
@ -1884,7 +1900,9 @@ public:
|
|||||||
virtual void Random(QTIsaac<ISAAC_SIZE, ISAAC_INT>& rand) override
|
virtual void Random(QTIsaac<ISAAC_SIZE, ISAAC_INT>& rand) override
|
||||||
{
|
{
|
||||||
Variation<T>::Random(rand);
|
Variation<T>::Random(rand);
|
||||||
|
|
||||||
for (auto& param : m_Params) param.Set(rand.Frand11<T>());
|
for (auto& param : m_Params) param.Set(rand.Frand11<T>());
|
||||||
|
|
||||||
this->Precalc();
|
this->Precalc();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1894,6 +1912,7 @@ public:
|
|||||||
void Clear()
|
void Clear()
|
||||||
{
|
{
|
||||||
for (auto& param : m_Params) *(param.Param()) = 0;
|
for (auto& param : m_Params) *(param.Param()) = 0;
|
||||||
|
|
||||||
this->Precalc();
|
this->Precalc();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1905,8 +1924,8 @@ public:
|
|||||||
vector<string> ParamNames(bool includePrecalcs = false)
|
vector<string> ParamNames(bool includePrecalcs = false)
|
||||||
{
|
{
|
||||||
vector<string> vec;
|
vector<string> vec;
|
||||||
|
|
||||||
vec.reserve(m_Params.size());
|
vec.reserve(m_Params.size());
|
||||||
|
|
||||||
for (auto& param : m_Params)
|
for (auto& param : m_Params)
|
||||||
{
|
{
|
||||||
if ((includePrecalcs && param.IsPrecalc()) || !param.IsPrecalc())
|
if ((includePrecalcs && param.IsPrecalc()) || !param.IsPrecalc())
|
||||||
@ -1947,8 +1966,8 @@ public:
|
|||||||
virtual string ToString() const override
|
virtual string ToString() const override
|
||||||
{
|
{
|
||||||
ostringstream ss;
|
ostringstream ss;
|
||||||
|
|
||||||
ss << Variation<T>::ToString() << endl;
|
ss << Variation<T>::ToString() << endl;
|
||||||
|
|
||||||
for (auto& param : m_Params) ss << param.ToString() << endl;
|
for (auto& param : m_Params) ss << param.ToString() << endl;
|
||||||
|
|
||||||
return ss.str();
|
return ss.str();
|
||||||
@ -2237,4 +2256,4 @@ protected:
|
|||||||
\
|
\
|
||||||
PREPOSTPARVARCOPY(Post##varName##Variation, varName##Variation) \
|
PREPOSTPARVARCOPY(Post##varName##Variation, varName##Variation) \
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -341,9 +341,9 @@ public:
|
|||||||
ADDPREPOSTREGVAR(Crob)
|
ADDPREPOSTREGVAR(Crob)
|
||||||
ADDPREPOSTREGVAR(BubbleT3D)
|
ADDPREPOSTREGVAR(BubbleT3D)
|
||||||
ADDPREPOSTREGVAR(Synth)
|
ADDPREPOSTREGVAR(Synth)
|
||||||
|
ADDPREPOSTREGVAR(Crackle)
|
||||||
//ADDPREPOSTREGVAR(LinearXZ)
|
//ADDPREPOSTREGVAR(LinearXZ)
|
||||||
//ADDPREPOSTREGVAR(LinearYZ)
|
//ADDPREPOSTREGVAR(LinearYZ)
|
||||||
|
|
||||||
//DC are special.
|
//DC are special.
|
||||||
ADDPREPOSTREGVAR(DCBubble)
|
ADDPREPOSTREGVAR(DCBubble)
|
||||||
ADDPREPOSTREGVAR(DCCarpet)
|
ADDPREPOSTREGVAR(DCCarpet)
|
||||||
@ -351,19 +351,22 @@ public:
|
|||||||
ADDPREPOSTREGVAR(DCCylinder)
|
ADDPREPOSTREGVAR(DCCylinder)
|
||||||
ADDPREPOSTREGVAR(DCGridOut)
|
ADDPREPOSTREGVAR(DCGridOut)
|
||||||
ADDPREPOSTREGVAR(DCLinear)
|
ADDPREPOSTREGVAR(DCLinear)
|
||||||
|
ADDPREPOSTREGVAR(DCPerlin)
|
||||||
ADDPREPOSTREGVAR(DCTriangle)
|
ADDPREPOSTREGVAR(DCTriangle)
|
||||||
ADDPREPOSTREGVAR(DCZTransl)
|
ADDPREPOSTREGVAR(DCZTransl)
|
||||||
|
|
||||||
for (auto var : m_Variations) var->Precalc();
|
for (auto var : m_Variations) var->Precalc();
|
||||||
std::sort(m_Variations.begin(), m_Variations.end(), [&](const Variation<T>* var1, const Variation<T>* var2) { return var1->VariationId() < var2->VariationId(); });
|
|
||||||
|
|
||||||
|
std::sort(m_Variations.begin(), m_Variations.end(), [&](const Variation<T>* var1, const Variation<T>* var2) { return var1->VariationId() < var2->VariationId(); });
|
||||||
m_RegVariations.reserve(m_Variations.size() / 3);
|
m_RegVariations.reserve(m_Variations.size() / 3);
|
||||||
m_PreVariations.reserve(m_Variations.size() / 3);
|
m_PreVariations.reserve(m_Variations.size() / 3);
|
||||||
m_PostVariations.reserve(m_Variations.size() / 3);
|
m_PostVariations.reserve(m_Variations.size() / 3);
|
||||||
m_ParametricVariations.reserve(size_t(m_Variations.size() * .90));//This is a rough guess at how many are parametric.
|
m_ParametricVariations.reserve(size_t(m_Variations.size() * .90));//This is a rough guess at how many are parametric.
|
||||||
|
|
||||||
for (auto var : m_Variations) if (var->VarType() == VARTYPE_REG) m_RegVariations.push_back(var);
|
for (auto var : m_Variations) if (var->VarType() == VARTYPE_REG) m_RegVariations.push_back(var);
|
||||||
|
|
||||||
for (auto var : m_Variations) if (var->VarType() == VARTYPE_PRE) m_PreVariations.push_back(var);
|
for (auto var : m_Variations) if (var->VarType() == VARTYPE_PRE) m_PreVariations.push_back(var);
|
||||||
|
|
||||||
for (auto var : m_Variations) if (var->VarType() == VARTYPE_POST) m_PostVariations.push_back(var);
|
for (auto var : m_Variations) if (var->VarType() == VARTYPE_POST) m_PostVariations.push_back(var);
|
||||||
|
|
||||||
//Keep a list of which variations derive from ParametricVariation.
|
//Keep a list of which variations derive from ParametricVariation.
|
||||||
@ -522,7 +525,6 @@ private:
|
|||||||
if (var)
|
if (var)
|
||||||
{
|
{
|
||||||
Variation<T>* var2 = var->Copy();
|
Variation<T>* var2 = var->Copy();
|
||||||
|
|
||||||
var2->m_Weight = weight;
|
var2->m_Weight = weight;
|
||||||
return var2;
|
return var2;
|
||||||
}
|
}
|
||||||
|
@ -38,8 +38,8 @@ public:
|
|||||||
static const v2T offset[4] { { 0, 0 }, { 0, 1 }, { 1, 0 }, { 1, 1 } };
|
static const v2T offset[4] { { 0, 0 }, { 0, 1 }, { 1, 0 }, { 1, 1 } };
|
||||||
int i = 0;
|
int i = 0;
|
||||||
T di, dj;
|
T di, dj;
|
||||||
T XCh, YCh, XCo, YCo, DXo, DYo, L, L1, L2, R, s, trgL, Vx, Vy;
|
T XCh, YCh, XCo, YCo, DXo, DYo, L, L1, L2, R, s, trgL;
|
||||||
v2T U;
|
v2T u, v;
|
||||||
v2T P[7];
|
v2T P[7];
|
||||||
//For speed/convenience.
|
//For speed/convenience.
|
||||||
s = m_Cellsize;
|
s = m_Cellsize;
|
||||||
@ -49,10 +49,10 @@ public:
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
//Get co-ordinates, and convert to hex co-ordinates.
|
//Get co-ordinates, and convert to hex co-ordinates.
|
||||||
U.x = helper.In.x;
|
u.x = helper.In.x;
|
||||||
U.y = helper.In.y;
|
u.y = helper.In.y;
|
||||||
XCh = T(Floor((AXhXo * U.x + AXhYo * U.y) / s));
|
XCh = T(Floor((AXhXo * u.x + AXhYo * u.y) / s));
|
||||||
YCh = T(Floor((AYhXo * U.x + AYhYo * U.y) / s));
|
YCh = T(Floor((AYhXo * u.x + AYhYo * u.y) / s));
|
||||||
|
|
||||||
// Get a set of 4 hex center points, based around the one above
|
// Get a set of 4 hex center points, based around the one above
|
||||||
for (di = XCh; di < XCh + T(1.1); di += 1)
|
for (di = XCh; di < XCh + T(1.1); di += 1)
|
||||||
@ -65,7 +65,7 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int q = Closest(&P[0], 4, U);
|
int q = m_VarFuncs->Closest(&P[0], 4, u);
|
||||||
//Remake list starting from chosen hex, ensure it is completely surrounded (total 7 points).
|
//Remake list starting from chosen hex, ensure it is completely surrounded (total 7 points).
|
||||||
//First adjust centers according to which one was found to be closest.
|
//First adjust centers according to which one was found to be closest.
|
||||||
XCh += offset[q].x;
|
XCh += offset[q].x;
|
||||||
@ -90,20 +90,19 @@ public:
|
|||||||
P[5].y = YCo - (AYoXh + AYoYh) * s;
|
P[5].y = YCo - (AYoXh + AYoYh) * s;
|
||||||
P[6].x = XCo - AXoXh * s;
|
P[6].x = XCo - AXoXh * s;
|
||||||
P[6].y = YCo - AYoXh * s;
|
P[6].y = YCo - AYoXh * s;
|
||||||
L1 = Voronoi(&P[0], 7, 0, U);
|
L1 = m_VarFuncs->Voronoi(&P[0], 7, 0, u);
|
||||||
//Delta vector from center of hex.
|
//Delta vector from center of hex.
|
||||||
DXo = U.x - P[0].x;
|
DXo = u.x - P[0].x;
|
||||||
DYo = U.y - P[0].y;
|
DYo = u.y - P[0].y;
|
||||||
//Apply "interesting bit" to cell's DXo and DYo co-ordinates.
|
//Apply "interesting bit" to cell's DXo and DYo co-ordinates.
|
||||||
//trgL is the defined value of l, independent of any rotation.
|
//trgL is the defined value of l, independent of any rotation.
|
||||||
trgL = std::pow(Zeps(L1), m_Power) * m_Scale;//Original added 1e-100, use Zeps to be more precise.
|
trgL = std::pow(Zeps(L1), m_Power) * m_Scale;//Original added 1e-100, use Zeps to be more precise.
|
||||||
//Rotate.
|
//Rotate.
|
||||||
Vx = DXo * m_RotCos + DYo * m_RotSin;
|
v.x = DXo * m_RotCos + DYo * m_RotSin;
|
||||||
Vy = -DXo * m_RotSin + DYo * m_RotCos;
|
v.y = -DXo * m_RotSin + DYo * m_RotCos;
|
||||||
//Measure voronoi distance again.
|
//Measure voronoi distance again.
|
||||||
U.x = Vx + P[0].x;
|
u = v + P[0];
|
||||||
U.y = Vy + P[0].y;
|
L2 = m_VarFuncs->Voronoi(&P[0], 7, 0, u);
|
||||||
L2 = Voronoi(&P[0], 7, 0, U);
|
|
||||||
//Scale to meet target size . . . adjust according to how close
|
//Scale to meet target size . . . adjust according to how close
|
||||||
//we are to the edge.
|
//we are to the edge.
|
||||||
//Code here attempts to remove the "rosette" effect caused by
|
//Code here attempts to remove the "rosette" effect caused by
|
||||||
@ -125,14 +124,12 @@ public:
|
|||||||
R = ((trgL / L1) * (T(0.8) - L) + (trgL / L2) * (L - T(0.5))) / T(0.3);
|
R = ((trgL / L1) * (T(0.8) - L) + (trgL / L2) * (L - T(0.5))) / T(0.3);
|
||||||
}
|
}
|
||||||
|
|
||||||
Vx *= R;
|
v *= R;
|
||||||
Vy *= R;
|
|
||||||
//Add cell center co-ordinates back in.
|
//Add cell center co-ordinates back in.
|
||||||
Vx += P[0].x;
|
v += P[0];
|
||||||
Vy += P[0].y;
|
|
||||||
//Finally add values in.
|
//Finally add values in.
|
||||||
helper.Out.x = m_Weight * Vx;
|
helper.Out.x = m_Weight * v.x;
|
||||||
helper.Out.y = m_Weight * Vy;
|
helper.Out.y = m_Weight * v.y;
|
||||||
helper.Out.z = (m_VarType == VARTYPE_REG) ? 0 : helper.In.z;
|
helper.Out.z = (m_VarType == VARTYPE_REG) ? 0 : helper.In.z;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -242,7 +239,7 @@ public:
|
|||||||
|
|
||||||
virtual vector<string> OpenCLGlobalFuncNames() const override
|
virtual vector<string> OpenCLGlobalFuncNames() const override
|
||||||
{
|
{
|
||||||
return vector<string> { "Zeps" };
|
return vector<string> { "Zeps", "Sqr", "Vratio", "Closest", "Vratio" };
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual string OpenCLFuncsString() const override
|
virtual string OpenCLFuncsString() const override
|
||||||
@ -257,60 +254,7 @@ public:
|
|||||||
"constant real_t AYoXh = (real_t)(1.7320508075688772935 / 2.0);\n"
|
"constant real_t AYoXh = (real_t)(1.7320508075688772935 / 2.0);\n"
|
||||||
"constant real_t AYoYh = (real_t)(1.7320508075688772935 / 2.0);\n"
|
"constant real_t AYoYh = (real_t)(1.7320508075688772935 / 2.0);\n"
|
||||||
"constant real2 offset[4] = { { 0, 0 }, { 0, 1 }, { 1, 0 }, { 1, 1 } };\n"
|
"constant real2 offset[4] = { { 0, 0 }, { 0, 1 }, { 1, 0 }, { 1, 1 } };\n"
|
||||||
"\n"
|
"\n";
|
||||||
"real_t Vratio(real2* p, real2* q, real2* u)\n"
|
|
||||||
"{\n"
|
|
||||||
" real_t pmQx, pmQy;\n"
|
|
||||||
"\n"
|
|
||||||
" pmQx = (*p).x - (*q).x;\n"
|
|
||||||
" pmQy = (*p).y - (*q).y;\n"
|
|
||||||
"\n"
|
|
||||||
" if (pmQx == 0 && pmQy == 0)\n"
|
|
||||||
" return 1.0;\n"
|
|
||||||
"\n"
|
|
||||||
" return 2 * (((*u).x - (*q).x) * pmQx + ((*u).y - (*q).y) * pmQy) / (pmQx * pmQx + pmQy * pmQy);\n"
|
|
||||||
"}\n"
|
|
||||||
"\n"
|
|
||||||
"int Closest(real2* p, int n, real2* u)\n"
|
|
||||||
"{\n"
|
|
||||||
" real_t d2;\n"
|
|
||||||
" real_t d2min = TMAX;\n"
|
|
||||||
" int i, j;\n"
|
|
||||||
"\n"
|
|
||||||
" for (i = 0; i < n; i++)\n"
|
|
||||||
" {\n"
|
|
||||||
" d2 = (p[i].x - (*u).x) * (p[i].x - (*u).x) + (p[i].y - (*u).y) * (p[i].y - (*u).y);\n"
|
|
||||||
"\n"
|
|
||||||
" if (d2 < d2min)\n"
|
|
||||||
" {\n"
|
|
||||||
" d2min = d2;\n"
|
|
||||||
" j = i;\n"
|
|
||||||
" }\n"
|
|
||||||
" }\n"
|
|
||||||
"\n"
|
|
||||||
" return j;\n"
|
|
||||||
"}\n"
|
|
||||||
"\n"
|
|
||||||
"real_t Voronoi(real2* p, int n, int q, real2* u)\n"
|
|
||||||
"{\n"
|
|
||||||
" real_t ratio;\n"
|
|
||||||
" real_t ratiomax = TLOW;\n"
|
|
||||||
" int i;\n"
|
|
||||||
"\n"
|
|
||||||
" for (i = 0; i < n; i++)\n"
|
|
||||||
" {\n"
|
|
||||||
" if (i != q)\n"
|
|
||||||
" {\n"
|
|
||||||
" ratio = Vratio(&p[i], &p[q], u);\n"
|
|
||||||
"\n"
|
|
||||||
" if (ratio > ratiomax)\n"
|
|
||||||
" ratiomax = ratio;\n"
|
|
||||||
" }\n"
|
|
||||||
" }\n"
|
|
||||||
"\n"
|
|
||||||
" return ratiomax;\n"
|
|
||||||
"}\n"
|
|
||||||
;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void Precalc() override
|
virtual void Precalc() override
|
||||||
@ -330,67 +274,17 @@ protected:
|
|||||||
m_Params.push_back(ParamWithName<T>(&m_Scale, prefix + "hexes_scale", 1));
|
m_Params.push_back(ParamWithName<T>(&m_Scale, prefix + "hexes_scale", 1));
|
||||||
m_Params.push_back(ParamWithName<T>(true, &m_RotSin, prefix + "hexes_rotsin"));//Precalc.
|
m_Params.push_back(ParamWithName<T>(true, &m_RotSin, prefix + "hexes_rotsin"));//Precalc.
|
||||||
m_Params.push_back(ParamWithName<T>(true, &m_RotCos, prefix + "hexes_rotcos"));
|
m_Params.push_back(ParamWithName<T>(true, &m_RotCos, prefix + "hexes_rotcos"));
|
||||||
|
m_VarFuncs = VarFuncs<T>::Instance();
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static T Vratio(v2T& p, v2T& q, v2T& u)
|
|
||||||
{
|
|
||||||
T pmQx, pmQy;
|
|
||||||
pmQx = p.x - q.x;
|
|
||||||
pmQy = p.y - q.y;
|
|
||||||
|
|
||||||
if (pmQx == 0 && pmQy == 0)
|
|
||||||
return 1.0;
|
|
||||||
|
|
||||||
return 2 * ((u.x - q.x) * pmQx + (u.y - q.y) * pmQy) / (pmQx * pmQx + pmQy * pmQy);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int Closest(v2T* p, int n, v2T& u)
|
|
||||||
{
|
|
||||||
T d2;
|
|
||||||
T d2min = TMAX;
|
|
||||||
int i, j;
|
|
||||||
|
|
||||||
for (i = 0; i < n; i++)
|
|
||||||
{
|
|
||||||
d2 = (p[i].x - u.x) * (p[i].x - u.x) + (p[i].y - u.y) * (p[i].y - u.y);
|
|
||||||
|
|
||||||
if (d2 < d2min)
|
|
||||||
{
|
|
||||||
d2min = d2;
|
|
||||||
j = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return j;
|
|
||||||
}
|
|
||||||
|
|
||||||
static T Voronoi(v2T* p, int n, int q, v2T& u)
|
|
||||||
{
|
|
||||||
T ratio;
|
|
||||||
T ratiomax = TLOW;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; i < n; i++)
|
|
||||||
{
|
|
||||||
if (i != q)
|
|
||||||
{
|
|
||||||
ratio = Vratio(p[i], p[q], u);
|
|
||||||
|
|
||||||
if (ratio > ratiomax)
|
|
||||||
ratiomax = ratio;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return ratiomax;
|
|
||||||
}
|
|
||||||
|
|
||||||
T m_Cellsize;
|
T m_Cellsize;
|
||||||
T m_Power;
|
T m_Power;
|
||||||
T m_Rotate;
|
T m_Rotate;
|
||||||
T m_Scale;
|
T m_Scale;
|
||||||
T m_RotSin;//Precalc.
|
T m_RotSin;//Precalc.
|
||||||
T m_RotCos;
|
T m_RotCos;
|
||||||
|
std::shared_ptr<VarFuncs<T>> m_VarFuncs;
|
||||||
};
|
};
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -2210,7 +2104,7 @@ public:
|
|||||||
"\t\t{\n"
|
"\t\t{\n"
|
||||||
"\t\t while (angXY > " << angStrip2 << ")\n"
|
"\t\t while (angXY > " << angStrip2 << ")\n"
|
||||||
"\t\t {\n"
|
"\t\t {\n"
|
||||||
"\t\t angXY -= " << angStrip2 << "; \n"
|
"\t\t angXY -= " << angStrip2 << ";\n"
|
||||||
"\t\t }\n"
|
"\t\t }\n"
|
||||||
"\t\t\n"
|
"\t\t\n"
|
||||||
"\t\t if (" << invStripes << " == 0)\n"
|
"\t\t if (" << invStripes << " == 0)\n"
|
||||||
@ -2282,7 +2176,7 @@ public:
|
|||||||
"\t\t\n"
|
"\t\t\n"
|
||||||
"\t\tif ((x != 0) || (y != 0))\n"
|
"\t\tif ((x != 0) || (y != 0))\n"
|
||||||
"\t\t{\n"
|
"\t\t{\n"
|
||||||
"\t\t z = 2 / pow(rad, " << exponentZ << ") - 1; \n"
|
"\t\t z = 2 / pow(rad, " << exponentZ << ") - 1;\n"
|
||||||
"\t\t\n"
|
"\t\t\n"
|
||||||
"\t\t if (" << exponentZ << " <= 2)\n"
|
"\t\t if (" << exponentZ << " <= 2)\n"
|
||||||
"\t\t angZ = M_PI - acos((z / (Sqr(x) + Sqr(y) + Sqr(z))));\n"
|
"\t\t angZ = M_PI - acos((z / (Sqr(x) + Sqr(y) + Sqr(z))));\n"
|
||||||
@ -2309,7 +2203,7 @@ public:
|
|||||||
"\t\t }\n"
|
"\t\t }\n"
|
||||||
"\t\t else\n"
|
"\t\t else\n"
|
||||||
"\t\t {\n"
|
"\t\t {\n"
|
||||||
"\t\t angTmp = (M_PI - angZ) / " << angHoleComp << " * " << angHoleTemp << " - M_PI_2; \n"
|
"\t\t angTmp = (M_PI - angZ) / " << angHoleComp << " * " << angHoleTemp << " - M_PI_2;\n"
|
||||||
"\t\t angZ -= M_PI_2;\n"
|
"\t\t angZ -= M_PI_2;\n"
|
||||||
"\t\t fac = cos(angTmp) / cos(angZ);\n"
|
"\t\t fac = cos(angTmp) / cos(angZ);\n"
|
||||||
"\t\t x = x * fac;\n"
|
"\t\t x = x * fac;\n"
|
||||||
@ -2330,7 +2224,7 @@ public:
|
|||||||
"\t\t }\n"
|
"\t\t }\n"
|
||||||
"\t\t else\n"
|
"\t\t else\n"
|
||||||
"\t\t {\n"
|
"\t\t {\n"
|
||||||
"\t\t angTmp = M_PI - angZ / " << angHoleComp << " * " << angHoleTemp << " - M_PI_2; \n"
|
"\t\t angTmp = M_PI - angZ / " << angHoleComp << " * " << angHoleTemp << " - M_PI_2;\n"
|
||||||
"\t\t angZ -= M_PI_2;\n"
|
"\t\t angZ -= M_PI_2;\n"
|
||||||
"\t\t fac = cos(angTmp) / cos(angZ);\n"
|
"\t\t fac = cos(angTmp) / cos(angZ);\n"
|
||||||
"\t\t x = x * fac;\n"
|
"\t\t x = x * fac;\n"
|
||||||
@ -2354,7 +2248,7 @@ public:
|
|||||||
"\t\t {\n"
|
"\t\t {\n"
|
||||||
"\t\t if (angZ > " << angHoleTemp << ")\n"
|
"\t\t if (angZ > " << angHoleTemp << ")\n"
|
||||||
"\t\t {\n"
|
"\t\t {\n"
|
||||||
"\t\t angTmp = (M_PI - angZ) / " << angHoleComp << " * (M_PI - 2 * " << angHoleComp << ") + " << angHoleComp << " - M_PI_2; \n"
|
"\t\t angTmp = (M_PI - angZ) / " << angHoleComp << " * (M_PI - 2 * " << angHoleComp << ") + " << angHoleComp << " - M_PI_2;\n"
|
||||||
"\t\t }\n"
|
"\t\t }\n"
|
||||||
"\t\t else\n"
|
"\t\t else\n"
|
||||||
"\t\t {\n"
|
"\t\t {\n"
|
||||||
@ -2903,7 +2797,7 @@ public:
|
|||||||
<< "\t\treal_t Vx, Vy, radius, theta;\n"
|
<< "\t\treal_t Vx, Vy, radius, theta;\n"
|
||||||
<< "\t\treal_t thetaFactor;\n"
|
<< "\t\treal_t thetaFactor;\n"
|
||||||
<< "\t\treal_t s, c, mu;\n"
|
<< "\t\treal_t s, c, mu;\n"
|
||||||
<< "\t\tint synthMode = (int)" << synthMode << "; \n"
|
<< "\t\tint synthMode = (int)" << synthMode << ";\n"
|
||||||
<< "\t\tSynthStruct synth;\n"
|
<< "\t\tSynthStruct synth;\n"
|
||||||
<< "\n"
|
<< "\n"
|
||||||
<< "\t\tsynth.SynthA = " << synthA << ";\n"
|
<< "\t\tsynth.SynthA = " << synthA << ";\n"
|
||||||
@ -3736,10 +3630,244 @@ private:
|
|||||||
T m_SynthFLayer;
|
T m_SynthFLayer;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define CACHE_NUM 10
|
||||||
|
#define CACHE_WIDTH 21
|
||||||
|
#define VORONOI_MAXPOINTS 10
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// crackle.
|
||||||
|
/// </summary>
|
||||||
|
template <typename T>
|
||||||
|
class EMBER_API CrackleVariation : public ParametricVariation<T>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CrackleVariation(T weight = 1.0) : ParametricVariation<T>("crackle", VAR_CRACKLE, weight)
|
||||||
|
{
|
||||||
|
Init();
|
||||||
|
}
|
||||||
|
|
||||||
|
PARVARCOPY(CrackleVariation)
|
||||||
|
|
||||||
|
virtual void Func(IteratorHelper<T>& helper, Point<T>& outPoint, QTIsaac<ISAAC_SIZE, ISAAC_INT>& rand) override
|
||||||
|
{
|
||||||
|
int di, dj;
|
||||||
|
int i = 0;
|
||||||
|
T l, r, trgL;
|
||||||
|
v2T u, dO;
|
||||||
|
glm::ivec2 cv;
|
||||||
|
v2T p[VORONOI_MAXPOINTS];
|
||||||
|
|
||||||
|
if (m_CellSize == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
T blurr = (rand.Frand01<T>() + rand.Frand01<T>()) / 2 + (rand.Frand01<T>() - T(0.5)) / 4;
|
||||||
|
T theta = M_2PI * rand.Frand01<T>();
|
||||||
|
u.x = blurr * std::sin(theta);
|
||||||
|
u.y = blurr * std::cos(theta);
|
||||||
|
cv.x = int(std::floor(u.x / m_HalfCellSize));
|
||||||
|
cv.y = int(std::floor(u.y / m_HalfCellSize));
|
||||||
|
|
||||||
|
for (di = -1; di < 2; di++)
|
||||||
|
{
|
||||||
|
for (dj = -1; dj < 2; dj++)
|
||||||
|
{
|
||||||
|
CachedPosition(m_C, cv.x + di, cv.y + dj, m_Z, m_HalfCellSize, m_Distort, p[i]);
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int q = m_VarFuncs->Closest(p, 9, u);
|
||||||
|
glm::ivec2 offset[9] = { { -1, -1 }, { -1, 0 }, { -1, 1 },
|
||||||
|
{ 0, -1 }, { 0, 0 }, { 0, 1 },
|
||||||
|
{ 1, -1 }, { 1, 0 }, { 1, 1 }
|
||||||
|
};
|
||||||
|
cv += offset[q];
|
||||||
|
i = 0;
|
||||||
|
|
||||||
|
for (di = -1; di < 2; di++)
|
||||||
|
{
|
||||||
|
for (dj = -1; dj < 2; dj++)
|
||||||
|
{
|
||||||
|
CachedPosition(m_C, cv.x + di, cv.y + dj, m_Z, m_HalfCellSize, m_Distort, p[i]);
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
l = m_VarFuncs->Voronoi(p, 9, 4, u);
|
||||||
|
dO = u - p[4];
|
||||||
|
trgL = std::pow(Zeps<T>(l), m_Power) * m_Scale;
|
||||||
|
r = trgL / Zeps<T>(l);
|
||||||
|
dO *= r;
|
||||||
|
dO += p[4];
|
||||||
|
helper.Out.x = m_Weight * dO.x;
|
||||||
|
helper.Out.y = m_Weight * dO.y;
|
||||||
|
helper.Out.z = (m_VarType == VARTYPE_REG) ? 0 : helper.In.z;
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual vector<string> OpenCLGlobalFuncNames() const override
|
||||||
|
{
|
||||||
|
return vector<string> { "Zeps", "Sqr", "Closest", "Vratio", "Voronoi", "SimplexNoise3D" };
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual vector<string> OpenCLGlobalDataNames() const override
|
||||||
|
{
|
||||||
|
return vector<string> { "NOISE_INDEX", "NOISE_POINTS" };
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual string OpenCLFuncsString() const override
|
||||||
|
{
|
||||||
|
//CPU version uses a cache of points if the abs() values are <= 10. However, this crashes on Nvidia GPUs.
|
||||||
|
//The problem was traced to the usage of the cache array.
|
||||||
|
//No possible solution was found, so it is unused here.
|
||||||
|
//The full calculation is recomputed for every point.
|
||||||
|
return
|
||||||
|
"static void Position(__global real_t* p, __global real3* grad, int x, int y, real_t z, real_t s, real_t d, real2* v)\n"
|
||||||
|
"{\n"
|
||||||
|
" real3 e, f;\n"
|
||||||
|
" e.x = x * 2.5;\n"
|
||||||
|
" e.y = y * 2.5;\n"
|
||||||
|
" e.z = z * 2.5;\n"
|
||||||
|
" f.x = y * 2.5 + 30.2;\n"
|
||||||
|
" f.y = x * 2.5 - 12.1;\n"
|
||||||
|
" f.z = z * 2.5 + 19.8;\n"
|
||||||
|
" (*v).x = (x + d * SimplexNoise3D(&e, p, grad)) * s;\n"
|
||||||
|
" (*v).y = (y + d * SimplexNoise3D(&f, p, grad)) * s;\n"
|
||||||
|
"}\n"
|
||||||
|
"\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual string OpenCLString() const override
|
||||||
|
{
|
||||||
|
ostringstream ss, ss2;
|
||||||
|
intmax_t i = 0, varIndex = IndexInXform();
|
||||||
|
ss2 << "_" << XformIndexInEmber();
|
||||||
|
string index = ss2.str() + "]";
|
||||||
|
string cellSize = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
|
||||||
|
string power = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
|
||||||
|
string distort = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
|
||||||
|
string scale = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
|
||||||
|
string z = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
|
||||||
|
string halfCellSize = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
|
||||||
|
ss << "\t{\n"
|
||||||
|
<< "\t\tint di = -1, dj = -1;\n"
|
||||||
|
<< "\t\tint i = 0;\n"
|
||||||
|
<< "\t\treal_t l, r, trgL;\n"
|
||||||
|
<< "\t\treal2 u, dO;\n"
|
||||||
|
<< "\t\tint2 cv;\n"
|
||||||
|
<< "\t\treal2 p[" << VORONOI_MAXPOINTS << "];\n"
|
||||||
|
<< "\n"
|
||||||
|
<< "\t\tif (" << cellSize << " == 0)\n"
|
||||||
|
<< "\t\t return;\n"
|
||||||
|
<< "\n"
|
||||||
|
<< "\t\treal_t blurr = (MwcNext01(mwc) + MwcNext01(mwc)) / 2 + (MwcNext01(mwc) - 0.5) / 4;\n"
|
||||||
|
<< "\t\treal_t theta = M_2PI * MwcNext01(mwc);\n"
|
||||||
|
<< "\t\tu.x = blurr * sin(theta);\n"
|
||||||
|
<< "\t\tu.y = blurr * cos(theta);\n"
|
||||||
|
<< "\t\tcv.x = (int)floor(u.x / " << halfCellSize << ");\n"
|
||||||
|
<< "\t\tcv.y = (int)floor(u.y / " << halfCellSize << ");\n"
|
||||||
|
<< "\n"
|
||||||
|
<< "\t\tfor (di = -1; di < 2; di++)\n"
|
||||||
|
<< "\t\t{\n"
|
||||||
|
<< "\t\t for (dj = -1; dj < 2; dj++)\n"
|
||||||
|
<< "\t\t {\n"
|
||||||
|
<< "\t\t Position(globalShared + NOISE_INDEX, (__global real3*)(globalShared + NOISE_POINTS), cv.x + di, cv.y + dj, " << z << ", " << halfCellSize << ", " << distort << ", &p[i]);\n"
|
||||||
|
<< "\t\t i++;\n"
|
||||||
|
<< "\t\t }\n"
|
||||||
|
<< "\t\t}\n"
|
||||||
|
<< "\n"
|
||||||
|
<< "\t\tint q = Closest(p, 9, &u);\n"
|
||||||
|
<< "\t\tint2 offset[9] = { { -1, -1 }, { -1, 0 }, { -1, 1 }, \n"
|
||||||
|
<< "\t\t{ 0, -1 }, { 0, 0 }, { 0, 1 },\n"
|
||||||
|
<< "\t\t{ 1, -1 }, { 1, 0 }, { 1, 1 } };\n"
|
||||||
|
<< "\t\tcv += offset[q];\n"
|
||||||
|
<< "\t\ti = 0;\n"
|
||||||
|
<< "\n"
|
||||||
|
<< "\t\tfor (di = -1; di < 2; di++)\n"
|
||||||
|
<< "\t\t{\n"
|
||||||
|
<< "\t\t for (dj = -1; dj < 2; dj++)\n"
|
||||||
|
<< "\t\t {\n"
|
||||||
|
<< "\t\t Position(globalShared + NOISE_INDEX, (__global real3*)(globalShared + NOISE_POINTS), cv.x + di, cv.y + dj, " << z << ", " << halfCellSize << ", " << distort << ", &p[i]);\n"
|
||||||
|
<< "\t\t i++;\n"
|
||||||
|
<< "\t\t }\n"
|
||||||
|
<< "\t\t}\n"
|
||||||
|
<< "\n"
|
||||||
|
<< "\t\tl = Voronoi(p, 9, 4, &u);\n"
|
||||||
|
<< "\t\tdO = u - p[4];\n"
|
||||||
|
<< "\t\ttrgL = pow(Zeps(l), " << power << ") * " << scale << ";\n"
|
||||||
|
<< "\t\tr = trgL / Zeps(l);\n"
|
||||||
|
<< "\t\tdO *= r;\n"
|
||||||
|
<< "\t\tdO += p[4];\n"
|
||||||
|
<< "\t\tvOut.x = xform->m_VariationWeights[" << varIndex << "] * dO.x;\n"
|
||||||
|
<< "\t\tvOut.y = xform->m_VariationWeights[" << varIndex << "] * dO.y;\n"
|
||||||
|
<< "\t\tvOut.z = " << ((m_VarType == VARTYPE_REG) ? "0" : "vIn.z") << ";\n"
|
||||||
|
<< "\t}\n";
|
||||||
|
return ss.str();
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void Precalc() override
|
||||||
|
{
|
||||||
|
int x, y;
|
||||||
|
m_HalfCellSize = Zeps<T>(m_CellSize / 2);
|
||||||
|
|
||||||
|
for (x = -CACHE_NUM; x <= CACHE_NUM; x++)
|
||||||
|
for (y = -CACHE_NUM; y <= CACHE_NUM; y++)
|
||||||
|
Position(x, y, m_Z, m_HalfCellSize, m_Distort, m_C[x + CACHE_NUM][y + CACHE_NUM]);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void Init()
|
||||||
|
{
|
||||||
|
string prefix = Prefix();
|
||||||
|
m_VarFuncs = VarFuncs<T>::Instance();
|
||||||
|
m_Params.clear();
|
||||||
|
m_Params.reserve(8);
|
||||||
|
m_Params.push_back(ParamWithName<T>(&m_CellSize, prefix + "crackle_cellsize", 1));
|
||||||
|
m_Params.push_back(ParamWithName<T>(&m_Power, prefix + "crackle_power", T(0.2)));
|
||||||
|
m_Params.push_back(ParamWithName<T>(&m_Distort, prefix + "crackle_distort"));
|
||||||
|
m_Params.push_back(ParamWithName<T>(&m_Scale, prefix + "crackle_scale", 1));
|
||||||
|
m_Params.push_back(ParamWithName<T>(&m_Z, prefix + "crackle_z"));
|
||||||
|
m_Params.push_back(ParamWithName<T>(true, &m_HalfCellSize, prefix + "crackle_half_cellsize"));
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
void Position(int x, int y, T z, T s, T d, v2T& v)
|
||||||
|
{
|
||||||
|
v3T e, f;
|
||||||
|
// Values here are arbitrary, chosen simply to be far enough apart so they do not correlate
|
||||||
|
e.x = x * T(2.5);
|
||||||
|
e.y = y * T(2.5);
|
||||||
|
e.z = z * T(2.5);
|
||||||
|
// Cross-over between x and y is intentional
|
||||||
|
f.x = y * T(2.5) + T(30.2);
|
||||||
|
f.y = x * T(2.5) - T(12.1);
|
||||||
|
f.z = z * T(2.5) + T(19.8);
|
||||||
|
v.x = (x + d * m_VarFuncs->SimplexNoise3D(e)) * s;
|
||||||
|
v.y = (y + d * m_VarFuncs->SimplexNoise3D(f)) * s;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CachedPosition(v2T cache[CACHE_WIDTH][CACHE_WIDTH], int x, int y, T z, T s, T d, v2T& v)
|
||||||
|
{
|
||||||
|
if (std::abs(x) <= CACHE_NUM && std::abs(y) <= CACHE_NUM)
|
||||||
|
v = cache[x + CACHE_NUM][y + CACHE_NUM];
|
||||||
|
else
|
||||||
|
Position(x, y, z, s, d, v);
|
||||||
|
}
|
||||||
|
|
||||||
|
T m_CellSize;
|
||||||
|
T m_Power;
|
||||||
|
T m_Distort;
|
||||||
|
T m_Scale;
|
||||||
|
T m_Z;
|
||||||
|
T m_HalfCellSize;//Precalc
|
||||||
|
v2T m_C[CACHE_WIDTH][CACHE_WIDTH];//Not kept as a precalc because it crashes Nvidia GPUs.
|
||||||
|
std::shared_ptr<VarFuncs<T>> m_VarFuncs;
|
||||||
|
};
|
||||||
|
|
||||||
MAKEPREPOSTPARVAR(Hexes, hexes, HEXES)
|
MAKEPREPOSTPARVAR(Hexes, hexes, HEXES)
|
||||||
MAKEPREPOSTPARVAR(Nblur, nBlur, NBLUR)
|
MAKEPREPOSTPARVAR(Nblur, nBlur, NBLUR)
|
||||||
MAKEPREPOSTPARVAR(Octapol, octapol, OCTAPOL)
|
MAKEPREPOSTPARVAR(Octapol, octapol, OCTAPOL)
|
||||||
MAKEPREPOSTPARVAR(Crob, crob, CROB)
|
MAKEPREPOSTPARVAR(Crob, crob, CROB)
|
||||||
MAKEPREPOSTPARVAR(BubbleT3D, bubbleT3D, BUBBLET3D)
|
MAKEPREPOSTPARVAR(BubbleT3D, bubbleT3D, BUBBLET3D)
|
||||||
MAKEPREPOSTPARVAR(Synth, synth, SYNTH)
|
MAKEPREPOSTPARVAR(Synth, synth, SYNTH)
|
||||||
|
MAKEPREPOSTPARVAR(Crackle, crackle, CRACKLE)
|
||||||
}
|
}
|
||||||
|
@ -24,11 +24,9 @@ public:
|
|||||||
T r = helper.m_PrecalcSumSquares;
|
T r = helper.m_PrecalcSumSquares;
|
||||||
T r4_1 = Zeps(r / 4 + 1);
|
T r4_1 = Zeps(r / 4 + 1);
|
||||||
r4_1 = m_Weight / r4_1;
|
r4_1 = m_Weight / r4_1;
|
||||||
|
|
||||||
helper.Out.x = r4_1 * helper.In.x;
|
helper.Out.x = r4_1 * helper.In.x;
|
||||||
helper.Out.y = r4_1 * helper.In.y;
|
helper.Out.y = r4_1 * helper.In.y;
|
||||||
helper.Out.z = m_Weight * (2 / r4_1 - 1);
|
helper.Out.z = m_Weight * (2 / r4_1 - 1);
|
||||||
|
|
||||||
T sumX, sumY;
|
T sumX, sumY;
|
||||||
|
|
||||||
if (m_VarType == VARTYPE_PRE)
|
if (m_VarType == VARTYPE_PRE)
|
||||||
@ -44,7 +42,6 @@ public:
|
|||||||
|
|
||||||
T tempX = helper.Out.x + sumX;
|
T tempX = helper.Out.x + sumX;
|
||||||
T tempY = helper.Out.y + sumY;
|
T tempY = helper.Out.y + sumY;
|
||||||
|
|
||||||
outPoint.m_ColorX = fmod(fabs(m_Bdcs * (Sqr<T>(tempX + m_CenterX) + Sqr<T>(tempY + m_CenterY))), T(1.0));
|
outPoint.m_ColorX = fmod(fabs(m_Bdcs * (Sqr<T>(tempX + m_CenterX) + Sqr<T>(tempY + m_CenterY))), T(1.0));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -58,7 +55,6 @@ public:
|
|||||||
string centerX = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
|
string centerX = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
|
||||||
string centerY = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
|
string centerY = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
|
||||||
string bdcs = "parVars[" + ToUpper(m_Params[i++].Name()) + index;//Precalc.
|
string bdcs = "parVars[" + ToUpper(m_Params[i++].Name()) + index;//Precalc.
|
||||||
|
|
||||||
ss << "\t{\n"
|
ss << "\t{\n"
|
||||||
<< "\t\treal_t r = precalcSumSquares;\n"
|
<< "\t\treal_t r = precalcSumSquares;\n"
|
||||||
<< "\t\treal_t r4_1 = Zeps(r / 4 + 1);\n"
|
<< "\t\treal_t r4_1 = Zeps(r / 4 + 1);\n"
|
||||||
@ -89,7 +85,6 @@ public:
|
|||||||
<< "\n"
|
<< "\n"
|
||||||
<< "\t\toutPoint->m_ColorX = fmod(fabs(" << bdcs << " * (Sqr(tempX + " << centerX << ") + Sqr(tempY + " << centerY << "))), (real_t)(1.0));\n"
|
<< "\t\toutPoint->m_ColorX = fmod(fabs(" << bdcs << " * (Sqr(tempX + " << centerX << ") + Sqr(tempY + " << centerY << "))), (real_t)(1.0));\n"
|
||||||
<< "\t}\n";
|
<< "\t}\n";
|
||||||
|
|
||||||
return ss.str();
|
return ss.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -107,7 +102,6 @@ protected:
|
|||||||
void Init()
|
void Init()
|
||||||
{
|
{
|
||||||
string prefix = Prefix();
|
string prefix = Prefix();
|
||||||
|
|
||||||
m_Params.clear();
|
m_Params.clear();
|
||||||
m_Params.push_back(ParamWithName<T>(&m_CenterX, prefix + "dc_bubble_centerx"));//Params.
|
m_Params.push_back(ParamWithName<T>(&m_CenterX, prefix + "dc_bubble_centerx"));//Params.
|
||||||
m_Params.push_back(ParamWithName<T>(&m_CenterY, prefix + "dc_bubble_centery"));
|
m_Params.push_back(ParamWithName<T>(&m_CenterY, prefix + "dc_bubble_centery"));
|
||||||
@ -144,7 +138,6 @@ public:
|
|||||||
T y = helper.In.y + y0;
|
T y = helper.In.y + y0;
|
||||||
T x0_xor_y0 = T(x0 ^ y0);
|
T x0_xor_y0 = T(x0 ^ y0);
|
||||||
T h = -m_H + (1 - x0_xor_y0) * m_H;
|
T h = -m_H + (1 - x0_xor_y0) * m_H;
|
||||||
|
|
||||||
helper.Out.x = m_Weight * (m_Xform->m_Affine.A() * x + m_Xform->m_Affine.B() * y + m_Xform->m_Affine.E());
|
helper.Out.x = m_Weight * (m_Xform->m_Affine.A() * x + m_Xform->m_Affine.B() * y + m_Xform->m_Affine.E());
|
||||||
helper.Out.y = m_Weight * (m_Xform->m_Affine.C() * x + m_Xform->m_Affine.D() * y + m_Xform->m_Affine.F());
|
helper.Out.y = m_Weight * (m_Xform->m_Affine.C() * x + m_Xform->m_Affine.D() * y + m_Xform->m_Affine.F());
|
||||||
helper.Out.z = (m_VarType == VARTYPE_REG) ? 0 : helper.In.z;
|
helper.Out.z = (m_VarType == VARTYPE_REG) ? 0 : helper.In.z;
|
||||||
@ -159,7 +152,6 @@ public:
|
|||||||
string index = ss2.str();
|
string index = ss2.str();
|
||||||
string origin = "parVars[" + ToUpper(m_Params[i++].Name()) + index;//Params.
|
string origin = "parVars[" + ToUpper(m_Params[i++].Name()) + index;//Params.
|
||||||
string h = "parVars[" + ToUpper(m_Params[i++].Name()) + index;//Precalc.
|
string h = "parVars[" + ToUpper(m_Params[i++].Name()) + index;//Precalc.
|
||||||
|
|
||||||
ss << "\t{\n"
|
ss << "\t{\n"
|
||||||
<< "\t\tint x0 = (MwcNext(mwc) & 1) ? -1 : 1;\n"
|
<< "\t\tint x0 = (MwcNext(mwc) & 1) ? -1 : 1;\n"
|
||||||
<< "\t\tint y0 = (MwcNext(mwc) & 1) ? -1 : 1;\n"
|
<< "\t\tint y0 = (MwcNext(mwc) & 1) ? -1 : 1;\n"
|
||||||
@ -173,7 +165,6 @@ public:
|
|||||||
<< "\t\tvOut.z = " << ((m_VarType == VARTYPE_REG) ? "0" : "vIn.z") << ";\n"
|
<< "\t\tvOut.z = " << ((m_VarType == VARTYPE_REG) ? "0" : "vIn.z") << ";\n"
|
||||||
<< "\t\toutPoint->m_ColorX = fmod(fabs(outPoint->m_ColorX * (real_t)(0.5) * (1 + h) + x0_xor_y0 * (1 - h) * (real_t)(0.5)), (real_t)(1.0));\n"
|
<< "\t\toutPoint->m_ColorX = fmod(fabs(outPoint->m_ColorX * (real_t)(0.5) * (1 + h) + x0_xor_y0 * (1 - h) * (real_t)(0.5)), (real_t)(1.0));\n"
|
||||||
<< "\t}\n";
|
<< "\t}\n";
|
||||||
|
|
||||||
return ss.str();
|
return ss.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -186,7 +177,6 @@ protected:
|
|||||||
void Init()
|
void Init()
|
||||||
{
|
{
|
||||||
string prefix = Prefix();
|
string prefix = Prefix();
|
||||||
|
|
||||||
m_Params.clear();
|
m_Params.clear();
|
||||||
m_Params.push_back(ParamWithName<T>(&m_Origin, prefix + "dc_carpet_origin"));//Params.
|
m_Params.push_back(ParamWithName<T>(&m_Origin, prefix + "dc_carpet_origin"));//Params.
|
||||||
m_Params.push_back(ParamWithName<T>(true, &m_H, prefix + "dc_carpet_h"));//Precalc.
|
m_Params.push_back(ParamWithName<T>(true, &m_H, prefix + "dc_carpet_h"));//Precalc.
|
||||||
@ -232,6 +222,7 @@ public:
|
|||||||
outPoint.m_ColorX = m_ClampC2;
|
outPoint.m_ColorX = m_ClampC2;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 1:
|
case 1:
|
||||||
x = m_Weight * p;
|
x = m_Weight * p;
|
||||||
y = m_Weight * (j ? -1 : 1);
|
y = m_Weight * (j ? -1 : 1);
|
||||||
@ -243,6 +234,7 @@ public:
|
|||||||
outPoint.m_ColorX = m_ClampC4;
|
outPoint.m_ColorX = m_ClampC4;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 2:
|
case 2:
|
||||||
default:
|
default:
|
||||||
x = m_Weight * p;
|
x = m_Weight * p;
|
||||||
@ -283,7 +275,6 @@ public:
|
|||||||
string clampC4 = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
|
string clampC4 = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
|
||||||
string clampC5 = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
|
string clampC5 = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
|
||||||
string clampC6 = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
|
string clampC6 = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
|
||||||
|
|
||||||
ss << "\t{\n"
|
ss << "\t{\n"
|
||||||
<< "\t\treal_t x, y, z;\n"
|
<< "\t\treal_t x, y, z;\n"
|
||||||
<< "\t\treal_t p = 2 * MwcNext01(mwc) - 1;\n"
|
<< "\t\treal_t p = 2 * MwcNext01(mwc) - 1;\n"
|
||||||
@ -332,7 +323,6 @@ public:
|
|||||||
<< "\t\tvOut.y = y * " << cubeY << ";\n"
|
<< "\t\tvOut.y = y * " << cubeY << ";\n"
|
||||||
<< "\t\tvOut.z = z * " << cubeZ << ";\n"
|
<< "\t\tvOut.z = z * " << cubeZ << ";\n"
|
||||||
<< "\t}\n";
|
<< "\t}\n";
|
||||||
|
|
||||||
return ss.str();
|
return ss.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -350,7 +340,6 @@ protected:
|
|||||||
void Init()
|
void Init()
|
||||||
{
|
{
|
||||||
string prefix = Prefix();
|
string prefix = Prefix();
|
||||||
|
|
||||||
m_Params.clear();
|
m_Params.clear();
|
||||||
m_Params.push_back(ParamWithName<T>(&m_DcCubeC1, prefix + "dc_cube_c1"));//Params.
|
m_Params.push_back(ParamWithName<T>(&m_DcCubeC1, prefix + "dc_cube_c1"));//Params.
|
||||||
m_Params.push_back(ParamWithName<T>(&m_DcCubeC2, prefix + "dc_cube_c2"));
|
m_Params.push_back(ParamWithName<T>(&m_DcCubeC2, prefix + "dc_cube_c2"));
|
||||||
@ -408,11 +397,9 @@ public:
|
|||||||
T sr = std::sin(temp);
|
T sr = std::sin(temp);
|
||||||
T cr = std::cos(temp);
|
T cr = std::cos(temp);
|
||||||
T r = m_Blur * (rand.Frand01<T>() + rand.Frand01<T>() + rand.Frand01<T>() + rand.Frand01<T>() - 2);
|
T r = m_Blur * (rand.Frand01<T>() + rand.Frand01<T>() + rand.Frand01<T>() + rand.Frand01<T>() - 2);
|
||||||
|
|
||||||
helper.Out.x = m_Weight * std::sin(helper.In.x + r * sr) * m_X;
|
helper.Out.x = m_Weight * std::sin(helper.In.x + r * sr) * m_X;
|
||||||
helper.Out.y = r + helper.In.y * m_Y;
|
helper.Out.y = r + helper.In.y * m_Y;
|
||||||
helper.Out.z = m_Weight * std::cos(helper.In.x + r * cr);
|
helper.Out.z = m_Weight * std::cos(helper.In.x + r * cr);
|
||||||
|
|
||||||
T sumX, sumY;
|
T sumX, sumY;
|
||||||
|
|
||||||
if (m_VarType == VARTYPE_PRE)
|
if (m_VarType == VARTYPE_PRE)
|
||||||
@ -428,7 +415,6 @@ public:
|
|||||||
|
|
||||||
T tempX = helper.Out.x + sumX;
|
T tempX = helper.Out.x + sumX;
|
||||||
T tempY = helper.Out.y + sumY;
|
T tempY = helper.Out.y + sumY;
|
||||||
|
|
||||||
outPoint.m_ColorX = fmod(fabs(T(0.5) * (m_Ldcs * ((m_Cosa * tempX + m_Sina * tempY + m_Offset)) + 1)), T(1.0));
|
outPoint.m_ColorX = fmod(fabs(T(0.5) * (m_Ldcs * ((m_Cosa * tempX + m_Sina * tempY + m_Offset)) + 1)), T(1.0));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -448,7 +434,6 @@ public:
|
|||||||
string cosa = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
|
string cosa = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
|
||||||
string ldcs = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
|
string ldcs = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
|
||||||
string ldca = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
|
string ldca = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
|
||||||
|
|
||||||
ss << "\t{\n"
|
ss << "\t{\n"
|
||||||
<< "\t\treal_t temp = MwcNext(mwc) * M_2PI;\n"
|
<< "\t\treal_t temp = MwcNext(mwc) * M_2PI;\n"
|
||||||
<< "\t\treal_t sr = sin(temp);\n"
|
<< "\t\treal_t sr = sin(temp);\n"
|
||||||
@ -479,7 +464,6 @@ public:
|
|||||||
<< "\n"
|
<< "\n"
|
||||||
<< "\t\toutPoint->m_ColorX = fmod(fabs((real_t)(0.5) * (" << ldcs << " * ((" << cosa << " * tempX + " << sina << " * tempY + " << offset << ")) + (real_t)(1.0))), (real_t)(1.0));\n"
|
<< "\t\toutPoint->m_ColorX = fmod(fabs((real_t)(0.5) * (" << ldcs << " * ((" << cosa << " * tempX + " << sina << " * tempY + " << offset << ")) + (real_t)(1.0))), (real_t)(1.0));\n"
|
||||||
<< "\t}\n";
|
<< "\t}\n";
|
||||||
|
|
||||||
return ss.str();
|
return ss.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -494,7 +478,6 @@ protected:
|
|||||||
void Init()
|
void Init()
|
||||||
{
|
{
|
||||||
string prefix = Prefix();
|
string prefix = Prefix();
|
||||||
|
|
||||||
m_Params.clear();
|
m_Params.clear();
|
||||||
m_Params.push_back(ParamWithName<T>(&m_Offset, prefix + "dc_cylinder_offset"));//Params.
|
m_Params.push_back(ParamWithName<T>(&m_Offset, prefix + "dc_cylinder_offset"));//Params.
|
||||||
m_Params.push_back(ParamWithName<T>(&m_Angle, prefix + "dc_cylinder_angle"));//Original used a prefix of dc_cyl_, which is incompatible with Ember's design.
|
m_Params.push_back(ParamWithName<T>(&m_Angle, prefix + "dc_cylinder_angle"));//Original used a prefix of dc_cyl_, which is incompatible with Ember's design.
|
||||||
@ -613,7 +596,6 @@ public:
|
|||||||
{
|
{
|
||||||
ostringstream ss;
|
ostringstream ss;
|
||||||
intmax_t varIndex = IndexInXform();
|
intmax_t varIndex = IndexInXform();
|
||||||
|
|
||||||
ss << "\t{\n"
|
ss << "\t{\n"
|
||||||
<< "\t\treal_t x = LRint(vIn.x);\n"
|
<< "\t\treal_t x = LRint(vIn.x);\n"
|
||||||
<< "\t\treal_t y = LRint(vIn.y);\n"
|
<< "\t\treal_t y = LRint(vIn.y);\n"
|
||||||
@ -689,7 +671,6 @@ public:
|
|||||||
<< "\t\tvOut.z = xform->m_VariationWeights[" << varIndex << "] * vIn.z;\n"
|
<< "\t\tvOut.z = xform->m_VariationWeights[" << varIndex << "] * vIn.z;\n"
|
||||||
<< "\t\toutPoint->m_ColorX = fmod(c, (real_t)(1.0));\n"
|
<< "\t\toutPoint->m_ColorX = fmod(c, (real_t)(1.0));\n"
|
||||||
<< "\t}\n";
|
<< "\t}\n";
|
||||||
|
|
||||||
return ss.str();
|
return ss.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -719,7 +700,6 @@ public:
|
|||||||
helper.Out.x = m_Weight * helper.In.x;
|
helper.Out.x = m_Weight * helper.In.x;
|
||||||
helper.Out.y = m_Weight * helper.In.y;
|
helper.Out.y = m_Weight * helper.In.y;
|
||||||
helper.Out.z = m_Weight * helper.In.z;
|
helper.Out.z = m_Weight * helper.In.z;
|
||||||
|
|
||||||
T sumX, sumY;
|
T sumX, sumY;
|
||||||
|
|
||||||
if (m_VarType == VARTYPE_PRE)
|
if (m_VarType == VARTYPE_PRE)
|
||||||
@ -735,7 +715,6 @@ public:
|
|||||||
|
|
||||||
T tempX = helper.Out.x + sumX;
|
T tempX = helper.Out.x + sumX;
|
||||||
T tempY = helper.Out.y + sumY;
|
T tempY = helper.Out.y + sumY;
|
||||||
|
|
||||||
outPoint.m_ColorX = fmod(fabs(T(0.5) * (m_Ldcs * ((m_Cosa * tempX + m_Sina * tempY + m_Offset)) + T(1.0))), T(1.0));
|
outPoint.m_ColorX = fmod(fabs(T(0.5) * (m_Ldcs * ((m_Cosa * tempX + m_Sina * tempY + m_Offset)) + T(1.0))), T(1.0));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -752,7 +731,6 @@ public:
|
|||||||
string ldca = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
|
string ldca = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
|
||||||
string sina = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
|
string sina = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
|
||||||
string cosa = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
|
string cosa = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
|
||||||
|
|
||||||
ss << "\t{\n"
|
ss << "\t{\n"
|
||||||
<< "\t\tvOut.x = xform->m_VariationWeights[" << varIndex << "] * vIn.x;\n"
|
<< "\t\tvOut.x = xform->m_VariationWeights[" << varIndex << "] * vIn.x;\n"
|
||||||
<< "\t\tvOut.y = xform->m_VariationWeights[" << varIndex << "] * vIn.y;\n"
|
<< "\t\tvOut.y = xform->m_VariationWeights[" << varIndex << "] * vIn.y;\n"
|
||||||
@ -779,7 +757,6 @@ public:
|
|||||||
<< "\n"
|
<< "\n"
|
||||||
<< "\t\toutPoint->m_ColorX = fmod(fabs((real_t)(0.5) * (" << ldcs << " * ((" << cosa << " * tempX + " << sina << " * tempY + " << offset << ")) + (real_t)(1.0))), (real_t)(1.0));\n"
|
<< "\t\toutPoint->m_ColorX = fmod(fabs((real_t)(0.5) * (" << ldcs << " * ((" << cosa << " * tempX + " << sina << " * tempY + " << offset << ")) + (real_t)(1.0))), (real_t)(1.0));\n"
|
||||||
<< "\t}\n";
|
<< "\t}\n";
|
||||||
|
|
||||||
return ss.str();
|
return ss.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -794,7 +771,6 @@ protected:
|
|||||||
void Init()
|
void Init()
|
||||||
{
|
{
|
||||||
string prefix = Prefix();
|
string prefix = Prefix();
|
||||||
|
|
||||||
m_Params.clear();
|
m_Params.clear();
|
||||||
m_Params.push_back(ParamWithName<T>(&m_Offset, prefix + "dc_linear_offset"));//Params.
|
m_Params.push_back(ParamWithName<T>(&m_Offset, prefix + "dc_linear_offset"));//Params.
|
||||||
m_Params.push_back(ParamWithName<T>(&m_Angle, prefix + "dc_linear_angle"));
|
m_Params.push_back(ParamWithName<T>(&m_Angle, prefix + "dc_linear_angle"));
|
||||||
@ -837,19 +813,16 @@ public:
|
|||||||
yx = m_Xform->m_Affine.C() * -1, yy = m_Xform->m_Affine.D() * -1, // Y
|
yx = m_Xform->m_Affine.C() * -1, yy = m_Xform->m_Affine.D() * -1, // Y
|
||||||
ox = m_Xform->m_Affine.E(), oy = m_Xform->m_Affine.F(), // O
|
ox = m_Xform->m_Affine.E(), oy = m_Xform->m_Affine.F(), // O
|
||||||
px = helper.In.x - ox, py = helper.In.y - oy; // P
|
px = helper.In.x - ox, py = helper.In.y - oy; // P
|
||||||
|
|
||||||
// calculate dot products
|
// calculate dot products
|
||||||
const T dot00 = xx * xx + xy * xy; // X * X
|
const T dot00 = xx * xx + xy * xy; // X * X
|
||||||
const T dot01 = xx * yx + xy * yy; // X * Y
|
const T dot01 = xx * yx + xy * yy; // X * Y
|
||||||
const T dot02 = xx * px + xy * py; // X * P
|
const T dot02 = xx * px + xy * py; // X * P
|
||||||
const T dot11 = yx * yx + yy * yy; // Y * Y
|
const T dot11 = yx * yx + yy * yy; // Y * Y
|
||||||
const T dot12 = yx * px + yy * py; // Y * P
|
const T dot12 = yx * px + yy * py; // Y * P
|
||||||
|
|
||||||
// calculate barycentric coordinates
|
// calculate barycentric coordinates
|
||||||
const T denom = (dot00 * dot11 - dot01 * dot01);
|
const T denom = (dot00 * dot11 - dot01 * dot01);
|
||||||
const T num_u = (dot11 * dot02 - dot01 * dot12);
|
const T num_u = (dot11 * dot02 - dot01 * dot12);
|
||||||
const T num_v = (dot00 * dot12 - dot01 * dot02);
|
const T num_v = (dot00 * dot12 - dot01 * dot02);
|
||||||
|
|
||||||
// u, v must not be constant
|
// u, v must not be constant
|
||||||
T u = num_u / denom;
|
T u = num_u / denom;
|
||||||
T v = num_v / denom;
|
T v = num_v / denom;
|
||||||
@ -890,7 +863,6 @@ public:
|
|||||||
{
|
{
|
||||||
u = (u + rand.Frand01<T>() * m_A * f);
|
u = (u + rand.Frand01<T>() * m_A * f);
|
||||||
v = (v + rand.Frand01<T>() * m_A * f);
|
v = (v + rand.Frand01<T>() * m_A * f);
|
||||||
|
|
||||||
ClampRef<T>(u, -1, 1);
|
ClampRef<T>(u, -1, 1);
|
||||||
ClampRef<T>(v, -1, 1);
|
ClampRef<T>(v, -1, 1);
|
||||||
|
|
||||||
@ -925,7 +897,6 @@ public:
|
|||||||
string scatterArea = "parVars[" + ToUpper(m_Params[i++].Name()) + index;//Params.
|
string scatterArea = "parVars[" + ToUpper(m_Params[i++].Name()) + index;//Params.
|
||||||
string zeroEdges = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
|
string zeroEdges = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
|
||||||
string a = "parVars[" + ToUpper(m_Params[i++].Name()) + index;//Precalc.
|
string a = "parVars[" + ToUpper(m_Params[i++].Name()) + index;//Precalc.
|
||||||
|
|
||||||
ss << "\t{\n"
|
ss << "\t{\n"
|
||||||
<< "\t\tconst real_t\n"
|
<< "\t\tconst real_t\n"
|
||||||
<< "\t\txx = xform->m_A, xy = xform->m_B,\n"
|
<< "\t\txx = xform->m_A, xy = xform->m_B,\n"
|
||||||
@ -1003,7 +974,6 @@ public:
|
|||||||
<< "\t\tvOut.z = xform->m_VariationWeights[" << varIndex << "] * vIn.z;\n"
|
<< "\t\tvOut.z = xform->m_VariationWeights[" << varIndex << "] * vIn.z;\n"
|
||||||
<< "\t\toutPoint->m_ColorX = fmod(fabs(u + v), (real_t)(1.0));\n"
|
<< "\t\toutPoint->m_ColorX = fmod(fabs(u + v), (real_t)(1.0));\n"
|
||||||
<< "\t}\n";
|
<< "\t}\n";
|
||||||
|
|
||||||
return ss.str();
|
return ss.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1016,7 +986,6 @@ protected:
|
|||||||
void Init()
|
void Init()
|
||||||
{
|
{
|
||||||
string prefix = Prefix();
|
string prefix = Prefix();
|
||||||
|
|
||||||
m_Params.clear();
|
m_Params.clear();
|
||||||
m_Params.push_back(ParamWithName<T>(&m_ScatterArea, prefix + "dc_triangle_scatter_area", 0, REAL, -1, 1));//Params.
|
m_Params.push_back(ParamWithName<T>(&m_ScatterArea, prefix + "dc_triangle_scatter_area", 0, REAL, -1, 1));//Params.
|
||||||
m_Params.push_back(ParamWithName<T>(&m_ZeroEdges, prefix + "dc_triangle_zero_edges", 0, INTEGER, 0, 1));
|
m_Params.push_back(ParamWithName<T>(&m_ZeroEdges, prefix + "dc_triangle_zero_edges", 0, INTEGER, 0, 1));
|
||||||
@ -1075,7 +1044,6 @@ public:
|
|||||||
string x0_ = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
|
string x0_ = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
|
||||||
string x1_ = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
|
string x1_ = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
|
||||||
string x1_m_x0 = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
|
string x1_m_x0 = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
|
||||||
|
|
||||||
ss << "\t{\n"
|
ss << "\t{\n"
|
||||||
<< "\t\treal_t zf = " << factor << " * (outPoint->m_ColorX - " << x0_ << ") / " << x1_m_x0 << ";\n"
|
<< "\t\treal_t zf = " << factor << " * (outPoint->m_ColorX - " << x0_ << ") / " << x1_m_x0 << ";\n"
|
||||||
<< "\n"
|
<< "\n"
|
||||||
@ -1090,7 +1058,6 @@ public:
|
|||||||
<< "\t\telse\n"
|
<< "\t\telse\n"
|
||||||
<< "\t\t vOut.z = xform->m_VariationWeights[" << varIndex << "] * zf;\n"
|
<< "\t\t vOut.z = xform->m_VariationWeights[" << varIndex << "] * zf;\n"
|
||||||
<< "\t}\n";
|
<< "\t}\n";
|
||||||
|
|
||||||
return ss.str();
|
return ss.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1105,7 +1072,6 @@ protected:
|
|||||||
void Init()
|
void Init()
|
||||||
{
|
{
|
||||||
string prefix = Prefix();
|
string prefix = Prefix();
|
||||||
|
|
||||||
m_Params.clear();
|
m_Params.clear();
|
||||||
m_Params.push_back(ParamWithName<T>(&m_X0, prefix + "dc_ztransl_x0", 0, REAL, 0, 1));//Params.
|
m_Params.push_back(ParamWithName<T>(&m_X0, prefix + "dc_ztransl_x0", 0, REAL, 0, 1));//Params.
|
||||||
m_Params.push_back(ParamWithName<T>(&m_X1, prefix + "dc_ztransl_x1", 1, REAL, 0, 1));
|
m_Params.push_back(ParamWithName<T>(&m_X1, prefix + "dc_ztransl_x1", 1, REAL, 0, 1));
|
||||||
@ -1128,6 +1094,363 @@ private:
|
|||||||
T m_X1_m_x0;
|
T m_X1_m_x0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define SHAPE_SQUARE 0
|
||||||
|
#define SHAPE_DISC 1
|
||||||
|
#define SHAPE_BLUR 2
|
||||||
|
|
||||||
|
#define MAP_FLAT 0
|
||||||
|
#define MAP_SPHERICAL 1
|
||||||
|
#define MAP_HSPHERE 2
|
||||||
|
#define MAP_QSPHERE 3
|
||||||
|
#define MAP_BUBBLE 4
|
||||||
|
#define MAP_BUBBLE2 5
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// dc_perlin.
|
||||||
|
/// </summary>
|
||||||
|
template <typename T>
|
||||||
|
class EMBER_API DCPerlinVariation : public ParametricVariation <T>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
DCPerlinVariation(T weight = 1.0) : ParametricVariation<T>("dc_perlin", VAR_DC_PERLIN, weight)
|
||||||
|
{
|
||||||
|
Init();
|
||||||
|
}
|
||||||
|
|
||||||
|
PARVARCOPY(DCPerlinVariation)
|
||||||
|
|
||||||
|
virtual void Func(IteratorHelper<T>& helper, Point<T>& outPoint, QTIsaac<ISAAC_SIZE, ISAAC_INT>& rand) override
|
||||||
|
{
|
||||||
|
v3T v;
|
||||||
|
T vx, vy, col, r, theta, s, c, p, e;
|
||||||
|
int t = 0, iShape = int(m_Shape), iMap = int(m_Map), iOctaves = int(m_Octaves), iBailout = int(m_SelectBailout);
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
// Default edge value
|
||||||
|
e = 0;
|
||||||
|
|
||||||
|
// Assign vx, vy according to shape
|
||||||
|
switch (iShape)
|
||||||
|
{
|
||||||
|
case SHAPE_SQUARE:
|
||||||
|
vx = (1 + m_Edge) * (rand.Frand01<T>() - T(0.5));
|
||||||
|
vy = (1 + m_Edge) * (rand.Frand01<T>() - T(0.5));
|
||||||
|
r = SQR(vx) > SQR(vy) ? std::sqrt(SQR(vx)) : std::sqrt(SQR(vy));
|
||||||
|
|
||||||
|
if (r > 1 - m_Edge)
|
||||||
|
e = T(0.5) * (r - 1 + m_Edge) / m_Edge;
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SHAPE_DISC:
|
||||||
|
r = rand.Frand01<T>() + rand.Frand01<T>();
|
||||||
|
r = (r > 1) ? 2 - r : r;
|
||||||
|
r *= (1 + m_Edge);
|
||||||
|
|
||||||
|
if (r > 1 - m_Edge)
|
||||||
|
e = T(0.5) * (r - 1 + m_Edge) / m_Edge;
|
||||||
|
|
||||||
|
theta = rand.Frand01<T>() * M_2PI;
|
||||||
|
sincos(theta, &s, &c);
|
||||||
|
vx = T(0.5) * r * s;
|
||||||
|
vy = T(0.5) * r * c;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SHAPE_BLUR:
|
||||||
|
default:
|
||||||
|
r = (1 + m_Edge) * rand.Frand01<T>();
|
||||||
|
|
||||||
|
if (r > 1 - m_Edge)
|
||||||
|
e = T(0.5) * (r - 1 + m_Edge) / m_Edge;
|
||||||
|
|
||||||
|
theta = rand.Frand01<T>() * M_2PI;
|
||||||
|
sincos(theta, &s, &c);
|
||||||
|
vx = T(0.5) * r * s;
|
||||||
|
vy = T(0.5) * r * c;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Assign V for noise vector position according to map
|
||||||
|
switch (iMap)
|
||||||
|
{
|
||||||
|
case MAP_FLAT:
|
||||||
|
v.x = m_Scale * vx;
|
||||||
|
v.y = m_Scale * vy;
|
||||||
|
v.z = m_Scale * m_Z;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MAP_SPHERICAL:
|
||||||
|
r = 1 / Zeps<T>(SQR(vx) + SQR(vy));
|
||||||
|
v.x = m_Scale * vx * r;
|
||||||
|
v.y = m_Scale * vy * r;
|
||||||
|
v.z = m_Scale * m_Z;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MAP_HSPHERE:
|
||||||
|
r = 1 / (SQR(vx) + SQR(vy) + T(0.5));
|
||||||
|
v.x = m_Scale * vx * r;
|
||||||
|
v.y = m_Scale * vy * r;
|
||||||
|
v.z = m_Scale * m_Z;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MAP_QSPHERE:
|
||||||
|
r = 1 / (SQR(vx) + SQR(vy) + T(0.25));
|
||||||
|
v.x = m_Scale * vx * r;
|
||||||
|
v.y = m_Scale * vy * r;
|
||||||
|
v.z = m_Scale * m_Z;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MAP_BUBBLE:
|
||||||
|
r = T(0.25) - (SQR(vx) + SQR(vy));
|
||||||
|
|
||||||
|
if (r < 0)
|
||||||
|
r = std::sqrt(-r);
|
||||||
|
else
|
||||||
|
r = std::sqrt(r);
|
||||||
|
|
||||||
|
v.x = m_Scale * vx;
|
||||||
|
v.y = m_Scale * vy;
|
||||||
|
v.z = m_Scale * (r + m_Z);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MAP_BUBBLE2:
|
||||||
|
default:
|
||||||
|
r = T(0.25) - (SQR(vx) + SQR(vy));
|
||||||
|
|
||||||
|
if (r < 0)
|
||||||
|
r = std::sqrt(-r);
|
||||||
|
else
|
||||||
|
r = std::sqrt(r);
|
||||||
|
|
||||||
|
v.x = m_Scale * vx;
|
||||||
|
v.y = m_Scale * vy;
|
||||||
|
v.z = m_Scale * (2 * r + m_Z);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
p = m_VarFuncs->PerlinNoise3D(v, m_Amps, m_Freqs, iOctaves);
|
||||||
|
|
||||||
|
// Add edge effects
|
||||||
|
if (p > 0)
|
||||||
|
e = p * (1 + e * e * 20) + 2 * e;
|
||||||
|
else
|
||||||
|
e = p * (1 + e * e * 20) - 2 * e;
|
||||||
|
}
|
||||||
|
while ((e < m_NotchBottom || e > m_NotchTop) && t++ < iBailout);
|
||||||
|
|
||||||
|
// Add blur effect to transform
|
||||||
|
helper.Out.x = m_Weight * vx;
|
||||||
|
helper.Out.y = m_Weight * vy;
|
||||||
|
helper.Out.z = (m_VarType == VARTYPE_REG) ? 0 : helper.In.z;
|
||||||
|
col = m_Centre + m_Range * p;
|
||||||
|
outPoint.m_ColorX = col - Floor<T>(col);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual vector<string> OpenCLGlobalFuncNames() const override
|
||||||
|
{
|
||||||
|
return vector<string> { "Zeps", "SimplexNoise3D", "PerlinNoise3D" };
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual vector<string> OpenCLGlobalDataNames() const override
|
||||||
|
{
|
||||||
|
return vector<string> { "NOISE_INDEX", "NOISE_POINTS" };
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual string OpenCLString() const override
|
||||||
|
{
|
||||||
|
ostringstream ss, ss2;
|
||||||
|
intmax_t i = 0, varIndex = IndexInXform();
|
||||||
|
ss2 << "_" << XformIndexInEmber();
|
||||||
|
string index = ss2.str() + "]";
|
||||||
|
string shape = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
|
||||||
|
string map = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
|
||||||
|
string selectCentre = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
|
||||||
|
string selectRange = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
|
||||||
|
string centre = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
|
||||||
|
string range = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
|
||||||
|
string edge = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
|
||||||
|
string scale = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
|
||||||
|
string octaves = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
|
||||||
|
string amps = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
|
||||||
|
string freqs = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
|
||||||
|
string z = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
|
||||||
|
string selectBailout = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
|
||||||
|
string notchBottom = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
|
||||||
|
string notchTop = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
|
||||||
|
ss << "\t{\n"
|
||||||
|
<< "\t\treal3 v;\n"
|
||||||
|
<< "\t\treal_t vx, vy, col, r, theta, s, c, p, e;\n"
|
||||||
|
<< "\t\tint t = 0, iShape = (int)" << shape << ", iMap = (int)" << map << ", iOctaves = (int)" << octaves << ", iBailout = (int)" << selectBailout << ";\n"
|
||||||
|
<< "\n"
|
||||||
|
<< "\t\tdo\n"
|
||||||
|
<< "\t\t{\n"
|
||||||
|
<< "\t\t e = 0;\n"
|
||||||
|
<< "\n"
|
||||||
|
<< "\t\t switch (iShape)\n"
|
||||||
|
<< "\t\t {\n"
|
||||||
|
<< "\t\t case " << SHAPE_SQUARE << ": \n"
|
||||||
|
<< "\t\t vx = (1 + " << edge << ") * (MwcNext01(mwc) - 0.5); \n"
|
||||||
|
<< "\t\t vy = (1 + " << edge << ") * (MwcNext01(mwc) - 0.5); \n"
|
||||||
|
<< "\t\t r = SQR(vx) > SQR(vy) ? sqrt(SQR(vx)) : sqrt(SQR(vy)); \n"
|
||||||
|
<< "\n"
|
||||||
|
<< "\t\t if (r > 1 - " << edge << ")\n"
|
||||||
|
<< "\t\t e = 0.5 * (r - 1 + " << edge << ") / " << edge << "; \n"
|
||||||
|
<< "\n"
|
||||||
|
<< "\t\t break; \n"
|
||||||
|
<< "\n"
|
||||||
|
<< "\t\t case " << SHAPE_DISC << ": \n"
|
||||||
|
<< "\t\t r = MwcNext01(mwc) + MwcNext01(mwc); \n"
|
||||||
|
<< "\t\t r = (r > 1) ? 2 - r : r; \n"
|
||||||
|
<< "\t\t r *= (1 + " << edge << "); \n"
|
||||||
|
<< "\n"
|
||||||
|
<< "\t\t if (r > 1 - " << edge << ")\n"
|
||||||
|
<< "\t\t e = 0.5 * (r - 1 + " << edge << ") / " << edge << "; \n"
|
||||||
|
<< "\n"
|
||||||
|
<< "\t\t theta = MwcNext01(mwc) * M_2PI; \n"
|
||||||
|
<< "\t\t s = sincos(theta, &c); \n"
|
||||||
|
<< "\t\t vx = 0.5 * r * s; \n"
|
||||||
|
<< "\t\t vy = 0.5 * r * c; \n"
|
||||||
|
<< "\t\t break; \n"
|
||||||
|
<< "\n"
|
||||||
|
<< "\t\t case " << SHAPE_BLUR << ": \n"
|
||||||
|
<< "\t\t r = (1 + " << edge << ") * MwcNext01(mwc); \n"
|
||||||
|
<< "\n"
|
||||||
|
<< "\t\t if (r > 1 - " << edge << ")\n"
|
||||||
|
<< "\t\t e = 0.5 * (r - 1 + " << edge << ") / " << edge << "; \n"
|
||||||
|
<< "\n"
|
||||||
|
<< "\t\t theta = MwcNext01(mwc) * M_2PI; \n"
|
||||||
|
<< "\t\t s = sincos(theta, &c); \n"
|
||||||
|
<< "\t\t vx = 0.5 * r * s; \n"
|
||||||
|
<< "\t\t vy = 0.5 * r * c; \n"
|
||||||
|
<< "\t\t break; \n"
|
||||||
|
<< "\t\t }\n"
|
||||||
|
<< "\n"
|
||||||
|
<< "\t\t switch (iMap)\n"
|
||||||
|
<< "\t\t {\n"
|
||||||
|
<< "\t\t case " << MAP_FLAT << ": \n"
|
||||||
|
<< "\t\t v.x = " << scale << " * vx; \n"
|
||||||
|
<< "\t\t v.y = " << scale << " * vy; \n"
|
||||||
|
<< "\t\t v.z = " << scale << " * " << z << "; \n"
|
||||||
|
<< "\t\t break; \n"
|
||||||
|
<< "\n"
|
||||||
|
<< "\t\t case " << MAP_SPHERICAL << ": \n"
|
||||||
|
<< "\t\t r = 1 / Zeps(SQR(vx) + SQR(vy)); \n"
|
||||||
|
<< "\t\t v.x = " << scale << " * vx * r; \n"
|
||||||
|
<< "\t\t v.y = " << scale << " * vy * r; \n"
|
||||||
|
<< "\t\t v.z = " << scale << " * " << z << "; \n"
|
||||||
|
<< "\t\t break; \n"
|
||||||
|
<< "\n"
|
||||||
|
<< "\t\t case " << MAP_HSPHERE << ": \n"
|
||||||
|
<< "\t\t r = 1 / (SQR(vx) + SQR(vy) + 0.5); \n"
|
||||||
|
<< "\t\t v.x = " << scale << " * vx * r; \n"
|
||||||
|
<< "\t\t v.y = " << scale << " * vy * r; \n"
|
||||||
|
<< "\t\t v.z = " << scale << " * " << z << "; \n"
|
||||||
|
<< "\t\t break; \n"
|
||||||
|
<< "\n"
|
||||||
|
<< "\t\t case " << MAP_QSPHERE << ": \n"
|
||||||
|
<< "\t\t r = 1 / (SQR(vx) + SQR(vy) + 0.25); \n"
|
||||||
|
<< "\t\t v.x = " << scale << " * vx * r; \n"
|
||||||
|
<< "\t\t v.y = " << scale << " * vy * r; \n"
|
||||||
|
<< "\t\t v.z = " << scale << " * " << z << "; \n"
|
||||||
|
<< "\t\t break; \n"
|
||||||
|
<< "\n"
|
||||||
|
<< "\t\t case " << MAP_BUBBLE << ": \n"
|
||||||
|
<< "\t\t r = 0.25 - (SQR(vx) + SQR(vy)); \n"
|
||||||
|
<< "\n"
|
||||||
|
<< "\t\t if (r < 0)\n"
|
||||||
|
<< "\t\t r = sqrt(-r); \n"
|
||||||
|
<< "\t\t else\n"
|
||||||
|
<< "\t\t r = sqrt(r); \n"
|
||||||
|
<< "\n"
|
||||||
|
<< "\t\t v.x = " << scale << " * vx; \n"
|
||||||
|
<< "\t\t v.y = " << scale << " * vy; \n"
|
||||||
|
<< "\t\t v.z = " << scale << " * (r + " << z << "); \n"
|
||||||
|
<< "\t\t break; \n"
|
||||||
|
<< "\n"
|
||||||
|
<< "\t\t case " << MAP_BUBBLE2 << ": \n"
|
||||||
|
<< "\t\t r = 0.25 - (SQR(vx) + SQR(vy)); \n"
|
||||||
|
<< "\n"
|
||||||
|
<< "\t\t if (r < 0)\n"
|
||||||
|
<< "\t\t r = sqrt(-r); \n"
|
||||||
|
<< "\t\t else\n"
|
||||||
|
<< "\t\t r = sqrt(r); \n"
|
||||||
|
<< "\n"
|
||||||
|
<< "\t\t v.x = " << scale << " * vx; \n"
|
||||||
|
<< "\t\t v.y = " << scale << " * vy; \n"
|
||||||
|
<< "\t\t v.z = " << scale << " * (2 * r + " << z << "); \n"
|
||||||
|
<< "\t\t break; \n"
|
||||||
|
<< "\t\t }\n"
|
||||||
|
<< "\n"
|
||||||
|
<< "\t\t p = PerlinNoise3D(&v, globalShared + NOISE_INDEX, (__global real3*)(globalShared + NOISE_POINTS), " << amps << ", " << freqs << ", iOctaves); \n"
|
||||||
|
<< "\n"
|
||||||
|
<< "\t\t if (p > 0)\n"
|
||||||
|
<< "\t\t e = p * (1 + e * e * 20) + 2 * e; \n"
|
||||||
|
<< "\t\t else\n"
|
||||||
|
<< "\t\t e = p * (1 + e * e * 20) - 2 * e; \n"
|
||||||
|
<< "}\n"
|
||||||
|
<< "\t\twhile ((e < " << notchBottom << " || e > " << notchTop << ") && t++ < iBailout); \n"
|
||||||
|
<< "\n"
|
||||||
|
<< "\t\tvOut.x = xform->m_VariationWeights[" << varIndex << "] * vx; \n"
|
||||||
|
<< "\t\tvOut.y = xform->m_VariationWeights[" << varIndex << "] * vy; \n"
|
||||||
|
<< "\t\tvOut.z = " << ((m_VarType == VARTYPE_REG) ? "0" : "vIn.z") << ";\n"
|
||||||
|
<< "\t\tcol = " << centre << " + " << range << " * p; \n"
|
||||||
|
<< "\t\toutPoint->m_ColorX = col - floor(col); \n"
|
||||||
|
<< "\t}\n";
|
||||||
|
return ss.str();
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void Precalc() override
|
||||||
|
{
|
||||||
|
m_NotchBottom = m_SelectCentre - m_SelectRange;
|
||||||
|
m_NotchBottom = (m_NotchBottom > T(0.75)) ? T(0.75) : m_NotchBottom;
|
||||||
|
m_NotchBottom = (m_NotchBottom < -2) ? -3 : m_NotchBottom;
|
||||||
|
m_NotchTop = m_SelectCentre + m_SelectRange;
|
||||||
|
m_NotchTop = (m_NotchTop < T(-0.75)) ? T(-0.75) : m_NotchTop;
|
||||||
|
m_NotchTop = (m_NotchTop > 3) ? 3 : m_NotchTop;
|
||||||
|
}
|
||||||
|
protected:
|
||||||
|
void Init()
|
||||||
|
{
|
||||||
|
string prefix = Prefix();
|
||||||
|
m_VarFuncs = VarFuncs<T>::Instance();
|
||||||
|
m_Params.clear();
|
||||||
|
m_Params.reserve(15);
|
||||||
|
m_Params.push_back(ParamWithName<T>(&m_Shape, prefix + "dc_perlin_shape", 0, INTEGER, 0, 2));//Params.
|
||||||
|
m_Params.push_back(ParamWithName<T>(&m_Map, prefix + "dc_perlin_map", 0, INTEGER, 0, 5));
|
||||||
|
m_Params.push_back(ParamWithName<T>(&m_SelectCentre, prefix + "dc_perlin_select_centre", 0, REAL, -1, 1));
|
||||||
|
m_Params.push_back(ParamWithName<T>(&m_SelectRange, prefix + "dc_perlin_select_range", 1, REAL, T(0.1), 2));
|
||||||
|
m_Params.push_back(ParamWithName<T>(&m_Centre, prefix + "dc_perlin_centre", T(0.25)));
|
||||||
|
m_Params.push_back(ParamWithName<T>(&m_Range, prefix + "dc_perlin_range", T(0.25)));
|
||||||
|
m_Params.push_back(ParamWithName<T>(&m_Edge, prefix + "dc_perlin_edge"));
|
||||||
|
m_Params.push_back(ParamWithName<T>(&m_Scale, prefix + "dc_perlin_scale", 1));
|
||||||
|
m_Params.push_back(ParamWithName<T>(&m_Octaves, prefix + "dc_perlin_octaves", 2, INTEGER, 1, 5));
|
||||||
|
m_Params.push_back(ParamWithName<T>(&m_Amps, prefix + "dc_perlin_amps", 2));
|
||||||
|
m_Params.push_back(ParamWithName<T>(&m_Freqs, prefix + "dc_perlin_freqs", 2));
|
||||||
|
m_Params.push_back(ParamWithName<T>(&m_Z, prefix + "dc_perlin_z"));
|
||||||
|
m_Params.push_back(ParamWithName<T>(&m_SelectBailout, prefix + "dc_perlin_select_bailout", 10, INTEGER, 2, 1000));
|
||||||
|
m_Params.push_back(ParamWithName<T>(true, &m_NotchBottom, prefix + "dc_perlin_notch_bottom"));
|
||||||
|
m_Params.push_back(ParamWithName<T>(true, &m_NotchTop, prefix + "dc_perlin_notch_top"));
|
||||||
|
}
|
||||||
|
private:
|
||||||
|
T m_Shape;//Params.
|
||||||
|
T m_Map;
|
||||||
|
T m_SelectCentre;
|
||||||
|
T m_SelectRange;
|
||||||
|
T m_Centre;
|
||||||
|
T m_Range;
|
||||||
|
T m_Edge;
|
||||||
|
T m_Scale;
|
||||||
|
T m_Octaves;
|
||||||
|
T m_Amps;
|
||||||
|
T m_Freqs;
|
||||||
|
T m_Z;
|
||||||
|
T m_SelectBailout;
|
||||||
|
T m_NotchBottom;//Precalc.
|
||||||
|
T m_NotchTop;
|
||||||
|
shared_ptr<VarFuncs<T>> m_VarFuncs;
|
||||||
|
};
|
||||||
|
|
||||||
MAKEPREPOSTPARVAR(DCBubble, dc_bubble, DC_BUBBLE)
|
MAKEPREPOSTPARVAR(DCBubble, dc_bubble, DC_BUBBLE)
|
||||||
MAKEPREPOSTPARVAR(DCCarpet, dc_carpet, DC_CARPET)
|
MAKEPREPOSTPARVAR(DCCarpet, dc_carpet, DC_CARPET)
|
||||||
MAKEPREPOSTPARVARASSIGN(DCCube, dc_cube, DC_CUBE, ASSIGNTYPE_SUM)
|
MAKEPREPOSTPARVARASSIGN(DCCube, dc_cube, DC_CUBE, ASSIGNTYPE_SUM)
|
||||||
@ -1136,4 +1459,5 @@ MAKEPREPOSTVAR(DCGridOut, dc_gridout, DC_GRIDOUT)
|
|||||||
MAKEPREPOSTPARVAR(DCLinear, dc_linear, DC_LINEAR)
|
MAKEPREPOSTPARVAR(DCLinear, dc_linear, DC_LINEAR)
|
||||||
MAKEPREPOSTPARVAR(DCTriangle, dc_triangle, DC_TRIANGLE)
|
MAKEPREPOSTPARVAR(DCTriangle, dc_triangle, DC_TRIANGLE)
|
||||||
MAKEPREPOSTPARVAR(DCZTransl, dc_ztransl, DC_ZTRANSL)
|
MAKEPREPOSTPARVAR(DCZTransl, dc_ztransl, DC_ZTRANSL)
|
||||||
|
MAKEPREPOSTPARVAR(DCPerlin, dc_perlin, DC_PERLIN)
|
||||||
}
|
}
|
||||||
|
@ -72,19 +72,16 @@ public:
|
|||||||
|
|
||||||
{
|
{
|
||||||
Init();
|
Init();
|
||||||
|
|
||||||
m_Weight = weight;
|
m_Weight = weight;
|
||||||
m_ColorX = colorX;
|
m_ColorX = colorX;
|
||||||
m_ColorSpeed = colorSpeed;
|
m_ColorSpeed = colorSpeed;
|
||||||
m_Opacity = opacity;
|
m_Opacity = opacity;
|
||||||
|
|
||||||
m_Affine.A(a);
|
m_Affine.A(a);
|
||||||
m_Affine.B(b);
|
m_Affine.B(b);
|
||||||
m_Affine.C(c);
|
m_Affine.C(c);
|
||||||
m_Affine.D(d);
|
m_Affine.D(d);
|
||||||
m_Affine.E(e);
|
m_Affine.E(e);
|
||||||
m_Affine.F(f);
|
m_Affine.F(f);
|
||||||
|
|
||||||
m_Post.A(pa);
|
m_Post.A(pa);
|
||||||
m_Post.B(pb);
|
m_Post.B(pb);
|
||||||
m_Post.C(pc);
|
m_Post.C(pc);
|
||||||
@ -93,7 +90,6 @@ public:
|
|||||||
m_Post.F(pf);
|
m_Post.F(pf);
|
||||||
m_HasPost = !m_Post.IsID();
|
m_HasPost = !m_Post.IsID();
|
||||||
m_HasPreOrRegularVars = PreVariationCount() > 0 || VariationCount() > 0;
|
m_HasPreOrRegularVars = PreVariationCount() > 0 || VariationCount() > 0;
|
||||||
|
|
||||||
CacheColorVals();//Init already called this, but must call again since color was assigned above.
|
CacheColorVals();//Init already called this, but must call again since color was assigned above.
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -166,7 +162,6 @@ public:
|
|||||||
m_MotionFreq = xform.m_MotionFreq;
|
m_MotionFreq = xform.m_MotionFreq;
|
||||||
m_MotionFunc = xform.m_MotionFunc;
|
m_MotionFunc = xform.m_MotionFunc;
|
||||||
m_MotionOffset = xform.m_MotionOffset;
|
m_MotionOffset = xform.m_MotionOffset;
|
||||||
|
|
||||||
ClearAndDeleteVariations();
|
ClearAndDeleteVariations();
|
||||||
|
|
||||||
//Must manually add them via the AddVariation() function so that
|
//Must manually add them via the AddVariation() function so that
|
||||||
@ -192,7 +187,6 @@ public:
|
|||||||
CopyVec<T, U>(m_Xaos, xform.XaosVec());
|
CopyVec<T, U>(m_Xaos, xform.XaosVec());
|
||||||
CopyVec(m_Motion, xform.m_Motion);
|
CopyVec(m_Motion, xform.m_Motion);
|
||||||
m_Name = xform.m_Name;
|
m_Name = xform.m_Name;
|
||||||
|
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -217,21 +211,18 @@ public:
|
|||||||
m_ColorY = 0;
|
m_ColorY = 0;
|
||||||
m_DirectColor = 1;
|
m_DirectColor = 1;
|
||||||
m_Opacity = 1;
|
m_Opacity = 1;
|
||||||
|
|
||||||
m_Affine.A(1);
|
m_Affine.A(1);
|
||||||
m_Affine.B(0);
|
m_Affine.B(0);
|
||||||
m_Affine.C(0);
|
m_Affine.C(0);
|
||||||
m_Affine.D(0);
|
m_Affine.D(0);
|
||||||
m_Affine.E(1);
|
m_Affine.E(1);
|
||||||
m_Affine.F(0);
|
m_Affine.F(0);
|
||||||
|
|
||||||
m_Post.A(1);
|
m_Post.A(1);
|
||||||
m_Post.B(0);
|
m_Post.B(0);
|
||||||
m_Post.C(0);
|
m_Post.C(0);
|
||||||
m_Post.D(0);
|
m_Post.D(0);
|
||||||
m_Post.E(1);
|
m_Post.E(1);
|
||||||
m_Post.F(0);
|
m_Post.F(0);
|
||||||
|
|
||||||
m_Wind[0] = 0;
|
m_Wind[0] = 0;
|
||||||
m_Wind[1] = 0;
|
m_Wind[1] = 0;
|
||||||
m_MotionFreq = 0;
|
m_MotionFreq = 0;
|
||||||
@ -246,21 +237,18 @@ public:
|
|||||||
m_ColorY = EMPTYFIELD;
|
m_ColorY = EMPTYFIELD;
|
||||||
m_DirectColor = EMPTYFIELD;
|
m_DirectColor = EMPTYFIELD;
|
||||||
m_Opacity = EMPTYFIELD;
|
m_Opacity = EMPTYFIELD;
|
||||||
|
|
||||||
m_Affine.A(EMPTYFIELD);
|
m_Affine.A(EMPTYFIELD);
|
||||||
m_Affine.B(EMPTYFIELD);
|
m_Affine.B(EMPTYFIELD);
|
||||||
m_Affine.C(EMPTYFIELD);
|
m_Affine.C(EMPTYFIELD);
|
||||||
m_Affine.D(EMPTYFIELD);
|
m_Affine.D(EMPTYFIELD);
|
||||||
m_Affine.E(EMPTYFIELD);
|
m_Affine.E(EMPTYFIELD);
|
||||||
m_Affine.F(EMPTYFIELD);
|
m_Affine.F(EMPTYFIELD);
|
||||||
|
|
||||||
m_Post.A(EMPTYFIELD);
|
m_Post.A(EMPTYFIELD);
|
||||||
m_Post.B(EMPTYFIELD);
|
m_Post.B(EMPTYFIELD);
|
||||||
m_Post.C(EMPTYFIELD);
|
m_Post.C(EMPTYFIELD);
|
||||||
m_Post.D(EMPTYFIELD);
|
m_Post.D(EMPTYFIELD);
|
||||||
m_Post.E(EMPTYFIELD);
|
m_Post.E(EMPTYFIELD);
|
||||||
m_Post.F(EMPTYFIELD);
|
m_Post.F(EMPTYFIELD);
|
||||||
|
|
||||||
m_Wind[0] = EMPTYFIELD;
|
m_Wind[0] = EMPTYFIELD;
|
||||||
m_Wind[1] = EMPTYFIELD;
|
m_Wind[1] = EMPTYFIELD;
|
||||||
m_MotionFreq = EMPTYFIELD;
|
m_MotionFreq = EMPTYFIELD;
|
||||||
@ -269,7 +257,6 @@ public:
|
|||||||
|
|
||||||
m_MotionFunc = MOTION_SIN;
|
m_MotionFunc = MOTION_SIN;
|
||||||
m_Motion.clear();
|
m_Motion.clear();
|
||||||
|
|
||||||
m_NeedPrecalcSumSquares = false;
|
m_NeedPrecalcSumSquares = false;
|
||||||
m_NeedPrecalcSqrtSumSquares = false;
|
m_NeedPrecalcSqrtSumSquares = false;
|
||||||
m_NeedPrecalcAngles = false;
|
m_NeedPrecalcAngles = false;
|
||||||
@ -340,8 +327,7 @@ public:
|
|||||||
{
|
{
|
||||||
size_t count = 0;
|
size_t count = 0;
|
||||||
Variation<T>* var = nullptr;
|
Variation<T>* var = nullptr;
|
||||||
|
const_cast<Xform<T>*>(this)->AllVarsFunc([&] (vector<Variation<T>*>& variations, bool & keepGoing)
|
||||||
const_cast<Xform<T>*>(this)->AllVarsFunc([&] (vector<Variation<T>*>& variations, bool& keepGoing)
|
|
||||||
{
|
{
|
||||||
for (size_t i = 0; i < variations.size(); i++, count++)
|
for (size_t i = 0; i < variations.size(); i++, count++)
|
||||||
{
|
{
|
||||||
@ -353,7 +339,6 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
return var;
|
return var;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -365,8 +350,7 @@ public:
|
|||||||
Variation<T>* GetVariationById(eVariationId id) const
|
Variation<T>* GetVariationById(eVariationId id) const
|
||||||
{
|
{
|
||||||
Variation<T>* var = nullptr;
|
Variation<T>* var = nullptr;
|
||||||
|
const_cast<Xform<T>*>(this)->AllVarsFunc([&] (vector<Variation<T>*>& variations, bool & keepGoing)
|
||||||
const_cast<Xform<T>*>(this)->AllVarsFunc([&] (vector<Variation<T>*>& variations, bool& keepGoing)
|
|
||||||
{
|
{
|
||||||
for (auto v : variations)
|
for (auto v : variations)
|
||||||
{
|
{
|
||||||
@ -378,7 +362,6 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
return var;
|
return var;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -390,8 +373,7 @@ public:
|
|||||||
Variation<T>* GetVariationByName(const string& name) const
|
Variation<T>* GetVariationByName(const string& name) const
|
||||||
{
|
{
|
||||||
Variation<T>* var = nullptr;
|
Variation<T>* var = nullptr;
|
||||||
|
const_cast<Xform<T>*>(this)->AllVarsFunc([&] (vector<Variation<T>*>& variations, bool & keepGoing)
|
||||||
const_cast<Xform<T>*>(this)->AllVarsFunc([&] (vector<Variation<T>*>& variations, bool& keepGoing)
|
|
||||||
{
|
{
|
||||||
for (auto v : variations)
|
for (auto v : variations)
|
||||||
{
|
{
|
||||||
@ -403,7 +385,6 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
return var;
|
return var;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -416,8 +397,7 @@ public:
|
|||||||
intmax_t GetVariationIndex(Variation<T>* var) const
|
intmax_t GetVariationIndex(Variation<T>* var) const
|
||||||
{
|
{
|
||||||
intmax_t count = 0, index = -1;
|
intmax_t count = 0, index = -1;
|
||||||
|
const_cast<Xform<T>*>(this)->AllVarsFunc([&] (vector<Variation<T>*>& variations, bool & keepGoing)
|
||||||
const_cast<Xform<T>*>(this)->AllVarsFunc([&] (vector<Variation<T>*>& variations, bool& keepGoing)
|
|
||||||
{
|
{
|
||||||
for (size_t i = 0; i < variations.size(); i++, count++)
|
for (size_t i = 0; i < variations.size(); i++, count++)
|
||||||
{
|
{
|
||||||
@ -429,7 +409,6 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
return index;
|
return index;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -442,8 +421,7 @@ public:
|
|||||||
bool DeleteVariationById(eVariationId id)
|
bool DeleteVariationById(eVariationId id)
|
||||||
{
|
{
|
||||||
bool found = false;
|
bool found = false;
|
||||||
|
AllVarsFunc([&] (vector<Variation<T>*>& variations, bool & keepGoing)
|
||||||
AllVarsFunc([&] (vector<Variation<T>*>& variations, bool& keepGoing)
|
|
||||||
{
|
{
|
||||||
for (size_t i = 0; i < variations.size(); i++)
|
for (size_t i = 0; i < variations.size(); i++)
|
||||||
{
|
{
|
||||||
@ -475,7 +453,7 @@ public:
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
void ClearAndDeleteVariations()
|
void ClearAndDeleteVariations()
|
||||||
{
|
{
|
||||||
AllVarsFunc([&] (vector<Variation<T>*>& variations, bool& keepGoing) { ClearVec<Variation<T>>(variations); });
|
AllVarsFunc([&] (vector<Variation<T>*>& variations, bool & keepGoing) { ClearVec<Variation<T>>(variations); });
|
||||||
SetPrecalcFlags();
|
SetPrecalcFlags();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -511,7 +489,6 @@ public:
|
|||||||
//Figure out which is right. //TODO.
|
//Figure out which is right. //TODO.
|
||||||
//m_ColorSpeedCache = m_ColorX * (1 - m_ColorSpeed) / 2;//Apo style.
|
//m_ColorSpeedCache = m_ColorX * (1 - m_ColorSpeed) / 2;//Apo style.
|
||||||
//m_OneMinusColorCache = (1 + m_ColorSpeed) / 2;
|
//m_OneMinusColorCache = (1 + m_ColorSpeed) / 2;
|
||||||
|
|
||||||
m_ColorSpeedCache = m_ColorSpeed * m_ColorX;//Flam3 style.
|
m_ColorSpeedCache = m_ColorSpeed * m_ColorX;//Flam3 style.
|
||||||
m_OneMinusColorCache = T(1.0) - m_ColorSpeed;
|
m_OneMinusColorCache = T(1.0) - m_ColorSpeed;
|
||||||
m_VizAdjusted = AdjustOpacityPercentage(m_Opacity);
|
m_VizAdjusted = AdjustOpacityPercentage(m_Opacity);
|
||||||
@ -592,11 +569,12 @@ public:
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
void NormalizeVariationWeights()
|
void NormalizeVariationWeights()
|
||||||
{
|
{
|
||||||
AllVarsFunc([&] (vector<Variation<T>*>& variations, bool& keepGoing)
|
AllVarsFunc([&] (vector<Variation<T>*>& variations, bool & keepGoing)
|
||||||
{
|
{
|
||||||
T norm = 0;
|
T norm = 0;
|
||||||
|
|
||||||
for (auto var : variations) norm += var->m_Weight;
|
for (auto var : variations) norm += var->m_Weight;
|
||||||
|
|
||||||
for (auto var : variations) var->m_Weight /= norm;
|
for (auto var : variations) var->m_Weight /= norm;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -613,11 +591,9 @@ public:
|
|||||||
bool Apply(Point<T>* inPoint, Point<T>* outPoint, QTIsaac<ISAAC_SIZE, ISAAC_INT>& rand)
|
bool Apply(Point<T>* inPoint, Point<T>* outPoint, QTIsaac<ISAAC_SIZE, ISAAC_INT>& rand)
|
||||||
{
|
{
|
||||||
size_t i;
|
size_t i;
|
||||||
|
|
||||||
//This must be local, rather than a member, because this function can be called
|
//This must be local, rather than a member, because this function can be called
|
||||||
//from multiple threads. If it were a member, they'd be clobbering each others' values.
|
//from multiple threads. If it were a member, they'd be clobbering each others' values.
|
||||||
IteratorHelper<T> iterHelper;
|
IteratorHelper<T> iterHelper;
|
||||||
|
|
||||||
//Calculate the color coordinate/index in the palette to look up later when accumulating the output point
|
//Calculate the color coordinate/index in the palette to look up later when accumulating the output point
|
||||||
//to the histogram. Calculate this value by interpolating between the index value of the
|
//to the histogram. Calculate this value by interpolating between the index value of the
|
||||||
//last iteration with the one specified in this xform. Note that some cached values are used
|
//last iteration with the one specified in this xform. Note that some cached values are used
|
||||||
@ -653,7 +629,6 @@ public:
|
|||||||
iterHelper.In.x = iterHelper.m_TransX;//Only need to read once with regular variations, because transX/Y are fixed.
|
iterHelper.In.x = iterHelper.m_TransX;//Only need to read once with regular variations, because transX/Y are fixed.
|
||||||
iterHelper.In.y = iterHelper.m_TransY;
|
iterHelper.In.y = iterHelper.m_TransY;
|
||||||
iterHelper.In.z = iterHelper.m_TransZ;
|
iterHelper.In.z = iterHelper.m_TransZ;
|
||||||
|
|
||||||
//Since these get summed, initialize them to zero.
|
//Since these get summed, initialize them to zero.
|
||||||
outPoint->m_X = outPoint->m_Y = outPoint->m_Z = 0;
|
outPoint->m_X = outPoint->m_Y = outPoint->m_Z = 0;
|
||||||
|
|
||||||
@ -682,7 +657,6 @@ public:
|
|||||||
{
|
{
|
||||||
//There are no variations, so the affine transformed points can be assigned directly to the output points.
|
//There are no variations, so the affine transformed points can be assigned directly to the output points.
|
||||||
T inX = inPoint->m_X;
|
T inX = inPoint->m_X;
|
||||||
|
|
||||||
outPoint->m_X = (m_Affine.A() * inX) + (m_Affine.B() * inPoint->m_Y) + m_Affine.C();
|
outPoint->m_X = (m_Affine.A() * inX) + (m_Affine.B() * inPoint->m_Y) + m_Affine.C();
|
||||||
outPoint->m_Y = (m_Affine.D() * inX) + (m_Affine.E() * inPoint->m_Y) + m_Affine.F();
|
outPoint->m_Y = (m_Affine.D() * inX) + (m_Affine.E() * inPoint->m_Y) + m_Affine.F();
|
||||||
outPoint->m_Z = inPoint->m_Z;
|
outPoint->m_Z = inPoint->m_Z;
|
||||||
@ -703,13 +677,11 @@ public:
|
|||||||
if (m_HasPost)
|
if (m_HasPost)
|
||||||
{
|
{
|
||||||
T postX = outPoint->m_X;
|
T postX = outPoint->m_X;
|
||||||
|
|
||||||
outPoint->m_X = (m_Post.A() * postX) + (m_Post.B() * outPoint->m_Y) + m_Post.C();
|
outPoint->m_X = (m_Post.A() * postX) + (m_Post.B() * outPoint->m_Y) + m_Post.C();
|
||||||
outPoint->m_Y = (m_Post.D() * postX) + (m_Post.E() * outPoint->m_Y) + m_Post.F();
|
outPoint->m_Y = (m_Post.D() * postX) + (m_Post.E() * outPoint->m_Y) + m_Post.F();
|
||||||
}
|
}
|
||||||
|
|
||||||
outPoint->m_ColorX = outPoint->m_ColorX + m_DirectColor * (iterHelper.m_Color.x - outPoint->m_ColorX);
|
outPoint->m_ColorX = iterHelper.m_Color.x + m_DirectColor * (outPoint->m_ColorX - iterHelper.m_Color.x);
|
||||||
|
|
||||||
//Has the trajectory of x or y gone either to infinity, or too close to zero?
|
//Has the trajectory of x or y gone either to infinity, or too close to zero?
|
||||||
return BadVal(outPoint->m_X) || BadVal(outPoint->m_Y)/* || BadVal(outPoint->m_Z)*/;
|
return BadVal(outPoint->m_X) || BadVal(outPoint->m_Y)/* || BadVal(outPoint->m_Z)*/;
|
||||||
}
|
}
|
||||||
@ -737,7 +709,6 @@ public:
|
|||||||
T freq = currentMot.m_MotionFreq;
|
T freq = currentMot.m_MotionFreq;
|
||||||
eMotion func = currentMot.m_MotionFunc;
|
eMotion func = currentMot.m_MotionFunc;
|
||||||
T offset = currentMot.m_MotionOffset;
|
T offset = currentMot.m_MotionOffset;
|
||||||
|
|
||||||
//Clamp these to the appropriate range after all are applied.
|
//Clamp these to the appropriate range after all are applied.
|
||||||
APPMOT(m_Weight);
|
APPMOT(m_Weight);
|
||||||
APPMOT(m_ColorX);
|
APPMOT(m_ColorX);
|
||||||
@ -751,7 +722,6 @@ public:
|
|||||||
{
|
{
|
||||||
Variation<T>* motVar = currentMot.GetVariation(j);//Get the variation, which may or may not be present in this xform.
|
Variation<T>* motVar = currentMot.GetVariation(j);//Get the variation, which may or may not be present in this xform.
|
||||||
ParametricVariation<T>* motParVar = dynamic_cast<ParametricVariation<T>*>(motVar);
|
ParametricVariation<T>* motParVar = dynamic_cast<ParametricVariation<T>*>(motVar);
|
||||||
|
|
||||||
Variation<T>* var = GetVariationById(motVar->VariationId());//See if the variation in the motion xform was present in the xform.
|
Variation<T>* var = GetVariationById(motVar->VariationId());//See if the variation in the motion xform was present in the xform.
|
||||||
|
|
||||||
if (!var)//It wasn't present, so add it and set the weight.
|
if (!var)//It wasn't present, so add it and set the weight.
|
||||||
@ -861,7 +831,7 @@ public:
|
|||||||
m_NeedPrecalcAtanYX = true;
|
m_NeedPrecalcAtanYX = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
AllVarsFunc([&] (vector<Variation<T>*>& variations, bool& keepGoing)
|
AllVarsFunc([&] (vector<Variation<T>*>& variations, bool & keepGoing)
|
||||||
{
|
{
|
||||||
for (auto var : variations)
|
for (auto var : variations)
|
||||||
{
|
{
|
||||||
@ -912,13 +882,13 @@ public:
|
|||||||
|
|
||||||
if (GetVariationById(VAR_FLATTEN) == nullptr)
|
if (GetVariationById(VAR_FLATTEN) == nullptr)
|
||||||
{
|
{
|
||||||
AllVarsFunc([&] (vector<Variation<T>*>& variations, bool& keepGoing)
|
AllVarsFunc([&] (vector<Variation<T>*>& variations, bool & keepGoing)
|
||||||
{
|
{
|
||||||
for (auto var : variations)
|
for (auto var : variations)
|
||||||
{
|
{
|
||||||
if (var->m_Weight != 0)//This should never happen, but just to be safe.
|
if (var->m_Weight != 0)//This should never happen, but just to be safe.
|
||||||
{
|
{
|
||||||
if (FindIf(names, [&] (const string& s) -> bool { return !_stricmp(s.c_str(), var->Name().c_str()); }))//If any variation is present, don't flatten.
|
if (FindIf(names, [&] (const string & s) -> bool { return !_stricmp(s.c_str(), var->Name().c_str()); })) //If any variation is present, don't flatten.
|
||||||
{
|
{
|
||||||
shouldFlatten = false;
|
shouldFlatten = false;
|
||||||
keepGoing = false;
|
keepGoing = false;
|
||||||
@ -980,6 +950,7 @@ public:
|
|||||||
"\tvIn.y = transY;\n"
|
"\tvIn.y = transY;\n"
|
||||||
"\tvIn.z = transZ;\n";
|
"\tvIn.z = transZ;\n";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case VARTYPE_POST:
|
case VARTYPE_POST:
|
||||||
default:
|
default:
|
||||||
s =
|
s =
|
||||||
@ -1008,6 +979,7 @@ public:
|
|||||||
helper.m_TransZ = helper.Out.z;
|
helper.m_TransZ = helper.Out.z;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case ASSIGNTYPE_SUM:
|
case ASSIGNTYPE_SUM:
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
@ -1035,6 +1007,7 @@ public:
|
|||||||
outPoint.m_Z = helper.Out.z;
|
outPoint.m_Z = helper.Out.z;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case ASSIGNTYPE_SUM:
|
case ASSIGNTYPE_SUM:
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
@ -1066,6 +1039,7 @@ public:
|
|||||||
"\toutPoint->m_Z += vOut.z;\n";
|
"\toutPoint->m_Z += vOut.z;\n";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case VARTYPE_PRE:
|
case VARTYPE_PRE:
|
||||||
{
|
{
|
||||||
switch (assignType)
|
switch (assignType)
|
||||||
@ -1078,6 +1052,7 @@ public:
|
|||||||
"\ttransZ = vOut.z;\n";
|
"\ttransZ = vOut.z;\n";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case ASSIGNTYPE_SUM:
|
case ASSIGNTYPE_SUM:
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
@ -1091,6 +1066,7 @@ public:
|
|||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case VARTYPE_POST:
|
case VARTYPE_POST:
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
@ -1104,6 +1080,7 @@ public:
|
|||||||
"\toutPoint->m_Z = vOut.z;\n";
|
"\toutPoint->m_Z = vOut.z;\n";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case ASSIGNTYPE_SUM:
|
case ASSIGNTYPE_SUM:
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
@ -1131,7 +1108,6 @@ public:
|
|||||||
string ToString() const
|
string ToString() const
|
||||||
{
|
{
|
||||||
ostringstream ss;
|
ostringstream ss;
|
||||||
|
|
||||||
ss << "A: " << m_Affine.A() << " "
|
ss << "A: " << m_Affine.A() << " "
|
||||||
<< "B: " << m_Affine.B() << " "
|
<< "B: " << m_Affine.B() << " "
|
||||||
<< "C: " << m_Affine.C() << " "
|
<< "C: " << m_Affine.C() << " "
|
||||||
@ -1161,8 +1137,7 @@ public:
|
|||||||
ss << "Motion Frequency: " << m_MotionFreq << endl;
|
ss << "Motion Frequency: " << m_MotionFreq << endl;
|
||||||
ss << "Motion Func: " << m_MotionFunc << endl;
|
ss << "Motion Func: " << m_MotionFunc << endl;
|
||||||
ss << "Motion Offset: " << m_MotionOffset << endl;
|
ss << "Motion Offset: " << m_MotionOffset << endl;
|
||||||
|
const_cast<Xform<T>*>(this)->AllVarsFunc([&] (vector<Variation<T>*>& variations, bool & keepGoing)
|
||||||
const_cast<Xform<T>*>(this)->AllVarsFunc([&] (vector<Variation<T>*>& variations, bool& keepGoing)
|
|
||||||
{
|
{
|
||||||
for (auto var : variations)
|
for (auto var : variations)
|
||||||
ss << var->ToString() << endl;
|
ss << var->ToString() << endl;
|
||||||
@ -1252,7 +1227,6 @@ private:
|
|||||||
void AllVarsFunc(std::function<void (vector<Variation<T>*>&, bool&)> func)
|
void AllVarsFunc(std::function<void (vector<Variation<T>*>&, bool&)> func)
|
||||||
{
|
{
|
||||||
bool keepGoing = true;
|
bool keepGoing = true;
|
||||||
|
|
||||||
func(m_PreVariations, keepGoing);
|
func(m_PreVariations, keepGoing);
|
||||||
|
|
||||||
if (keepGoing)
|
if (keepGoing)
|
||||||
|
@ -11,8 +11,7 @@
|
|||||||
template <typename T>
|
template <typename T>
|
||||||
bool EmberAnimate(EmberOptions& opt)
|
bool EmberAnimate(EmberOptions& opt)
|
||||||
{
|
{
|
||||||
OpenCLInfo& info(OpenCLInfo::Instance());
|
auto info = OpenCLInfo::Instance();
|
||||||
|
|
||||||
std::cout.imbue(std::locale(""));
|
std::cout.imbue(std::locale(""));
|
||||||
|
|
||||||
if (opt.DumpArgs())
|
if (opt.DumpArgs())
|
||||||
@ -21,7 +20,7 @@ bool EmberAnimate(EmberOptions& opt)
|
|||||||
if (opt.OpenCLInfo())
|
if (opt.OpenCLInfo())
|
||||||
{
|
{
|
||||||
cout << "\nOpenCL Info: " << endl;
|
cout << "\nOpenCL Info: " << endl;
|
||||||
cout << info.DumpInfo();
|
cout << info->DumpInfo();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -69,8 +68,8 @@ bool EmberAnimate(EmberOptions& opt)
|
|||||||
{
|
{
|
||||||
for (auto& device : devices)
|
for (auto& device : devices)
|
||||||
{
|
{
|
||||||
cout << "Platform: " << info.PlatformName(device.first) << endl;
|
cout << "Platform: " << info->PlatformName(device.first) << endl;
|
||||||
cout << "Device: " << info.DeviceName(device.first, device.second) << endl;
|
cout << "Device: " << info->DeviceName(device.first, device.second) << endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -235,7 +234,6 @@ bool EmberAnimate(EmberOptions& opt)
|
|||||||
embers[i].m_FinalRasW = size_t(T(embers[i].m_FinalRasW) * opt.SizeScale());
|
embers[i].m_FinalRasW = size_t(T(embers[i].m_FinalRasW) * opt.SizeScale());
|
||||||
embers[i].m_FinalRasH = size_t(T(embers[i].m_FinalRasH) * opt.SizeScale());
|
embers[i].m_FinalRasH = size_t(T(embers[i].m_FinalRasH) * opt.SizeScale());
|
||||||
embers[i].m_PixelsPerUnit *= T(opt.SizeScale());
|
embers[i].m_PixelsPerUnit *= T(opt.SizeScale());
|
||||||
|
|
||||||
//Cast to double in case the value exceeds 2^32.
|
//Cast to double in case the value exceeds 2^32.
|
||||||
double imageMem = double(channels) * double(embers[i].m_FinalRasW)
|
double imageMem = double(channels) * double(embers[i].m_FinalRasW)
|
||||||
* double(embers[i].m_FinalRasH) * double(renderers[0]->BytesPerChannel());
|
* double(embers[i].m_FinalRasH) * double(renderers[0]->BytesPerChannel());
|
||||||
@ -260,7 +258,6 @@ bool EmberAnimate(EmberOptions& opt)
|
|||||||
{
|
{
|
||||||
cout << "Warning: flame " << i << " at time " << embers[i].m_Time << " size mismatch. (" << embers[i].m_FinalRasW << ", " << embers[i].m_FinalRasH <<
|
cout << "Warning: flame " << i << " at time " << embers[i].m_Time << " size mismatch. (" << embers[i].m_FinalRasW << ", " << embers[i].m_FinalRasH <<
|
||||||
") should be (" << embers[0].m_FinalRasW << ", " << embers[0].m_FinalRasH << "). Setting to " << embers[0].m_FinalRasW << ", " << embers[0].m_FinalRasH << "." << endl;
|
") should be (" << embers[0].m_FinalRasW << ", " << embers[0].m_FinalRasH << "). Setting to " << embers[0].m_FinalRasW << ", " << embers[0].m_FinalRasH << "." << endl;
|
||||||
|
|
||||||
embers[i].m_FinalRasW = embers[0].m_FinalRasW;
|
embers[i].m_FinalRasW = embers[0].m_FinalRasW;
|
||||||
embers[i].m_FinalRasH = embers[0].m_FinalRasH;
|
embers[i].m_FinalRasH = embers[0].m_FinalRasH;
|
||||||
}
|
}
|
||||||
@ -330,9 +327,7 @@ bool EmberAnimate(EmberOptions& opt)
|
|||||||
if (!writeSuccess)
|
if (!writeSuccess)
|
||||||
cout << "Error writing " << filename << endl;
|
cout << "Error writing " << filename << endl;
|
||||||
};
|
};
|
||||||
|
|
||||||
atomfTime.store(opt.FirstFrame());
|
atomfTime.store(opt.FirstFrame());
|
||||||
|
|
||||||
std::function<void(size_t)> iterFunc = [&](size_t index)
|
std::function<void(size_t)> iterFunc = [&](size_t index)
|
||||||
{
|
{
|
||||||
size_t ftime, finalImageIndex = 0;
|
size_t ftime, finalImageIndex = 0;
|
||||||
@ -344,7 +339,6 @@ bool EmberAnimate(EmberOptions& opt)
|
|||||||
Ember<T> centerEmber;
|
Ember<T> centerEmber;
|
||||||
vector<byte> finalImages[2];
|
vector<byte> finalImages[2];
|
||||||
std::thread writeThread;
|
std::thread writeThread;
|
||||||
|
|
||||||
os.imbue(std::locale(""));
|
os.imbue(std::locale(""));
|
||||||
|
|
||||||
while (atomfTime.fetch_add(opt.Dtime()), ((ftime = atomfTime.load()) <= opt.LastFrame()))
|
while (atomfTime.fetch_add(opt.Dtime()), ((ftime = atomfTime.load()) <= opt.LastFrame()))
|
||||||
@ -398,7 +392,9 @@ bool EmberAnimate(EmberOptions& opt)
|
|||||||
{
|
{
|
||||||
verboseCs.Enter();
|
verboseCs.Enter();
|
||||||
cout << "\nIters ran/requested: " + os.str() << endl;
|
cout << "\nIters ran/requested: " + os.str() << endl;
|
||||||
|
|
||||||
if (!opt.EmberCL()) cout << "Bad values: " << stats.m_Badvals << endl;
|
if (!opt.EmberCL()) cout << "Bad values: " << stats.m_Badvals << endl;
|
||||||
|
|
||||||
cout << "Render time: " << t.Format(stats.m_RenderMs) << endl;
|
cout << "Render time: " << t.Format(stats.m_RenderMs) << endl;
|
||||||
cout << "Pure iter time: " << t.Format(stats.m_IterMs) << endl;
|
cout << "Pure iter time: " << t.Format(stats.m_IterMs) << endl;
|
||||||
cout << "Iters/sec: " << size_t(stats.m_Iters / (stats.m_IterMs / 1000.0)) << endl;
|
cout << "Iters/sec: " << size_t(stats.m_Iters / (stats.m_IterMs / 1000.0)) << endl;
|
||||||
@ -425,7 +421,6 @@ bool EmberAnimate(EmberOptions& opt)
|
|||||||
if (writeThread.joinable())//One final check to make sure all writing is done before exiting this thread.
|
if (writeThread.joinable())//One final check to make sure all writing is done before exiting this thread.
|
||||||
writeThread.join();
|
writeThread.join();
|
||||||
};
|
};
|
||||||
|
|
||||||
threadVec.reserve(renderers.size());
|
threadVec.reserve(renderers.size());
|
||||||
|
|
||||||
for (size_t r = 0; r < renderers.size(); r++)
|
for (size_t r = 0; r < renderers.size(); r++)
|
||||||
@ -441,7 +436,6 @@ bool EmberAnimate(EmberOptions& opt)
|
|||||||
th.join();
|
th.join();
|
||||||
|
|
||||||
t.Toc("\nFinished in: ", true);
|
t.Toc("\nFinished in: ", true);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -455,7 +449,6 @@ int _tmain(int argc, _TCHAR* argv[])
|
|||||||
{
|
{
|
||||||
bool b = false;
|
bool b = false;
|
||||||
EmberOptions opt;
|
EmberOptions opt;
|
||||||
|
|
||||||
//Required for large allocs, else GPU memory usage will be severely limited to small sizes.
|
//Required for large allocs, else GPU memory usage will be severely limited to small sizes.
|
||||||
//This must be done in the application and not in the EmberCL DLL.
|
//This must be done in the application and not in the EmberCL DLL.
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
@ -466,8 +459,8 @@ int _tmain(int argc, _TCHAR* argv[])
|
|||||||
|
|
||||||
if (!opt.Populate(argc, argv, OPT_USE_ANIMATE))
|
if (!opt.Populate(argc, argv, OPT_USE_ANIMATE))
|
||||||
{
|
{
|
||||||
|
|
||||||
#ifdef DO_DOUBLE
|
#ifdef DO_DOUBLE
|
||||||
|
|
||||||
if (opt.Bits() == 64)
|
if (opt.Bits() == 64)
|
||||||
{
|
{
|
||||||
b = EmberAnimate<double>(opt);
|
b = EmberAnimate<double>(opt);
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
#if defined(_WIN32)
|
#if defined(_WIN32)
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include <SDKDDKVer.h>
|
#include <SDKDDKVer.h>
|
||||||
|
#include "GL/gl.h"
|
||||||
#elif defined(__APPLE__)
|
#elif defined(__APPLE__)
|
||||||
#include <OpenGL/gl.h>
|
#include <OpenGL/gl.h>
|
||||||
#else
|
#else
|
||||||
@ -23,21 +24,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
|
||||||
#ifdef NVIDIA
|
|
||||||
#ifdef CL_VERSION_1_2
|
|
||||||
#undef CL_VERSION_1_2
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if !defined(WIN32) && !defined(_WIN32)
|
|
||||||
#ifndef CL_VERSION_1_1
|
|
||||||
#define CL_VERSION_1_1
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <CL/cl.hpp>
|
#include <CL/cl.hpp>
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <atomic>
|
#include <atomic>
|
||||||
#include <cstdio>
|
#include <cstdio>
|
||||||
|
@ -34,6 +34,7 @@ static string ConstantDefinesString(bool doublePrecision)
|
|||||||
"typedef double real_t;\n"
|
"typedef double real_t;\n"
|
||||||
"typedef float real_bucket_t;\n"//Assume buckets are always float, even though iter calcs are in double.
|
"typedef float real_bucket_t;\n"//Assume buckets are always float, even though iter calcs are in double.
|
||||||
"typedef double2 real2;\n"
|
"typedef double2 real2;\n"
|
||||||
|
"typedef double3 real3;\n"
|
||||||
"typedef double4 real4;\n"
|
"typedef double4 real4;\n"
|
||||||
"typedef float4 real4_bucket;\n"//And here too.
|
"typedef float4 real4_bucket;\n"//And here too.
|
||||||
"#define EPS (DBL_EPSILON)\n"
|
"#define EPS (DBL_EPSILON)\n"
|
||||||
@ -48,6 +49,7 @@ static string ConstantDefinesString(bool doublePrecision)
|
|||||||
"typedef float real_t;\n"
|
"typedef float real_t;\n"
|
||||||
"typedef float real_bucket_t;\n"
|
"typedef float real_bucket_t;\n"
|
||||||
"typedef float2 real2;\n"
|
"typedef float2 real2;\n"
|
||||||
|
"typedef float3 real3;\n"
|
||||||
"typedef float4 real4;\n"
|
"typedef float4 real4;\n"
|
||||||
"typedef float4 real4_bucket;\n"
|
"typedef float4 real4_bucket;\n"
|
||||||
"#define EPS (FLT_EPSILON)\n"
|
"#define EPS (FLT_EPSILON)\n"
|
||||||
@ -116,7 +118,6 @@ static string ConstantDefinesString(bool doublePrecision)
|
|||||||
"#define INDEX_IN_GRID_2D (GLOBAL_ID_Y * GLOBAL_SIZE_X + GLOBAL_ID_X)\n"
|
"#define INDEX_IN_GRID_2D (GLOBAL_ID_Y * GLOBAL_SIZE_X + GLOBAL_ID_X)\n"
|
||||||
"#define INDEX_IN_GRID_3D ((GLOBAL_SIZE_X * GLOBAL_SIZE_Y * GLOBAL_ID_Z) + INDEX_IN_GRID_2D)\n"
|
"#define INDEX_IN_GRID_3D ((GLOBAL_SIZE_X * GLOBAL_SIZE_Y * GLOBAL_ID_Z) + INDEX_IN_GRID_2D)\n"
|
||||||
"\n";
|
"\n";
|
||||||
|
|
||||||
return os.str();
|
return os.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -141,15 +142,15 @@ struct ALIGN PointCL
|
|||||||
/// be supported, which will make it more than 4 members.
|
/// be supported, which will make it more than 4 members.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
static const char* PointCLStructString =
|
static const char* PointCLStructString =
|
||||||
"typedef struct __attribute__ " ALIGN_CL " _Point\n"
|
"typedef struct __attribute__ " ALIGN_CL " _Point\n"
|
||||||
"{\n"
|
"{\n"
|
||||||
" real_t m_X;\n"
|
" real_t m_X;\n"
|
||||||
" real_t m_Y;\n"
|
" real_t m_Y;\n"
|
||||||
" real_t m_Z;\n"
|
" real_t m_Z;\n"
|
||||||
" real_t m_ColorX;\n"
|
" real_t m_ColorX;\n"
|
||||||
" uint m_LastXfUsed;\n"
|
" uint m_LastXfUsed;\n"
|
||||||
"} Point;\n"
|
"} Point;\n"
|
||||||
"\n";
|
"\n";
|
||||||
|
|
||||||
#define MAX_CL_VARS 8//These must always match.
|
#define MAX_CL_VARS 8//These must always match.
|
||||||
#define MAX_CL_VARS_STRING "8"
|
#define MAX_CL_VARS_STRING "8"
|
||||||
@ -175,18 +176,18 @@ struct ALIGN XformCL
|
|||||||
/// The xform structure used to iterate in OpenCL.
|
/// The xform structure used to iterate in OpenCL.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
static const char* XformCLStructString =
|
static const char* XformCLStructString =
|
||||||
"typedef struct __attribute__ " ALIGN_CL " _XformCL\n"
|
"typedef struct __attribute__ " ALIGN_CL " _XformCL\n"
|
||||||
"{\n"
|
"{\n"
|
||||||
" real_t m_A, m_B, m_C, m_D, m_E, m_F;\n"
|
" real_t m_A, m_B, m_C, m_D, m_E, m_F;\n"
|
||||||
" real_t m_VariationWeights[" MAX_CL_VARS_STRING "];\n"
|
" real_t m_VariationWeights[" MAX_CL_VARS_STRING "];\n"
|
||||||
" real_t m_PostA, m_PostB, m_PostC, m_PostD, m_PostE, m_PostF;\n"
|
" real_t m_PostA, m_PostB, m_PostC, m_PostD, m_PostE, m_PostF;\n"
|
||||||
" real_t m_DirectColor;\n"
|
" real_t m_DirectColor;\n"
|
||||||
" real_t m_ColorSpeedCache;\n"
|
" real_t m_ColorSpeedCache;\n"
|
||||||
" real_t m_OneMinusColorCache;\n"
|
" real_t m_OneMinusColorCache;\n"
|
||||||
" real_t m_Opacity;\n"
|
" real_t m_Opacity;\n"
|
||||||
" real_t m_VizAdjusted;\n"
|
" real_t m_VizAdjusted;\n"
|
||||||
"} XformCL;\n"
|
"} XformCL;\n"
|
||||||
"\n";
|
"\n";
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// A structure on the host used to hold all of the needed information for an ember used on the device to iterate in OpenCL.
|
/// A structure on the host used to hold all of the needed information for an ember used on the device to iterate in OpenCL.
|
||||||
@ -210,27 +211,27 @@ struct ALIGN EmberCL
|
|||||||
/// The ember structure used to iterate in OpenCL.
|
/// The ember structure used to iterate in OpenCL.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
static const char* EmberCLStructString =
|
static const char* EmberCLStructString =
|
||||||
"typedef struct __attribute__ " ALIGN_CL " _EmberCL\n"
|
"typedef struct __attribute__ " ALIGN_CL " _EmberCL\n"
|
||||||
"{\n"
|
"{\n"
|
||||||
" real_t m_CamZPos;\n"
|
" real_t m_CamZPos;\n"
|
||||||
" real_t m_CamPerspective;\n"
|
" real_t m_CamPerspective;\n"
|
||||||
" real_t m_CamYaw;\n"
|
" real_t m_CamYaw;\n"
|
||||||
" real_t m_CamPitch;\n"
|
" real_t m_CamPitch;\n"
|
||||||
" real_t m_CamDepthBlur;\n"
|
" real_t m_CamDepthBlur;\n"
|
||||||
" real_t m_BlurCoef;\n"
|
" real_t m_BlurCoef;\n"
|
||||||
" real_t m_C00;\n"
|
" real_t m_C00;\n"
|
||||||
" real_t m_C01;\n"
|
" real_t m_C01;\n"
|
||||||
" real_t m_C02;\n"
|
" real_t m_C02;\n"
|
||||||
" real_t m_C10;\n"
|
" real_t m_C10;\n"
|
||||||
" real_t m_C11;\n"
|
" real_t m_C11;\n"
|
||||||
" real_t m_C12;\n"
|
" real_t m_C12;\n"
|
||||||
" real_t m_C20;\n"
|
" real_t m_C20;\n"
|
||||||
" real_t m_C21;\n"
|
" real_t m_C21;\n"
|
||||||
" real_t m_C22;\n"
|
" real_t m_C22;\n"
|
||||||
" real_t m_CenterX, m_CenterY;\n"
|
" real_t m_CenterX, m_CenterY;\n"
|
||||||
" real_t m_RotA, m_RotB, m_RotD, m_RotE;\n"
|
" real_t m_RotA, m_RotB, m_RotD, m_RotE;\n"
|
||||||
"} EmberCL;\n"
|
"} EmberCL;\n"
|
||||||
"\n";
|
"\n";
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// A structure on the host used to hold all of the needed information for cartesian to raster mapping used on the device to iterate in OpenCL.
|
/// A structure on the host used to hold all of the needed information for cartesian to raster mapping used on the device to iterate in OpenCL.
|
||||||
@ -249,14 +250,14 @@ struct ALIGN CarToRasCL
|
|||||||
/// The cartesian to raster structure used to iterate in OpenCL.
|
/// The cartesian to raster structure used to iterate in OpenCL.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
static const char* CarToRasCLStructString =
|
static const char* CarToRasCLStructString =
|
||||||
"typedef struct __attribute__ " ALIGN_CL " _CarToRasCL\n"
|
"typedef struct __attribute__ " ALIGN_CL " _CarToRasCL\n"
|
||||||
"{\n"
|
"{\n"
|
||||||
" real_t m_PixPerImageUnitW, m_RasLlX;\n"
|
" real_t m_PixPerImageUnitW, m_RasLlX;\n"
|
||||||
" uint m_RasWidth;\n"
|
" uint m_RasWidth;\n"
|
||||||
" real_t m_PixPerImageUnitH, m_RasLlY;\n"
|
" real_t m_PixPerImageUnitH, m_RasLlY;\n"
|
||||||
" real_t m_CarLlX, m_CarUrX, m_CarUrY, m_CarLlY;\n"
|
" real_t m_CarLlX, m_CarUrX, m_CarUrY, m_CarLlY;\n"
|
||||||
"} CarToRasCL;\n"
|
"} CarToRasCL;\n"
|
||||||
"\n";
|
"\n";
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// A structure on the host used to hold all of the needed information for density filtering used on the device to iterate in OpenCL.
|
/// A structure on the host used to hold all of the needed information for density filtering used on the device to iterate in OpenCL.
|
||||||
@ -283,20 +284,20 @@ struct ALIGN DensityFilterCL
|
|||||||
/// Note that the actual filter buffer is held elsewhere.
|
/// Note that the actual filter buffer is held elsewhere.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
static const char* DensityFilterCLStructString =
|
static const char* DensityFilterCLStructString =
|
||||||
"typedef struct __attribute__ " ALIGN_CL " _DensityFilterCL\n"
|
"typedef struct __attribute__ " ALIGN_CL " _DensityFilterCL\n"
|
||||||
"{\n"
|
"{\n"
|
||||||
" real_bucket_t m_Curve;\n"
|
" real_bucket_t m_Curve;\n"
|
||||||
" real_bucket_t m_K1;\n"
|
" real_bucket_t m_K1;\n"
|
||||||
" real_bucket_t m_K2;\n"
|
" real_bucket_t m_K2;\n"
|
||||||
" uint m_Supersample;\n"
|
" uint m_Supersample;\n"
|
||||||
" uint m_SuperRasW;\n"
|
" uint m_SuperRasW;\n"
|
||||||
" uint m_SuperRasH;\n"
|
" uint m_SuperRasH;\n"
|
||||||
" uint m_KernelSize;\n"
|
" uint m_KernelSize;\n"
|
||||||
" uint m_MaxFilterIndex;\n"
|
" uint m_MaxFilterIndex;\n"
|
||||||
" uint m_MaxFilteredCounts;\n"
|
" uint m_MaxFilteredCounts;\n"
|
||||||
" uint m_FilterWidth;\n"
|
" uint m_FilterWidth;\n"
|
||||||
"} DensityFilterCL;\n"
|
"} DensityFilterCL;\n"
|
||||||
"\n";
|
"\n";
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// A structure on the host used to hold all of the needed information for spatial filtering used on the device to iterate in OpenCL.
|
/// A structure on the host used to hold all of the needed information for spatial filtering used on the device to iterate in OpenCL.
|
||||||
@ -328,26 +329,26 @@ struct ALIGN SpatialFilterCL
|
|||||||
/// Note that the actual filter buffer is held elsewhere.
|
/// Note that the actual filter buffer is held elsewhere.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
static const char* SpatialFilterCLStructString =
|
static const char* SpatialFilterCLStructString =
|
||||||
"typedef struct __attribute__ ((aligned (16))) _SpatialFilterCL\n"
|
"typedef struct __attribute__ ((aligned (16))) _SpatialFilterCL\n"
|
||||||
"{\n"
|
"{\n"
|
||||||
" uint m_SuperRasW;\n"
|
" uint m_SuperRasW;\n"
|
||||||
" uint m_SuperRasH;\n"
|
" uint m_SuperRasH;\n"
|
||||||
" uint m_FinalRasW;\n"
|
" uint m_FinalRasW;\n"
|
||||||
" uint m_FinalRasH;\n"
|
" uint m_FinalRasH;\n"
|
||||||
" uint m_Supersample;\n"
|
" uint m_Supersample;\n"
|
||||||
" uint m_FilterWidth;\n"
|
" uint m_FilterWidth;\n"
|
||||||
" uint m_NumChannels;\n"
|
" uint m_NumChannels;\n"
|
||||||
" uint m_BytesPerChannel;\n"
|
" uint m_BytesPerChannel;\n"
|
||||||
" uint m_DensityFilterOffset;\n"
|
" uint m_DensityFilterOffset;\n"
|
||||||
" uint m_Transparency;\n"
|
" uint m_Transparency;\n"
|
||||||
" uint m_YAxisUp;\n"
|
" uint m_YAxisUp;\n"
|
||||||
" real_bucket_t m_Vibrancy;\n"
|
" real_bucket_t m_Vibrancy;\n"
|
||||||
" real_bucket_t m_HighlightPower;\n"
|
" real_bucket_t m_HighlightPower;\n"
|
||||||
" real_bucket_t m_Gamma;\n"
|
" real_bucket_t m_Gamma;\n"
|
||||||
" real_bucket_t m_LinRange;\n"
|
" real_bucket_t m_LinRange;\n"
|
||||||
" real_bucket_t m_Background[4];\n"//For some reason, using float4/double4 here does not align no matter what. So just use an array of 4.
|
" real_bucket_t m_Background[4];\n"//For some reason, using float4/double4 here does not align no matter what. So just use an array of 4.
|
||||||
"} SpatialFilterCL;\n"
|
"} SpatialFilterCL;\n"
|
||||||
"\n";
|
"\n";
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// EmberCL makes extensive use of the build in vector types, however accessing
|
/// EmberCL makes extensive use of the build in vector types, however accessing
|
||||||
@ -355,40 +356,40 @@ static const char* SpatialFilterCLStructString =
|
|||||||
/// Declaring them in a union with a buffer resolves this problem.
|
/// Declaring them in a union with a buffer resolves this problem.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
static const char* UnionCLStructString =
|
static const char* UnionCLStructString =
|
||||||
"typedef union\n"
|
"typedef union\n"
|
||||||
"{\n"
|
"{\n"
|
||||||
" uchar3 m_Uchar3;\n"
|
" uchar3 m_Uchar3;\n"
|
||||||
" uchar m_Uchars[3];\n"
|
" uchar m_Uchars[3];\n"
|
||||||
"} uchar3uchars;\n"
|
"} uchar3uchars;\n"
|
||||||
"\n"
|
"\n"
|
||||||
"typedef union\n"
|
"typedef union\n"
|
||||||
"{\n"
|
"{\n"
|
||||||
" uchar4 m_Uchar4;\n"
|
" uchar4 m_Uchar4;\n"
|
||||||
" uchar m_Uchars[4];\n"
|
" uchar m_Uchars[4];\n"
|
||||||
"} uchar4uchars;\n"
|
"} uchar4uchars;\n"
|
||||||
"\n"
|
"\n"
|
||||||
"typedef union\n"
|
"typedef union\n"
|
||||||
"{\n"
|
"{\n"
|
||||||
" uint4 m_Uint4;\n"
|
" uint4 m_Uint4;\n"
|
||||||
" uint m_Uints[4];\n"
|
" uint m_Uints[4];\n"
|
||||||
"} uint4uints;\n"
|
"} uint4uints;\n"
|
||||||
"\n"
|
"\n"
|
||||||
"typedef union\n"//Use in places where float is required.
|
"typedef union\n"//Use in places where float is required.
|
||||||
"{\n"
|
"{\n"
|
||||||
" float4 m_Float4;\n"
|
" float4 m_Float4;\n"
|
||||||
" float m_Floats[4];\n"
|
" float m_Floats[4];\n"
|
||||||
"} float4floats;\n"
|
"} float4floats;\n"
|
||||||
"\n"
|
"\n"
|
||||||
"typedef union\n"//Use in places where float or double can be used depending on the template type.
|
"typedef union\n"//Use in places where float or double can be used depending on the template type.
|
||||||
"{\n"
|
"{\n"
|
||||||
" real4 m_Real4;\n"
|
" real4 m_Real4;\n"
|
||||||
" real_t m_Reals[4];\n"
|
" real_t m_Reals[4];\n"
|
||||||
"} real4reals;\n"
|
"} real4reals;\n"
|
||||||
"\n"
|
"\n"
|
||||||
"typedef union\n"//Used to match the bucket template type.
|
"typedef union\n"//Used to match the bucket template type.
|
||||||
"{\n"
|
"{\n"
|
||||||
" real4_bucket m_Real4;\n"
|
" real4_bucket m_Real4;\n"
|
||||||
" real_bucket_t m_Reals[4];\n"
|
" real_bucket_t m_Reals[4];\n"
|
||||||
"} real4reals_bucket;\n"
|
"} real4reals_bucket;\n"
|
||||||
"\n";
|
"\n";
|
||||||
}
|
}
|
||||||
|
@ -15,31 +15,26 @@ FunctionMapper::FunctionMapper()
|
|||||||
" intPrec temp = (x >= 0.0 ? (intPrec)(x + 0.5) : (intPrec)(x - 0.5));\n"
|
" intPrec temp = (x >= 0.0 ? (intPrec)(x + 0.5) : (intPrec)(x - 0.5));\n"
|
||||||
" return (real_t)temp;\n"
|
" return (real_t)temp;\n"
|
||||||
"}\n";
|
"}\n";
|
||||||
|
|
||||||
m_GlobalMap["Round"] =
|
m_GlobalMap["Round"] =
|
||||||
"inline real_t Round(real_t r)\n"
|
"inline real_t Round(real_t r)\n"
|
||||||
"{\n"
|
"{\n"
|
||||||
" return (r > 0.0) ? floor(r + 0.5) : ceil(r - 0.5);\n"
|
" return (r > 0.0) ? floor(r + 0.5) : ceil(r - 0.5);\n"
|
||||||
"}\n";
|
"}\n";
|
||||||
|
|
||||||
m_GlobalMap["Sign"] =
|
m_GlobalMap["Sign"] =
|
||||||
"inline real_t Sign(real_t v)\n"
|
"inline real_t Sign(real_t v)\n"
|
||||||
"{\n"
|
"{\n"
|
||||||
" return (v < 0.0) ? -1 : (v > 0.0) ? 1 : 0.0;\n"
|
" return (v < 0.0) ? -1 : (v > 0.0) ? 1 : 0.0;\n"
|
||||||
"}\n";
|
"}\n";
|
||||||
|
|
||||||
m_GlobalMap["SignNz"] =
|
m_GlobalMap["SignNz"] =
|
||||||
"inline real_t SignNz(real_t v)\n"
|
"inline real_t SignNz(real_t v)\n"
|
||||||
"{\n"
|
"{\n"
|
||||||
" return (v < 0.0) ? -1.0 : 1.0;\n"
|
" return (v < 0.0) ? -1.0 : 1.0;\n"
|
||||||
"}\n";
|
"}\n";
|
||||||
|
|
||||||
m_GlobalMap["Sqr"] =
|
m_GlobalMap["Sqr"] =
|
||||||
"inline real_t Sqr(real_t v)\n"
|
"inline real_t Sqr(real_t v)\n"
|
||||||
"{\n"
|
"{\n"
|
||||||
" return v * v;\n"
|
" return v * v;\n"
|
||||||
"}\n";
|
"}\n";
|
||||||
|
|
||||||
m_GlobalMap["SafeSqrt"] =
|
m_GlobalMap["SafeSqrt"] =
|
||||||
"inline real_t SafeSqrt(real_t x)\n"
|
"inline real_t SafeSqrt(real_t x)\n"
|
||||||
"{\n"
|
"{\n"
|
||||||
@ -48,49 +43,41 @@ FunctionMapper::FunctionMapper()
|
|||||||
"\n"
|
"\n"
|
||||||
" return sqrt(x);\n"
|
" return sqrt(x);\n"
|
||||||
"}\n";
|
"}\n";
|
||||||
|
|
||||||
m_GlobalMap["Cube"] =
|
m_GlobalMap["Cube"] =
|
||||||
"inline real_t Cube(real_t v)\n"
|
"inline real_t Cube(real_t v)\n"
|
||||||
"{\n"
|
"{\n"
|
||||||
" return v * v * v;\n"
|
" return v * v * v;\n"
|
||||||
"}\n";
|
"}\n";
|
||||||
|
|
||||||
m_GlobalMap["Hypot"] =
|
m_GlobalMap["Hypot"] =
|
||||||
"inline real_t Hypot(real_t x, real_t y)\n"
|
"inline real_t Hypot(real_t x, real_t y)\n"
|
||||||
"{\n"
|
"{\n"
|
||||||
" return sqrt(SQR(x) + SQR(y));\n"
|
" return sqrt(SQR(x) + SQR(y));\n"
|
||||||
"}\n";
|
"}\n";
|
||||||
|
|
||||||
m_GlobalMap["Spread"] =
|
m_GlobalMap["Spread"] =
|
||||||
"inline real_t Spread(real_t x, real_t y)\n"
|
"inline real_t Spread(real_t x, real_t y)\n"
|
||||||
"{\n"
|
"{\n"
|
||||||
" return Hypot(x, y) * ((x) > 0.0 ? 1.0 : -1.0);\n"
|
" return Hypot(x, y) * ((x) > 0.0 ? 1.0 : -1.0);\n"
|
||||||
"}\n";
|
"}\n";
|
||||||
|
|
||||||
m_GlobalMap["Powq4"] =
|
m_GlobalMap["Powq4"] =
|
||||||
"inline real_t Powq4(real_t x, real_t y)\n"
|
"inline real_t Powq4(real_t x, real_t y)\n"
|
||||||
"{\n"
|
"{\n"
|
||||||
" return pow(fabs(x), y) * SignNz(x);\n"
|
" return pow(fabs(x), y) * SignNz(x);\n"
|
||||||
"}\n";
|
"}\n";
|
||||||
|
|
||||||
m_GlobalMap["Powq4c"] =
|
m_GlobalMap["Powq4c"] =
|
||||||
"inline real_t Powq4c(real_t x, real_t y)\n"
|
"inline real_t Powq4c(real_t x, real_t y)\n"
|
||||||
"{\n"
|
"{\n"
|
||||||
" return y == 1.0 ? x : Powq4(x, y);\n"
|
" return y == 1.0 ? x : Powq4(x, y);\n"
|
||||||
"}\n";
|
"}\n";
|
||||||
|
|
||||||
m_GlobalMap["Zeps"] =
|
m_GlobalMap["Zeps"] =
|
||||||
"inline real_t Zeps(real_t x)\n"
|
"inline real_t Zeps(real_t x)\n"
|
||||||
"{\n"
|
"{\n"
|
||||||
" return x == 0.0 ? EPS : x;\n"
|
" return x == 0.0 ? EPS : x;\n"
|
||||||
"}\n";
|
"}\n";
|
||||||
|
|
||||||
m_GlobalMap["Lerp"] =
|
m_GlobalMap["Lerp"] =
|
||||||
"inline real_t Lerp(real_t a, real_t b, real_t p)\n"
|
"inline real_t Lerp(real_t a, real_t b, real_t p)\n"
|
||||||
"{\n"
|
"{\n"
|
||||||
" return a + (b - a) * p;\n"
|
" return a + (b - a) * p;\n"
|
||||||
"}\n";
|
"}\n";
|
||||||
|
|
||||||
m_GlobalMap["Fabsmod"] =
|
m_GlobalMap["Fabsmod"] =
|
||||||
"inline real_t Fabsmod(real_t v)\n"
|
"inline real_t Fabsmod(real_t v)\n"
|
||||||
"{\n"
|
"{\n"
|
||||||
@ -98,37 +85,31 @@ FunctionMapper::FunctionMapper()
|
|||||||
"\n"
|
"\n"
|
||||||
" return modf(v, &dummy);\n"
|
" return modf(v, &dummy);\n"
|
||||||
"}\n";
|
"}\n";
|
||||||
|
|
||||||
m_GlobalMap["Fosc"] =
|
m_GlobalMap["Fosc"] =
|
||||||
"inline real_t Fosc(real_t p, real_t amp, real_t ph)\n"
|
"inline real_t Fosc(real_t p, real_t amp, real_t ph)\n"
|
||||||
"{\n"
|
"{\n"
|
||||||
" return 0.5 - cos(p * amp + ph) * 0.5;\n"
|
" return 0.5 - cos(p * amp + ph) * 0.5;\n"
|
||||||
"}\n";
|
"}\n";
|
||||||
|
|
||||||
m_GlobalMap["Foscn"] =
|
m_GlobalMap["Foscn"] =
|
||||||
"inline real_t Foscn(real_t p, real_t ph)\n"
|
"inline real_t Foscn(real_t p, real_t ph)\n"
|
||||||
"{\n"
|
"{\n"
|
||||||
" return 0.5 - cos(p + ph) * 0.5;\n"
|
" return 0.5 - cos(p + ph) * 0.5;\n"
|
||||||
"}\n";
|
"}\n";
|
||||||
|
|
||||||
m_GlobalMap["LogScale"] =
|
m_GlobalMap["LogScale"] =
|
||||||
"inline real_t LogScale(real_t x)\n"
|
"inline real_t LogScale(real_t x)\n"
|
||||||
"{\n"
|
"{\n"
|
||||||
" return x == 0.0 ? 0.0 : log((fabs(x) + 1) * M_E) * SignNz(x) / M_E;\n"
|
" return x == 0.0 ? 0.0 : log((fabs(x) + 1) * M_E) * SignNz(x) / M_E;\n"
|
||||||
"}\n";
|
"}\n";
|
||||||
|
|
||||||
m_GlobalMap["LogMap"] =
|
m_GlobalMap["LogMap"] =
|
||||||
"inline real_t LogMap(real_t x)\n"
|
"inline real_t LogMap(real_t x)\n"
|
||||||
"{\n"
|
"{\n"
|
||||||
" return x == 0.0 ? 0.0 : (M_E + log(x * M_E)) * 0.25 * SignNz(x);\n"
|
" return x == 0.0 ? 0.0 : (M_E + log(x * M_E)) * 0.25 * SignNz(x);\n"
|
||||||
"}\n";
|
"}\n";
|
||||||
|
|
||||||
m_GlobalMap["ClampGte"] =
|
m_GlobalMap["ClampGte"] =
|
||||||
"inline real_t ClampGte(real_t val, real_t gte)\n"
|
"inline real_t ClampGte(real_t val, real_t gte)\n"
|
||||||
"{\n"
|
"{\n"
|
||||||
" return (val < gte) ? gte : val;\n"
|
" return (val < gte) ? gte : val;\n"
|
||||||
"}\n";
|
"}\n";
|
||||||
|
|
||||||
m_GlobalMap["Swap"] =
|
m_GlobalMap["Swap"] =
|
||||||
"inline void Swap(real_t* val1, real_t* val2)\n"
|
"inline void Swap(real_t* val1, real_t* val2)\n"
|
||||||
"{\n"
|
"{\n"
|
||||||
@ -136,6 +117,165 @@ FunctionMapper::FunctionMapper()
|
|||||||
" *val1 = *val2;\n"
|
" *val1 = *val2;\n"
|
||||||
" *val2 = tmp;\n"
|
" *val2 = tmp;\n"
|
||||||
"}\n";
|
"}\n";
|
||||||
|
m_GlobalMap["Vratio"] =
|
||||||
|
"inline real_t Vratio(real2* p, real2* q, real2* u)\n"
|
||||||
|
"{\n"
|
||||||
|
" real_t pmQx, pmQy;\n"
|
||||||
|
"\n"
|
||||||
|
" pmQx = (*p).x - (*q).x;\n"
|
||||||
|
" pmQy = (*p).y - (*q).y;\n"
|
||||||
|
"\n"
|
||||||
|
" if (pmQx == 0 && pmQy == 0)\n"
|
||||||
|
" return 1.0;\n"
|
||||||
|
"\n"
|
||||||
|
" return 2 * (((*u).x - (*q).x) * pmQx + ((*u).y - (*q).y) * pmQy) / (pmQx * pmQx + pmQy * pmQy);\n"
|
||||||
|
"}\n";
|
||||||
|
m_GlobalMap["Closest"] =
|
||||||
|
"inline int Closest(real2* p, int n, real2* u)\n"
|
||||||
|
"{\n"
|
||||||
|
" real_t d2;\n"
|
||||||
|
" real_t d2min = TMAX;\n"
|
||||||
|
" int i, j = 0;\n"
|
||||||
|
"\n"
|
||||||
|
" for (i = 0; i < n; i++)\n"
|
||||||
|
" {\n"
|
||||||
|
" d2 = Sqr(p[i].x - (*u).x) + Sqr(p[i].y - (*u).y);\n"
|
||||||
|
"\n"
|
||||||
|
" if (d2 < d2min)\n"
|
||||||
|
" {\n"
|
||||||
|
" d2min = d2;\n"
|
||||||
|
" j = i;\n"
|
||||||
|
" }\n"
|
||||||
|
" }\n"
|
||||||
|
"\n"
|
||||||
|
" return j;\n"
|
||||||
|
"}\n";
|
||||||
|
m_GlobalMap["Voronoi"] =
|
||||||
|
"inline real_t Voronoi(real2* p, int n, int q, real2* u)\n"
|
||||||
|
"{\n"
|
||||||
|
" real_t ratio;\n"
|
||||||
|
" real_t ratiomax = TLOW;\n"
|
||||||
|
" int i;\n"
|
||||||
|
"\n"
|
||||||
|
" for (i = 0; i < n; i++)\n"
|
||||||
|
" {\n"
|
||||||
|
" if (i != q)\n"
|
||||||
|
" {\n"
|
||||||
|
" ratio = Vratio(&p[i], &p[q], u);\n"
|
||||||
|
"\n"
|
||||||
|
" if (ratio > ratiomax)\n"
|
||||||
|
" ratiomax = ratio;\n"
|
||||||
|
" }\n"
|
||||||
|
" }\n"
|
||||||
|
"\n"
|
||||||
|
" return ratiomax;\n"
|
||||||
|
"}\n";
|
||||||
|
m_GlobalMap["SimplexNoise3D"] =
|
||||||
|
"inline real_t SimplexNoise3D(real3* v, __global real_t* p, __global real3* grad)\n"
|
||||||
|
"{\n"
|
||||||
|
" real3 c[4];\n"
|
||||||
|
" real_t n = 0;\n"
|
||||||
|
" int gi[4];\n"
|
||||||
|
" real_t t;\n"
|
||||||
|
" real_t skewIn = ((*v).x + (*v).y + (*v).z) * 0.3333;\n"
|
||||||
|
" int i = (int)floor((*v).x + skewIn);\n"
|
||||||
|
" int j = (int)floor((*v).y + skewIn);\n"
|
||||||
|
" int k = (int)floor((*v).z + skewIn);\n"
|
||||||
|
" t = (i + j + k) * 0.16666;\n"
|
||||||
|
" real_t x0 = i - t;\n"
|
||||||
|
" real_t y0 = j - t;\n"
|
||||||
|
" real_t z0 = k - t;\n"
|
||||||
|
" c[0].x = (*v).x - x0;\n"
|
||||||
|
" c[0].y = (*v).y - y0;\n"
|
||||||
|
" c[0].z = (*v).z - z0;\n"
|
||||||
|
" int i1, j1, k1;\n"
|
||||||
|
" int i2, j2, k2;\n"
|
||||||
|
"\n"
|
||||||
|
" if (c[0].x >= c[0].y)\n"
|
||||||
|
" {\n"
|
||||||
|
" if (c[0].y >= c[0].z)\n"
|
||||||
|
" {\n"
|
||||||
|
" i1 = 1; j1 = 0; k1 = 0; i2 = 1; j2 = 1; k2 = 0;\n"
|
||||||
|
" }\n"
|
||||||
|
" else\n"
|
||||||
|
" {\n"
|
||||||
|
" if (c[0].x >= c[0].z)\n"
|
||||||
|
" {\n"
|
||||||
|
" i1 = 1; j1 = 0; k1 = 0; i2 = 1; j2 = 0; k2 = 1;\n"
|
||||||
|
" }\n"
|
||||||
|
" else\n"
|
||||||
|
" {\n"
|
||||||
|
" i1 = 0; j1 = 0; k1 = 1; i2 = 1; j2 = 0; k2 = 1;\n"
|
||||||
|
" }\n"
|
||||||
|
" }\n"
|
||||||
|
" }\n"
|
||||||
|
" else\n"
|
||||||
|
" {\n"
|
||||||
|
" if (c[0].y < c[0].z)\n"
|
||||||
|
" {\n"
|
||||||
|
" i1 = 0; j1 = 0; k1 = 1; i2 = 0; j2 = 1; k2 = 1;\n"
|
||||||
|
" }\n"
|
||||||
|
" else\n"
|
||||||
|
" {\n"
|
||||||
|
" if (c[0].x < c[0].z)\n"
|
||||||
|
" {\n"
|
||||||
|
" i1 = 0; j1 = 1; k1 = 0; i2 = 0; j2 = 1; k2 = 1;\n"
|
||||||
|
" }\n"
|
||||||
|
" else\n"
|
||||||
|
" {\n"
|
||||||
|
" i1 = 0; j1 = 1; k1 = 0; i2 = 1; j2 = 1; k2 = 0;\n"
|
||||||
|
" }\n"
|
||||||
|
" }\n"
|
||||||
|
" }\n"
|
||||||
|
"\n"
|
||||||
|
" c[1].x = c[0].x - i1 + 0.16666;\n"
|
||||||
|
" c[1].y = c[0].y - j1 + 0.16666;\n"
|
||||||
|
" c[1].z = c[0].z - k1 + 0.16666;\n"
|
||||||
|
" c[2].x = c[0].x - i2 + 2 * 0.16666;\n"
|
||||||
|
" c[2].y = c[0].y - j2 + 2 * 0.16666;\n"
|
||||||
|
" c[2].z = c[0].z - k2 + 2 * 0.16666;\n"
|
||||||
|
" c[3].x = c[0].x - 1 + 3 * 0.16666;\n"
|
||||||
|
" c[3].y = c[0].y - 1 + 3 * 0.16666;\n"
|
||||||
|
" c[3].z = c[0].z - 1 + 3 * 0.16666;\n"
|
||||||
|
" int ii = i & 0x3ff;\n"
|
||||||
|
" int jj = j & 0x3ff;\n"
|
||||||
|
" int kk = k & 0x3ff;\n"
|
||||||
|
" gi[0] = (int)p[ii + (int)p[jj + (int)p[kk]]];\n"
|
||||||
|
" gi[1] = (int)p[ii + i1 + (int)p[jj + j1 + (int)p[kk + k1]]];\n"
|
||||||
|
" gi[2] = (int)p[ii + i2 + (int)p[jj + j2 + (int)p[kk + k2]]];\n"
|
||||||
|
" gi[3] = (int)p[ii + 1 + (int)p[jj + 1 + (int)p[kk + 1]]];\n"
|
||||||
|
" for (uint corner = 0; corner < 4; corner++)\n"
|
||||||
|
" {\n"
|
||||||
|
" t = 0.6 - c[corner].x * c[corner].x - c[corner].y * c[corner].y - c[corner].z * c[corner].z;\n"
|
||||||
|
"\n"
|
||||||
|
" if (t > 0)\n"
|
||||||
|
" {\n"
|
||||||
|
" real3 u = grad[gi[corner]];\n"
|
||||||
|
" t *= t;\n"
|
||||||
|
" n += t * t * (u.x * c[corner].x + u.y * c[corner].y + u.z * c[corner].z);\n"
|
||||||
|
" }\n"
|
||||||
|
" }\n"
|
||||||
|
"\n"
|
||||||
|
" return 32 * n;\n"
|
||||||
|
"}\n";
|
||||||
|
m_GlobalMap["PerlinNoise3D"] =
|
||||||
|
"inline real_t PerlinNoise3D(real3* v, __global real_t* p, __global real3* grad, real_t aScale, real_t fScale, int octaves)\n"
|
||||||
|
"{\n"
|
||||||
|
" int i;\n"
|
||||||
|
" real_t n = 0, a = 1;\n"
|
||||||
|
" real3 u = *v;\n"
|
||||||
|
"\n"
|
||||||
|
" for (i = 0; i < octaves; i++)\n"
|
||||||
|
" {\n"
|
||||||
|
" n += SimplexNoise3D(&u, p, grad) / a;\n"
|
||||||
|
" a *= aScale;\n"
|
||||||
|
" u.x *= fScale;\n"
|
||||||
|
" u.y *= fScale;\n"
|
||||||
|
" u.x *= fScale;\n"
|
||||||
|
" }\n"
|
||||||
|
"\n"
|
||||||
|
" return n;\n"
|
||||||
|
"}\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -38,15 +38,14 @@ template <typename T> const string& IterOpenCLKernelCreator<T>::IterEntryPoint()
|
|||||||
/// <param name="doAccum">Debugging parameter to include or omit accumulating to the histogram. Default: true.</param>
|
/// <param name="doAccum">Debugging parameter to include or omit accumulating to the histogram. Default: true.</param>
|
||||||
/// <returns>The kernel string</returns>
|
/// <returns>The kernel string</returns>
|
||||||
template <typename T>
|
template <typename T>
|
||||||
string IterOpenCLKernelCreator<T>::CreateIterKernelString(const Ember<T>& ember, string& parVarDefines, bool lockAccum, bool doAccum)
|
string IterOpenCLKernelCreator<T>::CreateIterKernelString(const Ember<T>& ember, const string& parVarDefines, const string& globalSharedDefines, bool lockAccum, bool doAccum)
|
||||||
{
|
{
|
||||||
bool doublePrecision = typeid(T) == typeid(double);
|
bool doublePrecision = typeid(T) == typeid(double);
|
||||||
size_t i, v, varIndex, varCount, totalXformCount = ember.TotalXformCount();
|
size_t i, v, varIndex, varCount, totalXformCount = ember.TotalXformCount();
|
||||||
ostringstream kernelIterBody, xformFuncs, os;
|
ostringstream kernelIterBody, xformFuncs, os;
|
||||||
vector<Variation<T>*> variations;
|
vector<Variation<T>*> variations;
|
||||||
|
|
||||||
xformFuncs << VariationStateString(ember);
|
xformFuncs << VariationStateString(ember);
|
||||||
xformFuncs << parVarDefines << endl;
|
xformFuncs << parVarDefines << globalSharedDefines;
|
||||||
ember.GetPresentVariations(variations);
|
ember.GetPresentVariations(variations);
|
||||||
|
|
||||||
for (auto var : variations)
|
for (auto var : variations)
|
||||||
@ -56,16 +55,14 @@ string IterOpenCLKernelCreator<T>::CreateIterKernelString(const Ember<T>& ember,
|
|||||||
for (i = 0; i < totalXformCount; i++)
|
for (i = 0; i < totalXformCount; i++)
|
||||||
{
|
{
|
||||||
Xform<T>* xform = ember.GetTotalXform(i);
|
Xform<T>* xform = ember.GetTotalXform(i);
|
||||||
//size_t totalVarCount = xform->TotalVariationCount();
|
|
||||||
bool needPrecalcSumSquares = false;
|
bool needPrecalcSumSquares = false;
|
||||||
bool needPrecalcSqrtSumSquares = false;
|
bool needPrecalcSqrtSumSquares = false;
|
||||||
bool needPrecalcAngles = false;
|
bool needPrecalcAngles = false;
|
||||||
bool needPrecalcAtanXY = false;
|
bool needPrecalcAtanXY = false;
|
||||||
bool needPrecalcAtanYX = false;
|
bool needPrecalcAtanYX = false;
|
||||||
|
|
||||||
v = varIndex = varCount = 0;
|
v = varIndex = varCount = 0;
|
||||||
xformFuncs <<
|
xformFuncs <<
|
||||||
"void Xform" << i << "(__constant XformCL* xform, __constant real_t* parVars, Point* inPoint, Point* outPoint, uint2* mwc, VariationState* varState)\n" <<
|
"void Xform" << i << "(__constant XformCL* xform, __constant real_t* parVars, __global real_t* globalShared, Point* inPoint, Point* outPoint, uint2* mwc, VariationState* varState)\n" <<
|
||||||
"{\n"
|
"{\n"
|
||||||
" real_t transX, transY, transZ;\n"
|
" real_t transX, transY, transZ;\n"
|
||||||
" real4 vIn, vOut = 0.0;\n";
|
" real4 vIn, vOut = 0.0;\n";
|
||||||
@ -113,7 +110,6 @@ string IterOpenCLKernelCreator<T>::CreateIterKernelString(const Ember<T>& ember,
|
|||||||
" transX = (xform->m_A * inPoint->m_X) + (xform->m_B * inPoint->m_Y) + xform->m_C;\n" <<
|
" transX = (xform->m_A * inPoint->m_X) + (xform->m_B * inPoint->m_Y) + xform->m_C;\n" <<
|
||||||
" transY = (xform->m_D * inPoint->m_X) + (xform->m_E * inPoint->m_Y) + xform->m_F;\n" <<
|
" transY = (xform->m_D * inPoint->m_X) + (xform->m_E * inPoint->m_Y) + xform->m_F;\n" <<
|
||||||
" transZ = inPoint->m_Z;\n";
|
" transZ = inPoint->m_Z;\n";
|
||||||
|
|
||||||
varCount = xform->PreVariationCount();
|
varCount = xform->PreVariationCount();
|
||||||
|
|
||||||
if (varCount > 0)
|
if (varCount > 0)
|
||||||
@ -127,9 +123,9 @@ string IterOpenCLKernelCreator<T>::CreateIterKernelString(const Ember<T>& ember,
|
|||||||
{
|
{
|
||||||
xformFuncs << "\n\t//" << var->Name() << ".\n";
|
xformFuncs << "\n\t//" << var->Name() << ".\n";
|
||||||
xformFuncs << var->PrecalcOpenCLString();
|
xformFuncs << var->PrecalcOpenCLString();
|
||||||
xformFuncs << xform->ReadOpenCLString(VARTYPE_PRE) << endl;
|
xformFuncs << xform->ReadOpenCLString(VARTYPE_PRE) << "\n";
|
||||||
xformFuncs << var->OpenCLString() << endl;
|
xformFuncs << var->OpenCLString() << "\n";
|
||||||
xformFuncs << xform->WriteOpenCLString(VARTYPE_PRE, var->AssignType()) << endl;
|
xformFuncs << xform->WriteOpenCLString(VARTYPE_PRE, var->AssignType()) << "\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -159,7 +155,6 @@ string IterOpenCLKernelCreator<T>::CreateIterKernelString(const Ember<T>& ember,
|
|||||||
xformFuncs << "\n\toutPoint->m_Z = 0;\n";
|
xformFuncs << "\n\toutPoint->m_Z = 0;\n";
|
||||||
xformFuncs << "\n\t//Apply each of the " << xform->VariationCount() << " regular variations in this xform.\n\n";
|
xformFuncs << "\n\t//Apply each of the " << xform->VariationCount() << " regular variations in this xform.\n\n";
|
||||||
xformFuncs << xform->ReadOpenCLString(VARTYPE_REG);
|
xformFuncs << xform->ReadOpenCLString(VARTYPE_REG);
|
||||||
|
|
||||||
varCount += xform->VariationCount();
|
varCount += xform->VariationCount();
|
||||||
|
|
||||||
//Output the code for each regular variation in this xform.
|
//Output the code for each regular variation in this xform.
|
||||||
@ -194,8 +189,8 @@ string IterOpenCLKernelCreator<T>::CreateIterKernelString(const Ember<T>& ember,
|
|||||||
{
|
{
|
||||||
xformFuncs << "\n\t//" << var->Name() << ".\n";
|
xformFuncs << "\n\t//" << var->Name() << ".\n";
|
||||||
xformFuncs << var->PrecalcOpenCLString();
|
xformFuncs << var->PrecalcOpenCLString();
|
||||||
xformFuncs << xform->ReadOpenCLString(VARTYPE_POST) << endl;
|
xformFuncs << xform->ReadOpenCLString(VARTYPE_POST) << "\n";
|
||||||
xformFuncs << var->OpenCLString() << endl;
|
xformFuncs << var->OpenCLString() << "\n";
|
||||||
xformFuncs << xform->WriteOpenCLString(VARTYPE_POST, var->AssignType()) << (varIndex == varCount - 1 ? "\n" : "\n\n");
|
xformFuncs << xform->WriteOpenCLString(VARTYPE_POST, var->AssignType()) << (varIndex == varCount - 1 ? "\n" : "\n\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -211,7 +206,7 @@ string IterOpenCLKernelCreator<T>::CreateIterKernelString(const Ember<T>& ember,
|
|||||||
"\toutPoint->m_Y = (xform->m_PostD * tempX) + (xform->m_PostE * outPoint->m_Y) + xform->m_PostF;\n";
|
"\toutPoint->m_Y = (xform->m_PostD * tempX) + (xform->m_PostE * outPoint->m_Y) + xform->m_PostF;\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
xformFuncs << "\toutPoint->m_ColorX = outPoint->m_ColorX + xform->m_DirectColor * (tempColor - outPoint->m_ColorX);\n";
|
xformFuncs << "\toutPoint->m_ColorX = tempColor + xform->m_DirectColor * (outPoint->m_ColorX - tempColor);\n";
|
||||||
xformFuncs << "}\n"
|
xformFuncs << "}\n"
|
||||||
<< "\n";
|
<< "\n";
|
||||||
}
|
}
|
||||||
@ -239,6 +234,7 @@ string IterOpenCLKernelCreator<T>::CreateIterKernelString(const Ember<T>& ember,
|
|||||||
" __constant EmberCL* ember,\n"
|
" __constant EmberCL* ember,\n"
|
||||||
" __constant XformCL* xforms,\n"
|
" __constant XformCL* xforms,\n"
|
||||||
" __constant real_t* parVars,\n"
|
" __constant real_t* parVars,\n"
|
||||||
|
" __global real_t* globalShared,\n"
|
||||||
" __global uchar* xformDistributions,\n"//Using uchar is quicker than uint. Can't be constant because the size can be too large to fit when using xaos.
|
" __global uchar* xformDistributions,\n"//Using uchar is quicker than uint. Can't be constant because the size can be too large to fit when using xaos.
|
||||||
" __constant CarToRasCL* carToRas,\n"
|
" __constant CarToRasCL* carToRas,\n"
|
||||||
" __global real4reals_bucket* histogram,\n"
|
" __global real4reals_bucket* histogram,\n"
|
||||||
@ -268,7 +264,6 @@ string IterOpenCLKernelCreator<T>::CreateIterKernelString(const Ember<T>& ember,
|
|||||||
" uint threadsMinus1 = NTHREADS - 1;\n"
|
" uint threadsMinus1 = NTHREADS - 1;\n"
|
||||||
" VariationState varState;\n"
|
" VariationState varState;\n"
|
||||||
;
|
;
|
||||||
|
|
||||||
os <<
|
os <<
|
||||||
"\n"
|
"\n"
|
||||||
#ifndef STRAIGHT_RAND
|
#ifndef STRAIGHT_RAND
|
||||||
@ -299,7 +294,6 @@ string IterOpenCLKernelCreator<T>::CreateIterKernelString(const Ember<T>& ember,
|
|||||||
" }\n"
|
" }\n"
|
||||||
"\n"
|
"\n"
|
||||||
;
|
;
|
||||||
|
|
||||||
auto varStateString = VariationStateInitString(ember);
|
auto varStateString = VariationStateInitString(ember);
|
||||||
|
|
||||||
if (!varStateString.empty())
|
if (!varStateString.empty())
|
||||||
@ -318,7 +312,6 @@ string IterOpenCLKernelCreator<T>::CreateIterKernelString(const Ember<T>& ember,
|
|||||||
"\n"
|
"\n"
|
||||||
" for (i = 0; i < itersToDo; i++)\n"
|
" for (i = 0; i < itersToDo; i++)\n"
|
||||||
" {\n";
|
" {\n";
|
||||||
|
|
||||||
os <<
|
os <<
|
||||||
" consec = 0;\n"
|
" consec = 0;\n"
|
||||||
"\n"
|
"\n"
|
||||||
@ -359,7 +352,7 @@ string IterOpenCLKernelCreator<T>::CreateIterKernelString(const Ember<T>& ember,
|
|||||||
os <<
|
os <<
|
||||||
" case " << i << ":\n"
|
" case " << i << ":\n"
|
||||||
" {\n" <<
|
" {\n" <<
|
||||||
" Xform" << i << "(&(xforms[" << i << "]), parVars, &firstPoint, &secondPoint, &mwc, &varState);\n" <<
|
" Xform" << i << "(&(xforms[" << i << "]), parVars, globalShared, &firstPoint, &secondPoint, &mwc, &varState);\n" <<
|
||||||
" break;\n"
|
" break;\n"
|
||||||
" }\n";
|
" }\n";
|
||||||
|
|
||||||
@ -398,7 +391,6 @@ string IterOpenCLKernelCreator<T>::CreateIterKernelString(const Ember<T>& ember,
|
|||||||
" uint swr = threadXY + ((i & 1u) * threadXDivRows);\n"
|
" uint swr = threadXY + ((i & 1u) * threadXDivRows);\n"
|
||||||
" uint sw = (swr * THREADS_PER_WARP + THREAD_ID_X) & threadsMinus1;\n"
|
" uint sw = (swr * THREADS_PER_WARP + THREAD_ID_X) & threadsMinus1;\n"
|
||||||
"\n"
|
"\n"
|
||||||
|
|
||||||
//Write to another thread's location.
|
//Write to another thread's location.
|
||||||
" swap[sw] = secondPoint;\n"
|
" swap[sw] = secondPoint;\n"
|
||||||
"\n"
|
"\n"
|
||||||
@ -430,14 +422,13 @@ string IterOpenCLKernelCreator<T>::CreateIterKernelString(const Ember<T>& ember,
|
|||||||
if (ember.UseFinalXform())
|
if (ember.UseFinalXform())
|
||||||
{
|
{
|
||||||
size_t finalIndex = ember.TotalXformCount() - 1;
|
size_t finalIndex = ember.TotalXformCount() - 1;
|
||||||
|
|
||||||
//CPU takes an extra step here to preserve the opacity of the randomly selected xform, rather than the final xform's opacity.
|
//CPU takes an extra step here to preserve the opacity of the randomly selected xform, rather than the final xform's opacity.
|
||||||
//The same thing takes place here automatically because secondPoint.m_LastXfUsed is used below to retrieve the opacity when accumulating.
|
//The same thing takes place here automatically because secondPoint.m_LastXfUsed is used below to retrieve the opacity when accumulating.
|
||||||
os <<
|
os <<
|
||||||
" if ((xforms[" << finalIndex << "].m_Opacity == 1) || (MwcNext01(&mwc) < xforms[" << finalIndex << "].m_Opacity))\n"
|
" if ((xforms[" << finalIndex << "].m_Opacity == 1) || (MwcNext01(&mwc) < xforms[" << finalIndex << "].m_Opacity))\n"
|
||||||
" {\n"
|
" {\n"
|
||||||
" tempPoint.m_LastXfUsed = secondPoint.m_LastXfUsed;\n"
|
" tempPoint.m_LastXfUsed = secondPoint.m_LastXfUsed;\n"
|
||||||
" Xform" << finalIndex << "(&(xforms[" << finalIndex << "]), parVars, &secondPoint, &tempPoint, &mwc, &varState);\n"
|
" Xform" << finalIndex << "(&(xforms[" << finalIndex << "]), parVars, globalShared, &secondPoint, &tempPoint, &mwc, &varState);\n"
|
||||||
" secondPoint = tempPoint;\n"
|
" secondPoint = tempPoint;\n"
|
||||||
" }\n"
|
" }\n"
|
||||||
"\n";
|
"\n";
|
||||||
@ -538,7 +529,6 @@ string IterOpenCLKernelCreator<T>::CreateIterKernelString(const Ember<T>& ember,
|
|||||||
#endif
|
#endif
|
||||||
" barrier(CLK_GLOBAL_MEM_FENCE);\n"
|
" barrier(CLK_GLOBAL_MEM_FENCE);\n"
|
||||||
"}\n";
|
"}\n";
|
||||||
|
|
||||||
return os.str();
|
return os.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -584,7 +574,7 @@ string IterOpenCLKernelCreator<T>::GlobalFunctionsString(const Ember<T>& ember)
|
|||||||
funcNames.push_back(zeps);
|
funcNames.push_back(zeps);
|
||||||
|
|
||||||
for (auto& funcName : funcNames)
|
for (auto& funcName : funcNames)
|
||||||
if(auto text = m_FunctionMapper.GetGlobalFunc(funcName))
|
if (auto text = m_FunctionMapper.GetGlobalFunc(funcName))
|
||||||
os << *text << endl;
|
os << *text << endl;
|
||||||
|
|
||||||
return os.str();
|
return os.str();
|
||||||
@ -655,10 +645,82 @@ void IterOpenCLKernelCreator<T>::ParVarIndexDefines(const Ember<T>& ember, pair<
|
|||||||
if (doString)
|
if (doString)
|
||||||
os << "#define " << ToUpper(parVar->Params()[k].Name()) << "_" << i << " " << size << endl;//Uniquely identify this param in this variation in this xform.
|
os << "#define " << ToUpper(parVar->Params()[k].Name()) << "_" << i << " " << size << endl;//Uniquely identify this param in this variation in this xform.
|
||||||
|
|
||||||
if (doVals)
|
auto elements = parVar->Params()[k].Size() / sizeof(T);
|
||||||
params.second.push_back(parVar->Params()[k].ParamVal());
|
|
||||||
|
|
||||||
size++;
|
if (doVals)
|
||||||
|
{
|
||||||
|
for (auto l = 0; l < elements; l++)
|
||||||
|
params.second.push_back(*(parVar->Params()[k].Param() + l));
|
||||||
|
|
||||||
|
//params.second.push_back(parVar->Params()[k].ParamVal());
|
||||||
|
}
|
||||||
|
|
||||||
|
//size++;
|
||||||
|
size += elements;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (doString)
|
||||||
|
{
|
||||||
|
os << "\n";
|
||||||
|
params.first = os.str();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Create an OpenCL string of #defines and a corresponding host side vector for globally shared data.
|
||||||
|
/// Certain variations, such as crackle and dc_perlin use static, read-only buffers of data.
|
||||||
|
/// These need to be created separate from the buffer of parametric variation values.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="ember">The ember to create the values from</param>
|
||||||
|
/// <param name="params">The string,vector pair to store the values in</param>
|
||||||
|
/// <param name="doVals">True if the vector should be populated, else false. Default: true.</param>
|
||||||
|
/// <param name="doString">True if the string should be populated, else false. Default: true.</param>
|
||||||
|
template <typename T>
|
||||||
|
void IterOpenCLKernelCreator<T>::SharedDataIndexDefines(const Ember<T>& ember, pair<string, vector<T>>& params, bool doVals = true, bool doString = true)
|
||||||
|
{
|
||||||
|
size_t i, j, offset = 0, xformCount = ember.TotalXformCount();
|
||||||
|
string s;
|
||||||
|
vector<string> dataNames;//Can't use a set here because they sort and we must preserve the insertion order due to nested function calls.
|
||||||
|
ostringstream os;
|
||||||
|
auto varFuncs = VarFuncs<T>::Instance();
|
||||||
|
|
||||||
|
if (doVals)
|
||||||
|
params.second.clear();
|
||||||
|
|
||||||
|
for (i = 0; i < xformCount; i++)
|
||||||
|
{
|
||||||
|
if (auto xform = ember.GetTotalXform(i))
|
||||||
|
{
|
||||||
|
size_t varCount = xform->TotalVariationCount();
|
||||||
|
|
||||||
|
for (j = 0; j < varCount; j++)
|
||||||
|
{
|
||||||
|
if (auto var = xform->GetVariation(j))
|
||||||
|
{
|
||||||
|
auto names = var->OpenCLGlobalDataNames();
|
||||||
|
|
||||||
|
for (auto& name : names)
|
||||||
|
{
|
||||||
|
if (!Contains(dataNames, name))
|
||||||
|
{
|
||||||
|
s = ToUpper(name);
|
||||||
|
|
||||||
|
if (auto dataInfo = varFuncs->GetSharedData(s))///Will contain a name, pointer to data, and size of the data in units of sizeof(T).
|
||||||
|
{
|
||||||
|
if (doString)
|
||||||
|
os << "#define " << ToUpper(name) << " " << offset << endl;
|
||||||
|
|
||||||
|
if (doVals)
|
||||||
|
params.second.insert(params.second.end(), dataInfo->first, dataInfo->first + dataInfo->second);
|
||||||
|
|
||||||
|
dataNames.push_back(name);
|
||||||
|
offset += dataInfo->second;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -684,7 +746,6 @@ template <typename T>
|
|||||||
string IterOpenCLKernelCreator<T>::VariationStateString(const Ember<T>& ember)
|
string IterOpenCLKernelCreator<T>::VariationStateString(const Ember<T>& ember)
|
||||||
{
|
{
|
||||||
ostringstream os;
|
ostringstream os;
|
||||||
|
|
||||||
os << "typedef struct __attribute__ " ALIGN_CL " _VariationState\n{";
|
os << "typedef struct __attribute__ " ALIGN_CL " _VariationState\n{";
|
||||||
|
|
||||||
for (size_t i = 0; i < ember.TotalXformCount(); i++)
|
for (size_t i = 0; i < ember.TotalXformCount(); i++)
|
||||||
@ -702,7 +763,6 @@ string IterOpenCLKernelCreator<T>::VariationStateString(const Ember<T>& ember)
|
|||||||
}
|
}
|
||||||
|
|
||||||
os << "\n} VariationState;\n\n";
|
os << "\n} VariationState;\n\n";
|
||||||
|
|
||||||
return os.str();
|
return os.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -803,7 +863,6 @@ template <typename T>
|
|||||||
string IterOpenCLKernelCreator<T>::CreateZeroizeKernelString() const
|
string IterOpenCLKernelCreator<T>::CreateZeroizeKernelString() const
|
||||||
{
|
{
|
||||||
ostringstream os;
|
ostringstream os;
|
||||||
|
|
||||||
os <<
|
os <<
|
||||||
ConstantDefinesString(typeid(T) == typeid(double)) <<//Double precision doesn't matter here since it's not used.
|
ConstantDefinesString(typeid(T) == typeid(double)) <<//Double precision doesn't matter here since it's not used.
|
||||||
"__kernel void " << m_ZeroizeEntryPoint << "(__global uchar* buffer, uint width, uint height)\n"
|
"__kernel void " << m_ZeroizeEntryPoint << "(__global uchar* buffer, uint width, uint height)\n"
|
||||||
@ -815,7 +874,6 @@ string IterOpenCLKernelCreator<T>::CreateZeroizeKernelString() const
|
|||||||
" barrier(CLK_GLOBAL_MEM_FENCE);\n"//Just to be safe.
|
" barrier(CLK_GLOBAL_MEM_FENCE);\n"//Just to be safe.
|
||||||
"}\n"
|
"}\n"
|
||||||
"\n";
|
"\n";
|
||||||
|
|
||||||
return os.str();
|
return os.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -831,7 +889,6 @@ template <typename T>
|
|||||||
string IterOpenCLKernelCreator<T>::CreateSumHistKernelString() const
|
string IterOpenCLKernelCreator<T>::CreateSumHistKernelString() const
|
||||||
{
|
{
|
||||||
ostringstream os;
|
ostringstream os;
|
||||||
|
|
||||||
os <<
|
os <<
|
||||||
ConstantDefinesString(typeid(T) == typeid(double)) <<//Double precision doesn't matter here since it's not used.
|
ConstantDefinesString(typeid(T) == typeid(double)) <<//Double precision doesn't matter here since it's not used.
|
||||||
"__kernel void " << m_SumHistEntryPoint << "(__global real4_bucket* source, __global real4_bucket* dest, uint width, uint height, uint clear)\n"
|
"__kernel void " << m_SumHistEntryPoint << "(__global real4_bucket* source, __global real4_bucket* dest, uint width, uint height, uint clear)\n"
|
||||||
@ -847,7 +904,6 @@ string IterOpenCLKernelCreator<T>::CreateSumHistKernelString() const
|
|||||||
" barrier(CLK_GLOBAL_MEM_FENCE);\n"//Just to be safe.
|
" barrier(CLK_GLOBAL_MEM_FENCE);\n"//Just to be safe.
|
||||||
"}\n"
|
"}\n"
|
||||||
"\n";
|
"\n";
|
||||||
|
|
||||||
return os.str();
|
return os.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -30,9 +30,10 @@ public:
|
|||||||
const string& SumHistKernel() const;
|
const string& SumHistKernel() const;
|
||||||
const string& SumHistEntryPoint() const;
|
const string& SumHistEntryPoint() const;
|
||||||
const string& IterEntryPoint() const;
|
const string& IterEntryPoint() const;
|
||||||
string CreateIterKernelString(const Ember<T>& ember, string& parVarDefines, bool lockAccum = false, bool doAccum = true);
|
string CreateIterKernelString(const Ember<T>& ember, const string& parVarDefines, const string& globalSharedDefines, bool lockAccum = false, bool doAccum = true);
|
||||||
string GlobalFunctionsString(const Ember<T>& ember);
|
string GlobalFunctionsString(const Ember<T>& ember);
|
||||||
static void ParVarIndexDefines(const Ember<T>& ember, pair<string, vector<T>>& params, bool doVals = true, bool doString = true);
|
static void ParVarIndexDefines(const Ember<T>& ember, pair<string, vector<T>>& params, bool doVals = true, bool doString = true);
|
||||||
|
static void SharedDataIndexDefines(const Ember<T>& ember, pair<string, vector<T>>& params, bool doVals = true, bool doString = true);
|
||||||
static string VariationStateString(const Ember<T>& ember);
|
static string VariationStateString(const Ember<T>& ember);
|
||||||
static string VariationStateInitString(const Ember<T>& ember);
|
static string VariationStateInitString(const Ember<T>& ember);
|
||||||
static bool IsBuildRequired(const Ember<T>& ember1, const Ember<T>& ember2);
|
static bool IsBuildRequired(const Ember<T>& ember1, const Ember<T>& ember2);
|
||||||
|
@ -3,17 +3,6 @@
|
|||||||
|
|
||||||
namespace EmberCLns
|
namespace EmberCLns
|
||||||
{
|
{
|
||||||
/// <summary>
|
|
||||||
/// Initialize and return a reference to the one and only OpenCLInfo object.
|
|
||||||
/// </summary>
|
|
||||||
/// <returns>A reference to the only OpenCLInfo object.</returns>
|
|
||||||
OpenCLInfo& OpenCLInfo::Instance()
|
|
||||||
{
|
|
||||||
static OpenCLInfo instance;
|
|
||||||
|
|
||||||
return instance;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Initialize the all platforms and devices and keep information about them in lists.
|
/// Initialize the all platforms and devices and keep information about them in lists.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -23,7 +12,6 @@ OpenCLInfo::OpenCLInfo()
|
|||||||
vector<cl::Platform> platforms;
|
vector<cl::Platform> platforms;
|
||||||
vector<vector<cl::Device>> devices;
|
vector<vector<cl::Device>> devices;
|
||||||
intmax_t workingPlatformIndex = -1;
|
intmax_t workingPlatformIndex = -1;
|
||||||
|
|
||||||
m_Init = false;
|
m_Init = false;
|
||||||
cl::Platform::get(&platforms);
|
cl::Platform::get(&platforms);
|
||||||
devices.resize(platforms.size());
|
devices.resize(platforms.size());
|
||||||
@ -210,7 +198,7 @@ bool OpenCLInfo::CreateContext(const cl::Platform& platform, cl::Context& contex
|
|||||||
if (shared)
|
if (shared)
|
||||||
{
|
{
|
||||||
//Define OS-specific context properties and create the OpenCL context.
|
//Define OS-specific context properties and create the OpenCL context.
|
||||||
#if defined (__APPLE__) || defined(MACOSX)
|
#if defined (__APPLE__) || defined(MACOSX)
|
||||||
CGLContextObj kCGLContext = CGLGetCurrentContext();
|
CGLContextObj kCGLContext = CGLGetCurrentContext();
|
||||||
CGLShareGroupObj kCGLShareGroup = CGLGetShareGroup(kCGLContext);
|
CGLShareGroupObj kCGLShareGroup = CGLGetShareGroup(kCGLContext);
|
||||||
cl_context_properties props[] =
|
cl_context_properties props[] =
|
||||||
@ -218,10 +206,9 @@ bool OpenCLInfo::CreateContext(const cl::Platform& platform, cl::Context& contex
|
|||||||
CL_CONTEXT_PROPERTY_USE_CGL_SHAREGROUP_APPLE, (cl_context_properties)kCGLShareGroup,
|
CL_CONTEXT_PROPERTY_USE_CGL_SHAREGROUP_APPLE, (cl_context_properties)kCGLShareGroup,
|
||||||
0
|
0
|
||||||
};
|
};
|
||||||
|
|
||||||
context = cl::Context(CL_DEVICE_TYPE_GPU, props, nullptr, nullptr, &err);//May need to tinker with this on Mac.
|
context = cl::Context(CL_DEVICE_TYPE_GPU, props, nullptr, nullptr, &err);//May need to tinker with this on Mac.
|
||||||
#else
|
#else
|
||||||
#if defined WIN32
|
#if defined WIN32
|
||||||
cl_context_properties props[] =
|
cl_context_properties props[] =
|
||||||
{
|
{
|
||||||
CL_GL_CONTEXT_KHR, (cl_context_properties)wglGetCurrentContext(),
|
CL_GL_CONTEXT_KHR, (cl_context_properties)wglGetCurrentContext(),
|
||||||
@ -229,9 +216,8 @@ bool OpenCLInfo::CreateContext(const cl::Platform& platform, cl::Context& contex
|
|||||||
CL_CONTEXT_PLATFORM, reinterpret_cast<cl_context_properties>((platform)()),
|
CL_CONTEXT_PLATFORM, reinterpret_cast<cl_context_properties>((platform)()),
|
||||||
0
|
0
|
||||||
};
|
};
|
||||||
|
|
||||||
context = cl::Context(CL_DEVICE_TYPE_GPU, props, nullptr, nullptr, &err);
|
context = cl::Context(CL_DEVICE_TYPE_GPU, props, nullptr, nullptr, &err);
|
||||||
#else
|
#else
|
||||||
cl_context_properties props[] =
|
cl_context_properties props[] =
|
||||||
{
|
{
|
||||||
CL_GL_CONTEXT_KHR, cl_context_properties(glXGetCurrentContext()),
|
CL_GL_CONTEXT_KHR, cl_context_properties(glXGetCurrentContext()),
|
||||||
@ -239,10 +225,9 @@ bool OpenCLInfo::CreateContext(const cl::Platform& platform, cl::Context& contex
|
|||||||
CL_CONTEXT_PLATFORM, reinterpret_cast<cl_context_properties>((platform)()),
|
CL_CONTEXT_PLATFORM, reinterpret_cast<cl_context_properties>((platform)()),
|
||||||
0
|
0
|
||||||
};
|
};
|
||||||
|
|
||||||
context = cl::Context(CL_DEVICE_TYPE_GPU, props, nullptr, nullptr, &err);
|
context = cl::Context(CL_DEVICE_TYPE_GPU, props, nullptr, nullptr, &err);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -252,7 +237,6 @@ bool OpenCLInfo::CreateContext(const cl::Platform& platform, cl::Context& contex
|
|||||||
reinterpret_cast<cl_context_properties>((platform)()),
|
reinterpret_cast<cl_context_properties>((platform)()),
|
||||||
0
|
0
|
||||||
};
|
};
|
||||||
|
|
||||||
context = cl::Context(CL_DEVICE_TYPE_ALL, props, nullptr, nullptr, &err);
|
context = cl::Context(CL_DEVICE_TYPE_ALL, props, nullptr, nullptr, &err);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -276,7 +260,6 @@ string OpenCLInfo::DumpInfo() const
|
|||||||
{
|
{
|
||||||
ostringstream os;
|
ostringstream os;
|
||||||
vector<size_t> sizes;
|
vector<size_t> sizes;
|
||||||
|
|
||||||
os.imbue(locale(""));
|
os.imbue(locale(""));
|
||||||
|
|
||||||
for (size_t platform = 0; platform < m_Platforms.size(); platform++)
|
for (size_t platform = 0; platform < m_Platforms.size(); platform++)
|
||||||
@ -294,17 +277,14 @@ string OpenCLInfo::DumpInfo() const
|
|||||||
os << "CL_DEVICE_MAX_WRITE_IMAGE_ARGS: " << GetInfo<cl_uint>(platform, device, CL_DEVICE_MAX_WRITE_IMAGE_ARGS) << endl;
|
os << "CL_DEVICE_MAX_WRITE_IMAGE_ARGS: " << GetInfo<cl_uint>(platform, device, CL_DEVICE_MAX_WRITE_IMAGE_ARGS) << endl;
|
||||||
os << "CL_DEVICE_MAX_MEM_ALLOC_SIZE: " << GetInfo<cl_ulong>(platform, device, CL_DEVICE_MAX_MEM_ALLOC_SIZE) << endl;
|
os << "CL_DEVICE_MAX_MEM_ALLOC_SIZE: " << GetInfo<cl_ulong>(platform, device, CL_DEVICE_MAX_MEM_ALLOC_SIZE) << endl;
|
||||||
os << "CL_DEVICE_ADDRESS_BITS: " << GetInfo<cl_uint>(platform, device, CL_DEVICE_ADDRESS_BITS) << endl;
|
os << "CL_DEVICE_ADDRESS_BITS: " << GetInfo<cl_uint>(platform, device, CL_DEVICE_ADDRESS_BITS) << endl;
|
||||||
|
|
||||||
os << "CL_DEVICE_GLOBAL_MEM_CACHE_TYPE: " << GetInfo<cl_uint>(platform, device, CL_DEVICE_GLOBAL_MEM_CACHE_TYPE) << endl;
|
os << "CL_DEVICE_GLOBAL_MEM_CACHE_TYPE: " << GetInfo<cl_uint>(platform, device, CL_DEVICE_GLOBAL_MEM_CACHE_TYPE) << endl;
|
||||||
os << "CL_DEVICE_GLOBAL_MEM_CACHELINE_SIZE: " << GetInfo<cl_uint>(platform, device, CL_DEVICE_GLOBAL_MEM_CACHELINE_SIZE) << endl;
|
os << "CL_DEVICE_GLOBAL_MEM_CACHELINE_SIZE: " << GetInfo<cl_uint>(platform, device, CL_DEVICE_GLOBAL_MEM_CACHELINE_SIZE) << endl;
|
||||||
os << "CL_DEVICE_GLOBAL_MEM_CACHE_SIZE: " << GetInfo<cl_ulong>(platform, device, CL_DEVICE_GLOBAL_MEM_CACHE_SIZE) << endl;
|
os << "CL_DEVICE_GLOBAL_MEM_CACHE_SIZE: " << GetInfo<cl_ulong>(platform, device, CL_DEVICE_GLOBAL_MEM_CACHE_SIZE) << endl;
|
||||||
os << "CL_DEVICE_GLOBAL_MEM_SIZE: " << GetInfo<cl_ulong>(platform, device, CL_DEVICE_GLOBAL_MEM_SIZE) << endl;
|
os << "CL_DEVICE_GLOBAL_MEM_SIZE: " << GetInfo<cl_ulong>(platform, device, CL_DEVICE_GLOBAL_MEM_SIZE) << endl;
|
||||||
os << "CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE: " << GetInfo<cl_ulong>(platform, device, CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE) << endl;
|
os << "CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE: " << GetInfo<cl_ulong>(platform, device, CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE) << endl;
|
||||||
|
|
||||||
os << "CL_DEVICE_MAX_CONSTANT_ARGS: " << GetInfo<cl_uint>(platform, device, CL_DEVICE_MAX_CONSTANT_ARGS) << endl;
|
os << "CL_DEVICE_MAX_CONSTANT_ARGS: " << GetInfo<cl_uint>(platform, device, CL_DEVICE_MAX_CONSTANT_ARGS) << endl;
|
||||||
os << "CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS: " << GetInfo<cl_uint>(platform, device, CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS) << endl;
|
os << "CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS: " << GetInfo<cl_uint>(platform, device, CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS) << endl;
|
||||||
os << "CL_DEVICE_MAX_WORK_GROUP_SIZE: " << GetInfo<size_t>(platform, device, CL_DEVICE_MAX_WORK_GROUP_SIZE) << endl;
|
os << "CL_DEVICE_MAX_WORK_GROUP_SIZE: " << GetInfo<size_t>(platform, device, CL_DEVICE_MAX_WORK_GROUP_SIZE) << endl;
|
||||||
|
|
||||||
sizes = GetInfo<vector<size_t>>(platform, device, CL_DEVICE_MAX_WORK_ITEM_SIZES);
|
sizes = GetInfo<vector<size_t>>(platform, device, CL_DEVICE_MAX_WORK_ITEM_SIZES);
|
||||||
os << "CL_DEVICE_MAX_WORK_ITEM_SIZES: " << sizes[0] << ", " << sizes[1] << ", " << sizes[2] << endl << endl;
|
os << "CL_DEVICE_MAX_WORK_ITEM_SIZES: " << sizes[0] << ", " << sizes[1] << ", " << sizes[2] << endl << endl;
|
||||||
|
|
||||||
@ -346,55 +326,105 @@ string OpenCLInfo::ErrorToStringCL(cl_int err)
|
|||||||
switch (err)
|
switch (err)
|
||||||
{
|
{
|
||||||
case CL_SUCCESS: return "Success";
|
case CL_SUCCESS: return "Success";
|
||||||
|
|
||||||
case CL_DEVICE_NOT_FOUND: return "Device not found";
|
case CL_DEVICE_NOT_FOUND: return "Device not found";
|
||||||
|
|
||||||
case CL_DEVICE_NOT_AVAILABLE: return "Device not available";
|
case CL_DEVICE_NOT_AVAILABLE: return "Device not available";
|
||||||
|
|
||||||
case CL_COMPILER_NOT_AVAILABLE: return "Compiler not available";
|
case CL_COMPILER_NOT_AVAILABLE: return "Compiler not available";
|
||||||
|
|
||||||
case CL_MEM_OBJECT_ALLOCATION_FAILURE: return "Memory object allocation failure";
|
case CL_MEM_OBJECT_ALLOCATION_FAILURE: return "Memory object allocation failure";
|
||||||
|
|
||||||
case CL_OUT_OF_RESOURCES: return "Out of resources";
|
case CL_OUT_OF_RESOURCES: return "Out of resources";
|
||||||
|
|
||||||
case CL_OUT_OF_HOST_MEMORY: return "Out of host memory";
|
case CL_OUT_OF_HOST_MEMORY: return "Out of host memory";
|
||||||
|
|
||||||
case CL_PROFILING_INFO_NOT_AVAILABLE: return "Profiling information not available";
|
case CL_PROFILING_INFO_NOT_AVAILABLE: return "Profiling information not available";
|
||||||
|
|
||||||
case CL_MEM_COPY_OVERLAP: return "Memory copy overlap";
|
case CL_MEM_COPY_OVERLAP: return "Memory copy overlap";
|
||||||
|
|
||||||
case CL_IMAGE_FORMAT_MISMATCH: return "Image format mismatch";
|
case CL_IMAGE_FORMAT_MISMATCH: return "Image format mismatch";
|
||||||
|
|
||||||
case CL_IMAGE_FORMAT_NOT_SUPPORTED: return "Image format not supported";
|
case CL_IMAGE_FORMAT_NOT_SUPPORTED: return "Image format not supported";
|
||||||
|
|
||||||
case CL_BUILD_PROGRAM_FAILURE: return "Program build failure";
|
case CL_BUILD_PROGRAM_FAILURE: return "Program build failure";
|
||||||
|
|
||||||
case CL_MAP_FAILURE: return "Map failure";
|
case CL_MAP_FAILURE: return "Map failure";
|
||||||
|
|
||||||
case CL_MISALIGNED_SUB_BUFFER_OFFSET: return "Misaligned sub buffer offset";
|
case CL_MISALIGNED_SUB_BUFFER_OFFSET: return "Misaligned sub buffer offset";
|
||||||
|
|
||||||
case CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST: return "Exec status error for events in wait list";
|
case CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST: return "Exec status error for events in wait list";
|
||||||
|
|
||||||
case CL_INVALID_VALUE: return "Invalid value";
|
case CL_INVALID_VALUE: return "Invalid value";
|
||||||
|
|
||||||
case CL_INVALID_DEVICE_TYPE: return "Invalid device type";
|
case CL_INVALID_DEVICE_TYPE: return "Invalid device type";
|
||||||
|
|
||||||
case CL_INVALID_PLATFORM: return "Invalid platform";
|
case CL_INVALID_PLATFORM: return "Invalid platform";
|
||||||
|
|
||||||
case CL_INVALID_DEVICE: return "Invalid device";
|
case CL_INVALID_DEVICE: return "Invalid device";
|
||||||
|
|
||||||
case CL_INVALID_CONTEXT: return "Invalid context";
|
case CL_INVALID_CONTEXT: return "Invalid context";
|
||||||
|
|
||||||
case CL_INVALID_QUEUE_PROPERTIES: return "Invalid queue properties";
|
case CL_INVALID_QUEUE_PROPERTIES: return "Invalid queue properties";
|
||||||
|
|
||||||
case CL_INVALID_COMMAND_QUEUE: return "Invalid command queue";
|
case CL_INVALID_COMMAND_QUEUE: return "Invalid command queue";
|
||||||
|
|
||||||
case CL_INVALID_HOST_PTR: return "Invalid host pointer";
|
case CL_INVALID_HOST_PTR: return "Invalid host pointer";
|
||||||
|
|
||||||
case CL_INVALID_MEM_OBJECT: return "Invalid memory object";
|
case CL_INVALID_MEM_OBJECT: return "Invalid memory object";
|
||||||
|
|
||||||
case CL_INVALID_IMAGE_FORMAT_DESCRIPTOR: return "Invalid image format descriptor";
|
case CL_INVALID_IMAGE_FORMAT_DESCRIPTOR: return "Invalid image format descriptor";
|
||||||
|
|
||||||
case CL_INVALID_IMAGE_SIZE: return "Invalid image size";
|
case CL_INVALID_IMAGE_SIZE: return "Invalid image size";
|
||||||
|
|
||||||
case CL_INVALID_SAMPLER: return "Invalid sampler";
|
case CL_INVALID_SAMPLER: return "Invalid sampler";
|
||||||
|
|
||||||
case CL_INVALID_BINARY: return "Invalid binary";
|
case CL_INVALID_BINARY: return "Invalid binary";
|
||||||
|
|
||||||
case CL_INVALID_BUILD_OPTIONS: return "Invalid build options";
|
case CL_INVALID_BUILD_OPTIONS: return "Invalid build options";
|
||||||
|
|
||||||
case CL_INVALID_PROGRAM: return "Invalid program";
|
case CL_INVALID_PROGRAM: return "Invalid program";
|
||||||
|
|
||||||
case CL_INVALID_PROGRAM_EXECUTABLE: return "Invalid program executable";
|
case CL_INVALID_PROGRAM_EXECUTABLE: return "Invalid program executable";
|
||||||
|
|
||||||
case CL_INVALID_KERNEL_NAME: return "Invalid kernel name";
|
case CL_INVALID_KERNEL_NAME: return "Invalid kernel name";
|
||||||
|
|
||||||
case CL_INVALID_KERNEL_DEFINITION: return "Invalid kernel definition";
|
case CL_INVALID_KERNEL_DEFINITION: return "Invalid kernel definition";
|
||||||
|
|
||||||
case CL_INVALID_KERNEL: return "Invalid kernel";
|
case CL_INVALID_KERNEL: return "Invalid kernel";
|
||||||
|
|
||||||
case CL_INVALID_ARG_INDEX: return "Invalid argument index";
|
case CL_INVALID_ARG_INDEX: return "Invalid argument index";
|
||||||
|
|
||||||
case CL_INVALID_ARG_VALUE: return "Invalid argument value";
|
case CL_INVALID_ARG_VALUE: return "Invalid argument value";
|
||||||
|
|
||||||
case CL_INVALID_ARG_SIZE: return "Invalid argument size";
|
case CL_INVALID_ARG_SIZE: return "Invalid argument size";
|
||||||
|
|
||||||
case CL_INVALID_KERNEL_ARGS: return "Invalid kernel arguments";
|
case CL_INVALID_KERNEL_ARGS: return "Invalid kernel arguments";
|
||||||
|
|
||||||
case CL_INVALID_WORK_DIMENSION: return "Invalid work dimension";
|
case CL_INVALID_WORK_DIMENSION: return "Invalid work dimension";
|
||||||
|
|
||||||
case CL_INVALID_WORK_GROUP_SIZE: return "Invalid work group size";
|
case CL_INVALID_WORK_GROUP_SIZE: return "Invalid work group size";
|
||||||
|
|
||||||
case CL_INVALID_WORK_ITEM_SIZE: return "Invalid work item size";
|
case CL_INVALID_WORK_ITEM_SIZE: return "Invalid work item size";
|
||||||
|
|
||||||
case CL_INVALID_GLOBAL_OFFSET: return "Invalid global offset";
|
case CL_INVALID_GLOBAL_OFFSET: return "Invalid global offset";
|
||||||
|
|
||||||
case CL_INVALID_EVENT_WAIT_LIST: return "Invalid event wait list";
|
case CL_INVALID_EVENT_WAIT_LIST: return "Invalid event wait list";
|
||||||
|
|
||||||
case CL_INVALID_EVENT: return "Invalid event";
|
case CL_INVALID_EVENT: return "Invalid event";
|
||||||
|
|
||||||
case CL_INVALID_OPERATION: return "Invalid operation";
|
case CL_INVALID_OPERATION: return "Invalid operation";
|
||||||
|
|
||||||
case CL_INVALID_GL_OBJECT: return "Invalid OpenGL object";
|
case CL_INVALID_GL_OBJECT: return "Invalid OpenGL object";
|
||||||
|
|
||||||
case CL_INVALID_BUFFER_SIZE: return "Invalid buffer size";
|
case CL_INVALID_BUFFER_SIZE: return "Invalid buffer size";
|
||||||
|
|
||||||
case CL_INVALID_MIP_LEVEL: return "Invalid mip-map level";
|
case CL_INVALID_MIP_LEVEL: return "Invalid mip-map level";
|
||||||
|
|
||||||
case CL_INVALID_GLOBAL_WORK_SIZE: return "Invalid global work size";
|
case CL_INVALID_GLOBAL_WORK_SIZE: return "Invalid global work size";
|
||||||
|
|
||||||
case CL_INVALID_PROPERTY: return "Invalid property";
|
case CL_INVALID_PROPERTY: return "Invalid property";
|
||||||
|
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
ostringstream ss;
|
ostringstream ss;
|
||||||
|
@ -17,10 +17,9 @@ namespace EmberCLns
|
|||||||
/// This class derives from EmberReport, so the caller is able
|
/// This class derives from EmberReport, so the caller is able
|
||||||
/// to retrieve a text dump of error information if any errors occur.
|
/// to retrieve a text dump of error information if any errors occur.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
class EMBERCL_API OpenCLInfo : public EmberReport
|
class EMBERCL_API OpenCLInfo : public EmberReport, public Singleton<OpenCLInfo>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
static OpenCLInfo& Instance();
|
|
||||||
const vector<cl::Platform>& Platforms() const;
|
const vector<cl::Platform>& Platforms() const;
|
||||||
const string& PlatformName(size_t platform) const;
|
const string& PlatformName(size_t platform) const;
|
||||||
const vector<string>& PlatformNames() const;
|
const vector<string>& PlatformNames() const;
|
||||||
@ -55,6 +54,8 @@ public:
|
|||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SINGLETON_DERIVED_IMPL(OpenCLInfo);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
OpenCLInfo();
|
OpenCLInfo();
|
||||||
|
|
||||||
|
@ -9,19 +9,18 @@ namespace EmberCLns
|
|||||||
/// global OpenCLInfo object. The caller must explicitly do it.
|
/// global OpenCLInfo object. The caller must explicitly do it.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
OpenCLWrapper::OpenCLWrapper()
|
OpenCLWrapper::OpenCLWrapper()
|
||||||
: m_Info(OpenCLInfo::Instance())
|
|
||||||
{
|
{
|
||||||
m_Init = false;
|
m_Init = false;
|
||||||
m_Shared = false;
|
m_Shared = false;
|
||||||
m_PlatformIndex = 0;
|
m_PlatformIndex = 0;
|
||||||
m_DeviceIndex = 0;
|
m_DeviceIndex = 0;
|
||||||
m_LocalMemSize = 0;
|
m_LocalMemSize = 0;
|
||||||
|
|
||||||
//Pre-allocate some space to avoid temporary copying.
|
//Pre-allocate some space to avoid temporary copying.
|
||||||
m_Programs.reserve(4);
|
m_Programs.reserve(4);
|
||||||
m_Buffers.reserve(4);
|
m_Buffers.reserve(4);
|
||||||
m_Images.reserve(4);
|
m_Images.reserve(4);
|
||||||
m_GLImages.reserve(4);
|
m_GLImages.reserve(4);
|
||||||
|
m_Info = OpenCLInfo::Instance();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -35,25 +34,24 @@ OpenCLWrapper::OpenCLWrapper()
|
|||||||
bool OpenCLWrapper::Init(size_t platformIndex, size_t deviceIndex, bool shared)
|
bool OpenCLWrapper::Init(size_t platformIndex, size_t deviceIndex, bool shared)
|
||||||
{
|
{
|
||||||
cl_int err;
|
cl_int err;
|
||||||
auto& platforms = m_Info.Platforms();
|
auto& platforms = m_Info->Platforms();
|
||||||
auto& devices = m_Info.Devices();
|
auto& devices = m_Info->Devices();
|
||||||
|
|
||||||
m_Init = false;
|
m_Init = false;
|
||||||
ClearErrorReport();
|
ClearErrorReport();
|
||||||
|
|
||||||
if (m_Info.Ok())
|
if (m_Info->Ok())
|
||||||
{
|
{
|
||||||
if (platformIndex < platforms.size() && platformIndex < devices.size())
|
if (platformIndex < platforms.size() && platformIndex < devices.size())
|
||||||
{
|
{
|
||||||
cl::Context context;
|
cl::Context context;
|
||||||
|
|
||||||
if (m_Info.CreateContext(platforms[platformIndex], context, shared))//Platform index is within range, now do context.
|
if (m_Info->CreateContext(platforms[platformIndex], context, shared))//Platform index is within range, now do context.
|
||||||
{
|
{
|
||||||
if (deviceIndex < devices[platformIndex].size())//Context is ok, now do device.
|
if (deviceIndex < devices[platformIndex].size())//Context is ok, now do device.
|
||||||
{
|
{
|
||||||
auto q = cl::CommandQueue(context, devices[platformIndex][deviceIndex], 0, &err);//At least one GPU device is present, so create a command queue.
|
auto q = cl::CommandQueue(context, devices[platformIndex][deviceIndex], 0, &err);//At least one GPU device is present, so create a command queue.
|
||||||
|
|
||||||
if (m_Info.CheckCL(err, "cl::CommandQueue()"))//Everything was successful so assign temporaries to members.
|
if (m_Info->CheckCL(err, "cl::CommandQueue()"))//Everything was successful so assign temporaries to members.
|
||||||
{
|
{
|
||||||
m_Platform = platforms[platformIndex];
|
m_Platform = platforms[platformIndex];
|
||||||
m_Device = devices[platformIndex][deviceIndex];
|
m_Device = devices[platformIndex][deviceIndex];
|
||||||
@ -63,9 +61,9 @@ bool OpenCLWrapper::Init(size_t platformIndex, size_t deviceIndex, bool shared)
|
|||||||
m_DeviceIndex = deviceIndex;
|
m_DeviceIndex = deviceIndex;
|
||||||
m_DeviceVec.clear();
|
m_DeviceVec.clear();
|
||||||
m_DeviceVec.push_back(m_Device);
|
m_DeviceVec.push_back(m_Device);
|
||||||
m_LocalMemSize = size_t(m_Info.GetInfo<cl_ulong>(m_PlatformIndex, m_DeviceIndex, CL_DEVICE_LOCAL_MEM_SIZE));
|
m_LocalMemSize = size_t(m_Info->GetInfo<cl_ulong>(m_PlatformIndex, m_DeviceIndex, CL_DEVICE_LOCAL_MEM_SIZE));
|
||||||
m_GlobalMemSize = size_t(m_Info.GetInfo<cl_ulong>(m_PlatformIndex, m_DeviceIndex, CL_DEVICE_GLOBAL_MEM_SIZE));
|
m_GlobalMemSize = size_t(m_Info->GetInfo<cl_ulong>(m_PlatformIndex, m_DeviceIndex, CL_DEVICE_GLOBAL_MEM_SIZE));
|
||||||
m_MaxAllocSize = size_t(m_Info.GetInfo<cl_ulong>(m_PlatformIndex, m_DeviceIndex, CL_DEVICE_MAX_MEM_ALLOC_SIZE));
|
m_MaxAllocSize = size_t(m_Info->GetInfo<cl_ulong>(m_PlatformIndex, m_DeviceIndex, CL_DEVICE_MAX_MEM_ALLOC_SIZE));
|
||||||
m_Shared = shared;
|
m_Shared = shared;
|
||||||
m_Init = true;//Command queue is ok, it's now ok to begin building and running programs.
|
m_Init = true;//Command queue is ok, it's now ok to begin building and running programs.
|
||||||
}
|
}
|
||||||
@ -139,28 +137,25 @@ bool OpenCLWrapper::AddBuffer(const string& name, size_t size, cl_mem_flags flag
|
|||||||
{
|
{
|
||||||
cl::Buffer buff(m_Context, flags, size, nullptr, &err);
|
cl::Buffer buff(m_Context, flags, size, nullptr, &err);
|
||||||
|
|
||||||
if (!m_Info.CheckCL(err, "cl::Buffer()"))
|
if (!m_Info->CheckCL(err, "cl::Buffer()"))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
NamedBuffer nb(buff, name);
|
NamedBuffer nb(buff, name);
|
||||||
|
|
||||||
m_Buffers.push_back(nb);
|
m_Buffers.push_back(nb);
|
||||||
}
|
}
|
||||||
else if (GetBufferSize(bufferIndex) != size)//If it did exist, only create and add if the sizes were different.
|
else if (GetBufferSize(bufferIndex) != size)//If it did exist, only create and add if the sizes were different.
|
||||||
{
|
{
|
||||||
m_Buffers[bufferIndex] = NamedBuffer(cl::Buffer(m_Context, flags, 0, nullptr, &err), "emptybuffer");//First clear out the original so the two don't exist in memory at once.
|
m_Buffers[bufferIndex] = NamedBuffer(cl::Buffer(m_Context, flags, 0, nullptr, &err), "emptybuffer");//First clear out the original so the two don't exist in memory at once.
|
||||||
|
|
||||||
cl::Buffer buff(m_Context, flags, size, nullptr, &err);//Create the new buffer.
|
cl::Buffer buff(m_Context, flags, size, nullptr, &err);//Create the new buffer.
|
||||||
|
|
||||||
if (!m_Info.CheckCL(err, "cl::Buffer()"))
|
if (!m_Info->CheckCL(err, "cl::Buffer()"))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
NamedBuffer nb(buff, name);//Make a named buffer out of the new buffer.
|
NamedBuffer nb(buff, name);//Make a named buffer out of the new buffer.
|
||||||
|
|
||||||
m_Buffers[bufferIndex] = nb;//Finally, assign.
|
m_Buffers[bufferIndex] = nb;//Finally, assign.
|
||||||
}
|
}
|
||||||
//If the buffer existed and the sizes were the same, take no action.
|
|
||||||
|
|
||||||
|
//If the buffer existed and the sizes were the same, take no action.
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -199,7 +194,6 @@ bool OpenCLWrapper::AddAndWriteBuffer(const string& name, void* data, size_t siz
|
|||||||
bool OpenCLWrapper::WriteBuffer(const string& name, void* data, size_t size)
|
bool OpenCLWrapper::WriteBuffer(const string& name, void* data, size_t size)
|
||||||
{
|
{
|
||||||
int bufferIndex = FindBufferIndex(name);
|
int bufferIndex = FindBufferIndex(name);
|
||||||
|
|
||||||
return bufferIndex != -1 ? WriteBuffer(bufferIndex, data, size) : false;
|
return bufferIndex != -1 ? WriteBuffer(bufferIndex, data, size) : false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -216,11 +210,10 @@ bool OpenCLWrapper::WriteBuffer(size_t bufferIndex, void* data, size_t size)
|
|||||||
{
|
{
|
||||||
cl::Event e;
|
cl::Event e;
|
||||||
cl_int err = m_Queue.enqueueWriteBuffer(m_Buffers[bufferIndex].m_Buffer, CL_TRUE, 0, size, data, nullptr, &e);
|
cl_int err = m_Queue.enqueueWriteBuffer(m_Buffers[bufferIndex].m_Buffer, CL_TRUE, 0, size, data, nullptr, &e);
|
||||||
|
|
||||||
e.wait();
|
e.wait();
|
||||||
m_Queue.finish();
|
m_Queue.finish();
|
||||||
|
|
||||||
if (m_Info.CheckCL(err, "cl::CommandQueue::enqueueWriteBuffer()"))
|
if (m_Info->CheckCL(err, "cl::CommandQueue::enqueueWriteBuffer()"))
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -237,7 +230,6 @@ bool OpenCLWrapper::WriteBuffer(size_t bufferIndex, void* data, size_t size)
|
|||||||
bool OpenCLWrapper::ReadBuffer(const string& name, void* data, size_t size)
|
bool OpenCLWrapper::ReadBuffer(const string& name, void* data, size_t size)
|
||||||
{
|
{
|
||||||
int bufferIndex = FindBufferIndex(name);
|
int bufferIndex = FindBufferIndex(name);
|
||||||
|
|
||||||
return bufferIndex != -1 ? ReadBuffer(bufferIndex, data, size) : false;
|
return bufferIndex != -1 ? ReadBuffer(bufferIndex, data, size) : false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -254,11 +246,10 @@ bool OpenCLWrapper::ReadBuffer(size_t bufferIndex, void* data, size_t size)
|
|||||||
{
|
{
|
||||||
cl::Event e;
|
cl::Event e;
|
||||||
cl_int err = m_Queue.enqueueReadBuffer(m_Buffers[bufferIndex].m_Buffer, CL_TRUE, 0, size, data, nullptr, &e);
|
cl_int err = m_Queue.enqueueReadBuffer(m_Buffers[bufferIndex].m_Buffer, CL_TRUE, 0, size, data, nullptr, &e);
|
||||||
|
|
||||||
e.wait();
|
e.wait();
|
||||||
m_Queue.finish();
|
m_Queue.finish();
|
||||||
|
|
||||||
if (m_Info.CheckCL(err, "cl::CommandQueue::enqueueReadBuffer()"))
|
if (m_Info->CheckCL(err, "cl::CommandQueue::enqueueReadBuffer()"))
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -287,7 +278,6 @@ int OpenCLWrapper::FindBufferIndex(const string& name)
|
|||||||
size_t OpenCLWrapper::GetBufferSize(const string& name)
|
size_t OpenCLWrapper::GetBufferSize(const string& name)
|
||||||
{
|
{
|
||||||
int bufferIndex = FindBufferIndex(name);
|
int bufferIndex = FindBufferIndex(name);
|
||||||
|
|
||||||
return bufferIndex != -1 ? GetBufferSize(bufferIndex) : 0;
|
return bufferIndex != -1 ? GetBufferSize(bufferIndex) : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -345,7 +335,7 @@ bool OpenCLWrapper::AddAndWriteImage(const string& name, cl_mem_flags flags, con
|
|||||||
IMAGEGL2D imageGL(m_Context, flags, GL_TEXTURE_2D, 0, texName, &err);
|
IMAGEGL2D imageGL(m_Context, flags, GL_TEXTURE_2D, 0, texName, &err);
|
||||||
NamedImage2DGL namedImageGL(imageGL, name);
|
NamedImage2DGL namedImageGL(imageGL, name);
|
||||||
|
|
||||||
if (m_Info.CheckCL(err, "cl::ImageGL()"))
|
if (m_Info->CheckCL(err, "cl::ImageGL()"))
|
||||||
{
|
{
|
||||||
m_GLImages.push_back(namedImageGL);
|
m_GLImages.push_back(namedImageGL);
|
||||||
|
|
||||||
@ -359,7 +349,7 @@ bool OpenCLWrapper::AddAndWriteImage(const string& name, cl_mem_flags flags, con
|
|||||||
{
|
{
|
||||||
NamedImage2D namedImage(cl::Image2D(m_Context, flags, format, width, height, row_pitch, data, &err), name);
|
NamedImage2D namedImage(cl::Image2D(m_Context, flags, format, width, height, row_pitch, data, &err), name);
|
||||||
|
|
||||||
if (m_Info.CheckCL(err, "cl::Image2D()"))
|
if (m_Info->CheckCL(err, "cl::Image2D()"))
|
||||||
{
|
{
|
||||||
m_Images.push_back(namedImage);
|
m_Images.push_back(namedImage);
|
||||||
return true;
|
return true;
|
||||||
@ -376,7 +366,7 @@ bool OpenCLWrapper::AddAndWriteImage(const string& name, cl_mem_flags flags, con
|
|||||||
{
|
{
|
||||||
NamedImage2DGL namedImageGL(IMAGEGL2D(m_Context, flags, GL_TEXTURE_2D, 0, texName, &err), name);//Sizes are different, so create new.
|
NamedImage2DGL namedImageGL(IMAGEGL2D(m_Context, flags, GL_TEXTURE_2D, 0, texName, &err), name);//Sizes are different, so create new.
|
||||||
|
|
||||||
if (m_Info.CheckCL(err, "cl::ImageGL()"))
|
if (m_Info->CheckCL(err, "cl::ImageGL()"))
|
||||||
{
|
{
|
||||||
m_GLImages[imageIndex] = namedImageGL;
|
m_GLImages[imageIndex] = namedImageGL;
|
||||||
}
|
}
|
||||||
@ -395,10 +385,9 @@ bool OpenCLWrapper::AddAndWriteImage(const string& name, cl_mem_flags flags, con
|
|||||||
if (!CompareImageParams(m_Images[imageIndex].m_Image, flags, format, width, height, row_pitch))
|
if (!CompareImageParams(m_Images[imageIndex].m_Image, flags, format, width, height, row_pitch))
|
||||||
{
|
{
|
||||||
m_Images[imageIndex] = NamedImage2D();//First clear out the original so the two don't exist in memory at once.
|
m_Images[imageIndex] = NamedImage2D();//First clear out the original so the two don't exist in memory at once.
|
||||||
|
|
||||||
NamedImage2D namedImage(cl::Image2D(m_Context, flags, format, width, height, row_pitch, data, &err), name);
|
NamedImage2D namedImage(cl::Image2D(m_Context, flags, format, width, height, row_pitch, data, &err), name);
|
||||||
|
|
||||||
if (m_Info.CheckCL(err, "cl::Image2D()"))
|
if (m_Info->CheckCL(err, "cl::Image2D()"))
|
||||||
{
|
{
|
||||||
m_Images[imageIndex] = namedImage;
|
m_Images[imageIndex] = namedImage;
|
||||||
return true;
|
return true;
|
||||||
@ -432,11 +421,9 @@ bool OpenCLWrapper::WriteImage2D(size_t index, bool shared, ::size_t width, ::si
|
|||||||
cl_int err;
|
cl_int err;
|
||||||
cl::Event e;
|
cl::Event e;
|
||||||
cl::size_t<3> origin, region;
|
cl::size_t<3> origin, region;
|
||||||
|
|
||||||
origin[0] = 0;
|
origin[0] = 0;
|
||||||
origin[1] = 0;
|
origin[1] = 0;
|
||||||
origin[2] = 0;
|
origin[2] = 0;
|
||||||
|
|
||||||
region[0] = width;
|
region[0] = width;
|
||||||
region[1] = height;
|
region[1] = height;
|
||||||
region[2] = 1;
|
region[2] = 1;
|
||||||
@ -450,9 +437,8 @@ bool OpenCLWrapper::WriteImage2D(size_t index, bool shared, ::size_t width, ::si
|
|||||||
err = m_Queue.enqueueWriteImage(imageGL, CL_TRUE, origin, region, row_pitch, 0, data, nullptr, &e);
|
err = m_Queue.enqueueWriteImage(imageGL, CL_TRUE, origin, region, row_pitch, 0, data, nullptr, &e);
|
||||||
e.wait();
|
e.wait();
|
||||||
m_Queue.finish();
|
m_Queue.finish();
|
||||||
|
|
||||||
bool b = EnqueueReleaseGLObjects(imageGL);
|
bool b = EnqueueReleaseGLObjects(imageGL);
|
||||||
return m_Info.CheckCL(err, "cl::enqueueWriteImage()") && b;
|
return m_Info->CheckCL(err, "cl::enqueueWriteImage()") && b;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (!shared && index < m_Images.size())
|
else if (!shared && index < m_Images.size())
|
||||||
@ -460,7 +446,7 @@ bool OpenCLWrapper::WriteImage2D(size_t index, bool shared, ::size_t width, ::si
|
|||||||
err = m_Queue.enqueueWriteImage(m_Images[index].m_Image, CL_TRUE, origin, region, row_pitch, 0, data, nullptr, &e);
|
err = m_Queue.enqueueWriteImage(m_Images[index].m_Image, CL_TRUE, origin, region, row_pitch, 0, data, nullptr, &e);
|
||||||
e.wait();
|
e.wait();
|
||||||
m_Queue.finish();
|
m_Queue.finish();
|
||||||
return m_Info.CheckCL(err, "cl::enqueueWriteImage()");
|
return m_Info->CheckCL(err, "cl::enqueueWriteImage()");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -507,11 +493,9 @@ bool OpenCLWrapper::ReadImage(size_t imageIndex, ::size_t width, ::size_t height
|
|||||||
cl_int err;
|
cl_int err;
|
||||||
cl::Event e;
|
cl::Event e;
|
||||||
cl::size_t<3> origin, region;
|
cl::size_t<3> origin, region;
|
||||||
|
|
||||||
origin[0] = 0;
|
origin[0] = 0;
|
||||||
origin[1] = 0;
|
origin[1] = 0;
|
||||||
origin[2] = 0;
|
origin[2] = 0;
|
||||||
|
|
||||||
region[0] = width;
|
region[0] = width;
|
||||||
region[1] = height;
|
region[1] = height;
|
||||||
region[2] = 1;
|
region[2] = 1;
|
||||||
@ -524,13 +508,13 @@ bool OpenCLWrapper::ReadImage(size_t imageIndex, ::size_t width, ::size_t height
|
|||||||
{
|
{
|
||||||
err = m_Queue.enqueueReadImage(m_GLImages[imageIndex].m_Image, true, origin, region, row_pitch, 0, data);
|
err = m_Queue.enqueueReadImage(m_GLImages[imageIndex].m_Image, true, origin, region, row_pitch, 0, data);
|
||||||
bool b = EnqueueReleaseGLObjects(m_GLImages[imageIndex].m_Image);
|
bool b = EnqueueReleaseGLObjects(m_GLImages[imageIndex].m_Image);
|
||||||
return m_Info.CheckCL(err, "cl::enqueueReadImage()") && b;
|
return m_Info->CheckCL(err, "cl::enqueueReadImage()") && b;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (!shared && imageIndex < m_Images.size())
|
else if (!shared && imageIndex < m_Images.size())
|
||||||
{
|
{
|
||||||
err = m_Queue.enqueueReadImage(m_Images[imageIndex].m_Image, true, origin, region, row_pitch, 0, data);
|
err = m_Queue.enqueueReadImage(m_Images[imageIndex].m_Image, true, origin, region, row_pitch, 0, data);
|
||||||
return m_Info.CheckCL(err, "cl::enqueueReadImage()");
|
return m_Info->CheckCL(err, "cl::enqueueReadImage()");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -588,7 +572,6 @@ size_t OpenCLWrapper::GetImageSize(size_t imageIndex, bool shared)
|
|||||||
if (shared && imageIndex < m_GLImages.size())
|
if (shared && imageIndex < m_GLImages.size())
|
||||||
{
|
{
|
||||||
vector<cl::Memory> images;
|
vector<cl::Memory> images;
|
||||||
|
|
||||||
images.push_back(m_GLImages[imageIndex].m_Image);
|
images.push_back(m_GLImages[imageIndex].m_Image);
|
||||||
IMAGEGL2D image = m_GLImages[imageIndex].m_Image;
|
IMAGEGL2D image = m_GLImages[imageIndex].m_Image;
|
||||||
|
|
||||||
@ -620,7 +603,6 @@ size_t OpenCLWrapper::GetImageSize(size_t imageIndex, bool shared)
|
|||||||
bool OpenCLWrapper::CompareImageParams(cl::Image& image, cl_mem_flags flags, const cl::ImageFormat& format, ::size_t width, ::size_t height, ::size_t row_pitch)
|
bool OpenCLWrapper::CompareImageParams(cl::Image& image, cl_mem_flags flags, const cl::ImageFormat& format, ::size_t width, ::size_t height, ::size_t row_pitch)
|
||||||
{
|
{
|
||||||
cl_image_format tempFormat = image.getImageInfo<CL_IMAGE_FORMAT>(nullptr);
|
cl_image_format tempFormat = image.getImageInfo<CL_IMAGE_FORMAT>(nullptr);
|
||||||
|
|
||||||
return (/*image.getImageInfo<CL_MEM_FLAGS>() == flags &&*/
|
return (/*image.getImageInfo<CL_MEM_FLAGS>() == flags &&*/
|
||||||
tempFormat.image_channel_data_type == format.image_channel_data_type &&
|
tempFormat.image_channel_data_type == format.image_channel_data_type &&
|
||||||
tempFormat.image_channel_order == format.image_channel_order &&
|
tempFormat.image_channel_order == format.image_channel_order &&
|
||||||
@ -657,7 +639,6 @@ bool OpenCLWrapper::CreateImage2D(cl::Image2D& image2D, cl_mem_flags flags, cl::
|
|||||||
if (m_Init)
|
if (m_Init)
|
||||||
{
|
{
|
||||||
cl_int err;
|
cl_int err;
|
||||||
|
|
||||||
image2D = cl::Image2D(m_Context,
|
image2D = cl::Image2D(m_Context,
|
||||||
flags,
|
flags,
|
||||||
format,
|
format,
|
||||||
@ -666,8 +647,7 @@ bool OpenCLWrapper::CreateImage2D(cl::Image2D& image2D, cl_mem_flags flags, cl::
|
|||||||
row_pitch,
|
row_pitch,
|
||||||
data,
|
data,
|
||||||
&err);
|
&err);
|
||||||
|
return m_Info->CheckCL(err, "cl::Image2D()");
|
||||||
return m_Info.CheckCL(err, "cl::Image2D()");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
@ -687,15 +667,13 @@ bool OpenCLWrapper::CreateImage2DGL(IMAGEGL2D& image2DGL, cl_mem_flags flags, GL
|
|||||||
if (m_Init)
|
if (m_Init)
|
||||||
{
|
{
|
||||||
cl_int err;
|
cl_int err;
|
||||||
|
|
||||||
image2DGL = IMAGEGL2D(m_Context,
|
image2DGL = IMAGEGL2D(m_Context,
|
||||||
flags,
|
flags,
|
||||||
target,
|
target,
|
||||||
miplevel,
|
miplevel,
|
||||||
texobj,
|
texobj,
|
||||||
&err);
|
&err);
|
||||||
|
return m_Info->CheckCL(err, "cl::ImageGL()");
|
||||||
return m_Info.CheckCL(err, "cl::ImageGL()");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
@ -726,11 +704,10 @@ bool OpenCLWrapper::EnqueueAcquireGLObjects(IMAGEGL2D& image)
|
|||||||
if (m_Init && m_Shared)
|
if (m_Init && m_Shared)
|
||||||
{
|
{
|
||||||
vector<cl::Memory> images;
|
vector<cl::Memory> images;
|
||||||
|
|
||||||
images.push_back(image);
|
images.push_back(image);
|
||||||
cl_int err = m_Queue.enqueueAcquireGLObjects(&images);
|
cl_int err = m_Queue.enqueueAcquireGLObjects(&images);
|
||||||
m_Queue.finish();
|
m_Queue.finish();
|
||||||
return m_Info.CheckCL(err, "cl::CommandQueue::enqueueAcquireGLObjects()");
|
return m_Info->CheckCL(err, "cl::CommandQueue::enqueueAcquireGLObjects()");
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
@ -761,11 +738,10 @@ bool OpenCLWrapper::EnqueueReleaseGLObjects(IMAGEGL2D& image)
|
|||||||
if (m_Init && m_Shared)
|
if (m_Init && m_Shared)
|
||||||
{
|
{
|
||||||
vector<cl::Memory> images;
|
vector<cl::Memory> images;
|
||||||
|
|
||||||
images.push_back(image);
|
images.push_back(image);
|
||||||
cl_int err = m_Queue.enqueueReleaseGLObjects(&images);
|
cl_int err = m_Queue.enqueueReleaseGLObjects(&images);
|
||||||
m_Queue.finish();
|
m_Queue.finish();
|
||||||
return m_Info.CheckCL(err, "cl::CommandQueue::enqueueReleaseGLObjects()");
|
return m_Info->CheckCL(err, "cl::CommandQueue::enqueueReleaseGLObjects()");
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
@ -781,9 +757,8 @@ bool OpenCLWrapper::EnqueueAcquireGLObjects(const VECTOR_CLASS<cl::Memory>* memO
|
|||||||
if (m_Init && m_Shared)
|
if (m_Init && m_Shared)
|
||||||
{
|
{
|
||||||
cl_int err = m_Queue.enqueueAcquireGLObjects(memObjects);
|
cl_int err = m_Queue.enqueueAcquireGLObjects(memObjects);
|
||||||
|
|
||||||
m_Queue.finish();
|
m_Queue.finish();
|
||||||
return m_Info.CheckCL(err, "cl::CommandQueue::enqueueAcquireGLObjects()");
|
return m_Info->CheckCL(err, "cl::CommandQueue::enqueueAcquireGLObjects()");
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
@ -799,9 +774,8 @@ bool OpenCLWrapper::EnqueueReleaseGLObjects(const VECTOR_CLASS<cl::Memory>* memO
|
|||||||
if (m_Init && m_Shared)
|
if (m_Init && m_Shared)
|
||||||
{
|
{
|
||||||
cl_int err = m_Queue.enqueueReleaseGLObjects(memObjects);
|
cl_int err = m_Queue.enqueueReleaseGLObjects(memObjects);
|
||||||
|
|
||||||
m_Queue.finish();
|
m_Queue.finish();
|
||||||
return m_Info.CheckCL(err, "cl::CommandQueue::enqueueReleaseGLObjects()");
|
return m_Info->CheckCL(err, "cl::CommandQueue::enqueueReleaseGLObjects()");
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
@ -818,14 +792,12 @@ bool OpenCLWrapper::EnqueueReleaseGLObjects(const VECTOR_CLASS<cl::Memory>* memO
|
|||||||
bool OpenCLWrapper::CreateSampler(cl::Sampler& sampler, cl_bool normalizedCoords, cl_addressing_mode addressingMode, cl_filter_mode filterMode)
|
bool OpenCLWrapper::CreateSampler(cl::Sampler& sampler, cl_bool normalizedCoords, cl_addressing_mode addressingMode, cl_filter_mode filterMode)
|
||||||
{
|
{
|
||||||
cl_int err;
|
cl_int err;
|
||||||
|
|
||||||
sampler = cl::Sampler(m_Context,
|
sampler = cl::Sampler(m_Context,
|
||||||
normalizedCoords,
|
normalizedCoords,
|
||||||
addressingMode,
|
addressingMode,
|
||||||
filterMode,
|
filterMode,
|
||||||
&err);
|
&err);
|
||||||
|
return m_Info->CheckCL(err, "cl::Sampler()");
|
||||||
return m_Info.CheckCL(err, "cl::Sampler()");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -839,7 +811,6 @@ bool OpenCLWrapper::CreateSampler(cl::Sampler& sampler, cl_bool normalizedCoords
|
|||||||
bool OpenCLWrapper::SetBufferArg(size_t kernelIndex, cl_uint argIndex, const string& name)
|
bool OpenCLWrapper::SetBufferArg(size_t kernelIndex, cl_uint argIndex, const string& name)
|
||||||
{
|
{
|
||||||
int bufferIndex = OpenCLWrapper::FindBufferIndex(name);
|
int bufferIndex = OpenCLWrapper::FindBufferIndex(name);
|
||||||
|
|
||||||
return bufferIndex != -1 ? SetBufferArg(kernelIndex, argIndex, bufferIndex) : false;
|
return bufferIndex != -1 ? SetBufferArg(kernelIndex, argIndex, bufferIndex) : false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -897,12 +868,12 @@ bool OpenCLWrapper::SetImageArg(size_t kernelIndex, cl_uint argIndex, bool share
|
|||||||
if (shared && imageIndex < m_GLImages.size())
|
if (shared && imageIndex < m_GLImages.size())
|
||||||
{
|
{
|
||||||
err = m_Programs[kernelIndex].m_Kernel.setArg(argIndex, m_GLImages[imageIndex].m_Image);
|
err = m_Programs[kernelIndex].m_Kernel.setArg(argIndex, m_GLImages[imageIndex].m_Image);
|
||||||
return m_Info.CheckCL(err, "cl::Kernel::setArg()");
|
return m_Info->CheckCL(err, "cl::Kernel::setArg()");
|
||||||
}
|
}
|
||||||
else if (!shared && imageIndex < m_Images.size())
|
else if (!shared && imageIndex < m_Images.size())
|
||||||
{
|
{
|
||||||
err = m_Programs[kernelIndex].m_Kernel.setArg(argIndex, m_Images[imageIndex].m_Image);
|
err = m_Programs[kernelIndex].m_Kernel.setArg(argIndex, m_Images[imageIndex].m_Image);
|
||||||
return m_Info.CheckCL(err, "cl::Kernel::setArg()");
|
return m_Info->CheckCL(err, "cl::Kernel::setArg()");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -946,10 +917,9 @@ bool OpenCLWrapper::RunKernel(size_t kernelIndex, size_t totalGridWidth, size_t
|
|||||||
cl::NDRange(blockWidth, blockHeight, blockDepth),
|
cl::NDRange(blockWidth, blockHeight, blockDepth),
|
||||||
nullptr,
|
nullptr,
|
||||||
&e);
|
&e);
|
||||||
|
|
||||||
e.wait();
|
e.wait();
|
||||||
m_Queue.finish();
|
m_Queue.finish();
|
||||||
return m_Info.CheckCL(err, "cl::CommandQueue::enqueueNDRangeKernel()");
|
return m_Info->CheckCL(err, "cl::CommandQueue::enqueueNDRangeKernel()");
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
@ -963,7 +933,7 @@ bool OpenCLWrapper::Shared() const { return m_Shared; }
|
|||||||
const cl::Context& OpenCLWrapper::Context() const { return m_Context; }
|
const cl::Context& OpenCLWrapper::Context() const { return m_Context; }
|
||||||
size_t OpenCLWrapper::PlatformIndex() const { return m_PlatformIndex; }
|
size_t OpenCLWrapper::PlatformIndex() const { return m_PlatformIndex; }
|
||||||
size_t OpenCLWrapper::DeviceIndex() const { return m_DeviceIndex; }
|
size_t OpenCLWrapper::DeviceIndex() const { return m_DeviceIndex; }
|
||||||
const string& OpenCLWrapper::DeviceName() const { return m_Info.DeviceName(m_PlatformIndex, m_DeviceIndex); }
|
const string& OpenCLWrapper::DeviceName() const { return m_Info->DeviceName(m_PlatformIndex, m_DeviceIndex); }
|
||||||
size_t OpenCLWrapper::LocalMemSize() const { return m_LocalMemSize; }
|
size_t OpenCLWrapper::LocalMemSize() const { return m_LocalMemSize; }
|
||||||
size_t OpenCLWrapper::GlobalMemSize() const { return m_GlobalMemSize; }
|
size_t OpenCLWrapper::GlobalMemSize() const { return m_GlobalMemSize; }
|
||||||
size_t OpenCLWrapper::MaxAllocSize() const { return m_MaxAllocSize; }
|
size_t OpenCLWrapper::MaxAllocSize() const { return m_MaxAllocSize; }
|
||||||
@ -997,7 +967,6 @@ bool OpenCLWrapper::CreateSPK(const string& name, const string& program, const s
|
|||||||
if (m_Init)
|
if (m_Init)
|
||||||
{
|
{
|
||||||
cl_int err;
|
cl_int err;
|
||||||
|
|
||||||
spk.m_Name = name;
|
spk.m_Name = name;
|
||||||
spk.m_Source = cl::Program::Sources(1, std::make_pair(program.c_str(), program.length() + 1));
|
spk.m_Source = cl::Program::Sources(1, std::make_pair(program.c_str(), program.length() + 1));
|
||||||
spk.m_Program = cl::Program(m_Context, spk.m_Source);
|
spk.m_Program = cl::Program(m_Context, spk.m_Source);
|
||||||
@ -1006,17 +975,18 @@ bool OpenCLWrapper::CreateSPK(const string& name, const string& program, const s
|
|||||||
err = spk.m_Program.build(m_DeviceVec, "-cl-mad-enable");//Tinker with other options later.
|
err = spk.m_Program.build(m_DeviceVec, "-cl-mad-enable");//Tinker with other options later.
|
||||||
else
|
else
|
||||||
err = spk.m_Program.build(m_DeviceVec, "-cl-mad-enable -cl-no-signed-zeros -cl-single-precision-constant");
|
err = spk.m_Program.build(m_DeviceVec, "-cl-mad-enable -cl-no-signed-zeros -cl-single-precision-constant");
|
||||||
|
|
||||||
//err = spk.m_Program.build(m_DeviceVec, "-cl-single-precision-constant");
|
//err = spk.m_Program.build(m_DeviceVec, "-cl-single-precision-constant");
|
||||||
//err = spk.m_Program.build(m_DeviceVec, "-cl-mad-enable -cl-single-precision-constant");
|
//err = spk.m_Program.build(m_DeviceVec, "-cl-mad-enable -cl-single-precision-constant");
|
||||||
//err = spk.m_Program.build(m_DeviceVec, "-cl-mad-enable -cl-no-signed-zeros -cl-fast-relaxed-math -cl-single-precision-constant");//This can cause some rounding.
|
//err = spk.m_Program.build(m_DeviceVec, "-cl-mad-enable -cl-no-signed-zeros -cl-fast-relaxed-math -cl-single-precision-constant");//This can cause some rounding.
|
||||||
//err = spk.m_Program.build(m_DeviceVec, "-cl-mad-enable -cl-single-precision-constant");
|
//err = spk.m_Program.build(m_DeviceVec, "-cl-mad-enable -cl-single-precision-constant");
|
||||||
|
|
||||||
if (m_Info.CheckCL(err, "cl::Program::build()"))
|
if (m_Info->CheckCL(err, "cl::Program::build()"))
|
||||||
{
|
{
|
||||||
//Building of program is ok, now create kernel with the specified entry point.
|
//Building of program is ok, now create kernel with the specified entry point.
|
||||||
spk.m_Kernel = cl::Kernel(spk.m_Program, entryPoint.c_str(), &err);
|
spk.m_Kernel = cl::Kernel(spk.m_Program, entryPoint.c_str(), &err);
|
||||||
|
|
||||||
if (m_Info.CheckCL(err, "cl::Kernel()"))
|
if (m_Info->CheckCL(err, "cl::Kernel()"))
|
||||||
return true;//Everything is ok.
|
return true;//Everything is ok.
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -9,11 +9,7 @@
|
|||||||
|
|
||||||
namespace EmberCLns
|
namespace EmberCLns
|
||||||
{
|
{
|
||||||
#if CL_VERSION_1_2
|
|
||||||
#define IMAGEGL2D cl::ImageGL
|
#define IMAGEGL2D cl::ImageGL
|
||||||
#else
|
|
||||||
#define IMAGEGL2D cl::Image2DGL
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Class to contain all of the things needed to store an OpenCL program.
|
/// Class to contain all of the things needed to store an OpenCL program.
|
||||||
@ -162,8 +158,7 @@ public:
|
|||||||
if (m_Init && kernelIndex < m_Programs.size())
|
if (m_Init && kernelIndex < m_Programs.size())
|
||||||
{
|
{
|
||||||
cl_int err = m_Programs[kernelIndex].m_Kernel.setArg(argIndex, arg);
|
cl_int err = m_Programs[kernelIndex].m_Kernel.setArg(argIndex, arg);
|
||||||
|
return m_Info->CheckCL(err, "cl::Kernel::setArg()");
|
||||||
return m_Info.CheckCL(err, "cl::Kernel::setArg()");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
@ -201,7 +196,7 @@ private:
|
|||||||
cl::Context m_Context;
|
cl::Context m_Context;
|
||||||
cl::Device m_Device;
|
cl::Device m_Device;
|
||||||
cl::CommandQueue m_Queue;
|
cl::CommandQueue m_Queue;
|
||||||
OpenCLInfo& m_Info;
|
shared_ptr<OpenCLInfo> m_Info;
|
||||||
std::vector<cl::Device> m_DeviceVec;
|
std::vector<cl::Device> m_DeviceVec;
|
||||||
std::vector<Spk> m_Programs;
|
std::vector<Spk> m_Programs;
|
||||||
std::vector<NamedBuffer> m_Buffers;
|
std::vector<NamedBuffer> m_Buffers;
|
||||||
|
@ -41,11 +41,11 @@ void RendererCL<T, bucketT>::Init()
|
|||||||
m_Init = false;
|
m_Init = false;
|
||||||
m_DoublePrecision = typeid(T) == typeid(double);
|
m_DoublePrecision = typeid(T) == typeid(double);
|
||||||
m_NumChannels = 4;
|
m_NumChannels = 4;
|
||||||
|
|
||||||
//Buffer names.
|
//Buffer names.
|
||||||
m_EmberBufferName = "Ember";
|
m_EmberBufferName = "Ember";
|
||||||
m_XformsBufferName = "Xforms";
|
m_XformsBufferName = "Xforms";
|
||||||
m_ParVarsBufferName = "ParVars";
|
m_ParVarsBufferName = "ParVars";
|
||||||
|
m_GlobalSharedBufferName = "GlobalShared";
|
||||||
m_SeedsBufferName = "Seeds";
|
m_SeedsBufferName = "Seeds";
|
||||||
m_DistBufferName = "Dist";
|
m_DistBufferName = "Dist";
|
||||||
m_CarToRasBufferName = "CarToRas";
|
m_CarToRasBufferName = "CarToRas";
|
||||||
@ -60,7 +60,6 @@ void RendererCL<T, bucketT>::Init()
|
|||||||
m_AccumBufferName = "Accum";
|
m_AccumBufferName = "Accum";
|
||||||
m_FinalImageName = "Final";
|
m_FinalImageName = "Final";
|
||||||
m_PointsBufferName = "Points";
|
m_PointsBufferName = "Points";
|
||||||
|
|
||||||
//It's critical that these numbers never change. They are
|
//It's critical that these numbers never change. They are
|
||||||
//based on the cuburn model of each kernel launch containing
|
//based on the cuburn model of each kernel launch containing
|
||||||
//256 threads. 32 wide by 8 high. Everything done in the OpenCL
|
//256 threads. 32 wide by 8 high. Everything done in the OpenCL
|
||||||
@ -70,7 +69,6 @@ void RendererCL<T, bucketT>::Init()
|
|||||||
m_IterBlockHeight = 8;
|
m_IterBlockHeight = 8;
|
||||||
m_IterBlocksWide = 64;
|
m_IterBlocksWide = 64;
|
||||||
m_IterBlocksHigh = 2;
|
m_IterBlocksHigh = 2;
|
||||||
|
|
||||||
m_PaletteFormat.image_channel_order = CL_RGBA;
|
m_PaletteFormat.image_channel_order = CL_RGBA;
|
||||||
m_PaletteFormat.image_channel_data_type = CL_FLOAT;
|
m_PaletteFormat.image_channel_data_type = CL_FLOAT;
|
||||||
m_FinalFormat.image_channel_order = CL_RGBA;
|
m_FinalFormat.image_channel_order = CL_RGBA;
|
||||||
@ -111,11 +109,11 @@ bool RendererCL<T, bucketT>::Init(const vector<pair<size_t, size_t>>& devices, b
|
|||||||
auto& zeroizeProgram = m_IterOpenCLKernelCreator.ZeroizeKernel();
|
auto& zeroizeProgram = m_IterOpenCLKernelCreator.ZeroizeKernel();
|
||||||
auto& sumHistProgram = m_IterOpenCLKernelCreator.SumHistKernel();
|
auto& sumHistProgram = m_IterOpenCLKernelCreator.SumHistKernel();
|
||||||
ostringstream os;
|
ostringstream os;
|
||||||
|
|
||||||
m_Init = false;
|
m_Init = false;
|
||||||
m_Devices.clear();
|
m_Devices.clear();
|
||||||
m_Devices.reserve(devices.size());
|
m_Devices.reserve(devices.size());
|
||||||
m_OutputTexID = outputTexID;
|
m_OutputTexID = outputTexID;
|
||||||
|
m_GlobalShared.second.resize(16);//Dummy data until a real alloc is needed.
|
||||||
|
|
||||||
for (size_t i = 0; i < devices.size(); i++)
|
for (size_t i = 0; i < devices.size(); i++)
|
||||||
{
|
{
|
||||||
@ -126,8 +124,11 @@ bool RendererCL<T, bucketT>::Init(const vector<pair<size_t, size_t>>& devices, b
|
|||||||
if ((b = cld->Init()))//Build a simple program to ensure OpenCL is working right.
|
if ((b = cld->Init()))//Build a simple program to ensure OpenCL is working right.
|
||||||
{
|
{
|
||||||
if (b && !(b = cld->m_Wrapper.AddProgram(m_IterOpenCLKernelCreator.ZeroizeEntryPoint(), zeroizeProgram, m_IterOpenCLKernelCreator.ZeroizeEntryPoint(), m_DoublePrecision))) { AddToReport(loc); }
|
if (b && !(b = cld->m_Wrapper.AddProgram(m_IterOpenCLKernelCreator.ZeroizeEntryPoint(), zeroizeProgram, m_IterOpenCLKernelCreator.ZeroizeEntryPoint(), m_DoublePrecision))) { AddToReport(loc); }
|
||||||
|
|
||||||
if (b && !(b = cld->m_Wrapper.AddAndWriteImage("Palette", CL_MEM_READ_ONLY, m_PaletteFormat, 256, 1, 0, nullptr))) { AddToReport(loc); }
|
if (b && !(b = cld->m_Wrapper.AddAndWriteImage("Palette", CL_MEM_READ_ONLY, m_PaletteFormat, 256, 1, 0, nullptr))) { AddToReport(loc); }
|
||||||
|
|
||||||
|
if (b && !(b = cld->m_Wrapper.AddAndWriteBuffer(m_GlobalSharedBufferName, m_GlobalShared.second.data(), m_GlobalShared.second.size() * sizeof(m_GlobalShared.second[0])))) { AddToReport(loc); }//Empty at start, will be filled in later if needed.
|
||||||
|
|
||||||
if (b)
|
if (b)
|
||||||
{
|
{
|
||||||
m_Devices.push_back(std::move(cld));//Success, so move to the vector, else it will go out of scope and be deleted.
|
m_Devices.push_back(std::move(cld));//Success, so move to the vector, else it will go out of scope and be deleted.
|
||||||
@ -159,6 +160,7 @@ bool RendererCL<T, bucketT>::Init(const vector<pair<size_t, size_t>>& devices, b
|
|||||||
|
|
||||||
//Build a simple program to ensure OpenCL is working right.
|
//Build a simple program to ensure OpenCL is working right.
|
||||||
if (b && !(b = firstWrapper.AddProgram(m_DEOpenCLKernelCreator.LogScaleAssignDEEntryPoint(), m_DEOpenCLKernelCreator.LogScaleAssignDEKernel(), m_DEOpenCLKernelCreator.LogScaleAssignDEEntryPoint(), m_DoublePrecision))) { AddToReport(loc); }
|
if (b && !(b = firstWrapper.AddProgram(m_DEOpenCLKernelCreator.LogScaleAssignDEEntryPoint(), m_DEOpenCLKernelCreator.LogScaleAssignDEKernel(), m_DEOpenCLKernelCreator.LogScaleAssignDEEntryPoint(), m_DoublePrecision))) { AddToReport(loc); }
|
||||||
|
|
||||||
if (b && !(b = firstWrapper.AddProgram(m_IterOpenCLKernelCreator.SumHistEntryPoint(), sumHistProgram, m_IterOpenCLKernelCreator.SumHistEntryPoint(), m_DoublePrecision))) { AddToReport(loc); }
|
if (b && !(b = firstWrapper.AddProgram(m_IterOpenCLKernelCreator.SumHistEntryPoint(), sumHistProgram, m_IterOpenCLKernelCreator.SumHistEntryPoint(), m_DoublePrecision))) { AddToReport(loc); }
|
||||||
|
|
||||||
if (b)
|
if (b)
|
||||||
@ -170,7 +172,6 @@ bool RendererCL<T, bucketT>::Init(const vector<pair<size_t, size_t>>& devices, b
|
|||||||
//AMD is further limited because of less local memory so these have to be 16 on AMD.
|
//AMD is further limited because of less local memory so these have to be 16 on AMD.
|
||||||
m_MaxDEBlockSizeW = m_Devices[0]->Nvidia() ? 24 : 16;//These *must* both be divisible by 8 or else pixels will go missing.
|
m_MaxDEBlockSizeW = m_Devices[0]->Nvidia() ? 24 : 16;//These *must* both be divisible by 8 or else pixels will go missing.
|
||||||
m_MaxDEBlockSizeH = m_Devices[0]->Nvidia() ? 24 : 16;
|
m_MaxDEBlockSizeH = m_Devices[0]->Nvidia() ? 24 : 16;
|
||||||
|
|
||||||
FillSeeds();
|
FillSeeds();
|
||||||
|
|
||||||
for (size_t device = 0; device < m_Devices.size(); device++)
|
for (size_t device = 0; device < m_Devices.size(); device++)
|
||||||
@ -533,7 +534,9 @@ bool RendererCL<T, bucketT>::CreateDEFilter(bool& newAlloc)
|
|||||||
auto& wrapper = m_Devices[0]->m_Wrapper;
|
auto& wrapper = m_Devices[0]->m_Wrapper;
|
||||||
|
|
||||||
if (b && !(b = wrapper.AddAndWriteBuffer(m_DECoefsBufferName, reinterpret_cast<void*>(const_cast<bucketT*>(m_DensityFilter->Coefs())), m_DensityFilter->CoefsSizeBytes()))) { AddToReport(loc); }
|
if (b && !(b = wrapper.AddAndWriteBuffer(m_DECoefsBufferName, reinterpret_cast<void*>(const_cast<bucketT*>(m_DensityFilter->Coefs())), m_DensityFilter->CoefsSizeBytes()))) { AddToReport(loc); }
|
||||||
|
|
||||||
if (b && !(b = wrapper.AddAndWriteBuffer(m_DEWidthsBufferName, reinterpret_cast<void*>(const_cast<bucketT*>(m_DensityFilter->Widths())), m_DensityFilter->WidthsSizeBytes()))) { AddToReport(loc); }
|
if (b && !(b = wrapper.AddAndWriteBuffer(m_DEWidthsBufferName, reinterpret_cast<void*>(const_cast<bucketT*>(m_DensityFilter->Widths())), m_DensityFilter->WidthsSizeBytes()))) { AddToReport(loc); }
|
||||||
|
|
||||||
if (b && !(b = wrapper.AddAndWriteBuffer(m_DECoefIndicesBufferName, reinterpret_cast<void*>(const_cast<uint*>(m_DensityFilter->CoefIndices())), m_DensityFilter->CoefsIndicesSizeBytes()))) { AddToReport(loc); }
|
if (b && !(b = wrapper.AddAndWriteBuffer(m_DECoefIndicesBufferName, reinterpret_cast<void*>(const_cast<uint*>(m_DensityFilter->CoefIndices())), m_DensityFilter->CoefsIndicesSizeBytes()))) { AddToReport(loc); }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -655,28 +658,37 @@ bool RendererCL<T, bucketT>::Alloc(bool histOnly)
|
|||||||
|
|
||||||
EnterResize();
|
EnterResize();
|
||||||
m_XformsCL.resize(m_Ember.TotalXformCount());
|
m_XformsCL.resize(m_Ember.TotalXformCount());
|
||||||
|
|
||||||
bool b = true;
|
bool b = true;
|
||||||
size_t histLength = SuperSize() * sizeof(v4bT);
|
size_t histLength = SuperSize() * sizeof(v4bT);
|
||||||
size_t accumLength = SuperSize() * sizeof(v4bT);
|
size_t accumLength = SuperSize() * sizeof(v4bT);
|
||||||
const char* loc = __FUNCTION__;
|
const char* loc = __FUNCTION__;
|
||||||
|
|
||||||
auto& wrapper = m_Devices[0]->m_Wrapper;
|
auto& wrapper = m_Devices[0]->m_Wrapper;
|
||||||
|
|
||||||
if (b && !(b = wrapper.AddBuffer(m_DEFilterParamsBufferName, sizeof(m_DensityFilterCL)))) { AddToReport(loc); }
|
if (b && !(b = wrapper.AddBuffer(m_DEFilterParamsBufferName, sizeof(m_DensityFilterCL)))) { AddToReport(loc); }
|
||||||
|
|
||||||
if (b && !(b = wrapper.AddBuffer(m_SpatialFilterParamsBufferName, sizeof(m_SpatialFilterCL)))) { AddToReport(loc); }
|
if (b && !(b = wrapper.AddBuffer(m_SpatialFilterParamsBufferName, sizeof(m_SpatialFilterCL)))) { AddToReport(loc); }
|
||||||
|
|
||||||
if (b && !(b = wrapper.AddBuffer(m_CurvesCsaName, SizeOf(m_Csa.m_Entries)))) { AddToReport(loc); }
|
if (b && !(b = wrapper.AddBuffer(m_CurvesCsaName, SizeOf(m_Csa.m_Entries)))) { AddToReport(loc); }
|
||||||
|
|
||||||
if (b && !(b = wrapper.AddBuffer(m_AccumBufferName, accumLength))) { AddToReport(loc); }//Accum buffer.
|
if (b && !(b = wrapper.AddBuffer(m_AccumBufferName, accumLength))) { AddToReport(loc); }//Accum buffer.
|
||||||
|
|
||||||
for (auto& device : m_Devices)
|
for (auto& device : m_Devices)
|
||||||
{
|
{
|
||||||
if (b && !(b = device->m_Wrapper.AddBuffer(m_EmberBufferName, sizeof(m_EmberCL)))) { AddToReport(loc); break; }
|
if (b && !(b = device->m_Wrapper.AddBuffer(m_EmberBufferName, sizeof(m_EmberCL)))) { AddToReport(loc); break; }
|
||||||
|
|
||||||
if (b && !(b = device->m_Wrapper.AddBuffer(m_XformsBufferName, SizeOf(m_XformsCL)))) { AddToReport(loc); break; }
|
if (b && !(b = device->m_Wrapper.AddBuffer(m_XformsBufferName, SizeOf(m_XformsCL)))) { AddToReport(loc); break; }
|
||||||
|
|
||||||
if (b && !(b = device->m_Wrapper.AddBuffer(m_ParVarsBufferName, 128 * sizeof(T)))) { AddToReport(loc); break; }
|
if (b && !(b = device->m_Wrapper.AddBuffer(m_ParVarsBufferName, 128 * sizeof(T)))) { AddToReport(loc); break; }
|
||||||
|
|
||||||
if (b && !(b = device->m_Wrapper.AddBuffer(m_DistBufferName, CHOOSE_XFORM_GRAIN))) { AddToReport(loc); break; }//Will be resized for xaos.
|
if (b && !(b = device->m_Wrapper.AddBuffer(m_DistBufferName, CHOOSE_XFORM_GRAIN))) { AddToReport(loc); break; }//Will be resized for xaos.
|
||||||
|
|
||||||
if (b && !(b = device->m_Wrapper.AddBuffer(m_CarToRasBufferName, sizeof(m_CarToRasCL)))) { AddToReport(loc); break; }
|
if (b && !(b = device->m_Wrapper.AddBuffer(m_CarToRasBufferName, sizeof(m_CarToRasCL)))) { AddToReport(loc); break; }
|
||||||
|
|
||||||
if (b && !(b = device->m_Wrapper.AddBuffer(m_HistBufferName, histLength))) { AddToReport(loc); break; }//Histogram. Will memset to zero later.
|
if (b && !(b = device->m_Wrapper.AddBuffer(m_HistBufferName, histLength))) { AddToReport(loc); break; }//Histogram. Will memset to zero later.
|
||||||
|
|
||||||
if (b && !(b = device->m_Wrapper.AddBuffer(m_PointsBufferName, IterGridKernelCount() * sizeof(PointCL<T>)))) { AddToReport(loc); break; }//Points between iter calls.
|
if (b && !(b = device->m_Wrapper.AddBuffer(m_PointsBufferName, IterGridKernelCount() * sizeof(PointCL<T>)))) { AddToReport(loc); break; }//Points between iter calls.
|
||||||
|
|
||||||
|
//Global shared is allocated once and written when building the kernel.
|
||||||
}
|
}
|
||||||
|
|
||||||
LeaveResize();
|
LeaveResize();
|
||||||
@ -739,12 +751,9 @@ eRenderStatus RendererCL<T, bucketT>::GaussianDensityFilter()
|
|||||||
//}
|
//}
|
||||||
//else
|
//else
|
||||||
// return RENDER_ERROR;
|
// return RENDER_ERROR;
|
||||||
|
|
||||||
//Timing t(4);
|
//Timing t(4);
|
||||||
|
|
||||||
eRenderStatus status = RunDensityFilter();
|
eRenderStatus status = RunDensityFilter();
|
||||||
//t.Toc(__FUNCTION__ " RunKernel()");
|
//t.Toc(__FUNCTION__ " RunKernel()");
|
||||||
|
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -802,17 +811,27 @@ EmberStats RendererCL<T, bucketT>::Iterate(size_t iterCount, size_t temporalSamp
|
|||||||
if (IterOpenCLKernelCreator<T>::IsBuildRequired(m_Ember, m_LastBuiltEmber))
|
if (IterOpenCLKernelCreator<T>::IsBuildRequired(m_Ember, m_LastBuiltEmber))
|
||||||
b = BuildIterProgramForEmber(true);
|
b = BuildIterProgramForEmber(true);
|
||||||
|
|
||||||
|
if (b)
|
||||||
|
{
|
||||||
//Setup buffers on all devices.
|
//Setup buffers on all devices.
|
||||||
for (auto& device : m_Devices)
|
for (auto& device : m_Devices)
|
||||||
{
|
{
|
||||||
auto& wrapper = device->m_Wrapper;
|
auto& wrapper = device->m_Wrapper;
|
||||||
|
|
||||||
if (b && !(b = wrapper.WriteBuffer (m_EmberBufferName, reinterpret_cast<void*>(&m_EmberCL), sizeof(m_EmberCL)))) { AddToReport(loc); }
|
if (b && !(b = wrapper.WriteBuffer(m_EmberBufferName, reinterpret_cast<void*>(&m_EmberCL), sizeof(m_EmberCL))))
|
||||||
if (b && !(b = wrapper.WriteBuffer (m_XformsBufferName, reinterpret_cast<void*>(m_XformsCL.data()), sizeof(m_XformsCL[0]) * m_XformsCL.size()))) { AddToReport(loc); }
|
break;
|
||||||
if (b && !(b = wrapper.AddAndWriteBuffer(m_DistBufferName, reinterpret_cast<void*>(const_cast<byte*>(XformDistributions())), XformDistributionsSize()))) { AddToReport(loc); }//Will be resized for xaos.
|
|
||||||
if (b && !(b = wrapper.WriteBuffer (m_CarToRasBufferName, reinterpret_cast<void*>(&m_CarToRasCL), sizeof(m_CarToRasCL)))) { AddToReport(loc); }
|
|
||||||
|
|
||||||
if (b && !(b = wrapper.AddAndWriteImage("Palette", CL_MEM_READ_ONLY, m_PaletteFormat, m_Dmap.m_Entries.size(), 1, 0, m_Dmap.m_Entries.data()))) { AddToReport(loc); }
|
if (b && !(b = wrapper.WriteBuffer(m_XformsBufferName, reinterpret_cast<void*>(m_XformsCL.data()), sizeof(m_XformsCL[0]) * m_XformsCL.size())))
|
||||||
|
break;
|
||||||
|
|
||||||
|
if (b && !(b = wrapper.AddAndWriteBuffer(m_DistBufferName, reinterpret_cast<void*>(const_cast<byte*>(XformDistributions())), XformDistributionsSize())))//Will be resized for xaos.
|
||||||
|
break;
|
||||||
|
|
||||||
|
if (b && !(b = wrapper.WriteBuffer(m_CarToRasBufferName, reinterpret_cast<void*>(&m_CarToRasCL), sizeof(m_CarToRasCL))))
|
||||||
|
break;
|
||||||
|
|
||||||
|
if (b && !(b = wrapper.AddAndWriteImage("Palette", CL_MEM_READ_ONLY, m_PaletteFormat, m_Dmap.m_Entries.size(), 1, 0, m_Dmap.m_Entries.data())))
|
||||||
|
break;
|
||||||
|
|
||||||
if (b)
|
if (b)
|
||||||
{
|
{
|
||||||
@ -821,17 +840,12 @@ EmberStats RendererCL<T, bucketT>::Iterate(size_t iterCount, size_t temporalSamp
|
|||||||
//Don't know the size of the parametric varations parameters buffer until the ember is examined.
|
//Don't know the size of the parametric varations parameters buffer until the ember is examined.
|
||||||
//So set it up right before the run.
|
//So set it up right before the run.
|
||||||
if (!m_Params.second.empty())
|
if (!m_Params.second.empty())
|
||||||
{
|
|
||||||
if (!wrapper.AddAndWriteBuffer(m_ParVarsBufferName, m_Params.second.data(), m_Params.second.size() * sizeof(m_Params.second[0])))
|
if (!wrapper.AddAndWriteBuffer(m_ParVarsBufferName, m_Params.second.data(), m_Params.second.size() * sizeof(m_Params.second[0])))
|
||||||
{
|
break;
|
||||||
m_Abort = true;
|
|
||||||
AddToReport(loc);
|
|
||||||
return stats;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
return stats;
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -876,10 +890,14 @@ bool RendererCL<T, bucketT>::BuildIterProgramForEmber(bool doAccum)
|
|||||||
bool b = !m_Devices.empty();
|
bool b = !m_Devices.empty();
|
||||||
const char* loc = __FUNCTION__;
|
const char* loc = __FUNCTION__;
|
||||||
IterOpenCLKernelCreator<T>::ParVarIndexDefines(m_Ember, m_Params, false, true);//Do with string and no vals.
|
IterOpenCLKernelCreator<T>::ParVarIndexDefines(m_Ember, m_Params, false, true);//Do with string and no vals.
|
||||||
m_IterKernel = m_IterOpenCLKernelCreator.CreateIterKernelString(m_Ember, m_Params.first, m_LockAccum, doAccum);
|
IterOpenCLKernelCreator<T>::SharedDataIndexDefines(m_Ember, m_GlobalShared, true, true);//Do with string and vals only once on build since it won't change until another build occurs.
|
||||||
|
|
||||||
|
if (b)
|
||||||
|
{
|
||||||
|
m_IterKernel = m_IterOpenCLKernelCreator.CreateIterKernelString(m_Ember, m_Params.first, m_GlobalShared.first, m_LockAccum, doAccum);
|
||||||
//cout << "Building: " << endl << iterProgram << endl;
|
//cout << "Building: " << endl << iterProgram << endl;
|
||||||
vector<std::thread> threads;
|
vector<std::thread> threads;
|
||||||
std::function<void(RendererClDevice*)> func = [&](RendererClDevice* dev)
|
std::function<void(RendererClDevice*)> func = [&](RendererClDevice * dev)
|
||||||
{
|
{
|
||||||
if (!dev->m_Wrapper.AddProgram(m_IterOpenCLKernelCreator.IterEntryPoint(), m_IterKernel, m_IterOpenCLKernelCreator.IterEntryPoint(), m_DoublePrecision))
|
if (!dev->m_Wrapper.AddProgram(m_IterOpenCLKernelCreator.IterEntryPoint(), m_IterKernel, m_IterOpenCLKernelCreator.IterEntryPoint(), m_DoublePrecision))
|
||||||
{
|
{
|
||||||
@ -888,14 +906,23 @@ bool RendererCL<T, bucketT>::BuildIterProgramForEmber(bool doAccum)
|
|||||||
AddToReport(string(loc) + "()\n" + dev->m_Wrapper.DeviceName() + ":\nBuilding the following program failed: \n" + m_IterKernel + "\n");
|
AddToReport(string(loc) + "()\n" + dev->m_Wrapper.DeviceName() + ":\nBuilding the following program failed: \n" + m_IterKernel + "\n");
|
||||||
m_ResizeCs.Leave();
|
m_ResizeCs.Leave();
|
||||||
}
|
}
|
||||||
|
else if (!m_GlobalShared.second.empty())
|
||||||
|
{
|
||||||
|
if (!dev->m_Wrapper.AddAndWriteBuffer(m_GlobalSharedBufferName, m_GlobalShared.second.data(), m_GlobalShared.second.size() * sizeof(m_GlobalShared.second[0])))
|
||||||
|
{
|
||||||
|
m_ResizeCs.Enter();//Just use the resize CS for lack of a better one.
|
||||||
|
b = false;
|
||||||
|
AddToReport(string(loc) + "()\n" + dev->m_Wrapper.DeviceName() + ":\nAdding global shared buffer failed.\n");
|
||||||
|
m_ResizeCs.Leave();
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
threads.reserve(m_Devices.size() - 1);
|
threads.reserve(m_Devices.size() - 1);
|
||||||
|
|
||||||
for (size_t device = m_Devices.size() - 1; device >= 0 && device < m_Devices.size(); device--)//Check both extents because size_t will wrap.
|
for (size_t device = m_Devices.size() - 1; device >= 0 && device < m_Devices.size(); device--)//Check both extents because size_t will wrap.
|
||||||
{
|
{
|
||||||
if (!device)//Secondary devices on their own threads.
|
if (!device)//Secondary devices on their own threads.
|
||||||
threads.push_back(std::thread([&](RendererClDevice* dev) { func(dev); }, m_Devices[device].get()));
|
threads.push_back(std::thread([&](RendererClDevice * dev) { func(dev); }, m_Devices[device].get()));
|
||||||
else//Primary device on this thread.
|
else//Primary device on this thread.
|
||||||
func(m_Devices[device].get());
|
func(m_Devices[device].get());
|
||||||
}
|
}
|
||||||
@ -910,6 +937,7 @@ bool RendererCL<T, bucketT>::BuildIterProgramForEmber(bool doAccum)
|
|||||||
//cout << string(loc) << "():\nBuilding the following program succeeded: \n" << iterProgram << endl;
|
//cout << string(loc) << "():\nBuilding the following program succeeded: \n" << iterProgram << endl;
|
||||||
m_LastBuiltEmber = m_Ember;
|
m_LastBuiltEmber = m_Ember;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return b;
|
return b;
|
||||||
}
|
}
|
||||||
@ -935,7 +963,6 @@ bool RendererCL<T, bucketT>::RunIter(size_t iterCount, size_t temporalSample, si
|
|||||||
std::atomic<size_t> atomLaunchesRan;
|
std::atomic<size_t> atomLaunchesRan;
|
||||||
std::atomic<intmax_t> atomItersRan, atomItersRemaining;
|
std::atomic<intmax_t> atomItersRan, atomItersRemaining;
|
||||||
size_t adjustedIterCountPerKernel = m_IterCountPerKernel;
|
size_t adjustedIterCountPerKernel = m_IterCountPerKernel;
|
||||||
|
|
||||||
itersRan = 0;
|
itersRan = 0;
|
||||||
atomItersRan.store(0);
|
atomItersRan.store(0);
|
||||||
atomItersRemaining.store(iterCount);
|
atomItersRemaining.store(iterCount);
|
||||||
@ -954,11 +981,9 @@ bool RendererCL<T, bucketT>::RunIter(size_t iterCount, size_t temporalSample, si
|
|||||||
}
|
}
|
||||||
|
|
||||||
size_t fuseFreq = Renderer<T, bucketT>::SubBatchSize() / adjustedIterCountPerKernel;//Use the base sbs to determine when to fuse.
|
size_t fuseFreq = Renderer<T, bucketT>::SubBatchSize() / adjustedIterCountPerKernel;//Use the base sbs to determine when to fuse.
|
||||||
|
|
||||||
#ifdef TEST_CL
|
#ifdef TEST_CL
|
||||||
m_Abort = false;
|
m_Abort = false;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
std::function<void(size_t, int)> iterFunc = [&](size_t dev, int kernelIndex)
|
std::function<void(size_t, int)> iterFunc = [&](size_t dev, int kernelIndex)
|
||||||
{
|
{
|
||||||
bool b = true;
|
bool b = true;
|
||||||
@ -980,16 +1005,29 @@ bool RendererCL<T, bucketT>::RunIter(size_t iterCount, size_t temporalSample, si
|
|||||||
//cout << "itersRemaining " << itersRemaining << ", iterCountPerKernel " << iterCountPerKernel << ", iterCountThisLaunch " << iterCountThisLaunch << endl;
|
//cout << "itersRemaining " << itersRemaining << ", iterCountPerKernel " << iterCountPerKernel << ", iterCountThisLaunch " << iterCountThisLaunch << endl;
|
||||||
|
|
||||||
if (b && !(b = wrapper.SetArg (kernelIndex, argIndex++, iterCountPerKernel))) { AddToReport(loc); }//Number of iters for each thread to run.
|
if (b && !(b = wrapper.SetArg (kernelIndex, argIndex++, iterCountPerKernel))) { AddToReport(loc); }//Number of iters for each thread to run.
|
||||||
|
|
||||||
if (b && !(b = wrapper.SetArg (kernelIndex, argIndex++, fuse))) { AddToReport(loc); }//Number of iters to fuse.
|
if (b && !(b = wrapper.SetArg (kernelIndex, argIndex++, fuse))) { AddToReport(loc); }//Number of iters to fuse.
|
||||||
|
|
||||||
if (b && !(b = wrapper.SetBufferArg(kernelIndex, argIndex++, m_SeedsBufferName))) { AddToReport(loc); }//Seeds.
|
if (b && !(b = wrapper.SetBufferArg(kernelIndex, argIndex++, m_SeedsBufferName))) { AddToReport(loc); }//Seeds.
|
||||||
|
|
||||||
if (b && !(b = wrapper.SetBufferArg(kernelIndex, argIndex++, m_EmberBufferName))) { AddToReport(loc); }//Ember.
|
if (b && !(b = wrapper.SetBufferArg(kernelIndex, argIndex++, m_EmberBufferName))) { AddToReport(loc); }//Ember.
|
||||||
|
|
||||||
if (b && !(b = wrapper.SetBufferArg(kernelIndex, argIndex++, m_XformsBufferName))) { AddToReport(loc); }//Xforms.
|
if (b && !(b = wrapper.SetBufferArg(kernelIndex, argIndex++, m_XformsBufferName))) { AddToReport(loc); }//Xforms.
|
||||||
|
|
||||||
if (b && !(b = wrapper.SetBufferArg(kernelIndex, argIndex++, m_ParVarsBufferName))) { AddToReport(loc); }//Parametric variation parameters.
|
if (b && !(b = wrapper.SetBufferArg(kernelIndex, argIndex++, m_ParVarsBufferName))) { AddToReport(loc); }//Parametric variation parameters.
|
||||||
|
|
||||||
|
if (b && !(b = wrapper.SetBufferArg(kernelIndex, argIndex++, m_GlobalSharedBufferName))) { AddToReport(loc); }//Global shared data.
|
||||||
|
|
||||||
if (b && !(b = wrapper.SetBufferArg(kernelIndex, argIndex++, m_DistBufferName))) { AddToReport(loc); }//Xform distributions.
|
if (b && !(b = wrapper.SetBufferArg(kernelIndex, argIndex++, m_DistBufferName))) { AddToReport(loc); }//Xform distributions.
|
||||||
|
|
||||||
if (b && !(b = wrapper.SetBufferArg(kernelIndex, argIndex++, m_CarToRasBufferName))) { AddToReport(loc); }//Coordinate converter.
|
if (b && !(b = wrapper.SetBufferArg(kernelIndex, argIndex++, m_CarToRasBufferName))) { AddToReport(loc); }//Coordinate converter.
|
||||||
|
|
||||||
if (b && !(b = wrapper.SetBufferArg(kernelIndex, argIndex++, m_HistBufferName))) { AddToReport(loc); }//Histogram.
|
if (b && !(b = wrapper.SetBufferArg(kernelIndex, argIndex++, m_HistBufferName))) { AddToReport(loc); }//Histogram.
|
||||||
|
|
||||||
if (b && !(b = wrapper.SetArg (kernelIndex, argIndex++, histSuperSize))) { AddToReport(loc); }//Histogram size.
|
if (b && !(b = wrapper.SetArg (kernelIndex, argIndex++, histSuperSize))) { AddToReport(loc); }//Histogram size.
|
||||||
|
|
||||||
if (b && !(b = wrapper.SetImageArg (kernelIndex, argIndex++, false, "Palette"))) { AddToReport(loc); }//Palette.
|
if (b && !(b = wrapper.SetImageArg (kernelIndex, argIndex++, false, "Palette"))) { AddToReport(loc); }//Palette.
|
||||||
|
|
||||||
if (b && !(b = wrapper.SetBufferArg(kernelIndex, argIndex++, m_PointsBufferName))) { AddToReport(loc); }//Random start points.
|
if (b && !(b = wrapper.SetBufferArg(kernelIndex, argIndex++, m_PointsBufferName))) { AddToReport(loc); }//Random start points.
|
||||||
|
|
||||||
if (b && !(b = wrapper.RunKernel(kernelIndex,
|
if (b && !(b = wrapper.RunKernel(kernelIndex,
|
||||||
@ -1024,7 +1062,6 @@ bool RendererCL<T, bucketT>::RunIter(size_t iterCount, size_t temporalSample, si
|
|||||||
) + temporalSample
|
) + temporalSample
|
||||||
) / double(TemporalSamples())
|
) / double(TemporalSamples())
|
||||||
);
|
);
|
||||||
|
|
||||||
double percentDiff = percent - m_LastIterPercent;
|
double percentDiff = percent - m_LastIterPercent;
|
||||||
double toc = m_ProgressTimer.Toc();
|
double toc = m_ProgressTimer.Toc();
|
||||||
|
|
||||||
@ -1104,17 +1141,19 @@ eRenderStatus RendererCL<T, bucketT>::RunLogScaleFilter()
|
|||||||
size_t blockH = 4;//A height of 4 seems to run the fastest.
|
size_t blockH = 4;//A height of 4 seems to run the fastest.
|
||||||
size_t gridW = m_DensityFilterCL.m_SuperRasW;
|
size_t gridW = m_DensityFilterCL.m_SuperRasW;
|
||||||
size_t gridH = m_DensityFilterCL.m_SuperRasH;
|
size_t gridH = m_DensityFilterCL.m_SuperRasH;
|
||||||
|
|
||||||
OpenCLWrapper::MakeEvenGridDims(blockW, blockH, gridW, gridH);
|
OpenCLWrapper::MakeEvenGridDims(blockW, blockH, gridW, gridH);
|
||||||
|
|
||||||
if (b && !(b = wrapper.AddAndWriteBuffer(m_DEFilterParamsBufferName, reinterpret_cast<void*>(&m_DensityFilterCL), sizeof(m_DensityFilterCL)))) { AddToReport(loc); }
|
if (b && !(b = wrapper.AddAndWriteBuffer(m_DEFilterParamsBufferName, reinterpret_cast<void*>(&m_DensityFilterCL), sizeof(m_DensityFilterCL)))) { AddToReport(loc); }
|
||||||
|
|
||||||
if (b && !(b = wrapper.SetBufferArg(kernelIndex, argIndex++, m_HistBufferName))) { AddToReport(loc); }//Histogram.
|
if (b && !(b = wrapper.SetBufferArg(kernelIndex, argIndex++, m_HistBufferName))) { AddToReport(loc); }//Histogram.
|
||||||
|
|
||||||
if (b && !(b = wrapper.SetBufferArg(kernelIndex, argIndex++, m_AccumBufferName))) { AddToReport(loc); }//Accumulator.
|
if (b && !(b = wrapper.SetBufferArg(kernelIndex, argIndex++, m_AccumBufferName))) { AddToReport(loc); }//Accumulator.
|
||||||
|
|
||||||
if (b && !(b = wrapper.SetBufferArg(kernelIndex, argIndex++, m_DEFilterParamsBufferName))) { AddToReport(loc); }//DensityFilterCL.
|
if (b && !(b = wrapper.SetBufferArg(kernelIndex, argIndex++, m_DEFilterParamsBufferName))) { AddToReport(loc); }//DensityFilterCL.
|
||||||
|
|
||||||
//t.Tic();
|
//t.Tic();
|
||||||
if (b && !(b = wrapper.RunKernel(kernelIndex, gridW, gridH, 1, blockW, blockH, 1))) { AddToReport(loc); }
|
if (b && !(b = wrapper.RunKernel(kernelIndex, gridW, gridH, 1, blockW, blockH, 1))) { AddToReport(loc); }
|
||||||
|
|
||||||
//t.Toc(loc);
|
//t.Toc(loc);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -1164,7 +1203,6 @@ eRenderStatus RendererCL<T, bucketT>::RunDensityFilter()
|
|||||||
//Can't just blindly pass dimension in vals. Must adjust them first to evenly divide the block count
|
//Can't just blindly pass dimension in vals. Must adjust them first to evenly divide the block count
|
||||||
//into the total grid dimensions.
|
//into the total grid dimensions.
|
||||||
OpenCLWrapper::MakeEvenGridDims(blockSizeW, blockSizeH, gridW, gridH);
|
OpenCLWrapper::MakeEvenGridDims(blockSizeW, blockSizeH, gridW, gridH);
|
||||||
|
|
||||||
//t.Tic();
|
//t.Tic();
|
||||||
//The classic problem with performing DE on adjacent pixels is that the filter will overlap.
|
//The classic problem with performing DE on adjacent pixels is that the filter will overlap.
|
||||||
//This can be solved in 2 ways. One is to use atomics, which is unacceptably slow.
|
//This can be solved in 2 ways. One is to use atomics, which is unacceptably slow.
|
||||||
@ -1188,7 +1226,6 @@ eRenderStatus RendererCL<T, bucketT>::RunDensityFilter()
|
|||||||
gapH = (uint)ceil((m_DensityFilterCL.m_FilterWidth * 2.0) / (double)32);//Block height is 1, but iterates over 32 rows.
|
gapH = (uint)ceil((m_DensityFilterCL.m_FilterWidth * 2.0) / (double)32);//Block height is 1, but iterates over 32 rows.
|
||||||
chunkSizeH = gapH + 1;
|
chunkSizeH = gapH + 1;
|
||||||
totalChunks = chunkSizeW * chunkSizeH;
|
totalChunks = chunkSizeW * chunkSizeH;
|
||||||
|
|
||||||
OpenCLWrapper::MakeEvenGridDims(blockSizeW, blockSizeH, gridW, gridH);
|
OpenCLWrapper::MakeEvenGridDims(blockSizeW, blockSizeH, gridW, gridH);
|
||||||
gridW /= chunkSizeW;
|
gridW /= chunkSizeW;
|
||||||
gridH /= chunkSizeH;
|
gridH /= chunkSizeH;
|
||||||
@ -1199,6 +1236,7 @@ eRenderStatus RendererCL<T, bucketT>::RunDensityFilter()
|
|||||||
{
|
{
|
||||||
//t2.Tic();
|
//t2.Tic();
|
||||||
if (b && !(b = RunDensityFilterPrivate(kernelIndex, gridW, gridH, blockSizeW, blockSizeH, chunkSizeW, chunkSizeH, colChunk, rowChunk))) { m_Abort = true; AddToReport(loc); }
|
if (b && !(b = RunDensityFilterPrivate(kernelIndex, gridW, gridH, blockSizeW, blockSizeH, chunkSizeW, chunkSizeH, colChunk, rowChunk))) { m_Abort = true; AddToReport(loc); }
|
||||||
|
|
||||||
//t2.Toc(loc);
|
//t2.Toc(loc);
|
||||||
|
|
||||||
if (b && m_Callback)
|
if (b && m_Callback)
|
||||||
@ -1211,6 +1249,7 @@ eRenderStatus RendererCL<T, bucketT>::RunDensityFilter()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
gridW /= chunkSizeW;
|
gridW /= chunkSizeW;
|
||||||
gridH /= chunkSizeH;
|
gridH /= chunkSizeH;
|
||||||
@ -1222,6 +1261,7 @@ eRenderStatus RendererCL<T, bucketT>::RunDensityFilter()
|
|||||||
{
|
{
|
||||||
//t2.Tic();
|
//t2.Tic();
|
||||||
if (b && !(b = RunDensityFilterPrivate(kernelIndex, gridW, gridH, blockSizeW, blockSizeH, chunkSizeW, chunkSizeH, colChunk, rowChunk))) { m_Abort = true; AddToReport(loc); }
|
if (b && !(b = RunDensityFilterPrivate(kernelIndex, gridW, gridH, blockSizeW, blockSizeH, chunkSizeW, chunkSizeH, colChunk, rowChunk))) { m_Abort = true; AddToReport(loc); }
|
||||||
|
|
||||||
//t2.Toc(loc);
|
//t2.Toc(loc);
|
||||||
|
|
||||||
if (b && m_Callback)
|
if (b && m_Callback)
|
||||||
@ -1234,6 +1274,7 @@ eRenderStatus RendererCL<T, bucketT>::RunDensityFilter()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (b && m_Callback)
|
if (b && m_Callback)
|
||||||
@ -1273,11 +1314,11 @@ eRenderStatus RendererCL<T, bucketT>::RunFinalAccum()
|
|||||||
if (!m_Abort && accumKernelIndex != -1)
|
if (!m_Abort && accumKernelIndex != -1)
|
||||||
{
|
{
|
||||||
auto& wrapper = m_Devices[0]->m_Wrapper;
|
auto& wrapper = m_Devices[0]->m_Wrapper;
|
||||||
|
|
||||||
//This is needed with or without early clip.
|
//This is needed with or without early clip.
|
||||||
ConvertSpatialFilter();
|
ConvertSpatialFilter();
|
||||||
|
|
||||||
if (b && !(b = wrapper.AddAndWriteBuffer(m_SpatialFilterParamsBufferName, reinterpret_cast<void*>(&m_SpatialFilterCL), sizeof(m_SpatialFilterCL)))) { AddToReport(loc); }
|
if (b && !(b = wrapper.AddAndWriteBuffer(m_SpatialFilterParamsBufferName, reinterpret_cast<void*>(&m_SpatialFilterCL), sizeof(m_SpatialFilterCL)))) { AddToReport(loc); }
|
||||||
|
|
||||||
if (b && !(b = wrapper.AddAndWriteBuffer(m_CurvesCsaName, m_Csa.m_Entries.data(), SizeOf(m_Csa.m_Entries)))) { AddToReport(loc); }
|
if (b && !(b = wrapper.AddAndWriteBuffer(m_CurvesCsaName, m_Csa.m_Entries.data(), SizeOf(m_Csa.m_Entries)))) { AddToReport(loc); }
|
||||||
|
|
||||||
//Since early clip requires gamma correcting the entire accumulator first,
|
//Since early clip requires gamma correcting the entire accumulator first,
|
||||||
@ -1297,6 +1338,7 @@ eRenderStatus RendererCL<T, bucketT>::RunFinalAccum()
|
|||||||
OpenCLWrapper::MakeEvenGridDims(blockW, blockH, gridW, gridH);
|
OpenCLWrapper::MakeEvenGridDims(blockW, blockH, gridW, gridH);
|
||||||
|
|
||||||
if (b && !(b = wrapper.SetBufferArg(gammaCorrectKernelIndex, argIndex++, m_AccumBufferName))) { AddToReport(loc); }//Accumulator.
|
if (b && !(b = wrapper.SetBufferArg(gammaCorrectKernelIndex, argIndex++, m_AccumBufferName))) { AddToReport(loc); }//Accumulator.
|
||||||
|
|
||||||
if (b && !(b = wrapper.SetBufferArg(gammaCorrectKernelIndex, argIndex++, m_SpatialFilterParamsBufferName))) { AddToReport(loc); }//SpatialFilterCL.
|
if (b && !(b = wrapper.SetBufferArg(gammaCorrectKernelIndex, argIndex++, m_SpatialFilterParamsBufferName))) { AddToReport(loc); }//SpatialFilterCL.
|
||||||
|
|
||||||
if (b && !(b = wrapper.RunKernel(gammaCorrectKernelIndex, gridW, gridH, 1, blockW, blockH, 1))) { AddToReport(loc); }
|
if (b && !(b = wrapper.RunKernel(gammaCorrectKernelIndex, gridW, gridH, 1, blockW, blockH, 1))) { AddToReport(loc); }
|
||||||
@ -1316,13 +1358,19 @@ eRenderStatus RendererCL<T, bucketT>::RunFinalAccum()
|
|||||||
OpenCLWrapper::MakeEvenGridDims(blockW, blockH, gridW, gridH);
|
OpenCLWrapper::MakeEvenGridDims(blockW, blockH, gridW, gridH);
|
||||||
|
|
||||||
if (b && !(b = wrapper.SetBufferArg(accumKernelIndex, argIndex++, m_AccumBufferName))) { AddToReport(loc); }//Accumulator.
|
if (b && !(b = wrapper.SetBufferArg(accumKernelIndex, argIndex++, m_AccumBufferName))) { AddToReport(loc); }//Accumulator.
|
||||||
|
|
||||||
if (b && !(b = wrapper.SetImageArg(accumKernelIndex, argIndex++, wrapper.Shared(), m_FinalImageName))) { AddToReport(loc); }//Final image.
|
if (b && !(b = wrapper.SetImageArg(accumKernelIndex, argIndex++, wrapper.Shared(), m_FinalImageName))) { AddToReport(loc); }//Final image.
|
||||||
|
|
||||||
if (b && !(b = wrapper.SetBufferArg(accumKernelIndex, argIndex++, m_SpatialFilterParamsBufferName))) { AddToReport(loc); }//SpatialFilterCL.
|
if (b && !(b = wrapper.SetBufferArg(accumKernelIndex, argIndex++, m_SpatialFilterParamsBufferName))) { AddToReport(loc); }//SpatialFilterCL.
|
||||||
|
|
||||||
if (b && !(b = wrapper.SetBufferArg(accumKernelIndex, argIndex++, m_SpatialFilterCoefsBufferName))) { AddToReport(loc); }//Filter coefs.
|
if (b && !(b = wrapper.SetBufferArg(accumKernelIndex, argIndex++, m_SpatialFilterCoefsBufferName))) { AddToReport(loc); }//Filter coefs.
|
||||||
|
|
||||||
if (b && !(b = wrapper.SetBufferArg(accumKernelIndex, argIndex++, m_CurvesCsaName))) { AddToReport(loc); }//Curve points.
|
if (b && !(b = wrapper.SetBufferArg(accumKernelIndex, argIndex++, m_CurvesCsaName))) { AddToReport(loc); }//Curve points.
|
||||||
|
|
||||||
if (b && !(b = wrapper.SetArg (accumKernelIndex, argIndex++, curvesSet))) { AddToReport(loc); }//Do curves.
|
if (b && !(b = wrapper.SetArg (accumKernelIndex, argIndex++, curvesSet))) { AddToReport(loc); }//Do curves.
|
||||||
|
|
||||||
if (b && !(b = wrapper.SetArg (accumKernelIndex, argIndex++, bucketT(alphaBase)))) { AddToReport(loc); }//Alpha base.
|
if (b && !(b = wrapper.SetArg (accumKernelIndex, argIndex++, bucketT(alphaBase)))) { AddToReport(loc); }//Alpha base.
|
||||||
|
|
||||||
if (b && !(b = wrapper.SetArg (accumKernelIndex, argIndex++, bucketT(alphaScale)))) { AddToReport(loc); }//Alpha scale.
|
if (b && !(b = wrapper.SetArg (accumKernelIndex, argIndex++, bucketT(alphaScale)))) { AddToReport(loc); }//Alpha scale.
|
||||||
|
|
||||||
if (b && wrapper.Shared())
|
if (b && wrapper.Shared())
|
||||||
@ -1371,13 +1419,15 @@ bool RendererCL<T, bucketT>::ClearBuffer(size_t device, const string& bufferName
|
|||||||
size_t blockH = m_Devices[device]->Nvidia() ? 32 : 16;
|
size_t blockH = m_Devices[device]->Nvidia() ? 32 : 16;
|
||||||
size_t gridW = width * elementSize;
|
size_t gridW = width * elementSize;
|
||||||
size_t gridH = height;
|
size_t gridH = height;
|
||||||
|
|
||||||
b = true;
|
b = true;
|
||||||
OpenCLWrapper::MakeEvenGridDims(blockW, blockH, gridW, gridH);
|
OpenCLWrapper::MakeEvenGridDims(blockW, blockH, gridW, gridH);
|
||||||
|
|
||||||
if (b && !(b = wrapper.SetBufferArg(kernelIndex, argIndex++, bufferName))) { AddToReport(loc); }//Buffer of byte.
|
if (b && !(b = wrapper.SetBufferArg(kernelIndex, argIndex++, bufferName))) { AddToReport(loc); }//Buffer of byte.
|
||||||
|
|
||||||
if (b && !(b = wrapper.SetArg(kernelIndex, argIndex++, width * elementSize))) { AddToReport(loc); }//Width.
|
if (b && !(b = wrapper.SetArg(kernelIndex, argIndex++, width * elementSize))) { AddToReport(loc); }//Width.
|
||||||
|
|
||||||
if (b && !(b = wrapper.SetArg(kernelIndex, argIndex++, height))) { AddToReport(loc); }//Height.
|
if (b && !(b = wrapper.SetArg(kernelIndex, argIndex++, height))) { AddToReport(loc); }//Height.
|
||||||
|
|
||||||
if (b && !(b = wrapper.RunKernel(kernelIndex, gridW, gridH, 1, blockW, blockH, 1))) { AddToReport(loc); }
|
if (b && !(b = wrapper.RunKernel(kernelIndex, gridW, gridH, 1, blockW, blockH, 1))) { AddToReport(loc); }
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -1416,21 +1466,31 @@ bool RendererCL<T, bucketT>::RunDensityFilterPrivate(size_t kernelIndex, size_t
|
|||||||
auto& wrapper = m_Devices[0]->m_Wrapper;
|
auto& wrapper = m_Devices[0]->m_Wrapper;
|
||||||
|
|
||||||
if (b && !(b = wrapper.SetBufferArg(kernelIndex, argIndex, m_HistBufferName))) { AddToReport(loc); } argIndex++;//Histogram.
|
if (b && !(b = wrapper.SetBufferArg(kernelIndex, argIndex, m_HistBufferName))) { AddToReport(loc); } argIndex++;//Histogram.
|
||||||
|
|
||||||
if (b && !(b = wrapper.SetBufferArg(kernelIndex, argIndex, m_AccumBufferName))) { AddToReport(loc); } argIndex++;//Accumulator.
|
if (b && !(b = wrapper.SetBufferArg(kernelIndex, argIndex, m_AccumBufferName))) { AddToReport(loc); } argIndex++;//Accumulator.
|
||||||
|
|
||||||
if (b && !(b = wrapper.SetBufferArg(kernelIndex, argIndex, m_DEFilterParamsBufferName))) { AddToReport(loc); } argIndex++;//FlameDensityFilterCL.
|
if (b && !(b = wrapper.SetBufferArg(kernelIndex, argIndex, m_DEFilterParamsBufferName))) { AddToReport(loc); } argIndex++;//FlameDensityFilterCL.
|
||||||
|
|
||||||
if (b && !(b = wrapper.SetBufferArg(kernelIndex, argIndex, m_DECoefsBufferName))) { AddToReport(loc); } argIndex++;//Coefs.
|
if (b && !(b = wrapper.SetBufferArg(kernelIndex, argIndex, m_DECoefsBufferName))) { AddToReport(loc); } argIndex++;//Coefs.
|
||||||
|
|
||||||
if (b && !(b = wrapper.SetBufferArg(kernelIndex, argIndex, m_DEWidthsBufferName))) { AddToReport(loc); } argIndex++;//Widths.
|
if (b && !(b = wrapper.SetBufferArg(kernelIndex, argIndex, m_DEWidthsBufferName))) { AddToReport(loc); } argIndex++;//Widths.
|
||||||
|
|
||||||
if (b && !(b = wrapper.SetBufferArg(kernelIndex, argIndex, m_DECoefIndicesBufferName))) { AddToReport(loc); } argIndex++;//Coef indices.
|
if (b && !(b = wrapper.SetBufferArg(kernelIndex, argIndex, m_DECoefIndicesBufferName))) { AddToReport(loc); } argIndex++;//Coef indices.
|
||||||
|
|
||||||
if (b && !(b = wrapper.SetArg(kernelIndex, argIndex, chunkSizeW))) { AddToReport(loc); } argIndex++;//Chunk size width (gapW + 1).
|
if (b && !(b = wrapper.SetArg(kernelIndex, argIndex, chunkSizeW))) { AddToReport(loc); } argIndex++;//Chunk size width (gapW + 1).
|
||||||
|
|
||||||
if (b && !(b = wrapper.SetArg(kernelIndex, argIndex, chunkSizeH))) { AddToReport(loc); } argIndex++;//Chunk size height (gapH + 1).
|
if (b && !(b = wrapper.SetArg(kernelIndex, argIndex, chunkSizeH))) { AddToReport(loc); } argIndex++;//Chunk size height (gapH + 1).
|
||||||
|
|
||||||
if (b && !(b = wrapper.SetArg(kernelIndex, argIndex, chunkW))) { AddToReport(loc); } argIndex++;//Column chunk.
|
if (b && !(b = wrapper.SetArg(kernelIndex, argIndex, chunkW))) { AddToReport(loc); } argIndex++;//Column chunk.
|
||||||
|
|
||||||
if (b && !(b = wrapper.SetArg(kernelIndex, argIndex, chunkH))) { AddToReport(loc); } argIndex++;//Row chunk.
|
if (b && !(b = wrapper.SetArg(kernelIndex, argIndex, chunkH))) { AddToReport(loc); } argIndex++;//Row chunk.
|
||||||
|
|
||||||
//t.Toc(__FUNCTION__ " set args");
|
//t.Toc(__FUNCTION__ " set args");
|
||||||
|
|
||||||
//t.Tic();
|
//t.Tic();
|
||||||
if (b && !(b = wrapper.RunKernel(kernelIndex, gridW, gridH, 1, blockW, blockH, 1))) { AddToReport(loc); }//Method 7, accumulating to temp box area.
|
if (b && !(b = wrapper.RunKernel(kernelIndex, gridW, gridH, 1, blockW, blockH, 1))) { AddToReport(loc); }//Method 7, accumulating to temp box area.
|
||||||
//t.Toc(__FUNCTION__ " RunKernel()");
|
|
||||||
|
|
||||||
|
//t.Toc(__FUNCTION__ " RunKernel()");
|
||||||
return b;
|
return b;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1490,6 +1550,7 @@ int RendererCL<T, bucketT>::MakeAndGetFinalAccumProgram(double& alphaBase, doubl
|
|||||||
if ((kernelIndex = wrapper.FindKernelIndex(finalAccumEntryPoint)) == -1)//Has not been built yet.
|
if ((kernelIndex = wrapper.FindKernelIndex(finalAccumEntryPoint)) == -1)//Has not been built yet.
|
||||||
{
|
{
|
||||||
auto& kernel = m_FinalAccumOpenCLKernelCreator.FinalAccumKernel(EarlyClip(), Renderer<T, bucketT>::NumChannels(), Transparency());
|
auto& kernel = m_FinalAccumOpenCLKernelCreator.FinalAccumKernel(EarlyClip(), Renderer<T, bucketT>::NumChannels(), Transparency());
|
||||||
|
|
||||||
if (wrapper.AddProgram(finalAccumEntryPoint, kernel, finalAccumEntryPoint, m_DoublePrecision))
|
if (wrapper.AddProgram(finalAccumEntryPoint, kernel, finalAccumEntryPoint, m_DoublePrecision))
|
||||||
kernelIndex = wrapper.FindKernelIndex(finalAccumEntryPoint);//Try to find it again, it will be present if successfully built.
|
kernelIndex = wrapper.FindKernelIndex(finalAccumEntryPoint);//Try to find it again, it will be present if successfully built.
|
||||||
else
|
else
|
||||||
@ -1562,10 +1623,15 @@ bool RendererCL<T, bucketT>::SumDeviceHist()
|
|||||||
cl_uint argIndex = 0;
|
cl_uint argIndex = 0;
|
||||||
|
|
||||||
if (b && !(b = wrapper.SetBufferArg(kernelIndex, argIndex++, m_AccumBufferName))) { break; }//Source buffer of v4bT.
|
if (b && !(b = wrapper.SetBufferArg(kernelIndex, argIndex++, m_AccumBufferName))) { break; }//Source buffer of v4bT.
|
||||||
|
|
||||||
if (b && !(b = wrapper.SetBufferArg(kernelIndex, argIndex++, m_HistBufferName))) { break; }//Dest buffer of v4bT.
|
if (b && !(b = wrapper.SetBufferArg(kernelIndex, argIndex++, m_HistBufferName))) { break; }//Dest buffer of v4bT.
|
||||||
|
|
||||||
if (b && !(b = wrapper.SetArg (kernelIndex, argIndex++, uint(SuperRasW())))) { break; }//Width in pixels.
|
if (b && !(b = wrapper.SetArg (kernelIndex, argIndex++, uint(SuperRasW())))) { break; }//Width in pixels.
|
||||||
|
|
||||||
if (b && !(b = wrapper.SetArg (kernelIndex, argIndex++, uint(SuperRasH())))) { break; }//Height in pixels.
|
if (b && !(b = wrapper.SetArg (kernelIndex, argIndex++, uint(SuperRasH())))) { break; }//Height in pixels.
|
||||||
|
|
||||||
if (b && !(b = wrapper.SetArg (kernelIndex, argIndex++, (device == m_Devices.size() - 1) ? 1 : 0))) { break; }//Clear the source buffer on the last device.
|
if (b && !(b = wrapper.SetArg (kernelIndex, argIndex++, (device == m_Devices.size() - 1) ? 1 : 0))) { break; }//Clear the source buffer on the last device.
|
||||||
|
|
||||||
if (b && !(b = wrapper.RunKernel (kernelIndex, gridW, gridH, 1, blockW, blockH, 1))) { break; }
|
if (b && !(b = wrapper.RunKernel (kernelIndex, gridW, gridH, 1, blockW, blockH, 1))) { break; }
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -1583,7 +1649,6 @@ bool RendererCL<T, bucketT>::SumDeviceHist()
|
|||||||
if (!b)
|
if (!b)
|
||||||
{
|
{
|
||||||
ostringstream os;
|
ostringstream os;
|
||||||
|
|
||||||
os << loc << ": failed to sum histograms from the secondary device(s) to the primary device.";
|
os << loc << ": failed to sum histograms from the secondary device(s) to the primary device.";
|
||||||
AddToReport(os.str());
|
AddToReport(os.str());
|
||||||
}
|
}
|
||||||
@ -1639,7 +1704,6 @@ void RendererCL<T, bucketT>::ConvertSpatialFilter()
|
|||||||
if (m_SpatialFilter.get())
|
if (m_SpatialFilter.get())
|
||||||
{
|
{
|
||||||
this->PrepFinalAccumVals(background, g, linRange, vibrancy);
|
this->PrepFinalAccumVals(background, g, linRange, vibrancy);
|
||||||
|
|
||||||
m_SpatialFilterCL.m_SuperRasW = uint(SuperRasW());
|
m_SpatialFilterCL.m_SuperRasW = uint(SuperRasW());
|
||||||
m_SpatialFilterCL.m_SuperRasH = uint(SuperRasH());
|
m_SpatialFilterCL.m_SuperRasH = uint(SuperRasH());
|
||||||
m_SpatialFilterCL.m_FinalRasW = uint(FinalRasW());
|
m_SpatialFilterCL.m_FinalRasW = uint(FinalRasW());
|
||||||
@ -1670,7 +1734,6 @@ template <typename T, typename bucketT>
|
|||||||
void RendererCL<T, bucketT>::ConvertEmber(Ember<T>& ember, EmberCL<T>& emberCL, vector<XformCL<T>>& xformsCL)
|
void RendererCL<T, bucketT>::ConvertEmber(Ember<T>& ember, EmberCL<T>& emberCL, vector<XformCL<T>>& xformsCL)
|
||||||
{
|
{
|
||||||
memset(&emberCL, 0, sizeof(EmberCL<T>));//Might not really be needed.
|
memset(&emberCL, 0, sizeof(EmberCL<T>));//Might not really be needed.
|
||||||
|
|
||||||
emberCL.m_RotA = m_RotMat.A();
|
emberCL.m_RotA = m_RotMat.A();
|
||||||
emberCL.m_RotB = m_RotMat.B();
|
emberCL.m_RotB = m_RotMat.B();
|
||||||
emberCL.m_RotD = m_RotMat.D();
|
emberCL.m_RotD = m_RotMat.D();
|
||||||
@ -1688,21 +1751,18 @@ void RendererCL<T, bucketT>::ConvertEmber(Ember<T>& ember, EmberCL<T>& emberCL,
|
|||||||
for (size_t i = 0; i < ember.TotalXformCount() && i < xformsCL.size(); i++)
|
for (size_t i = 0; i < ember.TotalXformCount() && i < xformsCL.size(); i++)
|
||||||
{
|
{
|
||||||
Xform<T>* xform = ember.GetTotalXform(i);
|
Xform<T>* xform = ember.GetTotalXform(i);
|
||||||
|
|
||||||
xformsCL[i].m_A = xform->m_Affine.A();
|
xformsCL[i].m_A = xform->m_Affine.A();
|
||||||
xformsCL[i].m_B = xform->m_Affine.B();
|
xformsCL[i].m_B = xform->m_Affine.B();
|
||||||
xformsCL[i].m_C = xform->m_Affine.C();
|
xformsCL[i].m_C = xform->m_Affine.C();
|
||||||
xformsCL[i].m_D = xform->m_Affine.D();
|
xformsCL[i].m_D = xform->m_Affine.D();
|
||||||
xformsCL[i].m_E = xform->m_Affine.E();
|
xformsCL[i].m_E = xform->m_Affine.E();
|
||||||
xformsCL[i].m_F = xform->m_Affine.F();
|
xformsCL[i].m_F = xform->m_Affine.F();
|
||||||
|
|
||||||
xformsCL[i].m_PostA = xform->m_Post.A();
|
xformsCL[i].m_PostA = xform->m_Post.A();
|
||||||
xformsCL[i].m_PostB = xform->m_Post.B();
|
xformsCL[i].m_PostB = xform->m_Post.B();
|
||||||
xformsCL[i].m_PostC = xform->m_Post.C();
|
xformsCL[i].m_PostC = xform->m_Post.C();
|
||||||
xformsCL[i].m_PostD = xform->m_Post.D();
|
xformsCL[i].m_PostD = xform->m_Post.D();
|
||||||
xformsCL[i].m_PostE = xform->m_Post.E();
|
xformsCL[i].m_PostE = xform->m_Post.E();
|
||||||
xformsCL[i].m_PostF = xform->m_Post.F();
|
xformsCL[i].m_PostF = xform->m_Post.F();
|
||||||
|
|
||||||
xformsCL[i].m_DirectColor = xform->m_DirectColor;
|
xformsCL[i].m_DirectColor = xform->m_DirectColor;
|
||||||
xformsCL[i].m_ColorSpeedCache = xform->ColorSpeedCache();
|
xformsCL[i].m_ColorSpeedCache = xform->ColorSpeedCache();
|
||||||
xformsCL[i].m_OneMinusColorCache = xform->OneMinusColorCache();
|
xformsCL[i].m_OneMinusColorCache = xform->OneMinusColorCache();
|
||||||
|
@ -41,57 +41,57 @@ public:
|
|||||||
template <typename T, typename bucketT>
|
template <typename T, typename bucketT>
|
||||||
class EMBERCL_API RendererCL : public Renderer<T, bucketT>, public RendererCLBase
|
class EMBERCL_API RendererCL : public Renderer<T, bucketT>, public RendererCLBase
|
||||||
{
|
{
|
||||||
using EmberNs::Renderer<T, bucketT>::RendererBase::Abort;
|
using EmberNs::Renderer<T, bucketT>::RendererBase::Abort;
|
||||||
using EmberNs::Renderer<T, bucketT>::RendererBase::EarlyClip;
|
using EmberNs::Renderer<T, bucketT>::RendererBase::EarlyClip;
|
||||||
using EmberNs::Renderer<T, bucketT>::RendererBase::Transparency;
|
using EmberNs::Renderer<T, bucketT>::RendererBase::Transparency;
|
||||||
using EmberNs::Renderer<T, bucketT>::RendererBase::EnterResize;
|
using EmberNs::Renderer<T, bucketT>::RendererBase::EnterResize;
|
||||||
using EmberNs::Renderer<T, bucketT>::RendererBase::LeaveResize;
|
using EmberNs::Renderer<T, bucketT>::RendererBase::LeaveResize;
|
||||||
using EmberNs::Renderer<T, bucketT>::RendererBase::FinalRasW;
|
using EmberNs::Renderer<T, bucketT>::RendererBase::FinalRasW;
|
||||||
using EmberNs::Renderer<T, bucketT>::RendererBase::FinalRasH;
|
using EmberNs::Renderer<T, bucketT>::RendererBase::FinalRasH;
|
||||||
using EmberNs::Renderer<T, bucketT>::RendererBase::SuperRasW;
|
using EmberNs::Renderer<T, bucketT>::RendererBase::SuperRasW;
|
||||||
using EmberNs::Renderer<T, bucketT>::RendererBase::SuperRasH;
|
using EmberNs::Renderer<T, bucketT>::RendererBase::SuperRasH;
|
||||||
using EmberNs::Renderer<T, bucketT>::RendererBase::SuperSize;
|
using EmberNs::Renderer<T, bucketT>::RendererBase::SuperSize;
|
||||||
using EmberNs::Renderer<T, bucketT>::RendererBase::BytesPerChannel;
|
using EmberNs::Renderer<T, bucketT>::RendererBase::BytesPerChannel;
|
||||||
using EmberNs::Renderer<T, bucketT>::RendererBase::TemporalSamples;
|
using EmberNs::Renderer<T, bucketT>::RendererBase::TemporalSamples;
|
||||||
using EmberNs::Renderer<T, bucketT>::RendererBase::ItersPerTemporalSample;
|
using EmberNs::Renderer<T, bucketT>::RendererBase::ItersPerTemporalSample;
|
||||||
using EmberNs::Renderer<T, bucketT>::RendererBase::FuseCount;
|
using EmberNs::Renderer<T, bucketT>::RendererBase::FuseCount;
|
||||||
using EmberNs::Renderer<T, bucketT>::RendererBase::DensityFilterOffset;
|
using EmberNs::Renderer<T, bucketT>::RendererBase::DensityFilterOffset;
|
||||||
using EmberNs::Renderer<T, bucketT>::RendererBase::m_ProgressParameter;
|
using EmberNs::Renderer<T, bucketT>::RendererBase::m_ProgressParameter;
|
||||||
using EmberNs::Renderer<T, bucketT>::RendererBase::m_YAxisUp;
|
using EmberNs::Renderer<T, bucketT>::RendererBase::m_YAxisUp;
|
||||||
using EmberNs::Renderer<T, bucketT>::RendererBase::m_LockAccum;
|
using EmberNs::Renderer<T, bucketT>::RendererBase::m_LockAccum;
|
||||||
using EmberNs::Renderer<T, bucketT>::RendererBase::m_Abort;
|
using EmberNs::Renderer<T, bucketT>::RendererBase::m_Abort;
|
||||||
using EmberNs::Renderer<T, bucketT>::RendererBase::m_NumChannels;
|
using EmberNs::Renderer<T, bucketT>::RendererBase::m_NumChannels;
|
||||||
using EmberNs::Renderer<T, bucketT>::RendererBase::m_LastIter;
|
using EmberNs::Renderer<T, bucketT>::RendererBase::m_LastIter;
|
||||||
using EmberNs::Renderer<T, bucketT>::RendererBase::m_LastIterPercent;
|
using EmberNs::Renderer<T, bucketT>::RendererBase::m_LastIterPercent;
|
||||||
using EmberNs::Renderer<T, bucketT>::RendererBase::m_Stats;
|
using EmberNs::Renderer<T, bucketT>::RendererBase::m_Stats;
|
||||||
using EmberNs::Renderer<T, bucketT>::RendererBase::m_Callback;
|
using EmberNs::Renderer<T, bucketT>::RendererBase::m_Callback;
|
||||||
using EmberNs::Renderer<T, bucketT>::RendererBase::m_Rand;
|
using EmberNs::Renderer<T, bucketT>::RendererBase::m_Rand;
|
||||||
using EmberNs::Renderer<T, bucketT>::RendererBase::m_RenderTimer;
|
using EmberNs::Renderer<T, bucketT>::RendererBase::m_RenderTimer;
|
||||||
using EmberNs::Renderer<T, bucketT>::RendererBase::m_IterTimer;
|
using EmberNs::Renderer<T, bucketT>::RendererBase::m_IterTimer;
|
||||||
using EmberNs::Renderer<T, bucketT>::RendererBase::m_ProgressTimer;
|
using EmberNs::Renderer<T, bucketT>::RendererBase::m_ProgressTimer;
|
||||||
using EmberNs::Renderer<T, bucketT>::RendererBase::EmberReport::AddToReport;
|
using EmberNs::Renderer<T, bucketT>::RendererBase::EmberReport::AddToReport;
|
||||||
using EmberNs::Renderer<T, bucketT>::RendererBase::m_ResizeCs;
|
using EmberNs::Renderer<T, bucketT>::RendererBase::m_ResizeCs;
|
||||||
using EmberNs::Renderer<T, bucketT>::RendererBase::m_ProcessAction;
|
using EmberNs::Renderer<T, bucketT>::RendererBase::m_ProcessAction;
|
||||||
using EmberNs::Renderer<T, bucketT>::m_RotMat;
|
using EmberNs::Renderer<T, bucketT>::m_RotMat;
|
||||||
using EmberNs::Renderer<T, bucketT>::m_Ember;
|
using EmberNs::Renderer<T, bucketT>::m_Ember;
|
||||||
using EmberNs::Renderer<T, bucketT>::m_Csa;
|
using EmberNs::Renderer<T, bucketT>::m_Csa;
|
||||||
using EmberNs::Renderer<T, bucketT>::m_CurvesSet;
|
using EmberNs::Renderer<T, bucketT>::m_CurvesSet;
|
||||||
using EmberNs::Renderer<T, bucketT>::CenterX;
|
using EmberNs::Renderer<T, bucketT>::CenterX;
|
||||||
using EmberNs::Renderer<T, bucketT>::CenterY;
|
using EmberNs::Renderer<T, bucketT>::CenterY;
|
||||||
using EmberNs::Renderer<T, bucketT>::K1;
|
using EmberNs::Renderer<T, bucketT>::K1;
|
||||||
using EmberNs::Renderer<T, bucketT>::K2;
|
using EmberNs::Renderer<T, bucketT>::K2;
|
||||||
using EmberNs::Renderer<T, bucketT>::Supersample;
|
using EmberNs::Renderer<T, bucketT>::Supersample;
|
||||||
using EmberNs::Renderer<T, bucketT>::HighlightPower;
|
using EmberNs::Renderer<T, bucketT>::HighlightPower;
|
||||||
using EmberNs::Renderer<T, bucketT>::HistBuckets;
|
using EmberNs::Renderer<T, bucketT>::HistBuckets;
|
||||||
using EmberNs::Renderer<T, bucketT>::AccumulatorBuckets;
|
using EmberNs::Renderer<T, bucketT>::AccumulatorBuckets;
|
||||||
using EmberNs::Renderer<T, bucketT>::GetDensityFilter;
|
using EmberNs::Renderer<T, bucketT>::GetDensityFilter;
|
||||||
using EmberNs::Renderer<T, bucketT>::GetSpatialFilter;
|
using EmberNs::Renderer<T, bucketT>::GetSpatialFilter;
|
||||||
using EmberNs::Renderer<T, bucketT>::CoordMap;
|
using EmberNs::Renderer<T, bucketT>::CoordMap;
|
||||||
using EmberNs::Renderer<T, bucketT>::XformDistributions;
|
using EmberNs::Renderer<T, bucketT>::XformDistributions;
|
||||||
using EmberNs::Renderer<T, bucketT>::XformDistributionsSize;
|
using EmberNs::Renderer<T, bucketT>::XformDistributionsSize;
|
||||||
using EmberNs::Renderer<T, bucketT>::m_Dmap;
|
using EmberNs::Renderer<T, bucketT>::m_Dmap;
|
||||||
using EmberNs::Renderer<T, bucketT>::m_DensityFilter;
|
using EmberNs::Renderer<T, bucketT>::m_DensityFilter;
|
||||||
using EmberNs::Renderer<T, bucketT>::m_SpatialFilter;
|
using EmberNs::Renderer<T, bucketT>::m_SpatialFilter;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
RendererCL(const vector<pair<size_t, size_t>>& devices, bool shared = false, GLuint outputTexID = 0);
|
RendererCL(const vector<pair<size_t, size_t>>& devices, bool shared = false, GLuint outputTexID = 0);
|
||||||
@ -200,6 +200,7 @@ private:
|
|||||||
string m_EmberBufferName;
|
string m_EmberBufferName;
|
||||||
string m_XformsBufferName;
|
string m_XformsBufferName;
|
||||||
string m_ParVarsBufferName;
|
string m_ParVarsBufferName;
|
||||||
|
string m_GlobalSharedBufferName;
|
||||||
string m_SeedsBufferName;
|
string m_SeedsBufferName;
|
||||||
string m_DistBufferName;
|
string m_DistBufferName;
|
||||||
string m_CarToRasBufferName;
|
string m_CarToRasBufferName;
|
||||||
@ -233,6 +234,7 @@ private:
|
|||||||
DEOpenCLKernelCreator m_DEOpenCLKernelCreator;
|
DEOpenCLKernelCreator m_DEOpenCLKernelCreator;
|
||||||
FinalAccumOpenCLKernelCreator m_FinalAccumOpenCLKernelCreator;
|
FinalAccumOpenCLKernelCreator m_FinalAccumOpenCLKernelCreator;
|
||||||
pair<string, vector<T>> m_Params;
|
pair<string, vector<T>> m_Params;
|
||||||
|
pair<string, vector<T>> m_GlobalShared;
|
||||||
vector<unique_ptr<RendererClDevice>> m_Devices;
|
vector<unique_ptr<RendererClDevice>> m_Devices;
|
||||||
Ember<T> m_LastBuiltEmber;
|
Ember<T> m_LastBuiltEmber;
|
||||||
};
|
};
|
||||||
|
@ -13,7 +13,6 @@ namespace EmberCLns
|
|||||||
/// <param name="shared">True if shared with OpenGL, else false.</param>
|
/// <param name="shared">True if shared with OpenGL, else false.</param>
|
||||||
/// <returns>True if success, else false.</returns>
|
/// <returns>True if success, else false.</returns>
|
||||||
RendererClDevice::RendererClDevice(bool doublePrec, size_t platform, size_t device, bool shared)
|
RendererClDevice::RendererClDevice(bool doublePrec, size_t platform, size_t device, bool shared)
|
||||||
: m_Info(OpenCLInfo::Instance())
|
|
||||||
{
|
{
|
||||||
m_Init = false;
|
m_Init = false;
|
||||||
m_Shared = shared;
|
m_Shared = shared;
|
||||||
@ -22,6 +21,7 @@ RendererClDevice::RendererClDevice(bool doublePrec, size_t platform, size_t devi
|
|||||||
m_Calls = 0;
|
m_Calls = 0;
|
||||||
m_PlatformIndex = platform;
|
m_PlatformIndex = platform;
|
||||||
m_DeviceIndex = device;
|
m_DeviceIndex = device;
|
||||||
|
m_Info = OpenCLInfo::Instance();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -40,7 +40,7 @@ bool RendererClDevice::Init()
|
|||||||
|
|
||||||
if (b && m_Wrapper.Ok() && !m_Init)
|
if (b && m_Wrapper.Ok() && !m_Init)
|
||||||
{
|
{
|
||||||
m_NVidia = ToLower(m_Info.PlatformName(m_PlatformIndex)).find_first_of("nvidia") != string::npos && m_Wrapper.LocalMemSize() > (32 * 1024);
|
m_NVidia = ToLower(m_Info->PlatformName(m_PlatformIndex)).find_first_of("nvidia") != string::npos && m_Wrapper.LocalMemSize() > (32 * 1024);
|
||||||
m_WarpSize = m_NVidia ? 32 : 64;
|
m_WarpSize = m_NVidia ? 32 : 64;
|
||||||
m_Init = true;
|
m_Init = true;
|
||||||
}
|
}
|
||||||
|
@ -37,6 +37,6 @@ private:
|
|||||||
size_t m_WarpSize;
|
size_t m_WarpSize;
|
||||||
size_t m_PlatformIndex;
|
size_t m_PlatformIndex;
|
||||||
size_t m_DeviceIndex;
|
size_t m_DeviceIndex;
|
||||||
OpenCLInfo& m_Info;
|
shared_ptr<OpenCLInfo> m_Info;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -166,7 +166,6 @@ static uint CalcStrips(double memRequired, double memAvailable, double useMem)
|
|||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
strips = uint(ceil(memRequired / memAvailable));
|
strips = uint(ceil(memRequired / memAvailable));
|
||||||
|
|
||||||
return strips;
|
return strips;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -210,7 +209,6 @@ static T NextLowestEvenDiv(T numerator, T denominator)
|
|||||||
{
|
{
|
||||||
T result = 1;
|
T result = 1;
|
||||||
T numDiv2 = numerator / 2;
|
T numDiv2 = numerator / 2;
|
||||||
|
|
||||||
denominator--;
|
denominator--;
|
||||||
|
|
||||||
if (denominator > numDiv2)
|
if (denominator > numDiv2)
|
||||||
@ -239,9 +237,8 @@ static T NextLowestEvenDiv(T numerator, T denominator)
|
|||||||
static vector<pair<size_t, size_t>> Devices(const vector<size_t>& selectedDevices)
|
static vector<pair<size_t, size_t>> Devices(const vector<size_t>& selectedDevices)
|
||||||
{
|
{
|
||||||
vector<pair<size_t, size_t>> vec;
|
vector<pair<size_t, size_t>> vec;
|
||||||
OpenCLInfo& info = OpenCLInfo::Instance();
|
auto info = OpenCLInfo::Instance();
|
||||||
auto& devices = info.DeviceIndices();
|
auto& devices = info->DeviceIndices();
|
||||||
|
|
||||||
vec.reserve(selectedDevices.size());
|
vec.reserve(selectedDevices.size());
|
||||||
|
|
||||||
for (size_t i = 0; i < selectedDevices.size(); i++)
|
for (size_t i = 0; i < selectedDevices.size(); i++)
|
||||||
@ -412,7 +409,6 @@ static bool StripsRender(RendererBase* renderer, Ember<T>& ember, vector<byte>&
|
|||||||
T zoomScale = pow(T(2), ember.m_Zoom);
|
T zoomScale = pow(T(2), ember.m_Zoom);
|
||||||
T centerBase = centerY - ((strips - 1) * floatStripH) / (2 * ember.m_PixelsPerUnit * zoomScale);
|
T centerBase = centerY - ((strips - 1) * floatStripH) / (2 * ember.m_PixelsPerUnit * zoomScale);
|
||||||
vector<QTIsaac<ISAAC_SIZE, ISAAC_INT>> randVec;
|
vector<QTIsaac<ISAAC_SIZE, ISAAC_INT>> randVec;
|
||||||
|
|
||||||
ember.m_Quality *= strips;
|
ember.m_Quality *= strips;
|
||||||
ember.m_FinalRasH = size_t(ceil(floatStripH));
|
ember.m_FinalRasH = size_t(ceil(floatStripH));
|
||||||
|
|
||||||
@ -469,7 +465,6 @@ static bool StripsRender(RendererBase* renderer, Ember<T>& ember, vector<byte>&
|
|||||||
allStripsFinished(ember);
|
allStripsFinished(ember);
|
||||||
|
|
||||||
Memset(finalImage);
|
Memset(finalImage);
|
||||||
|
|
||||||
return success;
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -502,7 +497,6 @@ static size_t VerifyStrips(size_t height, size_t strips,
|
|||||||
{
|
{
|
||||||
os << "A strips value of " << strips << " does not divide evenly into a height of " << height << ".";
|
os << "A strips value of " << strips << " does not divide evenly into a height of " << height << ".";
|
||||||
stripError2(os.str()); os.str("");
|
stripError2(os.str()); os.str("");
|
||||||
|
|
||||||
strips = NextHighestEvenDiv(height, strips);
|
strips = NextHighestEvenDiv(height, strips);
|
||||||
|
|
||||||
if (strips == 1)//No higher divisor, check for a lower one.
|
if (strips == 1)//No higher divisor, check for a lower one.
|
||||||
|
@ -43,8 +43,7 @@ void SetDefaultTestValues(Ember<T>& ember)
|
|||||||
template <typename T>
|
template <typename T>
|
||||||
bool EmberGenome(EmberOptions& opt)
|
bool EmberGenome(EmberOptions& opt)
|
||||||
{
|
{
|
||||||
OpenCLInfo& info(OpenCLInfo::Instance());
|
auto info = OpenCLInfo::Instance();
|
||||||
|
|
||||||
std::cout.imbue(std::locale(""));
|
std::cout.imbue(std::locale(""));
|
||||||
|
|
||||||
if (opt.DumpArgs())
|
if (opt.DumpArgs())
|
||||||
@ -53,7 +52,7 @@ bool EmberGenome(EmberOptions& opt)
|
|||||||
if (opt.OpenCLInfo())
|
if (opt.OpenCLInfo())
|
||||||
{
|
{
|
||||||
cerr << "\nOpenCL Info: " << endl;
|
cerr << "\nOpenCL Info: " << endl;
|
||||||
cerr << info.DumpInfo();
|
cerr << info->DumpInfo();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -83,7 +82,6 @@ bool EmberGenome(EmberOptions& opt)
|
|||||||
unique_ptr<Renderer<T, float>> renderer(CreateRenderer<T>(opt.EmberCL() ? OPENCL_RENDERER : CPU_RENDERER, devices, false, 0, emberReport));
|
unique_ptr<Renderer<T, float>> renderer(CreateRenderer<T>(opt.EmberCL() ? OPENCL_RENDERER : CPU_RENDERER, devices, false, 0, emberReport));
|
||||||
QTIsaac<ISAAC_SIZE, ISAAC_INT> rand(ISAAC_INT(t.Tic()), ISAAC_INT(t.Tic() * 2), ISAAC_INT(t.Tic() * 3));
|
QTIsaac<ISAAC_SIZE, ISAAC_INT> rand(ISAAC_INT(t.Tic()), ISAAC_INT(t.Tic() * 2), ISAAC_INT(t.Tic() * 3));
|
||||||
vector<string> errorReport = emberReport.ErrorReport();
|
vector<string> errorReport = emberReport.ErrorReport();
|
||||||
|
|
||||||
os.imbue(std::locale(""));
|
os.imbue(std::locale(""));
|
||||||
os2.imbue(std::locale(""));
|
os2.imbue(std::locale(""));
|
||||||
|
|
||||||
@ -112,15 +110,14 @@ bool EmberGenome(EmberOptions& opt)
|
|||||||
{
|
{
|
||||||
for (auto& device : devices)
|
for (auto& device : devices)
|
||||||
{
|
{
|
||||||
cerr << "Platform: " << info.PlatformName(device.first) << endl;
|
cerr << "Platform: " << info->PlatformName(device.first) << endl;
|
||||||
cerr << "Device: " << info.DeviceName(device.first, device.second) << endl;
|
cerr << "Device: " << info->DeviceName(device.first, device.second) << endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//SheepTools will own the created renderer and will take care of cleaning it up.
|
//SheepTools will own the created renderer and will take care of cleaning it up.
|
||||||
SheepTools<T, float> tools(opt.PalettePath(), CreateRenderer<T>(opt.EmberCL() ? OPENCL_RENDERER : CPU_RENDERER, devices, false, 0, emberReport2));
|
SheepTools<T, float> tools(opt.PalettePath(), CreateRenderer<T>(opt.EmberCL() ? OPENCL_RENDERER : CPU_RENDERER, devices, false, 0, emberReport2));
|
||||||
|
|
||||||
tools.SetSpinParams(!opt.UnsmoothEdge(),
|
tools.SetSpinParams(!opt.UnsmoothEdge(),
|
||||||
T(opt.Stagger()),
|
T(opt.Stagger()),
|
||||||
T(opt.OffsetX()),
|
T(opt.OffsetX()),
|
||||||
@ -217,7 +214,6 @@ bool EmberGenome(EmberOptions& opt)
|
|||||||
bool doStrip = opt.Strip() != "";
|
bool doStrip = opt.Strip() != "";
|
||||||
bool doCross0 = opt.Cross0() != "";
|
bool doCross0 = opt.Cross0() != "";
|
||||||
bool doCross1 = opt.Cross1() != "";
|
bool doCross1 = opt.Cross1() != "";
|
||||||
|
|
||||||
count += (doMutate ? 1 : 0);
|
count += (doMutate ? 1 : 0);
|
||||||
count += (doInter ? 1 : 0);
|
count += (doInter ? 1 : 0);
|
||||||
count += (doRotate ? 1 : 0);
|
count += (doRotate ? 1 : 0);
|
||||||
@ -448,7 +444,6 @@ bool EmberGenome(EmberOptions& opt)
|
|||||||
tools.Spin(embers[0], pTemplate, result1, frame - 1, blend - spread);
|
tools.Spin(embers[0], pTemplate, result1, frame - 1, blend - spread);
|
||||||
tools.Spin(embers[0], pTemplate, result2, frame , blend );
|
tools.Spin(embers[0], pTemplate, result2, frame , blend );
|
||||||
tools.Spin(embers[0], pTemplate, result3, frame + 1, blend + spread);
|
tools.Spin(embers[0], pTemplate, result3, frame + 1, blend + spread);
|
||||||
|
|
||||||
cout << emberToXml.ToString(result1, opt.Extras(), opt.PrintEditDepth(), !opt.NoEdits(), false, opt.HexPalette());
|
cout << emberToXml.ToString(result1, opt.Extras(), opt.PrintEditDepth(), !opt.NoEdits(), false, opt.HexPalette());
|
||||||
cout << emberToXml.ToString(result2, opt.Extras(), opt.PrintEditDepth(), !opt.NoEdits(), false, opt.HexPalette());
|
cout << emberToXml.ToString(result2, opt.Extras(), opt.PrintEditDepth(), !opt.NoEdits(), false, opt.HexPalette());
|
||||||
cout << emberToXml.ToString(result3, opt.Extras(), opt.PrintEditDepth(), !opt.NoEdits(), false, opt.HexPalette());
|
cout << emberToXml.ToString(result3, opt.Extras(), opt.PrintEditDepth(), !opt.NoEdits(), false, opt.HexPalette());
|
||||||
@ -464,7 +459,6 @@ bool EmberGenome(EmberOptions& opt)
|
|||||||
tools.SpinInter(embers.data(), pTemplate, result1, frame - 1, 0, blend - spread);
|
tools.SpinInter(embers.data(), pTemplate, result1, frame - 1, 0, blend - spread);
|
||||||
tools.SpinInter(embers.data(), pTemplate, result2, frame , 0, blend );
|
tools.SpinInter(embers.data(), pTemplate, result2, frame , 0, blend );
|
||||||
tools.SpinInter(embers.data(), pTemplate, result3, frame + 1, 0, blend + spread);
|
tools.SpinInter(embers.data(), pTemplate, result3, frame + 1, 0, blend + spread);
|
||||||
|
|
||||||
cout << emberToXml.ToString(result1, opt.Extras(), opt.PrintEditDepth(), !opt.NoEdits(), false, opt.HexPalette());
|
cout << emberToXml.ToString(result1, opt.Extras(), opt.PrintEditDepth(), !opt.NoEdits(), false, opt.HexPalette());
|
||||||
cout << emberToXml.ToString(result2, opt.Extras(), opt.PrintEditDepth(), !opt.NoEdits(), false, opt.HexPalette());
|
cout << emberToXml.ToString(result2, opt.Extras(), opt.PrintEditDepth(), !opt.NoEdits(), false, opt.HexPalette());
|
||||||
cout << emberToXml.ToString(result3, opt.Extras(), opt.PrintEditDepth(), !opt.NoEdits(), false, opt.HexPalette());
|
cout << emberToXml.ToString(result3, opt.Extras(), opt.PrintEditDepth(), !opt.NoEdits(), false, opt.HexPalette());
|
||||||
@ -484,17 +478,13 @@ bool EmberGenome(EmberOptions& opt)
|
|||||||
for (i = 0; i < embers.size(); i++)
|
for (i = 0; i < embers.size(); i++)
|
||||||
{
|
{
|
||||||
T oldX, oldY;
|
T oldX, oldY;
|
||||||
|
|
||||||
embers[i].DeleteMotionElements();
|
embers[i].DeleteMotionElements();
|
||||||
|
|
||||||
oldX = embers[i].m_CenterX;
|
oldX = embers[i].m_CenterX;
|
||||||
oldY = embers[i].m_CenterY;
|
oldY = embers[i].m_CenterY;
|
||||||
embers[i].m_FinalRasH = size_t(T(embers[i].m_FinalRasH) / T(opt.Frames()));
|
embers[i].m_FinalRasH = size_t(T(embers[i].m_FinalRasH) / T(opt.Frames()));
|
||||||
|
|
||||||
embers[i].m_CenterY = embers[i].m_CenterY - ((opt.Frames() - 1) * embers[i].m_FinalRasH) /
|
embers[i].m_CenterY = embers[i].m_CenterY - ((opt.Frames() - 1) * embers[i].m_FinalRasH) /
|
||||||
(2 * embers[i].m_PixelsPerUnit * pow(T(2.0), embers[i].m_Zoom));
|
(2 * embers[i].m_PixelsPerUnit * pow(T(2.0), embers[i].m_Zoom));
|
||||||
embers[i].m_CenterY += embers[i].m_FinalRasH * opt.Frame() / (embers[i].m_PixelsPerUnit * pow(T(2.0), embers[i].m_Zoom));
|
embers[i].m_CenterY += embers[i].m_FinalRasH * opt.Frame() / (embers[i].m_PixelsPerUnit * pow(T(2.0), embers[i].m_Zoom));
|
||||||
|
|
||||||
tools.RotateOldCenterBy(embers[i].m_CenterX, embers[i].m_CenterY, oldX, oldY, embers[i].m_Rotate);
|
tools.RotateOldCenterBy(embers[i].m_CenterX, embers[i].m_CenterY, oldX, oldY, embers[i].m_Rotate);
|
||||||
|
|
||||||
if (pTemplate)
|
if (pTemplate)
|
||||||
@ -602,10 +592,8 @@ bool EmberGenome(EmberOptions& opt)
|
|||||||
{
|
{
|
||||||
i0 = rand.Rand() % embers.size();
|
i0 = rand.Rand() % embers.size();
|
||||||
i1 = rand.Rand() % embers2.size();
|
i1 = rand.Rand() % embers2.size();
|
||||||
|
|
||||||
selp0 = embers[i0];
|
selp0 = embers[i0];
|
||||||
selp1 = embers2[i1];
|
selp1 = embers2[i1];
|
||||||
|
|
||||||
aselp0 = &selp0;
|
aselp0 = &selp0;
|
||||||
aselp1 = &selp1;
|
aselp1 = &selp1;
|
||||||
|
|
||||||
@ -711,6 +699,7 @@ bool EmberGenome(EmberOptions& opt)
|
|||||||
tot += (finalImage[i] + finalImage[i + 1] + finalImage[i + 2]);
|
tot += (finalImage[i] + finalImage[i + 1] + finalImage[i + 2]);
|
||||||
|
|
||||||
if (0 == finalImage[i] && 0 == finalImage[i + 1] && 0 == finalImage[i + 2]) totb++;
|
if (0 == finalImage[i] && 0 == finalImage[i + 1] && 0 == finalImage[i + 2]) totb++;
|
||||||
|
|
||||||
if (255 == finalImage[i] && 255 == finalImage[i + 1] && 255 == finalImage[i + 2]) totw++;
|
if (255 == finalImage[i] && 255 == finalImage[i + 1] && 255 == finalImage[i + 2]) totw++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -723,7 +712,8 @@ bool EmberGenome(EmberOptions& opt)
|
|||||||
|
|
||||||
orig.Clear();
|
orig.Clear();
|
||||||
count++;
|
count++;
|
||||||
} while ((avgPix < opt.AvgThresh() ||
|
}
|
||||||
|
while ((avgPix < opt.AvgThresh() ||
|
||||||
fractionBlack < opt.BlackThresh() ||
|
fractionBlack < opt.BlackThresh() ||
|
||||||
fractionWhite > opt.WhiteLimit()) &&
|
fractionWhite > opt.WhiteLimit()) &&
|
||||||
count < opt.Tries());
|
count < opt.Tries());
|
||||||
@ -767,7 +757,6 @@ int _tmain(int argc, _TCHAR* argv[])
|
|||||||
{
|
{
|
||||||
bool b = false;
|
bool b = false;
|
||||||
EmberOptions opt;
|
EmberOptions opt;
|
||||||
|
|
||||||
//Required for large allocs, else GPU memory usage will be severely limited to small sizes.
|
//Required for large allocs, else GPU memory usage will be severely limited to small sizes.
|
||||||
//This must be done in the application and not in the EmberCL DLL.
|
//This must be done in the application and not in the EmberCL DLL.
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
@ -778,8 +767,8 @@ int _tmain(int argc, _TCHAR* argv[])
|
|||||||
|
|
||||||
if (!opt.Populate(argc, argv, OPT_USE_GENOME))
|
if (!opt.Populate(argc, argv, OPT_USE_GENOME))
|
||||||
{
|
{
|
||||||
|
|
||||||
#ifdef DO_DOUBLE
|
#ifdef DO_DOUBLE
|
||||||
|
|
||||||
if (opt.Bits() == 64)
|
if (opt.Bits() == 64)
|
||||||
{
|
{
|
||||||
b = EmberGenome<double>(opt);
|
b = EmberGenome<double>(opt);
|
||||||
|
@ -2,6 +2,8 @@
|
|||||||
#include "EmberRender.h"
|
#include "EmberRender.h"
|
||||||
#include "JpegUtils.h"
|
#include "JpegUtils.h"
|
||||||
|
|
||||||
|
//template <class OpenCLInfo> weak_ptr<OpenCLInfo> Singleton<OpenCLInfo>::m_Instance = weak_ptr<OpenCLInfo>();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The core of the EmberRender.exe program.
|
/// The core of the EmberRender.exe program.
|
||||||
/// Template argument expected to be float or double.
|
/// Template argument expected to be float or double.
|
||||||
@ -11,8 +13,7 @@
|
|||||||
template <typename T>
|
template <typename T>
|
||||||
bool EmberRender(EmberOptions& opt)
|
bool EmberRender(EmberOptions& opt)
|
||||||
{
|
{
|
||||||
EmberCLns::OpenCLInfo& info(EmberCLns::OpenCLInfo::Instance());
|
auto info = EmberCLns::OpenCLInfo::Instance();
|
||||||
|
|
||||||
std::cout.imbue(std::locale(""));
|
std::cout.imbue(std::locale(""));
|
||||||
|
|
||||||
if (opt.DumpArgs())
|
if (opt.DumpArgs())
|
||||||
@ -21,7 +22,7 @@ bool EmberRender(EmberOptions& opt)
|
|||||||
if (opt.OpenCLInfo())
|
if (opt.OpenCLInfo())
|
||||||
{
|
{
|
||||||
cout << "\nOpenCL Info: " << endl;
|
cout << "\nOpenCL Info: " << endl;
|
||||||
cout << info.DumpInfo();
|
cout << info->DumpInfo();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -89,8 +90,8 @@ bool EmberRender(EmberOptions& opt)
|
|||||||
{
|
{
|
||||||
for (auto& device : devices)
|
for (auto& device : devices)
|
||||||
{
|
{
|
||||||
cout << "Platform: " << info.PlatformName(device.first) << endl;
|
cout << "Platform: " << info->PlatformName(device.first) << endl;
|
||||||
cout << "Device: " << info.DeviceName(device.first, device.second) << endl;
|
cout << "Device: " << info->DeviceName(device.first, device.second) << endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -217,10 +218,9 @@ bool EmberRender(EmberOptions& opt)
|
|||||||
}
|
}
|
||||||
|
|
||||||
strips = VerifyStrips(embers[i].m_FinalRasH, strips,
|
strips = VerifyStrips(embers[i].m_FinalRasH, strips,
|
||||||
[&](const string& s) { cout << s << endl; },//Greater than height.
|
[&](const string & s) { cout << s << endl; }, //Greater than height.
|
||||||
[&](const string& s) { cout << s << endl; },//Mod height != 0.
|
[&](const string & s) { cout << s << endl; }, //Mod height != 0.
|
||||||
[&](const string& s) { cout << s << endl; });//Final strips value to be set.
|
[&](const string & s) { cout << s << endl; }); //Final strips value to be set.
|
||||||
|
|
||||||
//For testing incremental renderer.
|
//For testing incremental renderer.
|
||||||
//int sb = 1;
|
//int sb = 1;
|
||||||
//bool resume = false, success = false;
|
//bool resume = false, success = false;
|
||||||
@ -231,7 +231,6 @@ bool EmberRender(EmberOptions& opt)
|
|||||||
// resume = true;
|
// resume = true;
|
||||||
//}
|
//}
|
||||||
//while (success && renderer->ProcessState() != ACCUM_DONE);
|
//while (success && renderer->ProcessState() != ACCUM_DONE);
|
||||||
|
|
||||||
StripsRender<T>(renderer.get(), embers[i], finalImage, 0, strips, opt.YAxisUp(),
|
StripsRender<T>(renderer.get(), embers[i], finalImage, 0, strips, opt.YAxisUp(),
|
||||||
[&](size_t strip)//Pre strip.
|
[&](size_t strip)//Pre strip.
|
||||||
{
|
{
|
||||||
@ -267,7 +266,6 @@ bool EmberRender(EmberOptions& opt)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
ostringstream fnstream;
|
ostringstream fnstream;
|
||||||
|
|
||||||
fnstream << inputPath << opt.Prefix() << setfill('0') << setw(padding) << i << opt.Suffix() << "." << opt.Format();
|
fnstream << inputPath << opt.Prefix() << setfill('0') << setw(padding) << i << opt.Suffix() << "." << opt.Format();
|
||||||
filename = fnstream.str();
|
filename = fnstream.str();
|
||||||
}
|
}
|
||||||
@ -278,9 +276,10 @@ bool EmberRender(EmberOptions& opt)
|
|||||||
comments = renderer->ImageComments(stats, opt.PrintEditDepth(), opt.IntPalette(), opt.HexPalette());
|
comments = renderer->ImageComments(stats, opt.PrintEditDepth(), opt.IntPalette(), opt.HexPalette());
|
||||||
os.str("");
|
os.str("");
|
||||||
os << comments.m_NumIters << " / " << iterCount << " (" << std::fixed << std::setprecision(2) << ((double(stats.m_Iters) / double(iterCount)) * 100) << "%)";
|
os << comments.m_NumIters << " / " << iterCount << " (" << std::fixed << std::setprecision(2) << ((double(stats.m_Iters) / double(iterCount)) * 100) << "%)";
|
||||||
|
|
||||||
VerbosePrint("\nIters ran/requested: " + os.str());
|
VerbosePrint("\nIters ran/requested: " + os.str());
|
||||||
|
|
||||||
if (!opt.EmberCL()) VerbosePrint("Bad values: " << stats.m_Badvals);
|
if (!opt.EmberCL()) VerbosePrint("Bad values: " << stats.m_Badvals);
|
||||||
|
|
||||||
VerbosePrint("Render time: " + t.Format(stats.m_RenderMs));
|
VerbosePrint("Render time: " + t.Format(stats.m_RenderMs));
|
||||||
VerbosePrint("Pure iter time: " + t.Format(stats.m_IterMs));
|
VerbosePrint("Pure iter time: " + t.Format(stats.m_IterMs));
|
||||||
VerbosePrint("Iters/sec: " << size_t(stats.m_Iters / (stats.m_IterMs / 1000.0)) << endl);
|
VerbosePrint("Iters/sec: " << size_t(stats.m_Iters / (stats.m_IterMs / 1000.0)) << endl);
|
||||||
@ -322,7 +321,6 @@ bool EmberRender(EmberOptions& opt)
|
|||||||
}
|
}
|
||||||
|
|
||||||
t.Toc("\nFinished in: ", true);
|
t.Toc("\nFinished in: ", true);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -336,7 +334,6 @@ int _tmain(int argc, _TCHAR* argv[])
|
|||||||
{
|
{
|
||||||
bool b = false;
|
bool b = false;
|
||||||
EmberOptions opt;
|
EmberOptions opt;
|
||||||
|
|
||||||
//Required for large allocs, else GPU memory usage will be severely limited to small sizes.
|
//Required for large allocs, else GPU memory usage will be severely limited to small sizes.
|
||||||
//This must be done in the application and not in the EmberCL DLL.
|
//This must be done in the application and not in the EmberCL DLL.
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
@ -348,8 +345,8 @@ int _tmain(int argc, _TCHAR* argv[])
|
|||||||
|
|
||||||
if (!opt.Populate(argc, argv, OPT_USE_RENDER))
|
if (!opt.Populate(argc, argv, OPT_USE_RENDER))
|
||||||
{
|
{
|
||||||
|
|
||||||
#ifdef DO_DOUBLE
|
#ifdef DO_DOUBLE
|
||||||
|
|
||||||
if (opt.Bits() == 64)
|
if (opt.Bits() == 64)
|
||||||
{
|
{
|
||||||
b = EmberRender<double>(opt);
|
b = EmberRender<double>(opt);
|
||||||
|
@ -20,7 +20,6 @@ void SaveFinalImage(Renderer<T, T>& renderer, vector<byte>& pixels, char* suffix
|
|||||||
Timing t;
|
Timing t;
|
||||||
//renderer.AccumulatorToFinalImage(pixels);
|
//renderer.AccumulatorToFinalImage(pixels);
|
||||||
//t.Toc("AccumulatorToFinalImage()");
|
//t.Toc("AccumulatorToFinalImage()");
|
||||||
|
|
||||||
long newSize;
|
long newSize;
|
||||||
char ch[50];
|
char ch[50];
|
||||||
sprintf_s(ch, 50, ".\\BasicFlame_%d_%s.bmp", sizeof(T), suffix);
|
sprintf_s(ch, 50, ".\\BasicFlame_%d_%s.bmp", sizeof(T), suffix);
|
||||||
@ -34,12 +33,10 @@ Ember<T> CreateBasicEmber(uint width, uint height, uint ss, T quality, T centerX
|
|||||||
{
|
{
|
||||||
Timing t;
|
Timing t;
|
||||||
QTIsaac<ISAAC_SIZE, ISAAC_INT> rand;
|
QTIsaac<ISAAC_SIZE, ISAAC_INT> rand;
|
||||||
|
|
||||||
//t.Tic();
|
//t.Tic();
|
||||||
Ember<T> ember1;
|
Ember<T> ember1;
|
||||||
//t.Toc("TestBasicFlame() : Constructor()");
|
//t.Toc("TestBasicFlame() : Constructor()");
|
||||||
//t.Tic();
|
//t.Tic();
|
||||||
|
|
||||||
ember1.m_FinalRasW = width;
|
ember1.m_FinalRasW = width;
|
||||||
ember1.m_FinalRasH = height;
|
ember1.m_FinalRasH = height;
|
||||||
ember1.m_Supersample = ss;
|
ember1.m_Supersample = ss;
|
||||||
@ -51,20 +48,16 @@ Ember<T> CreateBasicEmber(uint width, uint height, uint ss, T quality, T centerX
|
|||||||
Xform<T> xform2(T(0.25), rand.Frand01<T>(), rand.Frand11<T>(), T(1), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>());
|
Xform<T> xform2(T(0.25), rand.Frand01<T>(), rand.Frand11<T>(), T(1), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>());
|
||||||
Xform<T> xform3(T(0.25), rand.Frand01<T>(), rand.Frand11<T>(), T(1), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>());
|
Xform<T> xform3(T(0.25), rand.Frand01<T>(), rand.Frand11<T>(), T(1), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>());
|
||||||
Xform<T> xform4(T(0.25), rand.Frand01<T>(), rand.Frand11<T>(), T(1), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>());
|
Xform<T> xform4(T(0.25), rand.Frand01<T>(), rand.Frand11<T>(), T(1), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>());
|
||||||
|
|
||||||
xform1.AddVariation(new SphericalVariation<T>());
|
xform1.AddVariation(new SphericalVariation<T>());
|
||||||
xform2.AddVariation(new SphericalVariation<T>());
|
xform2.AddVariation(new SphericalVariation<T>());
|
||||||
xform3.AddVariation(new SphericalVariation<T>());
|
xform3.AddVariation(new SphericalVariation<T>());
|
||||||
xform4.AddVariation(new SphericalVariation<T>());
|
xform4.AddVariation(new SphericalVariation<T>());
|
||||||
xform4.AddVariation(new BlobVariation<T>());
|
xform4.AddVariation(new BlobVariation<T>());
|
||||||
|
|
||||||
ember1.AddXform(xform1);
|
ember1.AddXform(xform1);
|
||||||
ember1.AddXform(xform2);
|
ember1.AddXform(xform2);
|
||||||
ember1.AddXform(xform3);
|
ember1.AddXform(xform3);
|
||||||
ember1.AddXform(xform4);
|
ember1.AddXform(xform4);
|
||||||
|
|
||||||
//ember1.SetFinalXform(xform4);
|
//ember1.SetFinalXform(xform4);
|
||||||
|
|
||||||
return ember1;
|
return ember1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -74,22 +67,20 @@ string GetEmberCLKernelString(Ember<float>& ember, bool iter, bool log, bool de,
|
|||||||
IterOpenCLKernelCreator<float> iterCreator;
|
IterOpenCLKernelCreator<float> iterCreator;
|
||||||
DEOpenCLKernelCreator deCreator(false, false);
|
DEOpenCLKernelCreator deCreator(false, false);
|
||||||
FinalAccumOpenCLKernelCreator accumCreator(false);
|
FinalAccumOpenCLKernelCreator accumCreator(false);
|
||||||
pair<string, vector<float>> pair;
|
pair<string, vector<float>> pair, pair2;
|
||||||
|
|
||||||
iterCreator.ParVarIndexDefines(ember, pair);
|
iterCreator.ParVarIndexDefines(ember, pair);
|
||||||
|
iterCreator.SharedDataIndexDefines(ember, pair2);
|
||||||
|
|
||||||
if (iter)
|
if (iter)
|
||||||
os << "Iter kernel: \n" << iterCreator.CreateIterKernelString(ember, pair.first, true);
|
os << "Iter kernel: \n" << iterCreator.CreateIterKernelString(ember, pair.first, pair2.first, true);
|
||||||
|
|
||||||
if (log)
|
if (log)
|
||||||
os << "Log scale de kernel: \n" << deCreator.LogScaleAssignDEKernel();
|
os << "Log scale de kernel: \n" << deCreator.LogScaleAssignDEKernel();
|
||||||
|
|
||||||
//if (de)
|
//if (de)
|
||||||
// os << "Gaussian DE kernel: \n" << deCreator.GaussianDEKernel(ss);
|
// os << "Gaussian DE kernel: \n" << deCreator.GaussianDEKernel(ss);
|
||||||
|
|
||||||
//if (accum)
|
//if (accum)
|
||||||
// os << "Accum kernel: \n" << accumCreator.FinalAccumKernelLateClipWithoutAlpha();
|
// os << "Accum kernel: \n" << accumCreator.FinalAccumKernelLateClipWithoutAlpha();
|
||||||
|
|
||||||
return os.str();
|
return os.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -101,17 +92,12 @@ void MakeTestAllVarsRegPrePost(vector<Ember<T>>& embers)
|
|||||||
VariationList<T> varList;
|
VariationList<T> varList;
|
||||||
PaletteList<T> paletteList;
|
PaletteList<T> paletteList;
|
||||||
QTIsaac<ISAAC_SIZE, ISAAC_INT> rand;
|
QTIsaac<ISAAC_SIZE, ISAAC_INT> rand;
|
||||||
|
|
||||||
paletteList.Add("flam3-palettes.xml");
|
paletteList.Add("flam3-palettes.xml");
|
||||||
|
|
||||||
Timing t;
|
Timing t;
|
||||||
|
|
||||||
Ember<T> emberNoVars;
|
Ember<T> emberNoVars;
|
||||||
|
|
||||||
emberNoVars.m_FinalRasW = 640;
|
emberNoVars.m_FinalRasW = 640;
|
||||||
emberNoVars.m_FinalRasH = 480;
|
emberNoVars.m_FinalRasH = 480;
|
||||||
emberNoVars.m_Quality = 100;
|
emberNoVars.m_Quality = 100;
|
||||||
|
|
||||||
Xform<T> xform1(0.25f, rand.Frand01<T>(), rand.Frand11<T>(), 1, rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>());
|
Xform<T> xform1(0.25f, rand.Frand01<T>(), rand.Frand11<T>(), 1, rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>());
|
||||||
Xform<T> xform2(0.25f, rand.Frand01<T>(), rand.Frand11<T>(), 1, rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>());
|
Xform<T> xform2(0.25f, rand.Frand01<T>(), rand.Frand11<T>(), 1, rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>());
|
||||||
Xform<T> xform3(0.25f, rand.Frand01<T>(), rand.Frand11<T>(), 1, rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>());
|
Xform<T> xform3(0.25f, rand.Frand01<T>(), rand.Frand11<T>(), 1, rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>());
|
||||||
@ -119,7 +105,6 @@ void MakeTestAllVarsRegPrePost(vector<Ember<T>>& embers)
|
|||||||
Xform<T> xform5(0.25f, rand.Frand01<T>(), rand.Frand11<T>(), 1, rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>());
|
Xform<T> xform5(0.25f, rand.Frand01<T>(), rand.Frand11<T>(), 1, rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>());
|
||||||
Xform<T> xform6(0.25f, rand.Frand01<T>(), rand.Frand11<T>(), 1, rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>());
|
Xform<T> xform6(0.25f, rand.Frand01<T>(), rand.Frand11<T>(), 1, rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>());
|
||||||
Xform<T> xform7(0.25f, rand.Frand01<T>(), rand.Frand11<T>(), 1, rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>());
|
Xform<T> xform7(0.25f, rand.Frand01<T>(), rand.Frand11<T>(), 1, rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>());
|
||||||
|
|
||||||
emberNoVars.AddXform(xform1);
|
emberNoVars.AddXform(xform1);
|
||||||
emberNoVars.AddXform(xform2);
|
emberNoVars.AddXform(xform2);
|
||||||
emberNoVars.AddXform(xform3);
|
emberNoVars.AddXform(xform3);
|
||||||
@ -127,7 +112,6 @@ void MakeTestAllVarsRegPrePost(vector<Ember<T>>& embers)
|
|||||||
emberNoVars.AddXform(xform5);
|
emberNoVars.AddXform(xform5);
|
||||||
emberNoVars.AddXform(xform6);
|
emberNoVars.AddXform(xform6);
|
||||||
emberNoVars.AddXform(xform7);
|
emberNoVars.AddXform(xform7);
|
||||||
|
|
||||||
ss << "NoVars";
|
ss << "NoVars";
|
||||||
emberNoVars.m_Name = ss.str();
|
emberNoVars.m_Name = ss.str();
|
||||||
ss.str("");
|
ss.str("");
|
||||||
@ -136,21 +120,19 @@ void MakeTestAllVarsRegPrePost(vector<Ember<T>>& embers)
|
|||||||
|
|
||||||
while (index < varList.RegSize())
|
while (index < varList.RegSize())
|
||||||
{
|
{
|
||||||
/*if (index != VAR_SYNTH)
|
/* if (index != VAR_SYNTH)
|
||||||
{
|
{
|
||||||
index++;
|
index++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
Ember<T> ember1;
|
Ember<T> ember1;
|
||||||
unique_ptr<Variation<T>> regVar(varList.GetVariationCopy(index, VARTYPE_REG));
|
unique_ptr<Variation<T>> regVar(varList.GetVariationCopy(index, VARTYPE_REG));
|
||||||
unique_ptr<Variation<T>> preVar(varList.GetVariationCopy("pre_" + regVar->Name()));
|
unique_ptr<Variation<T>> preVar(varList.GetVariationCopy("pre_" + regVar->Name()));
|
||||||
unique_ptr<Variation<T>> postVar(varList.GetVariationCopy("post_" + regVar->Name()));
|
unique_ptr<Variation<T>> postVar(varList.GetVariationCopy("post_" + regVar->Name()));
|
||||||
|
|
||||||
ember1.m_FinalRasW = 640;
|
ember1.m_FinalRasW = 640;
|
||||||
ember1.m_FinalRasH = 480;
|
ember1.m_FinalRasH = 480;
|
||||||
ember1.m_Quality = 100;
|
ember1.m_Quality = 100;
|
||||||
|
|
||||||
Xform<T> xform1(0.25f, rand.Frand01<T>(), rand.Frand11<T>(), 1, rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>());
|
Xform<T> xform1(0.25f, rand.Frand01<T>(), rand.Frand11<T>(), 1, rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>());
|
||||||
Xform<T> xform2(0.25f, rand.Frand01<T>(), rand.Frand11<T>(), 1, rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>());
|
Xform<T> xform2(0.25f, rand.Frand01<T>(), rand.Frand11<T>(), 1, rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>());
|
||||||
Xform<T> xform3(0.25f, rand.Frand01<T>(), rand.Frand11<T>(), 1, rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>());
|
Xform<T> xform3(0.25f, rand.Frand01<T>(), rand.Frand11<T>(), 1, rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>());
|
||||||
@ -164,20 +146,15 @@ void MakeTestAllVarsRegPrePost(vector<Ember<T>>& embers)
|
|||||||
xform1.AddVariation(preVar->Copy());
|
xform1.AddVariation(preVar->Copy());
|
||||||
xform2.AddVariation(regVar->Copy());
|
xform2.AddVariation(regVar->Copy());
|
||||||
xform3.AddVariation(postVar->Copy());
|
xform3.AddVariation(postVar->Copy());
|
||||||
|
|
||||||
xform4.AddVariation(preVar->Copy());
|
xform4.AddVariation(preVar->Copy());
|
||||||
xform4.AddVariation(regVar->Copy());
|
xform4.AddVariation(regVar->Copy());
|
||||||
|
|
||||||
xform5.AddVariation(preVar->Copy());
|
xform5.AddVariation(preVar->Copy());
|
||||||
xform5.AddVariation(postVar->Copy());
|
xform5.AddVariation(postVar->Copy());
|
||||||
|
|
||||||
xform6.AddVariation(regVar->Copy());
|
xform6.AddVariation(regVar->Copy());
|
||||||
xform6.AddVariation(postVar->Copy());
|
xform6.AddVariation(postVar->Copy());
|
||||||
|
|
||||||
xform7.AddVariation(preVar->Copy());
|
xform7.AddVariation(preVar->Copy());
|
||||||
xform7.AddVariation(regVar->Copy());
|
xform7.AddVariation(regVar->Copy());
|
||||||
xform7.AddVariation(postVar->Copy());
|
xform7.AddVariation(postVar->Copy());
|
||||||
|
|
||||||
ember1.AddXform(xform1);
|
ember1.AddXform(xform1);
|
||||||
ember1.AddXform(xform2);
|
ember1.AddXform(xform2);
|
||||||
ember1.AddXform(xform3);
|
ember1.AddXform(xform3);
|
||||||
@ -192,7 +169,6 @@ void MakeTestAllVarsRegPrePost(vector<Ember<T>>& embers)
|
|||||||
xform2.AddVariation(regVar->Copy());
|
xform2.AddVariation(regVar->Copy());
|
||||||
xform3.AddVariation(regVar->Copy());
|
xform3.AddVariation(regVar->Copy());
|
||||||
xform4.AddVariation(regVar->Copy());
|
xform4.AddVariation(regVar->Copy());
|
||||||
|
|
||||||
ember1.AddXform(xform1);
|
ember1.AddXform(xform1);
|
||||||
ember1.AddXform(xform2);
|
ember1.AddXform(xform2);
|
||||||
ember1.AddXform(xform3);
|
ember1.AddXform(xform3);
|
||||||
@ -214,7 +190,6 @@ void MakeTestAllVarsRegPrePostComboFile(const string& filename)
|
|||||||
{
|
{
|
||||||
EmberToXml<float> writer;
|
EmberToXml<float> writer;
|
||||||
vector<Ember<float>> embers;
|
vector<Ember<float>> embers;
|
||||||
|
|
||||||
MakeTestAllVarsRegPrePost(embers);
|
MakeTestAllVarsRegPrePost(embers);
|
||||||
writer.Save(filename, embers, 0, true, false, true);
|
writer.Save(filename, embers, 0, true, false, true);
|
||||||
}
|
}
|
||||||
@ -225,7 +200,6 @@ void TestAtomicAdd()
|
|||||||
ostringstream os;
|
ostringstream os;
|
||||||
OpenCLWrapper wrapper;
|
OpenCLWrapper wrapper;
|
||||||
vector<float> vec(32);
|
vector<float> vec(32);
|
||||||
|
|
||||||
os << ConstantDefinesString(false) << UnionCLStructString << endl;
|
os << ConstantDefinesString(false) << UnionCLStructString << endl;
|
||||||
os <<
|
os <<
|
||||||
"void AtomicAdd(volatile __global float* source, const float operand)\n"
|
"void AtomicAdd(volatile __global float* source, const float operand)\n"
|
||||||
@ -265,7 +239,6 @@ void TestAtomicAdd()
|
|||||||
" buff[index] += (float)index * 0.54321;\n"
|
" buff[index] += (float)index * 0.54321;\n"
|
||||||
" }\n"
|
" }\n"
|
||||||
"}\n";
|
"}\n";
|
||||||
|
|
||||||
string program = os.str();
|
string program = os.str();
|
||||||
string entry = "MyKernel";
|
string entry = "MyKernel";
|
||||||
|
|
||||||
@ -422,7 +395,6 @@ bool TestVarUnique()
|
|||||||
VariationList<T> vl;
|
VariationList<T> vl;
|
||||||
vector<eVariationId> ids;
|
vector<eVariationId> ids;
|
||||||
vector<string> names;
|
vector<string> names;
|
||||||
|
|
||||||
ids.reserve(vl.Size());
|
ids.reserve(vl.Size());
|
||||||
names.reserve(vl.Size());
|
names.reserve(vl.Size());
|
||||||
|
|
||||||
@ -719,7 +691,6 @@ bool TestParVars()
|
|||||||
vector<string> names;
|
vector<string> names;
|
||||||
vector<float*> addresses;
|
vector<float*> addresses;
|
||||||
auto params = parVar->Params();
|
auto params = parVar->Params();
|
||||||
|
|
||||||
names.reserve(parVar->ParamCount());
|
names.reserve(parVar->ParamCount());
|
||||||
addresses.reserve(parVar->ParamCount());
|
addresses.reserve(parVar->ParamCount());
|
||||||
|
|
||||||
@ -770,7 +741,6 @@ bool TestVarRegPrePost()
|
|||||||
if (regVar->Name().find("dc_") != 0)
|
if (regVar->Name().find("dc_") != 0)
|
||||||
{
|
{
|
||||||
string name = regVar->Name();
|
string name = regVar->Name();
|
||||||
|
|
||||||
auto preVar = vlf.GetVariation("pre_" + name);
|
auto preVar = vlf.GetVariation("pre_" + name);
|
||||||
auto postVar = vlf.GetVariation("post_" + name);
|
auto postVar = vlf.GetVariation("post_" + name);
|
||||||
|
|
||||||
@ -983,7 +953,6 @@ bool TestVarAssignTypes()
|
|||||||
bool success = true;
|
bool success = true;
|
||||||
VariationList<float> vlf;
|
VariationList<float> vlf;
|
||||||
vector<string> vset, vsum;
|
vector<string> vset, vsum;
|
||||||
|
|
||||||
vset.push_back("vIn.x");
|
vset.push_back("vIn.x");
|
||||||
vset.push_back("vIn.y");
|
vset.push_back("vIn.y");
|
||||||
vset.push_back("vIn.z");
|
vset.push_back("vIn.z");
|
||||||
@ -993,7 +962,6 @@ bool TestVarAssignTypes()
|
|||||||
vset.push_back("precalcCosa");
|
vset.push_back("precalcCosa");
|
||||||
vset.push_back("precalcAtanxy");
|
vset.push_back("precalcAtanxy");
|
||||||
vset.push_back("precalcAtanyx");
|
vset.push_back("precalcAtanyx");
|
||||||
|
|
||||||
vsum.push_back("vIn.x");
|
vsum.push_back("vIn.x");
|
||||||
vsum.push_back("vIn.y");
|
vsum.push_back("vIn.y");
|
||||||
//vsum.push_back("vIn.z");
|
//vsum.push_back("vIn.z");
|
||||||
@ -1043,19 +1011,16 @@ bool TestVarAssignVals()
|
|||||||
bool success = true;
|
bool success = true;
|
||||||
VariationList<float> vlf;
|
VariationList<float> vlf;
|
||||||
vector<string> xout, yout, zout;
|
vector<string> xout, yout, zout;
|
||||||
|
|
||||||
xout.push_back("vOut.x =");
|
xout.push_back("vOut.x =");
|
||||||
xout.push_back("vOut.x +=");
|
xout.push_back("vOut.x +=");
|
||||||
xout.push_back("vOut.x -=");
|
xout.push_back("vOut.x -=");
|
||||||
xout.push_back("vOut.x *=");
|
xout.push_back("vOut.x *=");
|
||||||
xout.push_back("vOut.x /=");
|
xout.push_back("vOut.x /=");
|
||||||
|
|
||||||
yout.push_back("vOut.y =");
|
yout.push_back("vOut.y =");
|
||||||
yout.push_back("vOut.y +=");
|
yout.push_back("vOut.y +=");
|
||||||
yout.push_back("vOut.y -=");
|
yout.push_back("vOut.y -=");
|
||||||
yout.push_back("vOut.y *=");
|
yout.push_back("vOut.y *=");
|
||||||
yout.push_back("vOut.y /=");
|
yout.push_back("vOut.y /=");
|
||||||
|
|
||||||
zout.push_back("vOut.z =");
|
zout.push_back("vOut.z =");
|
||||||
zout.push_back("vOut.z +=");
|
zout.push_back("vOut.z +=");
|
||||||
zout.push_back("vOut.z -=");
|
zout.push_back("vOut.z -=");
|
||||||
@ -1093,7 +1058,6 @@ bool TestZepsFloor()
|
|||||||
bool success = true;
|
bool success = true;
|
||||||
VariationList<float> vlf;
|
VariationList<float> vlf;
|
||||||
vector<string> zeps;
|
vector<string> zeps;
|
||||||
|
|
||||||
zeps.push_back("Zeps(floor");
|
zeps.push_back("Zeps(floor");
|
||||||
|
|
||||||
for (size_t i = 0; i < vlf.Size(); i++)
|
for (size_t i = 0; i < vlf.Size(); i++)
|
||||||
@ -1115,7 +1079,6 @@ bool TestConstants()
|
|||||||
bool success = true;
|
bool success = true;
|
||||||
VariationList<float> vlf;
|
VariationList<float> vlf;
|
||||||
vector<string> stringVec;
|
vector<string> stringVec;
|
||||||
|
|
||||||
stringVec.push_back("2 * M_PI");
|
stringVec.push_back("2 * M_PI");
|
||||||
stringVec.push_back("2*M_PI");
|
stringVec.push_back("2*M_PI");
|
||||||
stringVec.push_back("M_PI*2");
|
stringVec.push_back("M_PI*2");
|
||||||
@ -1145,7 +1108,6 @@ bool TestGlobalFuncs()
|
|||||||
for (size_t i = 0; i < vlf.Size(); i++)
|
for (size_t i = 0; i < vlf.Size(); i++)
|
||||||
{
|
{
|
||||||
auto var = vlf.GetVariation(i);
|
auto var = vlf.GetVariation(i);
|
||||||
|
|
||||||
funcs = var->OpenCLGlobalFuncNames();
|
funcs = var->OpenCLGlobalFuncNames();
|
||||||
|
|
||||||
for (auto& func : funcs)
|
for (auto& func : funcs)
|
||||||
@ -1170,7 +1132,7 @@ void PrintAllVars()
|
|||||||
uint i = 0;
|
uint i = 0;
|
||||||
VariationList<float> vlf;
|
VariationList<float> vlf;
|
||||||
|
|
||||||
while(auto var = vlf.GetVariation(i++))
|
while (auto var = vlf.GetVariation(i++))
|
||||||
cout << var->Name() << endl;
|
cout << var->Name() << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1180,7 +1142,6 @@ void TestXformsInOutPoints()
|
|||||||
VariationList<float> varList;
|
VariationList<float> varList;
|
||||||
PaletteList<float> paletteList;
|
PaletteList<float> paletteList;
|
||||||
QTIsaac<ISAAC_SIZE, ISAAC_INT> rand;
|
QTIsaac<ISAAC_SIZE, ISAAC_INT> rand;
|
||||||
|
|
||||||
paletteList.Add("flam3-palettes.xml");
|
paletteList.Add("flam3-palettes.xml");
|
||||||
|
|
||||||
while (index < varList.RegSize())
|
while (index < varList.RegSize())
|
||||||
@ -1193,7 +1154,6 @@ void TestXformsInOutPoints()
|
|||||||
{
|
{
|
||||||
unique_ptr<Variation<float>> preVar(varList.GetVariationCopy("pre_" + regVar->Name()));
|
unique_ptr<Variation<float>> preVar(varList.GetVariationCopy("pre_" + regVar->Name()));
|
||||||
unique_ptr<Variation<float>> postVar(varList.GetVariationCopy("post_" + regVar->Name()));
|
unique_ptr<Variation<float>> postVar(varList.GetVariationCopy("post_" + regVar->Name()));
|
||||||
|
|
||||||
Xform<float> xform0(0.25f, rand.Frand01<float>(), rand.Frand11<float>(), 1, rand.Frand11<float>(), rand.Frand11<float>(), rand.Frand11<float>(), rand.Frand11<float>(), rand.Frand11<float>(), rand.Frand11<float>());
|
Xform<float> xform0(0.25f, rand.Frand01<float>(), rand.Frand11<float>(), 1, rand.Frand11<float>(), rand.Frand11<float>(), rand.Frand11<float>(), rand.Frand11<float>(), rand.Frand11<float>(), rand.Frand11<float>());
|
||||||
Xform<float> xform1(0.25f, rand.Frand01<float>(), rand.Frand11<float>(), 1, rand.Frand11<float>(), rand.Frand11<float>(), rand.Frand11<float>(), rand.Frand11<float>(), rand.Frand11<float>(), rand.Frand11<float>());
|
Xform<float> xform1(0.25f, rand.Frand01<float>(), rand.Frand11<float>(), 1, rand.Frand11<float>(), rand.Frand11<float>(), rand.Frand11<float>(), rand.Frand11<float>(), rand.Frand11<float>(), rand.Frand11<float>());
|
||||||
Xform<float> xform2(0.25f, rand.Frand01<float>(), rand.Frand11<float>(), 1, rand.Frand11<float>(), rand.Frand11<float>(), rand.Frand11<float>(), rand.Frand11<float>(), rand.Frand11<float>(), rand.Frand11<float>());
|
Xform<float> xform2(0.25f, rand.Frand01<float>(), rand.Frand11<float>(), 1, rand.Frand11<float>(), rand.Frand11<float>(), rand.Frand11<float>(), rand.Frand11<float>(), rand.Frand11<float>(), rand.Frand11<float>());
|
||||||
@ -1208,20 +1168,15 @@ void TestXformsInOutPoints()
|
|||||||
xform1.AddVariation(preVar->Copy());
|
xform1.AddVariation(preVar->Copy());
|
||||||
xform2.AddVariation(regVar->Copy());
|
xform2.AddVariation(regVar->Copy());
|
||||||
xform3.AddVariation(postVar->Copy());
|
xform3.AddVariation(postVar->Copy());
|
||||||
|
|
||||||
xform4.AddVariation(preVar->Copy());
|
xform4.AddVariation(preVar->Copy());
|
||||||
xform4.AddVariation(regVar->Copy());
|
xform4.AddVariation(regVar->Copy());
|
||||||
|
|
||||||
xform5.AddVariation(preVar->Copy());
|
xform5.AddVariation(preVar->Copy());
|
||||||
xform5.AddVariation(postVar->Copy());
|
xform5.AddVariation(postVar->Copy());
|
||||||
|
|
||||||
xform6.AddVariation(regVar->Copy());
|
xform6.AddVariation(regVar->Copy());
|
||||||
xform6.AddVariation(postVar->Copy());
|
xform6.AddVariation(postVar->Copy());
|
||||||
|
|
||||||
xform7.AddVariation(preVar->Copy());
|
xform7.AddVariation(preVar->Copy());
|
||||||
xform7.AddVariation(regVar->Copy());
|
xform7.AddVariation(regVar->Copy());
|
||||||
xform7.AddVariation(postVar->Copy());
|
xform7.AddVariation(postVar->Copy());
|
||||||
|
|
||||||
xforms.push_back(xform0);
|
xforms.push_back(xform0);
|
||||||
xforms.push_back(xform1);
|
xforms.push_back(xform1);
|
||||||
xforms.push_back(xform2);
|
xforms.push_back(xform2);
|
||||||
@ -1234,7 +1189,6 @@ void TestXformsInOutPoints()
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
xform1.AddVariation(regVar->Copy());
|
xform1.AddVariation(regVar->Copy());
|
||||||
|
|
||||||
xforms.push_back(xform0);
|
xforms.push_back(xform0);
|
||||||
xforms.push_back(xform1);
|
xforms.push_back(xform1);
|
||||||
}
|
}
|
||||||
@ -1243,24 +1197,19 @@ void TestXformsInOutPoints()
|
|||||||
{
|
{
|
||||||
bool badVals = false;
|
bool badVals = false;
|
||||||
Point<float> orig;
|
Point<float> orig;
|
||||||
|
|
||||||
orig.m_X = rand.Frand11<float>();
|
orig.m_X = rand.Frand11<float>();
|
||||||
orig.m_Y = rand.Frand11<float>();
|
orig.m_Y = rand.Frand11<float>();
|
||||||
orig.m_Z = rand.Frand11<float>();
|
orig.m_Z = rand.Frand11<float>();
|
||||||
orig.m_ColorX = rand.Frand01<float>();
|
orig.m_ColorX = rand.Frand01<float>();
|
||||||
orig.m_VizAdjusted = rand.Frand01<float>();
|
orig.m_VizAdjusted = rand.Frand01<float>();
|
||||||
|
|
||||||
Point<float> p1 = orig, p2 = orig, p3;
|
Point<float> p1 = orig, p2 = orig, p3;
|
||||||
|
|
||||||
xforms[i].Apply(&p1, &p1, rand);
|
xforms[i].Apply(&p1, &p1, rand);
|
||||||
xforms[i].Apply(&p2, &p3, rand);
|
xforms[i].Apply(&p2, &p3, rand);
|
||||||
|
|
||||||
badVals |= (p1.m_X != p1.m_X);
|
badVals |= (p1.m_X != p1.m_X);
|
||||||
badVals |= (p1.m_Y != p1.m_Y);
|
badVals |= (p1.m_Y != p1.m_Y);
|
||||||
badVals |= (p1.m_Z != p1.m_Z);
|
badVals |= (p1.m_Z != p1.m_Z);
|
||||||
badVals |= (p1.m_ColorX != p1.m_ColorX);
|
badVals |= (p1.m_ColorX != p1.m_ColorX);
|
||||||
badVals |= (p1.m_VizAdjusted != p1.m_VizAdjusted);
|
badVals |= (p1.m_VizAdjusted != p1.m_VizAdjusted);
|
||||||
|
|
||||||
badVals |= (p3.m_X != p3.m_X);
|
badVals |= (p3.m_X != p3.m_X);
|
||||||
badVals |= (p3.m_Y != p3.m_Y);
|
badVals |= (p3.m_Y != p3.m_Y);
|
||||||
badVals |= (p3.m_Z != p3.m_Z);
|
badVals |= (p3.m_Z != p3.m_Z);
|
||||||
@ -1308,7 +1257,6 @@ void TestVarTime()
|
|||||||
IteratorHelper<T> helper;
|
IteratorHelper<T> helper;
|
||||||
QTIsaac<ISAAC_SIZE, ISAAC_INT> rand;
|
QTIsaac<ISAAC_SIZE, ISAAC_INT> rand;
|
||||||
vector<pair<string, double>> times;
|
vector<pair<string, double>> times;
|
||||||
|
|
||||||
times.reserve(vlf.RegSize());
|
times.reserve(vlf.RegSize());
|
||||||
|
|
||||||
while (i < vlf.RegSize())
|
while (i < vlf.RegSize())
|
||||||
@ -1316,13 +1264,11 @@ void TestVarTime()
|
|||||||
double sum = 0;
|
double sum = 0;
|
||||||
Xform<T> xform;
|
Xform<T> xform;
|
||||||
Variation<T>* var = vlf.GetVariationCopy(i, VARTYPE_REG);
|
Variation<T>* var = vlf.GetVariationCopy(i, VARTYPE_REG);
|
||||||
|
|
||||||
xform.AddVariation(var);
|
xform.AddVariation(var);
|
||||||
|
|
||||||
for (int iter = 0; iter < iters; iter++)
|
for (int iter = 0; iter < iters; iter++)
|
||||||
{
|
{
|
||||||
Point<T> p;
|
Point<T> p;
|
||||||
|
|
||||||
xform.m_Affine.A(rand.Frand<T>(-5, 5));
|
xform.m_Affine.A(rand.Frand<T>(-5, 5));
|
||||||
xform.m_Affine.B(rand.Frand<T>(-5, 5));
|
xform.m_Affine.B(rand.Frand<T>(-5, 5));
|
||||||
xform.m_Affine.C(rand.Frand<T>(-5, 5));
|
xform.m_Affine.C(rand.Frand<T>(-5, 5));
|
||||||
@ -1337,14 +1283,12 @@ void TestVarTime()
|
|||||||
helper.In.z = helper.m_TransZ = p.m_Z;
|
helper.In.z = helper.m_TransZ = p.m_Z;
|
||||||
helper.m_Color.x = p.m_ColorX = rand.Frand01<T>();
|
helper.m_Color.x = p.m_ColorX = rand.Frand01<T>();
|
||||||
p.m_VizAdjusted = rand.Frand01<T>();
|
p.m_VizAdjusted = rand.Frand01<T>();
|
||||||
|
|
||||||
helper.m_PrecalcSumSquares = SQR(helper.m_TransX) + SQR(helper.m_TransY);
|
helper.m_PrecalcSumSquares = SQR(helper.m_TransX) + SQR(helper.m_TransY);
|
||||||
helper.m_PrecalcSqrtSumSquares = sqrt(helper.m_PrecalcSumSquares);
|
helper.m_PrecalcSqrtSumSquares = sqrt(helper.m_PrecalcSumSquares);
|
||||||
helper.m_PrecalcSina = helper.m_TransX / helper.m_PrecalcSqrtSumSquares;
|
helper.m_PrecalcSina = helper.m_TransX / helper.m_PrecalcSqrtSumSquares;
|
||||||
helper.m_PrecalcCosa = helper.m_TransY / helper.m_PrecalcSqrtSumSquares;
|
helper.m_PrecalcCosa = helper.m_TransY / helper.m_PrecalcSqrtSumSquares;
|
||||||
helper.m_PrecalcAtanxy = atan2(helper.m_TransX, helper.m_TransY);
|
helper.m_PrecalcAtanxy = atan2(helper.m_TransX, helper.m_TransY);
|
||||||
helper.m_PrecalcAtanyx = atan2(helper.m_TransY, helper.m_TransX);
|
helper.m_PrecalcAtanyx = atan2(helper.m_TransY, helper.m_TransX);
|
||||||
|
|
||||||
var->Random(rand);
|
var->Random(rand);
|
||||||
t.Tic();
|
t.Tic();
|
||||||
var->Func(helper, p, rand);
|
var->Func(helper, p, rand);
|
||||||
@ -1363,7 +1307,6 @@ void TestCasting()
|
|||||||
{
|
{
|
||||||
vector<string> stringVec;
|
vector<string> stringVec;
|
||||||
vector<Variation<float>*> varVec;
|
vector<Variation<float>*> varVec;
|
||||||
|
|
||||||
stringVec.push_back("T(");
|
stringVec.push_back("T(");
|
||||||
stringVec.push_back(".0f");
|
stringVec.push_back(".0f");
|
||||||
stringVec.push_back(".1f");
|
stringVec.push_back(".1f");
|
||||||
@ -1375,7 +1318,6 @@ void TestCasting()
|
|||||||
stringVec.push_back(".7f");
|
stringVec.push_back(".7f");
|
||||||
stringVec.push_back(".8f");
|
stringVec.push_back(".8f");
|
||||||
stringVec.push_back(".9f");
|
stringVec.push_back(".9f");
|
||||||
|
|
||||||
varVec = FindVarsWith<float>(stringVec);
|
varVec = FindVarsWith<float>(stringVec);
|
||||||
|
|
||||||
for (auto& it : varVec)
|
for (auto& it : varVec)
|
||||||
@ -1391,7 +1333,6 @@ void TestOperations()
|
|||||||
{
|
{
|
||||||
vector<string> stringVec;
|
vector<string> stringVec;
|
||||||
vector<Variation<T>*> varVec;
|
vector<Variation<T>*> varVec;
|
||||||
|
|
||||||
//stringVec.push_back("%");
|
//stringVec.push_back("%");
|
||||||
//varVec = FindVarsWith<T>(Vec);
|
//varVec = FindVarsWith<T>(Vec);
|
||||||
//
|
//
|
||||||
@ -1402,10 +1343,8 @@ void TestOperations()
|
|||||||
//
|
//
|
||||||
//stringVec.clear();
|
//stringVec.clear();
|
||||||
//ClearVec<Variation<T>>(varVec);
|
//ClearVec<Variation<T>>(varVec);
|
||||||
|
|
||||||
stringVec.push_back("MwcNext(mwc) %");
|
stringVec.push_back("MwcNext(mwc) %");
|
||||||
stringVec.push_back("MwcNext(mwc)%");
|
stringVec.push_back("MwcNext(mwc)%");
|
||||||
|
|
||||||
varVec = FindVarsWith<T>(stringVec);
|
varVec = FindVarsWith<T>(stringVec);
|
||||||
|
|
||||||
for (size_t i = 0; i < varVec.size(); i++)
|
for (size_t i = 0; i < varVec.size(); i++)
|
||||||
@ -1415,7 +1354,6 @@ void TestOperations()
|
|||||||
|
|
||||||
stringVec.clear();
|
stringVec.clear();
|
||||||
ClearVec<Variation<T>>(varVec);
|
ClearVec<Variation<T>>(varVec);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
@ -1427,7 +1365,6 @@ void TestVarsSimilar()
|
|||||||
IteratorHelper<T> helper;
|
IteratorHelper<T> helper;
|
||||||
QTIsaac<ISAAC_SIZE, ISAAC_INT> rand;
|
QTIsaac<ISAAC_SIZE, ISAAC_INT> rand;
|
||||||
vector<pair<string, double>> diffs;
|
vector<pair<string, double>> diffs;
|
||||||
|
|
||||||
diffs.reserve(vlf.RegSize());
|
diffs.reserve(vlf.RegSize());
|
||||||
|
|
||||||
while (i < vlf.RegSize())
|
while (i < vlf.RegSize())
|
||||||
@ -1436,7 +1373,6 @@ void TestVarsSimilar()
|
|||||||
Xform<T> xform;
|
Xform<T> xform;
|
||||||
Variation<T>* var = vlf.GetVariationCopy(i, VARTYPE_REG);
|
Variation<T>* var = vlf.GetVariationCopy(i, VARTYPE_REG);
|
||||||
pair<string, double> match("", TMAX);
|
pair<string, double> match("", TMAX);
|
||||||
|
|
||||||
compIndex = 0;
|
compIndex = 0;
|
||||||
xform.AddVariation(var);
|
xform.AddVariation(var);
|
||||||
|
|
||||||
@ -1451,16 +1387,13 @@ void TestVarsSimilar()
|
|||||||
double sum = 0, xdiff = 0, ydiff = 0, zdiff = 0;
|
double sum = 0, xdiff = 0, ydiff = 0, zdiff = 0;
|
||||||
Xform<T> xformComp;
|
Xform<T> xformComp;
|
||||||
Variation<T>* varComp = vlf.GetVariationCopy(compIndex, VARTYPE_REG);
|
Variation<T>* varComp = vlf.GetVariationCopy(compIndex, VARTYPE_REG);
|
||||||
|
|
||||||
xformComp.AddVariation(varComp);
|
xformComp.AddVariation(varComp);
|
||||||
|
|
||||||
ParametricVariation<T>* parVar = dynamic_cast<ParametricVariation<T>*>(var);
|
ParametricVariation<T>* parVar = dynamic_cast<ParametricVariation<T>*>(var);
|
||||||
ParametricVariation<T>* parVarComp = dynamic_cast<ParametricVariation<T>*>(varComp);
|
ParametricVariation<T>* parVarComp = dynamic_cast<ParametricVariation<T>*>(varComp);
|
||||||
|
|
||||||
for (int iter = 0; iter < iters; iter++)
|
for (int iter = 0; iter < iters; iter++)
|
||||||
{
|
{
|
||||||
Point<T> p, pComp;
|
Point<T> p, pComp;
|
||||||
|
|
||||||
xform.m_Affine.A(rand.Frand<T>(-5, 5));
|
xform.m_Affine.A(rand.Frand<T>(-5, 5));
|
||||||
xform.m_Affine.B(rand.Frand<T>(-5, 5));
|
xform.m_Affine.B(rand.Frand<T>(-5, 5));
|
||||||
xform.m_Affine.C(rand.Frand<T>(-5, 5));
|
xform.m_Affine.C(rand.Frand<T>(-5, 5));
|
||||||
@ -1468,7 +1401,6 @@ void TestVarsSimilar()
|
|||||||
xform.m_Affine.E(rand.Frand<T>(-5, 5));
|
xform.m_Affine.E(rand.Frand<T>(-5, 5));
|
||||||
xform.m_Affine.F(rand.Frand<T>(-5, 5));
|
xform.m_Affine.F(rand.Frand<T>(-5, 5));
|
||||||
xformComp.m_Affine = xform.m_Affine;
|
xformComp.m_Affine = xform.m_Affine;
|
||||||
|
|
||||||
p.m_X = rand.Frand<T>(-20, 20);
|
p.m_X = rand.Frand<T>(-20, 20);
|
||||||
p.m_Y = rand.Frand<T>(-20, 20);
|
p.m_Y = rand.Frand<T>(-20, 20);
|
||||||
p.m_Z = rand.Frand<T>(-20, 20);
|
p.m_Z = rand.Frand<T>(-20, 20);
|
||||||
@ -1478,7 +1410,6 @@ void TestVarsSimilar()
|
|||||||
helper.m_Color.x = p.m_ColorX = rand.Frand01<T>();
|
helper.m_Color.x = p.m_ColorX = rand.Frand01<T>();
|
||||||
p.m_VizAdjusted = rand.Frand01<T>();
|
p.m_VizAdjusted = rand.Frand01<T>();
|
||||||
pComp = p;
|
pComp = p;
|
||||||
|
|
||||||
helper.m_PrecalcSumSquares = SQR(helper.m_TransX) + SQR(helper.m_TransY);
|
helper.m_PrecalcSumSquares = SQR(helper.m_TransX) + SQR(helper.m_TransY);
|
||||||
helper.m_PrecalcSqrtSumSquares = sqrt(helper.m_PrecalcSumSquares);
|
helper.m_PrecalcSqrtSumSquares = sqrt(helper.m_PrecalcSumSquares);
|
||||||
helper.m_PrecalcSina = helper.m_TransX / helper.m_PrecalcSqrtSumSquares;
|
helper.m_PrecalcSina = helper.m_TransX / helper.m_PrecalcSqrtSumSquares;
|
||||||
@ -1509,13 +1440,11 @@ void TestVarsSimilar()
|
|||||||
var->Precalc();
|
var->Precalc();
|
||||||
var->Func(helper, p, rand);
|
var->Func(helper, p, rand);
|
||||||
v4T varOut = helper.Out;
|
v4T varOut = helper.Out;
|
||||||
|
|
||||||
helper.Out = v4T(0);
|
helper.Out = v4T(0);
|
||||||
varComp->m_Weight = T(iter + 1);
|
varComp->m_Weight = T(iter + 1);
|
||||||
varComp->Precalc();
|
varComp->Precalc();
|
||||||
varComp->Func(helper, pComp, rand);
|
varComp->Func(helper, pComp, rand);
|
||||||
v4T varCompOut = helper.Out;
|
v4T varCompOut = helper.Out;
|
||||||
|
|
||||||
xdiff += fabs(varOut.x - varCompOut.x);
|
xdiff += fabs(varOut.x - varCompOut.x);
|
||||||
ydiff += fabs(varOut.y - varCompOut.y);
|
ydiff += fabs(varOut.y - varCompOut.y);
|
||||||
zdiff += fabs(varOut.z - varCompOut.z);
|
zdiff += fabs(varOut.z - varCompOut.z);
|
||||||
@ -1552,7 +1481,6 @@ bool TestAllVarsCLBuild(size_t platform, size_t device, bool printSuccess = true
|
|||||||
QTIsaac<ISAAC_SIZE, ISAAC_INT> rand;
|
QTIsaac<ISAAC_SIZE, ISAAC_INT> rand;
|
||||||
vector<pair<size_t, size_t>> devices{ std::make_pair(platform, device) };
|
vector<pair<size_t, size_t>> devices{ std::make_pair(platform, device) };
|
||||||
RendererCL<T, float> renderer(devices);
|
RendererCL<T, float> renderer(devices);
|
||||||
|
|
||||||
const char* loc = __FUNCTION__;
|
const char* loc = __FUNCTION__;
|
||||||
|
|
||||||
if (!renderer.Ok())
|
if (!renderer.Ok())
|
||||||
@ -1597,7 +1525,6 @@ void TestCpuGpuResults(size_t platform, size_t device)
|
|||||||
vector<PointCL<T>> points;
|
vector<PointCL<T>> points;
|
||||||
vector<pair<size_t, size_t>> devices{ std::make_pair(platform, device) };
|
vector<pair<size_t, size_t>> devices{ std::make_pair(platform, device) };
|
||||||
RendererCL<T, float> renderer(devices);
|
RendererCL<T, float> renderer(devices);
|
||||||
|
|
||||||
points.resize(renderer.TotalIterKernelCount());
|
points.resize(renderer.TotalIterKernelCount());
|
||||||
|
|
||||||
while (i < vlf.RegSize())
|
while (i < vlf.RegSize())
|
||||||
@ -1623,13 +1550,11 @@ void TestCpuGpuResults(size_t platform, size_t device)
|
|||||||
Ember<T> ember;
|
Ember<T> ember;
|
||||||
Xform<T> xform;
|
Xform<T> xform;
|
||||||
Variation<T>* varCopy = var->Copy();
|
Variation<T>* varCopy = var->Copy();
|
||||||
|
|
||||||
p.m_X = rand.Frand<T>(-5, 5);
|
p.m_X = rand.Frand<T>(-5, 5);
|
||||||
p.m_Y = rand.Frand<T>(-5, 5);
|
p.m_Y = rand.Frand<T>(-5, 5);
|
||||||
p.m_Z = rand.Frand<T>(-5, 5);
|
p.m_Z = rand.Frand<T>(-5, 5);
|
||||||
p.m_ColorX = rand.Frand01<T>();
|
p.m_ColorX = rand.Frand01<T>();
|
||||||
p.m_VizAdjusted = rand.Frand01<T>();
|
p.m_VizAdjusted = rand.Frand01<T>();
|
||||||
|
|
||||||
varCopy->Random(rand);
|
varCopy->Random(rand);
|
||||||
xform.AddVariation(varCopy);
|
xform.AddVariation(varCopy);
|
||||||
ember.AddXform(xform);
|
ember.AddXform(xform);
|
||||||
@ -1653,7 +1578,6 @@ void TestCpuGpuResults(size_t platform, size_t device)
|
|||||||
renderer.WritePoints(points);
|
renderer.WritePoints(points);
|
||||||
renderer.Iterate(1, 0, 1);
|
renderer.Iterate(1, 0, 1);
|
||||||
renderer.ReadPoints(points);
|
renderer.ReadPoints(points);
|
||||||
|
|
||||||
T xdiff = fabs(p2.m_X - points[0].m_X);
|
T xdiff = fabs(p2.m_X - points[0].m_X);
|
||||||
T ydiff = fabs(p2.m_Y - points[0].m_Y);
|
T ydiff = fabs(p2.m_Y - points[0].m_Y);
|
||||||
T zdiff = fabs(p2.m_Z - points[0].m_Z);
|
T zdiff = fabs(p2.m_Z - points[0].m_Z);
|
||||||
@ -1697,23 +1621,18 @@ void TestGpuVectorRead(size_t platform, size_t device)
|
|||||||
vector<PointCL<T>> points;
|
vector<PointCL<T>> points;
|
||||||
vector<pair<size_t, size_t>> devices{ std::make_pair(platform, device) };
|
vector<pair<size_t, size_t>> devices{ std::make_pair(platform, device) };
|
||||||
RendererCL<T, float> renderer(devices);
|
RendererCL<T, float> renderer(devices);
|
||||||
|
|
||||||
points.resize(renderer.TotalIterKernelCount());
|
points.resize(renderer.TotalIterKernelCount());
|
||||||
|
|
||||||
Variation<T>* var = vlf.GetVariation(VAR_LINEAR);
|
Variation<T>* var = vlf.GetVariation(VAR_LINEAR);
|
||||||
|
|
||||||
bool newAlloc = false;
|
bool newAlloc = false;
|
||||||
Point<T> p, p2;
|
Point<T> p, p2;
|
||||||
Ember<T> ember;
|
Ember<T> ember;
|
||||||
Xform<T> xform;
|
Xform<T> xform;
|
||||||
Variation<T>* varCopy = var->Copy();
|
Variation<T>* varCopy = var->Copy();
|
||||||
|
|
||||||
p.m_X = rand.Frand<T>(-5, 5);
|
p.m_X = rand.Frand<T>(-5, 5);
|
||||||
p.m_Y = rand.Frand<T>(-5, 5);
|
p.m_Y = rand.Frand<T>(-5, 5);
|
||||||
p.m_Z = rand.Frand<T>(-5, 5);
|
p.m_Z = rand.Frand<T>(-5, 5);
|
||||||
p.m_ColorX = rand.Frand01<T>();
|
p.m_ColorX = rand.Frand01<T>();
|
||||||
p.m_VizAdjusted = rand.Frand01<T>();
|
p.m_VizAdjusted = rand.Frand01<T>();
|
||||||
|
|
||||||
varCopy->Random(rand);
|
varCopy->Random(rand);
|
||||||
xform.AddVariation(varCopy);
|
xform.AddVariation(varCopy);
|
||||||
ember.AddXform(xform);
|
ember.AddXform(xform);
|
||||||
@ -1732,7 +1651,6 @@ void TestGpuVectorRead(size_t platform, size_t device)
|
|||||||
uint i, iters = renderer.IterCountPerKernel() * renderer.TotalIterKernelCount();//Make each thread in each block run at least once.
|
uint i, iters = renderer.IterCountPerKernel() * renderer.TotalIterKernelCount();//Make each thread in each block run at least once.
|
||||||
renderer.Iterate(iters, 0, 1);
|
renderer.Iterate(iters, 0, 1);
|
||||||
renderer.ReadPoints(points);
|
renderer.ReadPoints(points);
|
||||||
|
|
||||||
cout << __FUNCTION__ << ": GPU point test value results:" << endl;
|
cout << __FUNCTION__ << ": GPU point test value results:" << endl;
|
||||||
|
|
||||||
for (i = 0; i < points.size(); i++)
|
for (i = 0; i < points.size(); i++)
|
||||||
@ -1741,17 +1659,14 @@ void TestGpuVectorRead(size_t platform, size_t device)
|
|||||||
cout << "point[" << i << "].m_Y = " << points[i].m_Y << endl;
|
cout << "point[" << i << "].m_Y = " << points[i].m_Y << endl;
|
||||||
cout << "point[" << i << "].m_Z = " << points[i].m_Z << endl;
|
cout << "point[" << i << "].m_Z = " << points[i].m_Z << endl;
|
||||||
cout << "point[" << i << "].m_ColorX = " << points[i].m_ColorX << endl << endl;
|
cout << "point[" << i << "].m_ColorX = " << points[i].m_ColorX << endl << endl;
|
||||||
|
|
||||||
minx = min<T>(points[i].m_X, minx);
|
minx = min<T>(points[i].m_X, minx);
|
||||||
miny = min<T>(points[i].m_Y, miny);
|
miny = min<T>(points[i].m_Y, miny);
|
||||||
minz = min<T>(points[i].m_Z, minz);
|
minz = min<T>(points[i].m_Z, minz);
|
||||||
mincolorx = min<T>(points[i].m_ColorX, mincolorx);
|
mincolorx = min<T>(points[i].m_ColorX, mincolorx);
|
||||||
|
|
||||||
maxx = max<T>(points[i].m_X, maxx);
|
maxx = max<T>(points[i].m_X, maxx);
|
||||||
maxy = max<T>(points[i].m_Y, maxy);
|
maxy = max<T>(points[i].m_Y, maxy);
|
||||||
maxz = max<T>(points[i].m_Z, maxz);
|
maxz = max<T>(points[i].m_Z, maxz);
|
||||||
maxcolorx = max<T>(points[i].m_ColorX, maxcolorx);
|
maxcolorx = max<T>(points[i].m_ColorX, maxcolorx);
|
||||||
|
|
||||||
sumx += points[i].m_X;
|
sumx += points[i].m_X;
|
||||||
sumy += points[i].m_Y;
|
sumy += points[i].m_Y;
|
||||||
sumz += points[i].m_Z;
|
sumz += points[i].m_Z;
|
||||||
@ -1762,17 +1677,14 @@ void TestGpuVectorRead(size_t platform, size_t device)
|
|||||||
avgy = sumy / i;
|
avgy = sumy / i;
|
||||||
avgz = sumz / i;
|
avgz = sumz / i;
|
||||||
avgcolorx = sumcolorx / i;
|
avgcolorx = sumcolorx / i;
|
||||||
|
|
||||||
cout << "avgx = " << avgx << endl;
|
cout << "avgx = " << avgx << endl;
|
||||||
cout << "avgy = " << avgy << endl;
|
cout << "avgy = " << avgy << endl;
|
||||||
cout << "avgz = " << avgz << endl;
|
cout << "avgz = " << avgz << endl;
|
||||||
cout << "avgcolorx = " << avgcolorx << endl;
|
cout << "avgcolorx = " << avgcolorx << endl;
|
||||||
|
|
||||||
cout << "minx = " << minx << endl;
|
cout << "minx = " << minx << endl;
|
||||||
cout << "miny = " << miny << endl;
|
cout << "miny = " << miny << endl;
|
||||||
cout << "minz = " << minz << endl;
|
cout << "minz = " << minz << endl;
|
||||||
cout << "mincolorx = " << mincolorx << endl << endl;
|
cout << "mincolorx = " << mincolorx << endl << endl;
|
||||||
|
|
||||||
cout << "maxx = " << maxx << endl;
|
cout << "maxx = " << maxx << endl;
|
||||||
cout << "maxy = " << maxy << endl;
|
cout << "maxy = " << maxy << endl;
|
||||||
cout << "maxz = " << maxz << endl;
|
cout << "maxz = " << maxz << endl;
|
||||||
@ -1786,7 +1698,6 @@ void TestRandomAccess(size_t vsize, size_t ipp, bool cache)
|
|||||||
size_t iters = vsize * ipp;
|
size_t iters = vsize * ipp;
|
||||||
vector<v4T> vec;
|
vector<v4T> vec;
|
||||||
QTIsaac<ISAAC_SIZE, ISAAC_INT> rand;
|
QTIsaac<ISAAC_SIZE, ISAAC_INT> rand;
|
||||||
|
|
||||||
vec.resize(vsize);
|
vec.resize(vsize);
|
||||||
v4T* vdata = vec.data();
|
v4T* vdata = vec.data();
|
||||||
|
|
||||||
@ -1797,7 +1708,6 @@ void TestRandomAccess(size_t vsize, size_t ipp, bool cache)
|
|||||||
v4T v4(rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>());
|
v4T v4(rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>());
|
||||||
int index = rand.Rand((ISAAC_INT)vsize);
|
int index = rand.Rand((ISAAC_INT)vsize);
|
||||||
v4T v42 = vdata[index];
|
v4T v42 = vdata[index];
|
||||||
|
|
||||||
v4.x = log(v4.x);
|
v4.x = log(v4.x);
|
||||||
v4.y = sqrt(v4.y);
|
v4.y = sqrt(v4.y);
|
||||||
v4.z = sin(v4.z);
|
v4.z = sin(v4.z);
|
||||||
@ -1805,7 +1715,6 @@ void TestRandomAccess(size_t vsize, size_t ipp, bool cache)
|
|||||||
v4 += T(1.234);
|
v4 += T(1.234);
|
||||||
v4 *= T(55.55);
|
v4 *= T(55.55);
|
||||||
v4 /= T(0.0045);
|
v4 /= T(0.0045);
|
||||||
|
|
||||||
vdata[index] = v4 + v42;
|
vdata[index] = v4 + v42;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1815,7 +1724,6 @@ void TestRandomAccess(size_t vsize, size_t ipp, bool cache)
|
|||||||
{
|
{
|
||||||
v4T v4(rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>());
|
v4T v4(rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>());
|
||||||
int index = rand.Rand((ISAAC_INT)vsize);
|
int index = rand.Rand((ISAAC_INT)vsize);
|
||||||
|
|
||||||
v4.x = log(v4.x);
|
v4.x = log(v4.x);
|
||||||
v4.y = sqrt(v4.y);
|
v4.y = sqrt(v4.y);
|
||||||
v4.z = sin(v4.z);
|
v4.z = sin(v4.z);
|
||||||
@ -1823,7 +1731,6 @@ void TestRandomAccess(size_t vsize, size_t ipp, bool cache)
|
|||||||
v4 += T(1.234);
|
v4 += T(1.234);
|
||||||
v4 *= T(55.55);
|
v4 *= T(55.55);
|
||||||
v4 /= T(0.0045);
|
v4 /= T(0.0045);
|
||||||
|
|
||||||
vdata[index] += v4;
|
vdata[index] += v4;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1836,9 +1743,7 @@ void TestCross(T x, T y, T weight)
|
|||||||
T r = weight * sqrt(1 / (s * s + EPS));
|
T r = weight * sqrt(1 / (s * s + EPS));
|
||||||
T outX = x * r;
|
T outX = x * r;
|
||||||
T outY = y * r;
|
T outY = y * r;
|
||||||
|
|
||||||
cout << "First way, outX, outY == " << outX << ", " << outY << endl;
|
cout << "First way, outX, outY == " << outX << ", " << outY << endl;
|
||||||
|
|
||||||
r = fabs((x - y) * (x + y) + EPS);
|
r = fabs((x - y) * (x + y) + EPS);
|
||||||
|
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
@ -1852,7 +1757,7 @@ void TestCross(T x, T y, T weight)
|
|||||||
|
|
||||||
double RandD(QTIsaac<ISAAC_SIZE, ISAAC_INT>& rand)
|
double RandD(QTIsaac<ISAAC_SIZE, ISAAC_INT>& rand)
|
||||||
{
|
{
|
||||||
return ((((rand.Rand()^(rand.Rand()<<15))&0xfffffff)*3.72529e-09)-0.5);
|
return ((((rand.Rand() ^ (rand.Rand() << 15)) & 0xfffffff) * 3.72529e-09) - 0.5);
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
//#define BEZ_POINT_LENGTH 4
|
//#define BEZ_POINT_LENGTH 4
|
||||||
@ -1938,7 +1843,6 @@ void TestThreadedKernel()
|
|||||||
wrapper2.AddProgram("prog1", k, "Kern", false))
|
wrapper2.AddProgram("prog1", k, "Kern", false))
|
||||||
{
|
{
|
||||||
cout << "Builds ok, now run..." << endl;
|
cout << "Builds ok, now run..." << endl;
|
||||||
|
|
||||||
std::thread th1([&]()
|
std::thread th1([&]()
|
||||||
{
|
{
|
||||||
if (wrapper1.RunKernel(0, 256, 16, 1, 16, 16, 1))
|
if (wrapper1.RunKernel(0, 256, 16, 1, 16, 16, 1))
|
||||||
@ -1946,7 +1850,6 @@ void TestThreadedKernel()
|
|||||||
cout << "Successful run inside thread 1..." << endl;
|
cout << "Successful run inside thread 1..." << endl;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
std::thread th2([&]()
|
std::thread th2([&]()
|
||||||
{
|
{
|
||||||
if (wrapper2.RunKernel(0, 256, 16, 1, 16, 16, 1))
|
if (wrapper2.RunKernel(0, 256, 16, 1, 16, 16, 1))
|
||||||
@ -1954,7 +1857,6 @@ void TestThreadedKernel()
|
|||||||
cout << "Successful run inside thread 2..." << endl;
|
cout << "Successful run inside thread 2..." << endl;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
th1.join();
|
th1.join();
|
||||||
th2.join();
|
th2.join();
|
||||||
cout << "Successful join of kernel thread..." << endl;
|
cout << "Successful join of kernel thread..." << endl;
|
||||||
@ -1988,14 +1890,12 @@ void DistribTester()
|
|||||||
for (i = 0; i < xformCount; i++)
|
for (i = 0; i < xformCount; i++)
|
||||||
{
|
{
|
||||||
T d = weights[i];
|
T d = weights[i];
|
||||||
|
|
||||||
totalDensity += d;
|
totalDensity += d;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Original returned false if all were 0, but it's allowed here
|
//Original returned false if all were 0, but it's allowed here
|
||||||
//which will just end up setting all elements to 0 which means
|
//which will just end up setting all elements to 0 which means
|
||||||
//only the first xform will get used.
|
//only the first xform will get used.
|
||||||
|
|
||||||
//Calculate how much of a fraction of a the total density each element represents.
|
//Calculate how much of a fraction of a the total density each element represents.
|
||||||
j = 0;
|
j = 0;
|
||||||
tempDensity = 0;
|
tempDensity = 0;
|
||||||
@ -2015,9 +1915,11 @@ void DistribTester()
|
|||||||
while (tempDensity < currentDensityLimit && j < CHOOSE_XFORM_GRAIN)
|
while (tempDensity < currentDensityLimit && j < CHOOSE_XFORM_GRAIN)
|
||||||
{
|
{
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
|
|
||||||
//Ensure distribution contains no out of bounds indices.
|
//Ensure distribution contains no out of bounds indices.
|
||||||
if (byte(i) >= xformCount)
|
if (byte(i) >= xformCount)
|
||||||
throw "Out of bounds xform index in selection distribution.";
|
throw "Out of bounds xform index in selection distribution.";
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
//printf("offset = %d, xform = %d, running sum = %f\n", j, i, tempDensity);
|
//printf("offset = %d, xform = %d, running sum = %f\n", j, i, tempDensity);
|
||||||
m_XformDistributions[(distrib * CHOOSE_XFORM_GRAIN) + j] = byte(i);
|
m_XformDistributions[(distrib * CHOOSE_XFORM_GRAIN) + j] = byte(i);
|
||||||
@ -2026,7 +1928,6 @@ void DistribTester()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//Flam3 did this, which gives the same result.
|
//Flam3 did this, which gives the same result.
|
||||||
//T t = xforms[0].m_Weight;
|
//T t = xforms[0].m_Weight;
|
||||||
//
|
//
|
||||||
@ -2060,8 +1961,7 @@ int _tmain(int argc, _TCHAR* argv[])
|
|||||||
Timing t(4);
|
Timing t(4);
|
||||||
QTIsaac<ISAAC_SIZE, ISAAC_INT> rand(1, 2, 3);
|
QTIsaac<ISAAC_SIZE, ISAAC_INT> rand(1, 2, 3);
|
||||||
mt19937 meow(1729);
|
mt19937 meow(1729);
|
||||||
|
/* MakeTestAllVarsRegPrePostComboFile("testallvarsout.flame");
|
||||||
/*MakeTestAllVarsRegPrePostComboFile("testallvarsout.flame");
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
|
||||||
@ -2112,10 +2012,8 @@ int _tmain(int argc, _TCHAR* argv[])
|
|||||||
//BezierWeights curveWeights[4];
|
//BezierWeights curveWeights[4];
|
||||||
//
|
//
|
||||||
//BezierSolve(bezT, src, w, solution);
|
//BezierSolve(bezT, src, w, solution);
|
||||||
|
|
||||||
//cout << pow(-1, 5.1) << endl;
|
//cout << pow(-1, 5.1) << endl;
|
||||||
|
/* for (i = 0; i < 2500000000; i++)
|
||||||
/*for (i = 0; i < 2500000000; i++)
|
|
||||||
{
|
{
|
||||||
double d = fabs(RandD(rand));
|
double d = fabs(RandD(rand));
|
||||||
|
|
||||||
@ -2132,21 +2030,18 @@ int _tmain(int argc, _TCHAR* argv[])
|
|||||||
//
|
//
|
||||||
//cout << "sizeof(RendererCL<float>): " << sizeof(RendererCL<float>) << endl;
|
//cout << "sizeof(RendererCL<float>): " << sizeof(RendererCL<float>) << endl;
|
||||||
//cout << "sizeof(RendererCL<double>): " << sizeof(RendererCL<double>) << endl;
|
//cout << "sizeof(RendererCL<double>): " << sizeof(RendererCL<double>) << endl;
|
||||||
|
/* unique_ptr<LinearVariation<float>> linV(new LinearVariation<float>());
|
||||||
/*unique_ptr<LinearVariation<float>> linV(new LinearVariation<float>());
|
|
||||||
unique_ptr<PreLinearVariation<float>> preLinV(new PreLinearVariation<float>());
|
unique_ptr<PreLinearVariation<float>> preLinV(new PreLinearVariation<float>());
|
||||||
unique_ptr<PostLinearVariation<float>> postLinV(new PostLinearVariation<float>());
|
unique_ptr<PostLinearVariation<float>> postLinV(new PostLinearVariation<float>());
|
||||||
|
|
||||||
cout << linV->BaseName() << endl;
|
cout << linV->BaseName() << endl;
|
||||||
cout << preLinV->BaseName() << endl;
|
cout << preLinV->BaseName() << endl;
|
||||||
cout << postLinV->BaseName() << endl;*/
|
cout << postLinV->BaseName() << endl;*/
|
||||||
|
|
||||||
//float num = 1;
|
//float num = 1;
|
||||||
//float denom = 4294967296.0f;
|
//float denom = 4294967296.0f;
|
||||||
//float frac = num / denom;
|
//float frac = num / denom;
|
||||||
//
|
//
|
||||||
//cout << "num, denom, frac = " << num << ", " << denom << ", " << frac << endl;
|
//cout << "num, denom, frac = " << num << ", " << denom << ", " << frac << endl;
|
||||||
|
|
||||||
//TestGpuVectorRead<double>();
|
//TestGpuVectorRead<double>();
|
||||||
//TestGpuVectorRead<float>();
|
//TestGpuVectorRead<float>();
|
||||||
//return 0;
|
//return 0;
|
||||||
@ -2173,96 +2068,73 @@ int _tmain(int argc, _TCHAR* argv[])
|
|||||||
//TestCross<double>(rand.Frand<double>(-5, 5), rand.Frand<double>(-5, 5), rand.Frand<double>(-5, 5));
|
//TestCross<double>(rand.Frand<double>(-5, 5), rand.Frand<double>(-5, 5), rand.Frand<double>(-5, 5));
|
||||||
//TestCross<double>(rand.Frand<double>(-5, 5), rand.Frand<double>(-5, 5), rand.Frand<double>(-5, 5));
|
//TestCross<double>(rand.Frand<double>(-5, 5), rand.Frand<double>(-5, 5), rand.Frand<double>(-5, 5));
|
||||||
//TestCross<double>(rand.Frand<double>(-5, 5), rand.Frand<double>(-5, 5), rand.Frand<double>(-5, 5));
|
//TestCross<double>(rand.Frand<double>(-5, 5), rand.Frand<double>(-5, 5), rand.Frand<double>(-5, 5));
|
||||||
|
|
||||||
//std::complex<double> cd, cd2;
|
//std::complex<double> cd, cd2;
|
||||||
|
|
||||||
//cd2 = sin(cd);
|
//cd2 = sin(cd);
|
||||||
|
|
||||||
t.Tic();
|
t.Tic();
|
||||||
TestCasting();
|
TestCasting();
|
||||||
t.Toc("TestCasting()");
|
t.Toc("TestCasting()");
|
||||||
|
|
||||||
t.Tic();
|
t.Tic();
|
||||||
VariationList<float> vlf;
|
VariationList<float> vlf;
|
||||||
t.Toc("Creating VariationList<float>");
|
t.Toc("Creating VariationList<float>");
|
||||||
|
|
||||||
cout << "There are " << vlf.Size() << " variations present." << endl;
|
cout << "There are " << vlf.Size() << " variations present." << endl;
|
||||||
|
|
||||||
#ifdef DO_DOUBLE
|
#ifdef DO_DOUBLE
|
||||||
t.Tic();
|
t.Tic();
|
||||||
VariationList<double> vld;
|
VariationList<double> vld;
|
||||||
t.Toc("Creating VariationList<double>");
|
t.Toc("Creating VariationList<double>");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
t.Tic();
|
t.Tic();
|
||||||
TestVarCounts();
|
TestVarCounts();
|
||||||
t.Toc("TestVarCounts()");
|
t.Toc("TestVarCounts()");
|
||||||
|
|
||||||
t.Tic();
|
t.Tic();
|
||||||
TestVarUnique<float>();
|
TestVarUnique<float>();
|
||||||
t.Toc("TestVarUnique<float>()");
|
t.Toc("TestVarUnique<float>()");
|
||||||
|
|
||||||
#ifdef DO_DOUBLE
|
#ifdef DO_DOUBLE
|
||||||
t.Tic();
|
t.Tic();
|
||||||
TestVarUnique<double>();
|
TestVarUnique<double>();
|
||||||
t.Toc("TestVarUnique<double>()");
|
t.Toc("TestVarUnique<double>()");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
t.Tic();
|
t.Tic();
|
||||||
TestVarCopy<float, float>();
|
TestVarCopy<float, float>();
|
||||||
t.Toc("TestVarCopy<float, float>()");
|
t.Toc("TestVarCopy<float, float>()");
|
||||||
|
|
||||||
#ifdef DO_DOUBLE
|
#ifdef DO_DOUBLE
|
||||||
t.Tic();
|
t.Tic();
|
||||||
TestVarCopy<double, double>();
|
TestVarCopy<double, double>();
|
||||||
t.Toc("TestVarCopy<double, double>()");
|
t.Toc("TestVarCopy<double, double>()");
|
||||||
|
|
||||||
t.Tic();
|
t.Tic();
|
||||||
TestVarCopy<float, double>();
|
TestVarCopy<float, double>();
|
||||||
t.Toc("TestVarCopy<float, double>()");
|
t.Toc("TestVarCopy<float, double>()");
|
||||||
|
|
||||||
t.Tic();
|
t.Tic();
|
||||||
TestVarCopy<double, float>();
|
TestVarCopy<double, float>();
|
||||||
t.Toc("TestVarCopy<double, float>()");
|
t.Toc("TestVarCopy<double, float>()");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
t.Tic();
|
t.Tic();
|
||||||
TestVarRegPrePost();
|
TestVarRegPrePost();
|
||||||
t.Toc("TestVarRegPrePost()");
|
t.Toc("TestVarRegPrePost()");
|
||||||
|
|
||||||
t.Tic();
|
t.Tic();
|
||||||
TestParVars();
|
TestParVars();
|
||||||
t.Toc("TestParVars()");
|
t.Toc("TestParVars()");
|
||||||
|
|
||||||
t.Tic();
|
t.Tic();
|
||||||
TestVarPrePostNames();
|
TestVarPrePostNames();
|
||||||
t.Toc("TestVarPrePostNames()");
|
t.Toc("TestVarPrePostNames()");
|
||||||
|
|
||||||
t.Tic();
|
t.Tic();
|
||||||
TestVarPrecalcUsedCL();
|
TestVarPrecalcUsedCL();
|
||||||
t.Toc("TestVarPrecalcUsedCL()");
|
t.Toc("TestVarPrecalcUsedCL()");
|
||||||
|
|
||||||
t.Tic();
|
t.Tic();
|
||||||
TestVarAssignTypes();
|
TestVarAssignTypes();
|
||||||
t.Toc("TestVarAssignTypes()");
|
t.Toc("TestVarAssignTypes()");
|
||||||
|
|
||||||
t.Tic();
|
t.Tic();
|
||||||
TestVarAssignVals();
|
TestVarAssignVals();
|
||||||
t.Toc("TestVarAssignVals()");
|
t.Toc("TestVarAssignVals()");
|
||||||
|
|
||||||
t.Tic();
|
t.Tic();
|
||||||
TestZepsFloor();
|
TestZepsFloor();
|
||||||
t.Toc("TestZepsFloor()");
|
t.Toc("TestZepsFloor()");
|
||||||
|
|
||||||
t.Tic();
|
t.Tic();
|
||||||
TestConstants();
|
TestConstants();
|
||||||
t.Toc("TestConstants()");
|
t.Toc("TestConstants()");
|
||||||
|
|
||||||
t.Tic();
|
t.Tic();
|
||||||
TestGlobalFuncs();
|
TestGlobalFuncs();
|
||||||
t.Toc("TestGlobalFuncs()");
|
t.Toc("TestGlobalFuncs()");
|
||||||
|
/* t.Tic();
|
||||||
/*t.Tic();
|
|
||||||
TestXformsInOutPoints();
|
TestXformsInOutPoints();
|
||||||
t.Toc("TestXformsInOutPoints()");
|
t.Toc("TestXformsInOutPoints()");
|
||||||
|
|
||||||
@ -2270,15 +2142,12 @@ int _tmain(int argc, _TCHAR* argv[])
|
|||||||
TestVarTime<float>();
|
TestVarTime<float>();
|
||||||
t.Toc("TestVarTime()");
|
t.Toc("TestVarTime()");
|
||||||
*/
|
*/
|
||||||
|
|
||||||
t.Tic();
|
t.Tic();
|
||||||
TestOperations<float>();
|
TestOperations<float>();
|
||||||
t.Toc("TestOperations()");
|
t.Toc("TestOperations()");
|
||||||
|
|
||||||
//t.Tic();
|
//t.Tic();
|
||||||
//TestVarsSimilar<float>();
|
//TestVarsSimilar<float>();
|
||||||
//t.Toc("TestVarsSimilar()");
|
//t.Toc("TestVarsSimilar()");
|
||||||
|
|
||||||
#ifdef TEST_CL
|
#ifdef TEST_CL
|
||||||
//t.Tic();
|
//t.Tic();
|
||||||
//TestCpuGpuResults<float>();
|
//TestCpuGpuResults<float>();
|
||||||
@ -2296,6 +2165,7 @@ int _tmain(int argc, _TCHAR* argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef DO_DOUBLE
|
#ifdef DO_DOUBLE
|
||||||
|
|
||||||
//t.Tic();
|
//t.Tic();
|
||||||
//TestCpuGpuResults<double>();
|
//TestCpuGpuResults<double>();
|
||||||
//t.Toc("TestCpuGpuResults<double>()");
|
//t.Toc("TestCpuGpuResults<double>()");
|
||||||
@ -2312,9 +2182,9 @@ int _tmain(int argc, _TCHAR* argv[])
|
|||||||
t.Toc("TestAllVarsCLBuild<double>()");
|
t.Toc("TestAllVarsCLBuild<double>()");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
//PrintAllVars();
|
//PrintAllVars();
|
||||||
//_CrtDumpMemoryLeaks();
|
//_CrtDumpMemoryLeaks();
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -11,17 +11,15 @@
|
|||||||
/// <param name="p">The parent widget</param>
|
/// <param name="p">The parent widget</param>
|
||||||
/// <param name="f">The window flags. Default: 0.</param>
|
/// <param name="f">The window flags. Default: 0.</param>
|
||||||
FractoriumFinalRenderDialog::FractoriumFinalRenderDialog(FractoriumSettings* settings, QWidget* p, Qt::WindowFlags f)
|
FractoriumFinalRenderDialog::FractoriumFinalRenderDialog(FractoriumSettings* settings, QWidget* p, Qt::WindowFlags f)
|
||||||
: QDialog(p, f),
|
: QDialog(p, f)
|
||||||
m_Info(OpenCLInfo::Instance())
|
|
||||||
{
|
{
|
||||||
ui.setupUi(this);
|
ui.setupUi(this);
|
||||||
|
|
||||||
int row = 0, spinHeight = 20;
|
int row = 0, spinHeight = 20;
|
||||||
uint i;
|
uint i;
|
||||||
double dmax = numeric_limits<double>::max();
|
double dmax = numeric_limits<double>::max();
|
||||||
QTableWidget* table = ui.FinalRenderParamsTable;
|
QTableWidget* table = ui.FinalRenderParamsTable;
|
||||||
QTableWidgetItem* item = nullptr;
|
QTableWidgetItem* item = nullptr;
|
||||||
|
m_Info = OpenCLInfo::Instance();
|
||||||
m_Fractorium = qobject_cast<Fractorium*>(p);
|
m_Fractorium = qobject_cast<Fractorium*>(p);
|
||||||
m_Settings = settings;
|
m_Settings = settings;
|
||||||
ui.FinalRenderThreadCountSpin->setRange(1, Timing::ProcessorCount());
|
ui.FinalRenderThreadCountSpin->setRange(1, Timing::ProcessorCount());
|
||||||
@ -39,7 +37,6 @@ FractoriumFinalRenderDialog::FractoriumFinalRenderDialog(FractoriumSettings* set
|
|||||||
connect(ui.FinalRenderScaleWidthRadioButton, SIGNAL(toggled(bool)), this, SLOT(OnScaleRadioButtonChanged(bool)), Qt::QueuedConnection);
|
connect(ui.FinalRenderScaleWidthRadioButton, SIGNAL(toggled(bool)), this, SLOT(OnScaleRadioButtonChanged(bool)), Qt::QueuedConnection);
|
||||||
connect(ui.FinalRenderScaleHeightRadioButton, SIGNAL(toggled(bool)), this, SLOT(OnScaleRadioButtonChanged(bool)), Qt::QueuedConnection);
|
connect(ui.FinalRenderScaleHeightRadioButton, SIGNAL(toggled(bool)), this, SLOT(OnScaleRadioButtonChanged(bool)), Qt::QueuedConnection);
|
||||||
connect(ui.FinalRenderDeviceTable, SIGNAL(cellChanged(int, int)), this, SLOT(OnDeviceTableCellChanged(int, int)), Qt::QueuedConnection);
|
connect(ui.FinalRenderDeviceTable, SIGNAL(cellChanged(int, int)), this, SLOT(OnDeviceTableCellChanged(int, int)), Qt::QueuedConnection);
|
||||||
|
|
||||||
SetupSpinner<DoubleSpinBox, double>(ui.FinalRenderSizeTable, this, row, 1, m_WidthScaleSpin, spinHeight, 0.001, 99.99, 0.1, SIGNAL(valueChanged(double)), SLOT(OnWidthScaleChanged(double)), true, 1.0, 1.0, 1.0);
|
SetupSpinner<DoubleSpinBox, double>(ui.FinalRenderSizeTable, this, row, 1, m_WidthScaleSpin, spinHeight, 0.001, 99.99, 0.1, SIGNAL(valueChanged(double)), SLOT(OnWidthScaleChanged(double)), true, 1.0, 1.0, 1.0);
|
||||||
SetupSpinner<DoubleSpinBox, double>(ui.FinalRenderSizeTable, this, row, 1, m_HeightScaleSpin, spinHeight, 0.001, 99.99, 0.1, SIGNAL(valueChanged(double)), SLOT(OnHeightScaleChanged(double)), true, 1.0, 1.0, 1.0);
|
SetupSpinner<DoubleSpinBox, double>(ui.FinalRenderSizeTable, this, row, 1, m_HeightScaleSpin, spinHeight, 0.001, 99.99, 0.1, SIGNAL(valueChanged(double)), SLOT(OnHeightScaleChanged(double)), true, 1.0, 1.0, 1.0);
|
||||||
m_WidthScaleSpin->setDecimals(3);
|
m_WidthScaleSpin->setDecimals(3);
|
||||||
@ -48,46 +45,37 @@ FractoriumFinalRenderDialog::FractoriumFinalRenderDialog(FractoriumSettings* set
|
|||||||
m_HeightScaleSpin->setSuffix(" ( )");
|
m_HeightScaleSpin->setSuffix(" ( )");
|
||||||
m_WidthScaleSpin->SmallStep(0.001);
|
m_WidthScaleSpin->SmallStep(0.001);
|
||||||
m_HeightScaleSpin->SmallStep(0.001);
|
m_HeightScaleSpin->SmallStep(0.001);
|
||||||
|
|
||||||
row = 0;
|
row = 0;
|
||||||
SetupSpinner<DoubleSpinBox, double>(table, this, row, 1, m_QualitySpin, spinHeight, 1, dmax, 50, SIGNAL(valueChanged(double)), SLOT(OnQualityChanged(double)), true, 1000, 1000, 1000);
|
SetupSpinner<DoubleSpinBox, double>(table, this, row, 1, m_QualitySpin, spinHeight, 1, dmax, 50, SIGNAL(valueChanged(double)), SLOT(OnQualityChanged(double)), true, 1000, 1000, 1000);
|
||||||
SetupSpinner<SpinBox, int> (table, this, row, 1, m_TemporalSamplesSpin, spinHeight, 1, 5000, 50, SIGNAL(valueChanged(int)), SLOT(OnTemporalSamplesChanged(int)), true, 1000, 1000, 1000);
|
SetupSpinner<SpinBox, int> (table, this, row, 1, m_TemporalSamplesSpin, spinHeight, 1, 5000, 50, SIGNAL(valueChanged(int)), SLOT(OnTemporalSamplesChanged(int)), true, 1000, 1000, 1000);
|
||||||
SetupSpinner<SpinBox, int> (table, this, row, 1, m_SupersampleSpin, spinHeight, 1, 4, 1, SIGNAL(valueChanged(int)), SLOT(OnSupersampleChanged(int)), true, 2, 1, 1);
|
SetupSpinner<SpinBox, int> (table, this, row, 1, m_SupersampleSpin, spinHeight, 1, 4, 1, SIGNAL(valueChanged(int)), SLOT(OnSupersampleChanged(int)), true, 2, 1, 1);
|
||||||
SetupSpinner<SpinBox, int> (table, this, row, 1, m_StripsSpin, spinHeight, 1, 64, 1, SIGNAL(valueChanged(int)), SLOT(OnStripsChanged(int)), true, 1, 1, 1);
|
SetupSpinner<SpinBox, int> (table, this, row, 1, m_StripsSpin, spinHeight, 1, 64, 1, SIGNAL(valueChanged(int)), SLOT(OnStripsChanged(int)), true, 1, 1, 1);
|
||||||
|
|
||||||
m_MemoryCellIndex = row++;//Memory usage.
|
m_MemoryCellIndex = row++;//Memory usage.
|
||||||
m_ItersCellIndex = row++;//Iters.
|
m_ItersCellIndex = row++;//Iters.
|
||||||
m_PathCellIndex = row;
|
m_PathCellIndex = row;
|
||||||
|
|
||||||
QStringList comboList;
|
QStringList comboList;
|
||||||
|
|
||||||
comboList.append("jpg");
|
comboList.append("jpg");
|
||||||
comboList.append("png");
|
comboList.append("png");
|
||||||
|
|
||||||
m_Tbcw = new TwoButtonComboWidget("...", "Open", comboList, 22, 40, 22, table);
|
m_Tbcw = new TwoButtonComboWidget("...", "Open", comboList, 22, 40, 22, table);
|
||||||
table->setCellWidget(row, 1, m_Tbcw);
|
table->setCellWidget(row, 1, m_Tbcw);
|
||||||
table->item(row++, 1)->setTextAlignment(Qt::AlignRight | Qt::AlignVCenter);
|
table->item(row++, 1)->setTextAlignment(Qt::AlignRight | Qt::AlignVCenter);
|
||||||
connect(m_Tbcw->m_Button1, SIGNAL(clicked(bool)), this, SLOT(OnFileButtonClicked(bool)), Qt::QueuedConnection);
|
connect(m_Tbcw->m_Button1, SIGNAL(clicked(bool)), this, SLOT(OnFileButtonClicked(bool)), Qt::QueuedConnection);
|
||||||
connect(m_Tbcw->m_Button2, SIGNAL(clicked(bool)), this, SLOT(OnShowFolderButtonClicked(bool)), Qt::QueuedConnection);
|
connect(m_Tbcw->m_Button2, SIGNAL(clicked(bool)), this, SLOT(OnShowFolderButtonClicked(bool)), Qt::QueuedConnection);
|
||||||
connect(m_Tbcw->m_Combo, SIGNAL(currentIndexChanged(int)), this, SLOT(OnExtIndexChanged(int)), Qt::QueuedConnection);
|
connect(m_Tbcw->m_Combo, SIGNAL(currentIndexChanged(int)), this, SLOT(OnExtIndexChanged(int)), Qt::QueuedConnection);
|
||||||
|
|
||||||
m_PrefixEdit = new QLineEdit(table);
|
m_PrefixEdit = new QLineEdit(table);
|
||||||
table->setCellWidget(row++, 1, m_PrefixEdit);
|
table->setCellWidget(row++, 1, m_PrefixEdit);
|
||||||
|
|
||||||
m_SuffixEdit = new QLineEdit(table);
|
m_SuffixEdit = new QLineEdit(table);
|
||||||
table->setCellWidget(row++, 1, m_SuffixEdit);
|
table->setCellWidget(row++, 1, m_SuffixEdit);
|
||||||
connect(m_PrefixEdit, SIGNAL(textChanged(const QString&)), this, SLOT(OnPrefixChanged(const QString&)), Qt::QueuedConnection);
|
connect(m_PrefixEdit, SIGNAL(textChanged(const QString&)), this, SLOT(OnPrefixChanged(const QString&)), Qt::QueuedConnection);
|
||||||
connect(m_SuffixEdit, SIGNAL(textChanged(const QString&)), this, SLOT(OnSuffixChanged(const QString&)), Qt::QueuedConnection);
|
connect(m_SuffixEdit, SIGNAL(textChanged(const QString&)), this, SLOT(OnSuffixChanged(const QString&)), Qt::QueuedConnection);
|
||||||
|
|
||||||
ui.FinalRenderStartButton->disconnect(SIGNAL(clicked(bool)));
|
ui.FinalRenderStartButton->disconnect(SIGNAL(clicked(bool)));
|
||||||
connect(ui.FinalRenderStartButton, SIGNAL(clicked(bool)), this, SLOT(OnRenderClicked(bool)), Qt::QueuedConnection);
|
connect(ui.FinalRenderStartButton, SIGNAL(clicked(bool)), this, SLOT(OnRenderClicked(bool)), Qt::QueuedConnection);
|
||||||
connect(ui.FinalRenderStopButton, SIGNAL(clicked(bool)), this, SLOT(OnCancelRenderClicked(bool)), Qt::QueuedConnection);
|
connect(ui.FinalRenderStopButton, SIGNAL(clicked(bool)), this, SLOT(OnCancelRenderClicked(bool)), Qt::QueuedConnection);
|
||||||
|
|
||||||
table = ui.FinalRenderDeviceTable;
|
table = ui.FinalRenderDeviceTable;
|
||||||
table->clearContents();
|
table->clearContents();
|
||||||
table->setRowCount(0);
|
table->setRowCount(0);
|
||||||
|
|
||||||
if (m_Info.Ok() && !m_Info.Devices().empty())
|
if (m_Info->Ok() && !m_Info->Devices().empty())
|
||||||
{
|
{
|
||||||
SetupDeviceTable(table, m_Settings->FinalDevices());
|
SetupDeviceTable(table, m_Settings->FinalDevices());
|
||||||
|
|
||||||
@ -124,13 +112,12 @@ FractoriumFinalRenderDialog::FractoriumFinalRenderDialog(FractoriumSettings* set
|
|||||||
ui.FinalRenderThreadPriorityComboBox->setCurrentIndex(tpc);
|
ui.FinalRenderThreadPriorityComboBox->setCurrentIndex(tpc);
|
||||||
else
|
else
|
||||||
ui.FinalRenderThreadPriorityComboBox->setCurrentIndex(Clamp<int>(m_Settings->FinalThreadPriority() / 25, 0, tpc));
|
ui.FinalRenderThreadPriorityComboBox->setCurrentIndex(Clamp<int>(m_Settings->FinalThreadPriority() / 25, 0, tpc));
|
||||||
#endif
|
|
||||||
|
|
||||||
|
#endif
|
||||||
m_QualitySpin->setValue(m_Settings->FinalQuality());
|
m_QualitySpin->setValue(m_Settings->FinalQuality());
|
||||||
m_TemporalSamplesSpin->setValue(m_Settings->FinalTemporalSamples());
|
m_TemporalSamplesSpin->setValue(m_Settings->FinalTemporalSamples());
|
||||||
m_SupersampleSpin->setValue(m_Settings->FinalSupersample());
|
m_SupersampleSpin->setValue(m_Settings->FinalSupersample());
|
||||||
m_StripsSpin->setValue(m_Settings->FinalStrips());
|
m_StripsSpin->setValue(m_Settings->FinalStrips());
|
||||||
|
|
||||||
Scale(eScaleType(m_Settings->FinalScale()));
|
Scale(eScaleType(m_Settings->FinalScale()));
|
||||||
|
|
||||||
if (m_Settings->FinalExt() == "jpg")
|
if (m_Settings->FinalExt() == "jpg")
|
||||||
@ -142,10 +129,8 @@ FractoriumFinalRenderDialog::FractoriumFinalRenderDialog(FractoriumSettings* set
|
|||||||
OnOpenCLCheckBoxStateChanged(ui.FinalRenderOpenCLCheckBox->isChecked());
|
OnOpenCLCheckBoxStateChanged(ui.FinalRenderOpenCLCheckBox->isChecked());
|
||||||
OnDoAllCheckBoxStateChanged(ui.FinalRenderDoAllCheckBox->isChecked());
|
OnDoAllCheckBoxStateChanged(ui.FinalRenderDoAllCheckBox->isChecked());
|
||||||
OnDoSequenceCheckBoxStateChanged(ui.FinalRenderDoSequenceCheckBox->isChecked());
|
OnDoSequenceCheckBoxStateChanged(ui.FinalRenderDoSequenceCheckBox->isChecked());
|
||||||
|
|
||||||
QSize s = size();
|
QSize s = size();
|
||||||
int desktopHeight = qApp->desktop()->availableGeometry().height();
|
int desktopHeight = qApp->desktop()->availableGeometry().height();
|
||||||
|
|
||||||
s.setHeight(std::min(s.height(), int(double(desktopHeight * 0.90))));
|
s.setHeight(std::min(s.height(), int(double(desktopHeight * 0.90))));
|
||||||
setGeometry(QStyle::alignedRect(Qt::LeftToRight, Qt::AlignCenter, s, qApp->desktop()->availableGeometry()));
|
setGeometry(QStyle::alignedRect(Qt::LeftToRight, Qt::AlignCenter, s, qApp->desktop()->availableGeometry()));
|
||||||
ui.FinalRenderThreadHorizontalLayout->setAlignment(Qt::AlignLeft);
|
ui.FinalRenderThreadHorizontalLayout->setAlignment(Qt::AlignLeft);
|
||||||
@ -153,7 +138,6 @@ FractoriumFinalRenderDialog::FractoriumFinalRenderDialog(FractoriumSettings* set
|
|||||||
ui.FinalRenderThreadHorizontalLayout->setAlignment(ui.FinalRenderThreadPriorityLabel, Qt::AlignLeft);
|
ui.FinalRenderThreadHorizontalLayout->setAlignment(ui.FinalRenderThreadPriorityLabel, Qt::AlignLeft);
|
||||||
ui.FinalRenderThreadHorizontalLayout->setAlignment(ui.FinalRenderThreadPriorityComboBox, Qt::AlignLeft);
|
ui.FinalRenderThreadHorizontalLayout->setAlignment(ui.FinalRenderThreadPriorityComboBox, Qt::AlignLeft);
|
||||||
QWidget* w = SetTabOrder(this, ui.FinalRenderEarlyClipCheckBox, ui.FinalRenderYAxisUpCheckBox);
|
QWidget* w = SetTabOrder(this, ui.FinalRenderEarlyClipCheckBox, ui.FinalRenderYAxisUpCheckBox);
|
||||||
|
|
||||||
//Update these with new controls.
|
//Update these with new controls.
|
||||||
w = SetTabOrder(this, w, ui.FinalRenderTransparencyCheckBox);
|
w = SetTabOrder(this, w, ui.FinalRenderTransparencyCheckBox);
|
||||||
w = SetTabOrder(this, w, ui.FinalRenderOpenCLCheckBox);
|
w = SetTabOrder(this, w, ui.FinalRenderOpenCLCheckBox);
|
||||||
@ -238,7 +222,6 @@ QList<QVariant> FractoriumFinalRenderDialog::Devices() { return DeviceTableToSet
|
|||||||
FinalRenderGuiState FractoriumFinalRenderDialog::State()
|
FinalRenderGuiState FractoriumFinalRenderDialog::State()
|
||||||
{
|
{
|
||||||
FinalRenderGuiState state;
|
FinalRenderGuiState state;
|
||||||
|
|
||||||
state.m_EarlyClip = EarlyClip();
|
state.m_EarlyClip = EarlyClip();
|
||||||
state.m_YAxisUp = YAxisUp();
|
state.m_YAxisUp = YAxisUp();
|
||||||
state.m_Transparency = Transparency();
|
state.m_Transparency = Transparency();
|
||||||
@ -262,7 +245,6 @@ FinalRenderGuiState FractoriumFinalRenderDialog::State()
|
|||||||
state.m_TemporalSamples = TemporalSamples();
|
state.m_TemporalSamples = TemporalSamples();
|
||||||
state.m_Supersample = Supersample();
|
state.m_Supersample = Supersample();
|
||||||
state.m_Strips = Strips();
|
state.m_Strips = Strips();
|
||||||
|
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -346,7 +328,6 @@ void FractoriumFinalRenderDialog::OnTransparencyCheckBoxStateChanged(int state)
|
|||||||
void FractoriumFinalRenderDialog::OnOpenCLCheckBoxStateChanged(int state)
|
void FractoriumFinalRenderDialog::OnOpenCLCheckBoxStateChanged(int state)
|
||||||
{
|
{
|
||||||
bool checked = state == Qt::Checked;
|
bool checked = state == Qt::Checked;
|
||||||
|
|
||||||
ui.FinalRenderDeviceTable->setEnabled(checked);
|
ui.FinalRenderDeviceTable->setEnabled(checked);
|
||||||
ui.FinalRenderThreadCountSpin->setEnabled(!checked);
|
ui.FinalRenderThreadCountSpin->setEnabled(!checked);
|
||||||
ui.FinalRenderThreadPriorityLabel->setEnabled(!checked);
|
ui.FinalRenderThreadPriorityLabel->setEnabled(!checked);
|
||||||
@ -387,7 +368,6 @@ void FractoriumFinalRenderDialog::OnDoAllCheckBoxStateChanged(int state)
|
|||||||
void FractoriumFinalRenderDialog::OnDoSequenceCheckBoxStateChanged(int state)
|
void FractoriumFinalRenderDialog::OnDoSequenceCheckBoxStateChanged(int state)
|
||||||
{
|
{
|
||||||
bool checked = ui.FinalRenderDoSequenceCheckBox->isChecked();
|
bool checked = ui.FinalRenderDoSequenceCheckBox->isChecked();
|
||||||
|
|
||||||
m_TemporalSamplesSpin->setEnabled(checked);
|
m_TemporalSamplesSpin->setEnabled(checked);
|
||||||
|
|
||||||
if (checked)
|
if (checked)
|
||||||
@ -673,7 +653,6 @@ void FractoriumFinalRenderDialog::showEvent(QShowEvent* e)
|
|||||||
m_Controller->m_ImageCount = 0;
|
m_Controller->m_ImageCount = 0;
|
||||||
SetMemory();
|
SetMemory();
|
||||||
m_Controller->ResetProgress();
|
m_Controller->ResetProgress();
|
||||||
|
|
||||||
QString s = m_Settings->SaveFolder();
|
QString s = m_Settings->SaveFolder();
|
||||||
|
|
||||||
if (Exists(s))
|
if (Exists(s))
|
||||||
@ -708,7 +687,6 @@ bool FractoriumFinalRenderDialog::CreateControllerFromGUI(bool createRenderer)
|
|||||||
{
|
{
|
||||||
bool ok = true;
|
bool ok = true;
|
||||||
int index = Current() - 1;
|
int index = Current() - 1;
|
||||||
|
|
||||||
#ifdef DO_DOUBLE
|
#ifdef DO_DOUBLE
|
||||||
size_t elementSize = Double() ? sizeof(double) : sizeof(float);
|
size_t elementSize = Double() ? sizeof(double) : sizeof(float);
|
||||||
#else
|
#else
|
||||||
@ -740,6 +718,7 @@ bool FractoriumFinalRenderDialog::CreateControllerFromGUI(bool createRenderer)
|
|||||||
|
|
||||||
//Create a float or double controller based on the GUI.
|
//Create a float or double controller based on the GUI.
|
||||||
#ifdef DO_DOUBLE
|
#ifdef DO_DOUBLE
|
||||||
|
|
||||||
if (Double())
|
if (Double())
|
||||||
m_Controller = unique_ptr<FinalRenderEmberControllerBase>(new FinalRenderEmberController<double>(this));
|
m_Controller = unique_ptr<FinalRenderEmberControllerBase>(new FinalRenderEmberController<double>(this));
|
||||||
else
|
else
|
||||||
@ -778,7 +757,6 @@ bool FractoriumFinalRenderDialog::SetMemory()
|
|||||||
bool error = false;
|
bool error = false;
|
||||||
tuple<size_t, size_t, size_t> p = m_Controller->SyncAndComputeMemory();
|
tuple<size_t, size_t, size_t> p = m_Controller->SyncAndComputeMemory();
|
||||||
QString s;
|
QString s;
|
||||||
|
|
||||||
ui.FinalRenderParamsTable->item(m_MemoryCellIndex, 1)->setText(ToString<qulonglong>(get<1>(p)));
|
ui.FinalRenderParamsTable->item(m_MemoryCellIndex, 1)->setText(ToString<qulonglong>(get<1>(p)));
|
||||||
ui.FinalRenderParamsTable->item(m_ItersCellIndex, 1)->setText(ToString<qulonglong>(get<2>(p)));
|
ui.FinalRenderParamsTable->item(m_ItersCellIndex, 1)->setText(ToString<qulonglong>(get<2>(p)));
|
||||||
|
|
||||||
|
@ -128,7 +128,7 @@ private:
|
|||||||
QLineEdit* m_SuffixEdit;
|
QLineEdit* m_SuffixEdit;
|
||||||
FractoriumSettings* m_Settings;
|
FractoriumSettings* m_Settings;
|
||||||
Fractorium* m_Fractorium;
|
Fractorium* m_Fractorium;
|
||||||
OpenCLInfo& m_Info;
|
shared_ptr<OpenCLInfo> m_Info;
|
||||||
vector<OpenCLWrapper> m_Wrappers;
|
vector<OpenCLWrapper> m_Wrappers;
|
||||||
unique_ptr<FinalRenderEmberControllerBase> m_Controller;
|
unique_ptr<FinalRenderEmberControllerBase> m_Controller;
|
||||||
Ui::FinalRenderDialog ui;
|
Ui::FinalRenderDialog ui;
|
||||||
|
@ -32,7 +32,6 @@ void FinalRenderEmberController<T>::CancelRender()
|
|||||||
if (m_Result.isRunning())
|
if (m_Result.isRunning())
|
||||||
{
|
{
|
||||||
tbb::task_group g;
|
tbb::task_group g;
|
||||||
|
|
||||||
g.run([&]
|
g.run([&]
|
||||||
{
|
{
|
||||||
m_Run = false;
|
m_Run = false;
|
||||||
@ -65,7 +64,6 @@ void FinalRenderEmberController<T>::CancelRender()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
g.wait();
|
g.wait();
|
||||||
|
|
||||||
while (m_Result.isRunning())
|
while (m_Result.isRunning())
|
||||||
@ -82,9 +80,8 @@ void FinalRenderEmberController<T>::CancelRender()
|
|||||||
/// <returns>True if a valid renderer is created or if no action is taken, else false.</returns>
|
/// <returns>True if a valid renderer is created or if no action is taken, else false.</returns>
|
||||||
bool FinalRenderEmberControllerBase::CreateRendererFromGUI()
|
bool FinalRenderEmberControllerBase::CreateRendererFromGUI()
|
||||||
{
|
{
|
||||||
bool useOpenCL = m_Info.Ok() && m_FinalRenderDialog->OpenCL();
|
bool useOpenCL = m_Info->Ok() && m_FinalRenderDialog->OpenCL();
|
||||||
auto v = Devices(m_FinalRenderDialog->Devices());
|
auto v = Devices(m_FinalRenderDialog->Devices());
|
||||||
|
|
||||||
return CreateRenderer((useOpenCL && !v.empty()) ? OPENCL_RENDERER : CPU_RENDERER,
|
return CreateRenderer((useOpenCL && !v.empty()) ? OPENCL_RENDERER : CPU_RENDERER,
|
||||||
v,
|
v,
|
||||||
false);//Not shared.
|
false);//Not shared.
|
||||||
@ -111,13 +108,11 @@ FinalRenderEmberController<T>::FinalRenderEmberController(FractoriumFinalRenderD
|
|||||||
m_FinalPreviewRenderer = unique_ptr<EmberNs::Renderer<T, float>>(new EmberNs::Renderer<T, float>());
|
m_FinalPreviewRenderer = unique_ptr<EmberNs::Renderer<T, float>>(new EmberNs::Renderer<T, float>());
|
||||||
m_FinalPreviewRenderer->Callback(nullptr);
|
m_FinalPreviewRenderer->Callback(nullptr);
|
||||||
m_FinalPreviewRenderer->NumChannels(4);
|
m_FinalPreviewRenderer->NumChannels(4);
|
||||||
|
|
||||||
m_FinalPreviewRenderFunc = [&]()
|
m_FinalPreviewRenderFunc = [&]()
|
||||||
{
|
{
|
||||||
m_PreviewCs.Enter();//Thread prep.
|
m_PreviewCs.Enter();//Thread prep.
|
||||||
m_PreviewRun = true;
|
m_PreviewRun = true;
|
||||||
m_FinalPreviewRenderer->Abort();
|
m_FinalPreviewRenderer->Abort();
|
||||||
|
|
||||||
T scalePercentage;
|
T scalePercentage;
|
||||||
size_t maxDim = 100;
|
size_t maxDim = 100;
|
||||||
QLabel* widget = m_FinalRenderDialog->ui.FinalRenderPreviewLabel;
|
QLabel* widget = m_FinalRenderDialog->ui.FinalRenderPreviewLabel;
|
||||||
@ -134,16 +129,13 @@ FinalRenderEmberController<T>::FinalRenderEmberController(FractoriumFinalRenderD
|
|||||||
m_PreviewEmber.m_FinalRasW = std::max<size_t>(1, std::min<size_t>(maxDim, size_t(scalePercentage * m_Ember->m_FinalRasW)));//Ensure neither is zero.
|
m_PreviewEmber.m_FinalRasW = std::max<size_t>(1, std::min<size_t>(maxDim, size_t(scalePercentage * m_Ember->m_FinalRasW)));//Ensure neither is zero.
|
||||||
m_PreviewEmber.m_FinalRasH = std::max<size_t>(1, std::min<size_t>(maxDim, size_t(scalePercentage * m_Ember->m_FinalRasH)));
|
m_PreviewEmber.m_FinalRasH = std::max<size_t>(1, std::min<size_t>(maxDim, size_t(scalePercentage * m_Ember->m_FinalRasH)));
|
||||||
m_PreviewEmber.m_PixelsPerUnit = scalePercentage * m_Ember->m_PixelsPerUnit;
|
m_PreviewEmber.m_PixelsPerUnit = scalePercentage * m_Ember->m_PixelsPerUnit;
|
||||||
|
|
||||||
m_FinalPreviewRenderer->EarlyClip(m_FinalRenderDialog->EarlyClip());
|
m_FinalPreviewRenderer->EarlyClip(m_FinalRenderDialog->EarlyClip());
|
||||||
m_FinalPreviewRenderer->YAxisUp(m_FinalRenderDialog->YAxisUp());
|
m_FinalPreviewRenderer->YAxisUp(m_FinalRenderDialog->YAxisUp());
|
||||||
m_FinalPreviewRenderer->Transparency(m_FinalRenderDialog->Transparency());
|
m_FinalPreviewRenderer->Transparency(m_FinalRenderDialog->Transparency());
|
||||||
m_FinalPreviewRenderer->SetEmber(m_PreviewEmber);
|
m_FinalPreviewRenderer->SetEmber(m_PreviewEmber);
|
||||||
m_FinalPreviewRenderer->PrepFinalAccumVector(m_PreviewFinalImage);//Must manually call this first because it could be erroneously made smaller due to strips if called inside Renderer::Run().
|
m_FinalPreviewRenderer->PrepFinalAccumVector(m_PreviewFinalImage);//Must manually call this first because it could be erroneously made smaller due to strips if called inside Renderer::Run().
|
||||||
|
|
||||||
auto strips = VerifyStrips(m_PreviewEmber.m_FinalRasH, m_FinalRenderDialog->Strips(),
|
auto strips = VerifyStrips(m_PreviewEmber.m_FinalRasH, m_FinalRenderDialog->Strips(),
|
||||||
[&](const string& s) { }, [&](const string& s) { }, [&](const string& s) { });
|
[&](const string & s) { }, [&](const string & s) { }, [&](const string & s) { });
|
||||||
|
|
||||||
StripsRender<T>(m_FinalPreviewRenderer.get(), m_PreviewEmber, m_PreviewFinalImage, 0, strips, m_FinalRenderDialog->YAxisUp(),
|
StripsRender<T>(m_FinalPreviewRenderer.get(), m_PreviewEmber, m_PreviewFinalImage, 0, strips, m_FinalRenderDialog->YAxisUp(),
|
||||||
[&](size_t strip) { },//Pre strip.
|
[&](size_t strip) { },//Pre strip.
|
||||||
[&](size_t strip) { },//Post strip.
|
[&](size_t strip) { },//Post strip.
|
||||||
@ -155,11 +147,9 @@ FinalRenderEmberController<T>::FinalRenderEmberController(FractoriumFinalRenderD
|
|||||||
QPixmap pixmap = QPixmap::fromImage(image);
|
QPixmap pixmap = QPixmap::fromImage(image);
|
||||||
QMetaObject::invokeMethod(widget, "setPixmap", Qt::QueuedConnection, Q_ARG(QPixmap, pixmap));
|
QMetaObject::invokeMethod(widget, "setPixmap", Qt::QueuedConnection, Q_ARG(QPixmap, pixmap));
|
||||||
});
|
});
|
||||||
|
|
||||||
m_PreviewRun = false;
|
m_PreviewRun = false;
|
||||||
m_PreviewCs.Leave();
|
m_PreviewCs.Leave();
|
||||||
};
|
};
|
||||||
|
|
||||||
//The main rendering function which will be called in a Qt thread.
|
//The main rendering function which will be called in a Qt thread.
|
||||||
//A backup Xml is made before the rendering process starts just in case it crashes before finishing.
|
//A backup Xml is made before the rendering process starts just in case it crashes before finishing.
|
||||||
//If it finishes successfully, delete the backup file.
|
//If it finishes successfully, delete the backup file.
|
||||||
@ -168,7 +158,6 @@ FinalRenderEmberController<T>::FinalRenderEmberController(FractoriumFinalRenderD
|
|||||||
m_Run = true;
|
m_Run = true;
|
||||||
m_TotalTimer.Tic();//Begin timing for progress of all operations.
|
m_TotalTimer.Tic();//Begin timing for progress of all operations.
|
||||||
m_GuiState = m_FinalRenderDialog->State();//Cache render settings from the GUI before running.
|
m_GuiState = m_FinalRenderDialog->State();//Cache render settings from the GUI before running.
|
||||||
|
|
||||||
size_t i;
|
size_t i;
|
||||||
bool doAll = m_GuiState.m_DoAll && m_EmberFile.Size() > 1;
|
bool doAll = m_GuiState.m_DoAll && m_EmberFile.Size() > 1;
|
||||||
size_t currentStripForProgress = 0;//Sort of a hack to get the strip value to the progress function.
|
size_t currentStripForProgress = 0;//Sort of a hack to get the strip value to the progress function.
|
||||||
@ -184,11 +173,10 @@ FinalRenderEmberController<T>::FinalRenderEmberController(FractoriumFinalRenderD
|
|||||||
m_FinishedImageCount.store(0);
|
m_FinishedImageCount.store(0);
|
||||||
SyncGuiToRenderer();
|
SyncGuiToRenderer();
|
||||||
FirstOrDefaultRenderer()->m_ProgressParameter = reinterpret_cast<void*>(¤tStripForProgress);//When animating, only the first (primary) device has a progress parameter.
|
FirstOrDefaultRenderer()->m_ProgressParameter = reinterpret_cast<void*>(¤tStripForProgress);//When animating, only the first (primary) device has a progress parameter.
|
||||||
|
|
||||||
m_GuiState.m_Strips = VerifyStrips(m_Ember->m_FinalRasH, m_GuiState.m_Strips,
|
m_GuiState.m_Strips = VerifyStrips(m_Ember->m_FinalRasH, m_GuiState.m_Strips,
|
||||||
[&](const string& s) { Output(QString::fromStdString(s)); },//Greater than height.
|
[&](const string & s) { Output(QString::fromStdString(s)); }, //Greater than height.
|
||||||
[&](const string& s) { Output(QString::fromStdString(s)); },//Mod height != 0.
|
[&](const string & s) { Output(QString::fromStdString(s)); }, //Mod height != 0.
|
||||||
[&](const string& s) { Output(QString::fromStdString(s) + "\n"); });//Final strips value to be set.
|
[&](const string & s) { Output(QString::fromStdString(s) + "\n"); }); //Final strips value to be set.
|
||||||
ResetProgress();
|
ResetProgress();
|
||||||
|
|
||||||
//The rendering process is different between doing a single image, and doing multiple.
|
//The rendering process is different between doing a single image, and doing multiple.
|
||||||
@ -221,13 +209,11 @@ FinalRenderEmberController<T>::FinalRenderEmberController(FractoriumFinalRenderD
|
|||||||
|
|
||||||
std::atomic<size_t> atomfTime;
|
std::atomic<size_t> atomfTime;
|
||||||
vector<std::thread> threadVec;
|
vector<std::thread> threadVec;
|
||||||
|
|
||||||
//Not supporting strips with animation.
|
//Not supporting strips with animation.
|
||||||
//Shouldn't be a problem because animations will be at max 4k x 2k which will take about 1GB
|
//Shouldn't be a problem because animations will be at max 4k x 2k which will take about 1GB
|
||||||
//even when using double precision, which most cards at the time of this writing already exceed.
|
//even when using double precision, which most cards at the time of this writing already exceed.
|
||||||
m_GuiState.m_Strips = 1;
|
m_GuiState.m_Strips = 1;
|
||||||
atomfTime.store(0);
|
atomfTime.store(0);
|
||||||
|
|
||||||
std::function<void(size_t)> iterFunc = [&](size_t index)
|
std::function<void(size_t)> iterFunc = [&](size_t index)
|
||||||
{
|
{
|
||||||
size_t ftime;
|
size_t ftime;
|
||||||
@ -244,7 +230,6 @@ FinalRenderEmberController<T>::FinalRenderEmberController(FractoriumFinalRenderD
|
|||||||
while (atomfTime.fetch_add(1), ((ftime = atomfTime.load() - 1) < m_EmberFile.Size()) && m_Run)//Needed to set 1 to claim this iter from other threads, so decrement it to be zero-indexed here.
|
while (atomfTime.fetch_add(1), ((ftime = atomfTime.load() - 1) < m_EmberFile.Size()) && m_Run)//Needed to set 1 to claim this iter from other threads, so decrement it to be zero-indexed here.
|
||||||
{
|
{
|
||||||
T localTime = T(ftime);
|
T localTime = T(ftime);
|
||||||
|
|
||||||
Output("Image " + ToString(ftime + 1ULL) + ":\n" + ComposePath(QString::fromStdString(m_EmberFile.m_Embers[ftime].m_Name)));
|
Output("Image " + ToString(ftime + 1ULL) + ":\n" + ComposePath(QString::fromStdString(m_EmberFile.m_Embers[ftime].m_Name)));
|
||||||
renderer->Reset();//Have to manually set this since the ember is not set each time through.
|
renderer->Reset();//Have to manually set this since the ember is not set each time through.
|
||||||
renderTimer.Tic();//Toc() is called in RenderComplete().
|
renderTimer.Tic();//Toc() is called in RenderComplete().
|
||||||
@ -264,7 +249,6 @@ FinalRenderEmberController<T>::FinalRenderEmberController(FractoriumFinalRenderD
|
|||||||
|
|
||||||
stats = renderer->Stats();
|
stats = renderer->Stats();
|
||||||
comments = renderer->ImageComments(stats, 0, false, true);
|
comments = renderer->ImageComments(stats, 0, false, true);
|
||||||
|
|
||||||
writeThread = std::thread([&](size_t tempTime, size_t threadFinalImageIndex)
|
writeThread = std::thread([&](size_t tempTime, size_t threadFinalImageIndex)
|
||||||
{
|
{
|
||||||
SaveCurrentRender(m_EmberFile.m_Embers[tempTime],
|
SaveCurrentRender(m_EmberFile.m_Embers[tempTime],
|
||||||
@ -275,7 +259,6 @@ FinalRenderEmberController<T>::FinalRenderEmberController(FractoriumFinalRenderD
|
|||||||
renderer->NumChannels(),
|
renderer->NumChannels(),
|
||||||
renderer->BytesPerChannel());
|
renderer->BytesPerChannel());
|
||||||
}, ftime, finalImageIndex);
|
}, ftime, finalImageIndex);
|
||||||
|
|
||||||
m_FinishedImageCount.fetch_add(1);
|
m_FinishedImageCount.fetch_add(1);
|
||||||
RenderComplete(m_EmberFile.m_Embers[ftime], stats, renderTimer);
|
RenderComplete(m_EmberFile.m_Embers[ftime], stats, renderTimer);
|
||||||
|
|
||||||
@ -289,7 +272,6 @@ FinalRenderEmberController<T>::FinalRenderEmberController(FractoriumFinalRenderD
|
|||||||
if (writeThread.joinable())//One final check to make sure all writing is done before exiting this thread.
|
if (writeThread.joinable())//One final check to make sure all writing is done before exiting this thread.
|
||||||
writeThread.join();
|
writeThread.join();
|
||||||
};
|
};
|
||||||
|
|
||||||
threadVec.reserve(m_Renderers.size());
|
threadVec.reserve(m_Renderers.size());
|
||||||
|
|
||||||
for (size_t r = 0; r < m_Renderers.size(); r++)
|
for (size_t r = 0; r < m_Renderers.size(); r++)
|
||||||
@ -318,7 +300,6 @@ FinalRenderEmberController<T>::FinalRenderEmberController(FractoriumFinalRenderD
|
|||||||
m_Stats.Clear();
|
m_Stats.Clear();
|
||||||
Memset(m_FinalImage);
|
Memset(m_FinalImage);
|
||||||
m_RenderTimer.Tic();//Toc() is called in RenderComplete().
|
m_RenderTimer.Tic();//Toc() is called in RenderComplete().
|
||||||
|
|
||||||
StripsRender<T>(m_Renderer.get(), m_EmberFile.m_Embers[i], m_FinalImage, 0, m_GuiState.m_Strips, m_GuiState.m_YAxisUp,
|
StripsRender<T>(m_Renderer.get(), m_EmberFile.m_Embers[i], m_FinalImage, 0, m_GuiState.m_Strips, m_GuiState.m_YAxisUp,
|
||||||
[&](size_t strip) { currentStripForProgress = strip; },//Pre strip.
|
[&](size_t strip) { currentStripForProgress = strip; },//Pre strip.
|
||||||
[&](size_t strip) { m_Stats += m_Renderer->Stats(); },//Post strip.
|
[&](size_t strip) { m_Stats += m_Renderer->Stats(); },//Post strip.
|
||||||
@ -351,7 +332,6 @@ FinalRenderEmberController<T>::FinalRenderEmberController(FractoriumFinalRenderD
|
|||||||
Memset(m_FinalImage);
|
Memset(m_FinalImage);
|
||||||
Output(ComposePath(QString::fromStdString(m_Ember->m_Name)));
|
Output(ComposePath(QString::fromStdString(m_Ember->m_Name)));
|
||||||
m_RenderTimer.Tic();//Toc() is called in RenderComplete().
|
m_RenderTimer.Tic();//Toc() is called in RenderComplete().
|
||||||
|
|
||||||
StripsRender<T>(m_Renderer.get(), *m_Ember, m_FinalImage, 0, m_GuiState.m_Strips, m_GuiState.m_YAxisUp,
|
StripsRender<T>(m_Renderer.get(), *m_Ember, m_FinalImage, 0, m_GuiState.m_Strips, m_GuiState.m_YAxisUp,
|
||||||
[&](size_t strip) { currentStripForProgress = strip; },//Pre strip.
|
[&](size_t strip) { currentStripForProgress = strip; },//Pre strip.
|
||||||
[&](size_t strip) { m_Stats += m_Renderer->Stats(); },//Post strip.
|
[&](size_t strip) { m_Stats += m_Renderer->Stats(); },//Post strip.
|
||||||
@ -375,7 +355,6 @@ FinalRenderEmberController<T>::FinalRenderEmberController(FractoriumFinalRenderD
|
|||||||
|
|
||||||
QString totalTimeString = "All renders completed in: " + QString::fromStdString(m_TotalTimer.Format(m_TotalTimer.Toc())) + ".";
|
QString totalTimeString = "All renders completed in: " + QString::fromStdString(m_TotalTimer.Format(m_TotalTimer.Toc())) + ".";
|
||||||
Output(totalTimeString);
|
Output(totalTimeString);
|
||||||
|
|
||||||
QFile::remove(backup);
|
QFile::remove(backup);
|
||||||
m_Run = false;
|
m_Run = false;
|
||||||
};
|
};
|
||||||
@ -457,7 +436,6 @@ bool FinalRenderEmberController<T>::Render()
|
|||||||
if (CreateRendererFromGUI())
|
if (CreateRendererFromGUI())
|
||||||
{
|
{
|
||||||
m_FinalRenderDialog->ui.FinalRenderTextOutput->setText("Preparing all parameters.\n");
|
m_FinalRenderDialog->ui.FinalRenderTextOutput->setText("Preparing all parameters.\n");
|
||||||
|
|
||||||
//Note that a Qt thread must be used, rather than a tbb task.
|
//Note that a Qt thread must be used, rather than a tbb task.
|
||||||
//This is because tbb does a very poor job of allocating thread resources
|
//This is because tbb does a very poor job of allocating thread resources
|
||||||
//and dedicates an entire core just to this thread which does nothing waiting for the
|
//and dedicates an entire core just to this thread which does nothing waiting for the
|
||||||
@ -487,7 +465,6 @@ bool FinalRenderEmberController<T>::CreateRenderer(eRendererType renderType, con
|
|||||||
//uint channels = m_FinalRenderDialog->Ext().endsWith("png", Qt::CaseInsensitive) ? 4 : 3;
|
//uint channels = m_FinalRenderDialog->Ext().endsWith("png", Qt::CaseInsensitive) ? 4 : 3;
|
||||||
bool renderTypeMismatch = (m_Renderer.get() && (m_Renderer->RendererType() != renderType)) ||
|
bool renderTypeMismatch = (m_Renderer.get() && (m_Renderer->RendererType() != renderType)) ||
|
||||||
(!m_Renderers.empty() && (m_Renderers[0]->RendererType() != renderType));
|
(!m_Renderers.empty() && (m_Renderers[0]->RendererType() != renderType));
|
||||||
|
|
||||||
CancelRender();
|
CancelRender();
|
||||||
|
|
||||||
if ((!m_FinalRenderDialog->DoSequence() && (!m_Renderer.get() || !m_Renderer->Ok())) ||
|
if ((!m_FinalRenderDialog->DoSequence() && (!m_Renderer.get() || !m_Renderer->Ok())) ||
|
||||||
@ -497,7 +474,6 @@ bool FinalRenderEmberController<T>::CreateRenderer(eRendererType renderType, con
|
|||||||
{
|
{
|
||||||
EmberReport emberReport;
|
EmberReport emberReport;
|
||||||
vector<string> errorReport;
|
vector<string> errorReport;
|
||||||
|
|
||||||
m_Devices = devices;//Store values for re-creation later on.
|
m_Devices = devices;//Store values for re-creation later on.
|
||||||
m_OutputTexID = 0;//Don't care about tex ID when doing final render.
|
m_OutputTexID = 0;//Don't care about tex ID when doing final render.
|
||||||
m_Shared = shared;//So shared is of course false.
|
m_Shared = shared;//So shared is of course false.
|
||||||
@ -555,7 +531,6 @@ int FinalRenderEmberController<T>::ProgressFunc(Ember<T>& ember, void* foo, doub
|
|||||||
|
|
||||||
QMetaObject::invokeMethod(m_FinalRenderDialog->ui.FinalRenderImageCountLabel, "setText", Qt::QueuedConnection, Q_ARG(const QString&, ToString<qulonglong>(m_FinishedImageCount.load() + 1) + " / " + ToString<qulonglong>(m_ImageCount) + " Eta: " + QString::fromStdString(m_RenderTimer.Format(etaMs))));
|
QMetaObject::invokeMethod(m_FinalRenderDialog->ui.FinalRenderImageCountLabel, "setText", Qt::QueuedConnection, Q_ARG(const QString&, ToString<qulonglong>(m_FinishedImageCount.load() + 1) + " / " + ToString<qulonglong>(m_ImageCount) + " Eta: " + QString::fromStdString(m_RenderTimer.Format(etaMs))));
|
||||||
QMetaObject::invokeMethod(m_FinalRenderDialog->ui.FinalRenderTextOutput, "update", Qt::QueuedConnection);
|
QMetaObject::invokeMethod(m_FinalRenderDialog->ui.FinalRenderTextOutput, "update", Qt::QueuedConnection);
|
||||||
|
|
||||||
return m_Run ? 1 : 0;
|
return m_Run ? 1 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -698,14 +673,12 @@ tuple<size_t, size_t, size_t> FinalRenderEmberController<T>::SyncAndComputeMemor
|
|||||||
size_t strips;
|
size_t strips;
|
||||||
bool b = false;
|
bool b = false;
|
||||||
uint channels = m_FinalRenderDialog->Ext() == "png" ? 4 : 3;//4 channels for Png, else 3.
|
uint channels = m_FinalRenderDialog->Ext() == "png" ? 4 : 3;//4 channels for Png, else 3.
|
||||||
|
|
||||||
SyncGuiToEmbers();
|
SyncGuiToEmbers();
|
||||||
|
|
||||||
if (m_Renderer.get())
|
if (m_Renderer.get())
|
||||||
{
|
{
|
||||||
strips = VerifyStrips(m_Ember->m_FinalRasH, m_FinalRenderDialog->Strips(),
|
strips = VerifyStrips(m_Ember->m_FinalRasH, m_FinalRenderDialog->Strips(),
|
||||||
[&](const string& s) {}, [&](const string& s) {}, [&](const string& s) {});
|
[&](const string & s) {}, [&](const string & s) {}, [&](const string & s) {});
|
||||||
|
|
||||||
m_Renderer->SetEmber(*m_Ember);
|
m_Renderer->SetEmber(*m_Ember);
|
||||||
m_Renderer->CreateSpatialFilter(b);
|
m_Renderer->CreateSpatialFilter(b);
|
||||||
m_Renderer->CreateTemporalFilter(b);
|
m_Renderer->CreateTemporalFilter(b);
|
||||||
@ -715,7 +688,6 @@ tuple<size_t, size_t, size_t> FinalRenderEmberController<T>::SyncAndComputeMemor
|
|||||||
m_Renderer->ComputeCamera();
|
m_Renderer->ComputeCamera();
|
||||||
CancelPreviewRender();
|
CancelPreviewRender();
|
||||||
m_FinalPreviewRenderFunc();
|
m_FinalPreviewRenderFunc();
|
||||||
|
|
||||||
p = m_Renderer->MemoryRequired(strips, true, m_FinalRenderDialog->DoSequence());
|
p = m_Renderer->MemoryRequired(strips, true, m_FinalRenderDialog->DoSequence());
|
||||||
iterCount = m_Renderer->TotalIterCount(strips);
|
iterCount = m_Renderer->TotalIterCount(strips);
|
||||||
}
|
}
|
||||||
@ -734,14 +706,12 @@ tuple<size_t, size_t, size_t> FinalRenderEmberController<T>::SyncAndComputeMemor
|
|||||||
|
|
||||||
CancelPreviewRender();
|
CancelPreviewRender();
|
||||||
m_FinalPreviewRenderFunc();
|
m_FinalPreviewRenderFunc();
|
||||||
|
|
||||||
strips = 1;
|
strips = 1;
|
||||||
p = m_Renderers[0]->MemoryRequired(1, true, m_FinalRenderDialog->DoSequence());
|
p = m_Renderers[0]->MemoryRequired(1, true, m_FinalRenderDialog->DoSequence());
|
||||||
iterCount = m_Renderers[0]->TotalIterCount(strips);
|
iterCount = m_Renderers[0]->TotalIterCount(strips);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_FinalRenderDialog->m_StripsSpin->setSuffix(" (" + ToString<qulonglong>(strips) +")");
|
m_FinalRenderDialog->m_StripsSpin->setSuffix(" (" + ToString<qulonglong>(strips) + ")");
|
||||||
|
|
||||||
return tuple<size_t, size_t, size_t>(p.first, p.second, iterCount);
|
return tuple<size_t, size_t, size_t>(p.first, p.second, iterCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -757,7 +727,6 @@ QString FinalRenderEmberController<T>::ComposePath(const QString& name)
|
|||||||
{
|
{
|
||||||
QString path = MakeEnd(m_Settings->SaveFolder(), '/');//Base path.
|
QString path = MakeEnd(m_Settings->SaveFolder(), '/');//Base path.
|
||||||
QString full = path + m_FinalRenderDialog->Prefix() + name + m_FinalRenderDialog->Suffix() + "." + m_FinalRenderDialog->Ext();
|
QString full = path + m_FinalRenderDialog->Prefix() + name + m_FinalRenderDialog->Suffix() + "." + m_FinalRenderDialog->Ext();
|
||||||
|
|
||||||
return EmberFile<T>::UniqueFilename(full);
|
return EmberFile<T>::UniqueFilename(full);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -794,7 +763,9 @@ void FinalRenderEmberController<T>::CancelPreviewRender()
|
|||||||
m_FinalPreviewRenderer->Abort();
|
m_FinalPreviewRenderer->Abort();
|
||||||
|
|
||||||
while (m_FinalPreviewRenderer->InRender()) { QApplication::processEvents(); }
|
while (m_FinalPreviewRenderer->InRender()) { QApplication::processEvents(); }
|
||||||
|
|
||||||
while (m_PreviewRun) { QApplication::processEvents(); }
|
while (m_PreviewRun) { QApplication::processEvents(); }
|
||||||
|
|
||||||
while (m_FinalPreviewResult.isRunning()) { QApplication::processEvents(); }
|
while (m_FinalPreviewResult.isRunning()) { QApplication::processEvents(); }
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -877,7 +848,6 @@ void FinalRenderEmberController<T>::RenderComplete(Ember<T>& ember, const EmberS
|
|||||||
QFileInfo xmlFileInfo(filename);//Create another one in case it was modified for batch rendering.
|
QFileInfo xmlFileInfo(filename);//Create another one in case it was modified for batch rendering.
|
||||||
QString newPath = xmlFileInfo.absolutePath() + '/' + xmlFileInfo.completeBaseName() + ".flame";
|
QString newPath = xmlFileInfo.absolutePath() + '/' + xmlFileInfo.completeBaseName() + ".flame";
|
||||||
xmlDocPtr tempEdit = ember.m_Edits;
|
xmlDocPtr tempEdit = ember.m_Edits;
|
||||||
|
|
||||||
ember.m_Edits = m_XmlWriter.CreateNewEditdoc(&ember, nullptr, "edit", m_Settings->Nick().toStdString(), m_Settings->Url().toStdString(), m_Settings->Id().toStdString(), "", 0, 0);
|
ember.m_Edits = m_XmlWriter.CreateNewEditdoc(&ember, nullptr, "edit", m_Settings->Nick().toStdString(), m_Settings->Url().toStdString(), m_Settings->Id().toStdString(), "", 0, 0);
|
||||||
m_XmlWriter.Save(newPath.toStdString().c_str(), ember, 0, true, false, true);//Note that the ember passed is used, rather than m_Ember because it's what was actually rendered.
|
m_XmlWriter.Save(newPath.toStdString().c_str(), ember, 0, true, false, true);//Note that the ember passed is used, rather than m_Ember because it's what was actually rendered.
|
||||||
|
|
||||||
@ -887,7 +857,6 @@ void FinalRenderEmberController<T>::RenderComplete(Ember<T>& ember, const EmberS
|
|||||||
|
|
||||||
status = "Pure render time: " + QString::fromStdString(renderTimeString);
|
status = "Pure render time: " + QString::fromStdString(renderTimeString);
|
||||||
Output(status);
|
Output(status);
|
||||||
|
|
||||||
totalTimeString = renderTimer.Format(renderTimer.Toc());
|
totalTimeString = renderTimer.Format(renderTimer.Toc());
|
||||||
status = "Total time: " + QString::fromStdString(totalTimeString) + "\nTotal iters: " + itersString + "\nIters/second: " + itersPerSecString + "\n";
|
status = "Total time: " + QString::fromStdString(totalTimeString) + "\nTotal iters: " + itersString + "\nIters/second: " + itersPerSecString + "\n";
|
||||||
Output(status);
|
Output(status);
|
||||||
@ -940,14 +909,12 @@ void FinalRenderEmberController<T>::SyncGuiToEmber(Ember<T>& ember, size_t width
|
|||||||
{
|
{
|
||||||
double wScale = m_FinalRenderDialog->m_WidthScaleSpin->value();
|
double wScale = m_FinalRenderDialog->m_WidthScaleSpin->value();
|
||||||
double hScale = m_FinalRenderDialog->m_HeightScaleSpin->value();
|
double hScale = m_FinalRenderDialog->m_HeightScaleSpin->value();
|
||||||
|
|
||||||
w = ember.m_OrigFinalRasW * wScale;
|
w = ember.m_OrigFinalRasW * wScale;
|
||||||
h = ember.m_OrigFinalRasH * hScale;
|
h = ember.m_OrigFinalRasH * hScale;
|
||||||
}
|
}
|
||||||
|
|
||||||
w = std::max<size_t>(w, 10);
|
w = std::max<size_t>(w, 10);
|
||||||
h = std::max<size_t>(h, 10);
|
h = std::max<size_t>(h, 10);
|
||||||
|
|
||||||
ember.SetSizeAndAdjustScale(w, h, false, m_FinalRenderDialog->Scale());
|
ember.SetSizeAndAdjustScale(w, h, false, m_FinalRenderDialog->Scale());
|
||||||
ember.m_Quality = m_FinalRenderDialog->m_QualitySpin->value();
|
ember.m_Quality = m_FinalRenderDialog->m_QualitySpin->value();
|
||||||
ember.m_Supersample = m_FinalRenderDialog->m_SupersampleSpin->value();
|
ember.m_Supersample = m_FinalRenderDialog->m_SupersampleSpin->value();
|
||||||
|
@ -15,19 +15,17 @@
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="p">The parent widget of this item</param>
|
/// <param name="p">The parent widget of this item</param>
|
||||||
Fractorium::Fractorium(QWidget* p)
|
Fractorium::Fractorium(QWidget* p)
|
||||||
: QMainWindow(p),
|
: QMainWindow(p)
|
||||||
m_Info(OpenCLInfo::Instance())
|
|
||||||
{
|
{
|
||||||
int spinHeight = 20, iconSize_ = 9;
|
int spinHeight = 20, iconSize_ = 9;
|
||||||
size_t i = 0;
|
size_t i = 0;
|
||||||
string s;
|
string s;
|
||||||
Timing t;
|
Timing t;
|
||||||
ui.setupUi(this);
|
ui.setupUi(this);
|
||||||
|
m_Info = OpenCLInfo::Instance();
|
||||||
qRegisterMetaType<QVector<int>>("QVector<int>");//For previews.
|
qRegisterMetaType<QVector<int>>("QVector<int>");//For previews.
|
||||||
qRegisterMetaType<vector<byte>>("vector<byte>");
|
qRegisterMetaType<vector<byte>>("vector<byte>");
|
||||||
qRegisterMetaType<EmberTreeWidgetItemBase*>("EmberTreeWidgetItemBase*");
|
qRegisterMetaType<EmberTreeWidgetItemBase*>("EmberTreeWidgetItemBase*");
|
||||||
|
|
||||||
setDockOptions(DockOption::AllowNestedDocks | DockOption::AllowTabbedDocks);
|
setDockOptions(DockOption::AllowNestedDocks | DockOption::AllowTabbedDocks);
|
||||||
setTabPosition(Qt::AllDockWidgetAreas, QTabWidget::TabPosition::North);
|
setTabPosition(Qt::AllDockWidgetAreas, QTabWidget::TabPosition::North);
|
||||||
setTabShape(QTabWidget::TabShape::Triangular);
|
setTabShape(QTabWidget::TabShape::Triangular);
|
||||||
@ -36,7 +34,6 @@ Fractorium::Fractorium(QWidget* p)
|
|||||||
tabifyDockWidget(ui.XformsDockWidget, ui.XaosDockWidget);
|
tabifyDockWidget(ui.XformsDockWidget, ui.XaosDockWidget);
|
||||||
tabifyDockWidget(ui.XaosDockWidget, ui.PaletteDockWidget);
|
tabifyDockWidget(ui.XaosDockWidget, ui.PaletteDockWidget);
|
||||||
tabifyDockWidget(ui.PaletteDockWidget, ui.InfoDockWidget);
|
tabifyDockWidget(ui.PaletteDockWidget, ui.InfoDockWidget);
|
||||||
|
|
||||||
m_Docks.reserve(8);
|
m_Docks.reserve(8);
|
||||||
m_Docks.push_back(ui.LibraryDockWidget);
|
m_Docks.push_back(ui.LibraryDockWidget);
|
||||||
m_Docks.push_back(ui.FlameDockWidget);
|
m_Docks.push_back(ui.FlameDockWidget);
|
||||||
@ -44,39 +41,32 @@ Fractorium::Fractorium(QWidget* p)
|
|||||||
m_Docks.push_back(ui.XaosDockWidget);
|
m_Docks.push_back(ui.XaosDockWidget);
|
||||||
m_Docks.push_back(ui.PaletteDockWidget);
|
m_Docks.push_back(ui.PaletteDockWidget);
|
||||||
m_Docks.push_back(ui.InfoDockWidget);
|
m_Docks.push_back(ui.InfoDockWidget);
|
||||||
|
|
||||||
m_FontSize = 9;
|
m_FontSize = 9;
|
||||||
m_VarSortMode = 1;//Sort by weight by default.
|
m_VarSortMode = 1;//Sort by weight by default.
|
||||||
m_PaletteSortMode = 0;//Sort by palette ascending by default.
|
m_PaletteSortMode = 0;//Sort by palette ascending by default.
|
||||||
m_ColorDialog = new QColorDialog(this);
|
m_ColorDialog = new QColorDialog(this);
|
||||||
m_Settings = new FractoriumSettings(this);
|
m_Settings = new FractoriumSettings(this);
|
||||||
m_QssDialog = new QssDialog(this);
|
m_QssDialog = new QssDialog(this);
|
||||||
|
|
||||||
m_FileDialog = nullptr;//Use lazy instantiation upon first use.
|
m_FileDialog = nullptr;//Use lazy instantiation upon first use.
|
||||||
m_FolderDialog = nullptr;
|
m_FolderDialog = nullptr;
|
||||||
m_FinalRenderDialog = new FractoriumFinalRenderDialog(m_Settings, this);
|
m_FinalRenderDialog = new FractoriumFinalRenderDialog(m_Settings, this);
|
||||||
m_OptionsDialog = new FractoriumOptionsDialog(m_Settings, this);
|
m_OptionsDialog = new FractoriumOptionsDialog(m_Settings, this);
|
||||||
m_VarDialog = new FractoriumVariationsDialog(m_Settings, this);
|
m_VarDialog = new FractoriumVariationsDialog(m_Settings, this);
|
||||||
m_AboutDialog = new FractoriumAboutDialog(this);
|
m_AboutDialog = new FractoriumAboutDialog(this);
|
||||||
|
|
||||||
//Put the about dialog in the screen center.
|
//Put the about dialog in the screen center.
|
||||||
const QRect screen = QApplication::desktop()->screenGeometry();
|
const QRect screen = QApplication::desktop()->screenGeometry();
|
||||||
m_AboutDialog->move(screen.center() - m_AboutDialog->rect().center());
|
m_AboutDialog->move(screen.center() - m_AboutDialog->rect().center());
|
||||||
|
|
||||||
connect(m_ColorDialog, SIGNAL(colorSelected(const QColor&)), this, SLOT(OnColorSelected(const QColor&)), Qt::QueuedConnection);
|
connect(m_ColorDialog, SIGNAL(colorSelected(const QColor&)), this, SLOT(OnColorSelected(const QColor&)), Qt::QueuedConnection);
|
||||||
|
|
||||||
m_XformComboColors[i++] = QColor(0XFF, 0X00, 0X00);
|
m_XformComboColors[i++] = QColor(0XFF, 0X00, 0X00);
|
||||||
m_XformComboColors[i++] = QColor(0XCC, 0XCC, 0X00);
|
m_XformComboColors[i++] = QColor(0XCC, 0XCC, 0X00);
|
||||||
m_XformComboColors[i++] = QColor(0X00, 0XCC, 0X00);
|
m_XformComboColors[i++] = QColor(0X00, 0XCC, 0X00);
|
||||||
m_XformComboColors[i++] = QColor(0X00, 0XCC, 0XCC);
|
m_XformComboColors[i++] = QColor(0X00, 0XCC, 0XCC);
|
||||||
m_XformComboColors[i++] = QColor(0X40, 0X40, 0XFF);
|
m_XformComboColors[i++] = QColor(0X40, 0X40, 0XFF);
|
||||||
|
|
||||||
m_XformComboColors[i++] = QColor(0XCC, 0X00, 0XCC);
|
m_XformComboColors[i++] = QColor(0XCC, 0X00, 0XCC);
|
||||||
m_XformComboColors[i++] = QColor(0XCC, 0X80, 0X00);
|
m_XformComboColors[i++] = QColor(0XCC, 0X80, 0X00);
|
||||||
m_XformComboColors[i++] = QColor(0X80, 0X00, 0X4F);
|
m_XformComboColors[i++] = QColor(0X80, 0X00, 0X4F);
|
||||||
m_XformComboColors[i++] = QColor(0X80, 0X80, 0X22);
|
m_XformComboColors[i++] = QColor(0X80, 0X80, 0X22);
|
||||||
m_XformComboColors[i++] = QColor(0X60, 0X80, 0X60);
|
m_XformComboColors[i++] = QColor(0X60, 0X80, 0X60);
|
||||||
|
|
||||||
m_XformComboColors[i++] = QColor(0X50, 0X80, 0X80);
|
m_XformComboColors[i++] = QColor(0X50, 0X80, 0X80);
|
||||||
m_XformComboColors[i++] = QColor(0X4F, 0X4F, 0X80);
|
m_XformComboColors[i++] = QColor(0X4F, 0X4F, 0X80);
|
||||||
m_XformComboColors[i++] = QColor(0X80, 0X50, 0X80);
|
m_XformComboColors[i++] = QColor(0X80, 0X50, 0X80);
|
||||||
@ -86,16 +76,13 @@ Fractorium::Fractorium(QWidget* p)
|
|||||||
for (i = 0; i < XFORM_COLOR_COUNT; i++)
|
for (i = 0; i < XFORM_COLOR_COUNT; i++)
|
||||||
{
|
{
|
||||||
QPixmap pixmap(iconSize_, iconSize_);
|
QPixmap pixmap(iconSize_, iconSize_);
|
||||||
|
|
||||||
pixmap.fill(m_XformComboColors[i]);
|
pixmap.fill(m_XformComboColors[i]);
|
||||||
m_XformComboIcons[i] = QIcon(pixmap);
|
m_XformComboIcons[i] = QIcon(pixmap);
|
||||||
}
|
}
|
||||||
|
|
||||||
QPixmap pixmap(iconSize_, iconSize_);
|
QPixmap pixmap(iconSize_, iconSize_);
|
||||||
|
|
||||||
pixmap.fill(m_FinalXformComboColor);
|
pixmap.fill(m_FinalXformComboColor);
|
||||||
m_FinalXformComboIcon = QIcon(pixmap);
|
m_FinalXformComboIcon = QIcon(pixmap);
|
||||||
|
|
||||||
InitToolbarUI();
|
InitToolbarUI();
|
||||||
InitParamsUI();
|
InitParamsUI();
|
||||||
InitXformsUI();
|
InitXformsUI();
|
||||||
@ -108,10 +95,10 @@ Fractorium::Fractorium(QWidget* p)
|
|||||||
InitLibraryUI();
|
InitLibraryUI();
|
||||||
InitInfoUI();
|
InitInfoUI();
|
||||||
InitMenusUI();
|
InitMenusUI();
|
||||||
|
|
||||||
//This will init the controller and fill in the variations and palette tables with template specific instances
|
//This will init the controller and fill in the variations and palette tables with template specific instances
|
||||||
//of their respective objects.
|
//of their respective objects.
|
||||||
#ifdef DO_DOUBLE
|
#ifdef DO_DOUBLE
|
||||||
|
|
||||||
if (m_Settings->Double())
|
if (m_Settings->Double())
|
||||||
m_Controller = unique_ptr<FractoriumEmberControllerBase>(new FractoriumEmberController<double>(this));
|
m_Controller = unique_ptr<FractoriumEmberControllerBase>(new FractoriumEmberController<double>(this));
|
||||||
else
|
else
|
||||||
@ -121,24 +108,21 @@ Fractorium::Fractorium(QWidget* p)
|
|||||||
m_Controller->SetupVariationTree();
|
m_Controller->SetupVariationTree();
|
||||||
m_Controller->FilteredVariations();
|
m_Controller->FilteredVariations();
|
||||||
|
|
||||||
if (m_Info.Ok() && m_Settings->OpenCL() && m_QualitySpin->value() < (30 * m_Settings->Devices().size()))
|
if (m_Info->Ok() && m_Settings->OpenCL() && m_QualitySpin->value() < (30 * m_Settings->Devices().size()))
|
||||||
m_QualitySpin->setValue(30 * m_Settings->Devices().size());
|
m_QualitySpin->setValue(30 * m_Settings->Devices().size());
|
||||||
|
|
||||||
int statusBarHeight = 20 * devicePixelRatio();
|
int statusBarHeight = 20 * devicePixelRatio();
|
||||||
ui.StatusBar->setMinimumHeight(statusBarHeight);
|
ui.StatusBar->setMinimumHeight(statusBarHeight);
|
||||||
ui.StatusBar->setMaximumHeight(statusBarHeight);
|
ui.StatusBar->setMaximumHeight(statusBarHeight);
|
||||||
|
|
||||||
m_RenderStatusLabel = new QLabel(this);
|
m_RenderStatusLabel = new QLabel(this);
|
||||||
m_RenderStatusLabel->setMinimumWidth(200);
|
m_RenderStatusLabel->setMinimumWidth(200);
|
||||||
m_RenderStatusLabel->setAlignment(Qt::AlignRight);
|
m_RenderStatusLabel->setAlignment(Qt::AlignRight);
|
||||||
ui.StatusBar->addPermanentWidget(m_RenderStatusLabel);
|
ui.StatusBar->addPermanentWidget(m_RenderStatusLabel);
|
||||||
|
|
||||||
m_CoordinateStatusLabel = new QLabel(this);
|
m_CoordinateStatusLabel = new QLabel(this);
|
||||||
m_CoordinateStatusLabel->setMinimumWidth(300);
|
m_CoordinateStatusLabel->setMinimumWidth(300);
|
||||||
m_CoordinateStatusLabel->setMaximumWidth(300);
|
m_CoordinateStatusLabel->setMaximumWidth(300);
|
||||||
m_CoordinateStatusLabel->setAlignment(Qt::AlignLeft);
|
m_CoordinateStatusLabel->setAlignment(Qt::AlignLeft);
|
||||||
ui.StatusBar->addWidget(m_CoordinateStatusLabel);
|
ui.StatusBar->addWidget(m_CoordinateStatusLabel);
|
||||||
|
|
||||||
int progressBarHeight = 15;
|
int progressBarHeight = 15;
|
||||||
int progressBarWidth = 300;
|
int progressBarWidth = 300;
|
||||||
m_ProgressBar = new QProgressBar(this);
|
m_ProgressBar = new QProgressBar(this);
|
||||||
@ -149,12 +133,10 @@ Fractorium::Fractorium(QWidget* p)
|
|||||||
m_ProgressBar->setMinimumWidth(progressBarWidth);
|
m_ProgressBar->setMinimumWidth(progressBarWidth);
|
||||||
m_ProgressBar->setMaximumWidth(progressBarWidth);
|
m_ProgressBar->setMaximumWidth(progressBarWidth);
|
||||||
ui.StatusBar->addPermanentWidget(m_ProgressBar);
|
ui.StatusBar->addPermanentWidget(m_ProgressBar);
|
||||||
|
|
||||||
//Setup pointer in the GL window to point back to here.
|
//Setup pointer in the GL window to point back to here.
|
||||||
ui.GLDisplay->SetMainWindow(this);
|
ui.GLDisplay->SetMainWindow(this);
|
||||||
bool restored = restoreState(m_Settings->value("windowState").toByteArray());
|
bool restored = restoreState(m_Settings->value("windowState").toByteArray());
|
||||||
showMaximized();//This won't fully set things up and show them until after this constructor exits.
|
showMaximized();//This won't fully set things up and show them until after this constructor exits.
|
||||||
|
|
||||||
connect(ui.LibraryDockWidget, SIGNAL(dockLocationChanged(Qt::DockWidgetArea)), this, SLOT(dockLocationChanged(Qt::DockWidgetArea)));
|
connect(ui.LibraryDockWidget, SIGNAL(dockLocationChanged(Qt::DockWidgetArea)), this, SLOT(dockLocationChanged(Qt::DockWidgetArea)));
|
||||||
connect(ui.LibraryDockWidget, SIGNAL(topLevelChanged(bool)), this, SLOT(OnDockTopLevelChanged(bool)));
|
connect(ui.LibraryDockWidget, SIGNAL(topLevelChanged(bool)), this, SLOT(OnDockTopLevelChanged(bool)));
|
||||||
|
|
||||||
@ -243,7 +225,6 @@ void Fractorium::CenterScrollbars()
|
|||||||
{
|
{
|
||||||
QScrollBar* w = ui.GLParentScrollArea->horizontalScrollBar();
|
QScrollBar* w = ui.GLParentScrollArea->horizontalScrollBar();
|
||||||
QScrollBar* h = ui.GLParentScrollArea->verticalScrollBar();
|
QScrollBar* h = ui.GLParentScrollArea->verticalScrollBar();
|
||||||
|
|
||||||
w->setValue(w->maximum() / 2);
|
w->setValue(w->maximum() / 2);
|
||||||
h->setValue(h->maximum() / 2);
|
h->setValue(h->maximum() / 2);
|
||||||
}
|
}
|
||||||
@ -267,7 +248,6 @@ void FractoriumEmberController<T>::ApplyXmlSavingTemplate(Ember<T>& ember)
|
|||||||
bool Fractorium::HaveFinal()
|
bool Fractorium::HaveFinal()
|
||||||
{
|
{
|
||||||
QComboBox* combo = ui.CurrentXformCombo;
|
QComboBox* combo = ui.CurrentXformCombo;
|
||||||
|
|
||||||
return (combo->count() > 0 && combo->itemText(combo->count() - 1) == "Final");
|
return (combo->count() > 0 && combo->itemText(combo->count() - 1) == "Final");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -375,7 +355,7 @@ void Fractorium::resizeEvent(QResizeEvent* e)
|
|||||||
/// but telling it that this window has become the focus window forces
|
/// but telling it that this window has become the focus window forces
|
||||||
/// it to refresh this.
|
/// it to refresh this.
|
||||||
/// <param name="e">The event</param>
|
/// <param name="e">The event</param>
|
||||||
void Fractorium::showEvent(QShowEvent *e)
|
void Fractorium::showEvent(QShowEvent* e)
|
||||||
{
|
{
|
||||||
//Tell Qt to refresh the native menubar from this widget.
|
//Tell Qt to refresh the native menubar from this widget.
|
||||||
emit qGuiApp->focusWindowChanged(windowHandle());
|
emit qGuiApp->focusWindowChanged(windowHandle());
|
||||||
@ -476,7 +456,9 @@ void Fractorium::dropEvent(QDropEvent* e)
|
|||||||
void Fractorium::SetupCombo(QTableWidget* table, const QObject* receiver, int& row, int col, StealthComboBox*& comboBox, const vector<string>& vals, const char* signal, const char* slot, Qt::ConnectionType connectionType)
|
void Fractorium::SetupCombo(QTableWidget* table, const QObject* receiver, int& row, int col, StealthComboBox*& comboBox, const vector<string>& vals, const char* signal, const char* slot, Qt::ConnectionType connectionType)
|
||||||
{
|
{
|
||||||
comboBox = new StealthComboBox(table);
|
comboBox = new StealthComboBox(table);
|
||||||
|
|
||||||
for (auto& s : vals) comboBox->addItem(s.c_str());
|
for (auto& s : vals) comboBox->addItem(s.c_str());
|
||||||
|
|
||||||
table->setCellWidget(row, col, comboBox);
|
table->setCellWidget(row, col, comboBox);
|
||||||
connect(comboBox, signal, receiver, slot, connectionType);
|
connect(comboBox, signal, receiver, slot, connectionType);
|
||||||
row++;
|
row++;
|
||||||
@ -513,8 +495,7 @@ QStringList Fractorium::SetupOpenXmlDialog()
|
|||||||
|
|
||||||
QStringList filenames;
|
QStringList filenames;
|
||||||
m_FileDialog->disconnect(SIGNAL(filterSelected(const QString&)));
|
m_FileDialog->disconnect(SIGNAL(filterSelected(const QString&)));
|
||||||
connect(m_FileDialog, &QFileDialog::filterSelected, [=](const QString &filter) { m_Settings->OpenXmlExt(filter); });
|
connect(m_FileDialog, &QFileDialog::filterSelected, [ = ](const QString & filter) { m_Settings->OpenXmlExt(filter); });
|
||||||
|
|
||||||
m_FileDialog->setFileMode(QFileDialog::ExistingFiles);
|
m_FileDialog->setFileMode(QFileDialog::ExistingFiles);
|
||||||
m_FileDialog->setAcceptMode(QFileDialog::AcceptOpen);
|
m_FileDialog->setAcceptMode(QFileDialog::AcceptOpen);
|
||||||
m_FileDialog->setNameFilter("Flam3 (*.flam3);;Flame (*.flame);;Xml (*.xml)");
|
m_FileDialog->setNameFilter("Flam3 (*.flam3);;Flame (*.flame);;Xml (*.xml)");
|
||||||
@ -552,10 +533,8 @@ QString Fractorium::SetupSaveXmlDialog(const QString& defaultFilename)
|
|||||||
return "";
|
return "";
|
||||||
|
|
||||||
QString filename;
|
QString filename;
|
||||||
|
|
||||||
m_FileDialog->disconnect(SIGNAL(filterSelected(const QString&)));
|
m_FileDialog->disconnect(SIGNAL(filterSelected(const QString&)));
|
||||||
connect(m_FileDialog, &QFileDialog::filterSelected, [=](const QString &filter) { m_Settings->SaveXmlExt(filter); });
|
connect(m_FileDialog, &QFileDialog::filterSelected, [ = ](const QString & filter) { m_Settings->SaveXmlExt(filter); });
|
||||||
|
|
||||||
//This must come first because it clears various internal states which allow the file text to be properly set.
|
//This must come first because it clears various internal states which allow the file text to be properly set.
|
||||||
//This is most likely a bug in QFileDialog.
|
//This is most likely a bug in QFileDialog.
|
||||||
m_FileDialog->setAcceptMode(QFileDialog::AcceptSave);
|
m_FileDialog->setAcceptMode(QFileDialog::AcceptSave);
|
||||||
@ -590,10 +569,8 @@ QString Fractorium::SetupSaveImageDialog(const QString& defaultFilename)
|
|||||||
return "";
|
return "";
|
||||||
|
|
||||||
QString filename;
|
QString filename;
|
||||||
|
|
||||||
m_FileDialog->disconnect(SIGNAL(filterSelected(const QString&)));
|
m_FileDialog->disconnect(SIGNAL(filterSelected(const QString&)));
|
||||||
connect(m_FileDialog, &QFileDialog::filterSelected, [=](const QString &filter) { m_Settings->SaveImageExt(filter); });
|
connect(m_FileDialog, &QFileDialog::filterSelected, [ = ](const QString & filter) { m_Settings->SaveImageExt(filter); });
|
||||||
|
|
||||||
//This must come first because it clears various internal states which allow the file text to be properly set.
|
//This must come first because it clears various internal states which allow the file text to be properly set.
|
||||||
//This is most likely a bug in QFileDialog.
|
//This is most likely a bug in QFileDialog.
|
||||||
m_FileDialog->setAcceptMode(QFileDialog::AcceptSave);
|
m_FileDialog->setAcceptMode(QFileDialog::AcceptSave);
|
||||||
@ -630,7 +607,6 @@ QString Fractorium::SetupSaveFolderDialog()
|
|||||||
return "";
|
return "";
|
||||||
|
|
||||||
QString filename;
|
QString filename;
|
||||||
|
|
||||||
//This must come first because it clears various internal states which allow the file text to be properly set.
|
//This must come first because it clears various internal states which allow the file text to be properly set.
|
||||||
//This is most likely a bug in QFileDialog.
|
//This is most likely a bug in QFileDialog.
|
||||||
m_FolderDialog->setAcceptMode(QFileDialog::AcceptSave);
|
m_FolderDialog->setAcceptMode(QFileDialog::AcceptSave);
|
||||||
@ -672,14 +648,12 @@ void Fractorium::ShowCritical(const QString& title, const QString& text, bool in
|
|||||||
void Fractorium::SetTabOrders()
|
void Fractorium::SetTabOrders()
|
||||||
{
|
{
|
||||||
QWidget* w = SetTabOrder(this, ui.ColorTable, m_BrightnessSpin);//Flame.
|
QWidget* w = SetTabOrder(this, ui.ColorTable, m_BrightnessSpin);//Flame.
|
||||||
|
|
||||||
w = SetTabOrder(this, w, m_GammaSpin);
|
w = SetTabOrder(this, w, m_GammaSpin);
|
||||||
w = SetTabOrder(this, w, m_GammaThresholdSpin);
|
w = SetTabOrder(this, w, m_GammaThresholdSpin);
|
||||||
w = SetTabOrder(this, w, m_VibrancySpin);
|
w = SetTabOrder(this, w, m_VibrancySpin);
|
||||||
w = SetTabOrder(this, w, m_HighlightSpin);
|
w = SetTabOrder(this, w, m_HighlightSpin);
|
||||||
w = SetTabOrder(this, w, m_BackgroundColorButton);
|
w = SetTabOrder(this, w, m_BackgroundColorButton);
|
||||||
w = SetTabOrder(this, w, m_PaletteModeCombo);
|
w = SetTabOrder(this, w, m_PaletteModeCombo);
|
||||||
|
|
||||||
w = SetTabOrder(this, w, m_CenterXSpin);
|
w = SetTabOrder(this, w, m_CenterXSpin);
|
||||||
w = SetTabOrder(this, w, m_CenterYSpin);
|
w = SetTabOrder(this, w, m_CenterYSpin);
|
||||||
w = SetTabOrder(this, w, m_ScaleSpin);
|
w = SetTabOrder(this, w, m_ScaleSpin);
|
||||||
@ -690,20 +664,17 @@ void Fractorium::SetTabOrders()
|
|||||||
w = SetTabOrder(this, w, m_PitchSpin);
|
w = SetTabOrder(this, w, m_PitchSpin);
|
||||||
w = SetTabOrder(this, w, m_YawSpin);
|
w = SetTabOrder(this, w, m_YawSpin);
|
||||||
w = SetTabOrder(this, w, m_DepthBlurSpin);
|
w = SetTabOrder(this, w, m_DepthBlurSpin);
|
||||||
|
|
||||||
w = SetTabOrder(this, w, m_SpatialFilterWidthSpin);
|
w = SetTabOrder(this, w, m_SpatialFilterWidthSpin);
|
||||||
w = SetTabOrder(this, w, m_SpatialFilterTypeCombo);
|
w = SetTabOrder(this, w, m_SpatialFilterTypeCombo);
|
||||||
w = SetTabOrder(this, w, m_TemporalFilterTypeCombo);
|
w = SetTabOrder(this, w, m_TemporalFilterTypeCombo);
|
||||||
w = SetTabOrder(this, w, m_DEFilterMinRadiusSpin);
|
w = SetTabOrder(this, w, m_DEFilterMinRadiusSpin);
|
||||||
w = SetTabOrder(this, w, m_DEFilterMaxRadiusSpin);
|
w = SetTabOrder(this, w, m_DEFilterMaxRadiusSpin);
|
||||||
w = SetTabOrder(this, w, m_DECurveSpin);
|
w = SetTabOrder(this, w, m_DECurveSpin);
|
||||||
|
|
||||||
w = SetTabOrder(this, w, m_TemporalSamplesSpin);
|
w = SetTabOrder(this, w, m_TemporalSamplesSpin);
|
||||||
w = SetTabOrder(this, w, m_QualitySpin);
|
w = SetTabOrder(this, w, m_QualitySpin);
|
||||||
w = SetTabOrder(this, w, m_SupersampleSpin);
|
w = SetTabOrder(this, w, m_SupersampleSpin);
|
||||||
w = SetTabOrder(this, w, m_AffineInterpTypeCombo);
|
w = SetTabOrder(this, w, m_AffineInterpTypeCombo);
|
||||||
w = SetTabOrder(this, w, m_InterpTypeCombo);
|
w = SetTabOrder(this, w, m_InterpTypeCombo);
|
||||||
|
|
||||||
w = SetTabOrder(this, ui.CurrentXformCombo, ui.AddXformButton);//Xforms.
|
w = SetTabOrder(this, ui.CurrentXformCombo, ui.AddXformButton);//Xforms.
|
||||||
w = SetTabOrder(this, w, ui.DuplicateXformButton);
|
w = SetTabOrder(this, w, ui.DuplicateXformButton);
|
||||||
w = SetTabOrder(this, w, ui.ClearXformButton);
|
w = SetTabOrder(this, w, ui.ClearXformButton);
|
||||||
@ -711,13 +682,11 @@ void Fractorium::SetTabOrders()
|
|||||||
w = SetTabOrder(this, w, ui.AddFinalXformButton);
|
w = SetTabOrder(this, w, ui.AddFinalXformButton);
|
||||||
w = SetTabOrder(this, w, m_XformWeightSpin);
|
w = SetTabOrder(this, w, m_XformWeightSpin);
|
||||||
w = SetTabOrder(this, w, m_XformWeightSpinnerButtonWidget->m_Button);
|
w = SetTabOrder(this, w, m_XformWeightSpinnerButtonWidget->m_Button);
|
||||||
|
|
||||||
w = SetTabOrder(this, m_XformColorIndexSpin, ui.XformColorScroll);//Xforms color.
|
w = SetTabOrder(this, m_XformColorIndexSpin, ui.XformColorScroll);//Xforms color.
|
||||||
w = SetTabOrder(this, w, m_XformColorSpeedSpin);
|
w = SetTabOrder(this, w, m_XformColorSpeedSpin);
|
||||||
w = SetTabOrder(this, w, m_XformOpacitySpin);
|
w = SetTabOrder(this, w, m_XformOpacitySpin);
|
||||||
w = SetTabOrder(this, w, m_XformDirectColorSpin);
|
w = SetTabOrder(this, w, m_XformDirectColorSpin);
|
||||||
w = SetTabOrder(this, w, ui.SoloXformCheckBox);
|
w = SetTabOrder(this, w, ui.SoloXformCheckBox);
|
||||||
|
|
||||||
w = SetTabOrder(this, ui.PreAffineGroupBox, m_PreX1Spin);//Xforms affine.
|
w = SetTabOrder(this, ui.PreAffineGroupBox, m_PreX1Spin);//Xforms affine.
|
||||||
w = SetTabOrder(this, w, m_PreX2Spin);
|
w = SetTabOrder(this, w, m_PreX2Spin);
|
||||||
w = SetTabOrder(this, w, m_PreY1Spin);
|
w = SetTabOrder(this, w, m_PreY1Spin);
|
||||||
@ -769,12 +738,9 @@ void Fractorium::SetTabOrders()
|
|||||||
w = SetTabOrder(this, w, ui.ShowPostAffineAllRadio);
|
w = SetTabOrder(this, w, ui.ShowPostAffineAllRadio);
|
||||||
w = SetTabOrder(this, w, ui.LocalPivotRadio);
|
w = SetTabOrder(this, w, ui.LocalPivotRadio);
|
||||||
w = SetTabOrder(this, w, ui.WorldPivotRadio);
|
w = SetTabOrder(this, w, ui.WorldPivotRadio);
|
||||||
|
|
||||||
w = SetTabOrder(this, ui.VariationsFilterLineEdit, ui.VariationsFilterClearButton);//Xforms variation.
|
w = SetTabOrder(this, ui.VariationsFilterLineEdit, ui.VariationsFilterClearButton);//Xforms variation.
|
||||||
w = SetTabOrder(this, w, ui.VariationsTree);
|
w = SetTabOrder(this, w, ui.VariationsTree);
|
||||||
|
|
||||||
//Xforms xaos is done dynamically every time.
|
//Xforms xaos is done dynamically every time.
|
||||||
|
|
||||||
w = SetTabOrder(this, m_PaletteHueSpin, m_PaletteContrastSpin);//Palette.
|
w = SetTabOrder(this, m_PaletteHueSpin, m_PaletteContrastSpin);//Palette.
|
||||||
w = SetTabOrder(this, w, m_PaletteSaturationSpin);
|
w = SetTabOrder(this, w, m_PaletteSaturationSpin);
|
||||||
w = SetTabOrder(this, w, m_PaletteBlurSpin);
|
w = SetTabOrder(this, w, m_PaletteBlurSpin);
|
||||||
@ -783,12 +749,8 @@ void Fractorium::SetTabOrders()
|
|||||||
w = SetTabOrder(this, w, ui.PaletteFilterLineEdit);
|
w = SetTabOrder(this, w, ui.PaletteFilterLineEdit);
|
||||||
w = SetTabOrder(this, w, ui.PaletteFilterClearButton);
|
w = SetTabOrder(this, w, ui.PaletteFilterClearButton);
|
||||||
w = SetTabOrder(this, w, ui.PaletteListTable);
|
w = SetTabOrder(this, w, ui.PaletteListTable);
|
||||||
|
|
||||||
|
|
||||||
w = SetTabOrder(this, ui.SummaryTable, ui.SummaryTree);//Info summary.
|
w = SetTabOrder(this, ui.SummaryTable, ui.SummaryTree);//Info summary.
|
||||||
|
|
||||||
w = SetTabOrder(this, ui.InfoBoundsGroupBox, ui.InfoBoundsFrame);//Info bounds.
|
w = SetTabOrder(this, ui.InfoBoundsGroupBox, ui.InfoBoundsFrame);//Info bounds.
|
||||||
|
|
||||||
w = SetTabOrder(this, w, ui.InfoBoundsTable);
|
w = SetTabOrder(this, w, ui.InfoBoundsTable);
|
||||||
w = SetTabOrder(this, w, ui.InfoFileOpeningGroupBox);
|
w = SetTabOrder(this, w, ui.InfoFileOpeningGroupBox);
|
||||||
w = SetTabOrder(this, w, ui.InfoFileOpeningTextEdit);
|
w = SetTabOrder(this, w, ui.InfoFileOpeningTextEdit);
|
||||||
@ -872,7 +834,6 @@ void Fractorium::ToggleTableCol(QTableView* table, int logicalIndex)
|
|||||||
auto model = table->model();
|
auto model = table->model();
|
||||||
int rows = model->rowCount();
|
int rows = model->rowCount();
|
||||||
bool shift = QGuiApplication::keyboardModifiers().testFlag(Qt::ShiftModifier);
|
bool shift = QGuiApplication::keyboardModifiers().testFlag(Qt::ShiftModifier);
|
||||||
|
|
||||||
auto tableWidget = qobject_cast<QTableWidget*>(table);
|
auto tableWidget = qobject_cast<QTableWidget*>(table);
|
||||||
|
|
||||||
if (tableWidget)
|
if (tableWidget)
|
||||||
|
@ -306,7 +306,7 @@ protected:
|
|||||||
virtual void dragEnterEvent(QDragEnterEvent* e) override;
|
virtual void dragEnterEvent(QDragEnterEvent* e) override;
|
||||||
virtual void dragMoveEvent(QDragMoveEvent* e) override;
|
virtual void dragMoveEvent(QDragMoveEvent* e) override;
|
||||||
virtual void dropEvent(QDropEvent* e) override;
|
virtual void dropEvent(QDropEvent* e) override;
|
||||||
virtual void showEvent(QShowEvent *e) override;
|
virtual void showEvent(QShowEvent* e) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void InitMenusUI();
|
void InitMenusUI();
|
||||||
@ -499,7 +499,7 @@ private:
|
|||||||
int m_VarSortMode;
|
int m_VarSortMode;
|
||||||
int m_PaletteSortMode;
|
int m_PaletteSortMode;
|
||||||
int m_PreviousPaletteRow;
|
int m_PreviousPaletteRow;
|
||||||
OpenCLInfo& m_Info;
|
shared_ptr<OpenCLInfo> m_Info;
|
||||||
unique_ptr<FractoriumEmberControllerBase> m_Controller;
|
unique_ptr<FractoriumEmberControllerBase> m_Controller;
|
||||||
Ui::FractoriumClass ui;
|
Ui::FractoriumClass ui;
|
||||||
};
|
};
|
||||||
|
@ -71,7 +71,7 @@ static QWidget* SetTabOrder(QWidget* p, QWidget* w1, QWidget* w2)
|
|||||||
/// <param name="s">The string to convert</param>
|
/// <param name="s">The string to convert</param>
|
||||||
/// <param name="ok">Pointer to boolean which stores the success value of the conversion</param>
|
/// <param name="ok">Pointer to boolean which stores the success value of the conversion</param>
|
||||||
/// <returns>The converted value if successful, else 0.</returns>
|
/// <returns>The converted value if successful, else 0.</returns>
|
||||||
static double ToDouble(const QString &s, bool *ok)
|
static double ToDouble(const QString& s, bool* ok)
|
||||||
{
|
{
|
||||||
return QLocale::system().toDouble(s, ok);
|
return QLocale::system().toDouble(s, ok);
|
||||||
}
|
}
|
||||||
@ -123,7 +123,6 @@ static QColor VisibleColor(const QColor& color)
|
|||||||
int delta = (color.red() * 0.299) + //Magic numbers gotten from a Stack Overflow post.
|
int delta = (color.red() * 0.299) + //Magic numbers gotten from a Stack Overflow post.
|
||||||
(color.green() * 0.587) +
|
(color.green() * 0.587) +
|
||||||
(color.blue() * 0.114);
|
(color.blue() * 0.114);
|
||||||
|
|
||||||
QColor textColor = (255 - delta < threshold) ? QColor(0, 0, 0) : QColor(255, 255, 255);
|
QColor textColor = (255 - delta < threshold) ? QColor(0, 0, 0) : QColor(255, 255, 255);
|
||||||
return textColor;
|
return textColor;
|
||||||
}
|
}
|
||||||
@ -196,9 +195,7 @@ static intmax_t IsXformLinked(Ember<T>& ember, Xform<T>* xform)
|
|||||||
static vector<pair<size_t, size_t>> Devices(const QList<QVariant>& selectedDevices)
|
static vector<pair<size_t, size_t>> Devices(const QList<QVariant>& selectedDevices)
|
||||||
{
|
{
|
||||||
vector<pair<size_t, size_t>> vec;
|
vector<pair<size_t, size_t>> vec;
|
||||||
OpenCLInfo& info = OpenCLInfo::Instance();
|
auto& devices = OpenCLInfo::Instance()->DeviceIndices();
|
||||||
auto& devices = info.DeviceIndices();
|
|
||||||
|
|
||||||
vec.reserve(selectedDevices.size());
|
vec.reserve(selectedDevices.size());
|
||||||
|
|
||||||
for (size_t i = 0; i < selectedDevices.size(); i++)
|
for (size_t i = 0; i < selectedDevices.size(); i++)
|
||||||
@ -223,8 +220,7 @@ static vector<pair<size_t, size_t>> Devices(const QList<QVariant>& selectedDevic
|
|||||||
static void SetupDeviceTable(QTableWidget* table, const QList<QVariant>& settingsDevices)
|
static void SetupDeviceTable(QTableWidget* table, const QList<QVariant>& settingsDevices)
|
||||||
{
|
{
|
||||||
bool primary = false;
|
bool primary = false;
|
||||||
auto& deviceNames = OpenCLInfo::Instance().AllDeviceNames();
|
auto& deviceNames = OpenCLInfo::Instance()->AllDeviceNames();
|
||||||
|
|
||||||
table->clearContents();
|
table->clearContents();
|
||||||
table->setRowCount(deviceNames.size());
|
table->setRowCount(deviceNames.size());
|
||||||
|
|
||||||
@ -233,7 +229,6 @@ static void SetupDeviceTable(QTableWidget* table, const QList<QVariant>& setting
|
|||||||
auto checkItem = new QTableWidgetItem();
|
auto checkItem = new QTableWidgetItem();
|
||||||
auto radio = new QRadioButton();
|
auto radio = new QRadioButton();
|
||||||
auto deviceItem = new QTableWidgetItem(QString::fromStdString(deviceNames[i]));
|
auto deviceItem = new QTableWidgetItem(QString::fromStdString(deviceNames[i]));
|
||||||
|
|
||||||
table->setItem(i, 0, checkItem);
|
table->setItem(i, 0, checkItem);
|
||||||
table->setCellWidget(i, 1, radio);
|
table->setCellWidget(i, 1, radio);
|
||||||
table->setItem(i, 2, deviceItem);
|
table->setItem(i, 2, deviceItem);
|
||||||
|
@ -3,18 +3,14 @@
|
|||||||
#include "Fractorium.h"
|
#include "Fractorium.h"
|
||||||
#include "GLEmberController.h"
|
#include "GLEmberController.h"
|
||||||
|
|
||||||
#define SAVE_EACH 1
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Constructor which initializes the non-templated members contained in this class.
|
/// Constructor which initializes the non-templated members contained in this class.
|
||||||
/// The renderer, other templated members and GUI setup will be done in the templated derived controller class.
|
/// The renderer, other templated members and GUI setup will be done in the templated derived controller class.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="fractorium">Pointer to the main window.</param>
|
/// <param name="fractorium">Pointer to the main window.</param>
|
||||||
FractoriumEmberControllerBase::FractoriumEmberControllerBase(Fractorium* fractorium)
|
FractoriumEmberControllerBase::FractoriumEmberControllerBase(Fractorium* fractorium)
|
||||||
: m_Info(OpenCLInfo::Instance())
|
|
||||||
{
|
{
|
||||||
Timing t;
|
Timing t;
|
||||||
|
|
||||||
m_Rendering = false;
|
m_Rendering = false;
|
||||||
m_Shared = true;
|
m_Shared = true;
|
||||||
m_FailedRenders = 0;
|
m_FailedRenders = 0;
|
||||||
@ -25,12 +21,11 @@ FractoriumEmberControllerBase::FractoriumEmberControllerBase(Fractorium* fractor
|
|||||||
m_Fractorium = fractorium;
|
m_Fractorium = fractorium;
|
||||||
m_RenderTimer = nullptr;
|
m_RenderTimer = nullptr;
|
||||||
m_RenderRestartTimer = nullptr;
|
m_RenderRestartTimer = nullptr;
|
||||||
|
m_Info = OpenCLInfo::Instance();
|
||||||
m_Rand = QTIsaac<ISAAC_SIZE, ISAAC_INT>(ISAAC_INT(t.Tic()), ISAAC_INT(t.Tic() * 2), ISAAC_INT(t.Tic() * 3));//Ensure a different rand seed on each instance.
|
m_Rand = QTIsaac<ISAAC_SIZE, ISAAC_INT>(ISAAC_INT(t.Tic()), ISAAC_INT(t.Tic() * 2), ISAAC_INT(t.Tic() * 3));//Ensure a different rand seed on each instance.
|
||||||
|
|
||||||
m_RenderTimer = new QTimer(m_Fractorium);
|
m_RenderTimer = new QTimer(m_Fractorium);
|
||||||
m_RenderTimer->setInterval(0);
|
m_RenderTimer->setInterval(0);
|
||||||
m_Fractorium->connect(m_RenderTimer, SIGNAL(timeout()), SLOT(IdleTimer()));
|
m_Fractorium->connect(m_RenderTimer, SIGNAL(timeout()), SLOT(IdleTimer()));
|
||||||
|
|
||||||
m_RenderRestartTimer = new QTimer(m_Fractorium);
|
m_RenderRestartTimer = new QTimer(m_Fractorium);
|
||||||
m_Fractorium->connect(m_RenderRestartTimer, SIGNAL(timeout()), SLOT(StartRenderTimer()));
|
m_Fractorium->connect(m_RenderRestartTimer, SIGNAL(timeout()), SLOT(StartRenderTimer()));
|
||||||
}
|
}
|
||||||
@ -78,35 +73,27 @@ FractoriumEmberController<T>::FractoriumEmberController(Fractorium* fractorium)
|
|||||||
|
|
||||||
//Initial combo change event to fill the palette table will be called automatically later.
|
//Initial combo change event to fill the palette table will be called automatically later.
|
||||||
|
|
||||||
// Look hard for a palette.
|
//Look hard for a palette.
|
||||||
|
if (!(InitPaletteList(QDir::currentPath().toLocal8Bit().data()) ||
|
||||||
// TODO
|
|
||||||
// QStandardPaths::AppConfigLocation -- errors out, not a member.
|
|
||||||
// QStandardPaths::DataLocation -- how to parse this? It should include "/usr/share/fractorium" on Linux.
|
|
||||||
|
|
||||||
if ( ! (InitPaletteList(QDir::currentPath().toLocal8Bit().data()) ||
|
|
||||||
InitPaletteList(QDir::homePath().toLocal8Bit().data()) ||
|
InitPaletteList(QDir::homePath().toLocal8Bit().data()) ||
|
||||||
InitPaletteList(QCoreApplication::applicationDirPath().toLocal8Bit().data()) ||
|
InitPaletteList(QCoreApplication::applicationDirPath().toLocal8Bit().data()) ||
|
||||||
InitPaletteList(QString("/usr/local/share/fractorium").toLocal8Bit().data()) ||
|
InitPaletteList(QString("/usr/local/share/fractorium").toLocal8Bit().data()) ||
|
||||||
InitPaletteList(QString("/usr/share/fractorium").toLocal8Bit().data())) )
|
InitPaletteList(QString("/usr/share/fractorium").toLocal8Bit().data())) )
|
||||||
{
|
{
|
||||||
// TODO better error dialog
|
|
||||||
throw "No palettes found, exiting.";
|
throw "No palettes found, exiting.";
|
||||||
}
|
}
|
||||||
|
|
||||||
BackgroundChanged(QColor(0, 0, 0));//Default to black.
|
BackgroundChanged(QColor(0, 0, 0));//Default to black.
|
||||||
ClearUndo();
|
ClearUndo();
|
||||||
|
|
||||||
m_PreviewRenderer->Callback(nullptr);
|
m_PreviewRenderer->Callback(nullptr);
|
||||||
m_PreviewRenderer->NumChannels(4);
|
m_PreviewRenderer->NumChannels(4);
|
||||||
m_PreviewRenderer->EarlyClip(m_Fractorium->m_Settings->EarlyClip());
|
m_PreviewRenderer->EarlyClip(m_Fractorium->m_Settings->EarlyClip());
|
||||||
m_PreviewRenderer->YAxisUp(m_Fractorium->m_Settings->YAxisUp());
|
m_PreviewRenderer->YAxisUp(m_Fractorium->m_Settings->YAxisUp());
|
||||||
m_PreviewRenderer->SetEmber(m_Ember);//Give it an initial ember, will be updated many times later.
|
m_PreviewRenderer->SetEmber(m_Ember);//Give it an initial ember, will be updated many times later.
|
||||||
//m_PreviewRenderer->ThreadCount(1);//For debugging.
|
//m_PreviewRenderer->ThreadCount(1);//For debugging.
|
||||||
|
|
||||||
m_PreviewRenderFunc = [&](uint start, uint end)
|
m_PreviewRenderFunc = [&](uint start, uint end)
|
||||||
{
|
{
|
||||||
while(m_PreviewRun || m_PreviewRunning)
|
while (m_PreviewRun || m_PreviewRunning)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -120,7 +107,6 @@ FractoriumEmberController<T>::FractoriumEmberController(Fractorium* fractorium)
|
|||||||
for (size_t i = start; m_PreviewRun && i < end && i < m_EmberFile.Size(); i++)
|
for (size_t i = start; m_PreviewRun && i < end && i < m_EmberFile.Size(); i++)
|
||||||
{
|
{
|
||||||
Ember<T> ember = m_EmberFile.m_Embers[i];
|
Ember<T> ember = m_EmberFile.m_Embers[i];
|
||||||
|
|
||||||
ember.SyncSize();
|
ember.SyncSize();
|
||||||
ember.SetSizeAndAdjustScale(PREVIEW_SIZE, PREVIEW_SIZE, false, SCALE_WIDTH);
|
ember.SetSizeAndAdjustScale(PREVIEW_SIZE, PREVIEW_SIZE, false, SCALE_WIDTH);
|
||||||
ember.m_TemporalSamples = 1;
|
ember.m_TemporalSamples = 1;
|
||||||
@ -140,7 +126,6 @@ FractoriumEmberController<T>::FractoriumEmberController(Fractorium* fractorium)
|
|||||||
Q_ARG(vector<byte>&, m_PreviewFinalImage),
|
Q_ARG(vector<byte>&, m_PreviewFinalImage),
|
||||||
Q_ARG(uint, PREVIEW_SIZE),
|
Q_ARG(uint, PREVIEW_SIZE),
|
||||||
Q_ARG(uint, PREVIEW_SIZE));
|
Q_ARG(uint, PREVIEW_SIZE));
|
||||||
|
|
||||||
//treeItem->SetImage(m_PreviewFinalImage, PREVIEW_SIZE, PREVIEW_SIZE);
|
//treeItem->SetImage(m_PreviewFinalImage, PREVIEW_SIZE, PREVIEW_SIZE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -287,7 +272,6 @@ void FractoriumEmberController<T>::UpdateXform(std::function<void(Xform<T>*)> fu
|
|||||||
if (Xform<T>* xform = CurrentXform())
|
if (Xform<T>* xform = CurrentXform())
|
||||||
func(xform);
|
func(xform);
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case eXformUpdate::UPDATE_ALL:
|
case eXformUpdate::UPDATE_ALL:
|
||||||
@ -295,7 +279,6 @@ void FractoriumEmberController<T>::UpdateXform(std::function<void(Xform<T>*)> fu
|
|||||||
while (Xform<T>* xform = m_Ember.GetTotalXform(i++))
|
while (Xform<T>* xform = m_Ember.GetTotalXform(i++))
|
||||||
func(xform);
|
func(xform);
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case eXformUpdate::UPDATE_ALL_EXCEPT_FINAL:
|
case eXformUpdate::UPDATE_ALL_EXCEPT_FINAL:
|
||||||
@ -304,7 +287,6 @@ void FractoriumEmberController<T>::UpdateXform(std::function<void(Xform<T>*)> fu
|
|||||||
while (Xform<T>* xform = m_Ember.GetXform(i++))
|
while (Xform<T>* xform = m_Ember.GetXform(i++))
|
||||||
func(xform);
|
func(xform);
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -329,7 +311,6 @@ void FractoriumEmberController<T>::SetEmberPrivate(const Ember<U>& ember, bool v
|
|||||||
|
|
||||||
size_t w = m_Ember.m_FinalRasW;//Cache values for use below.
|
size_t w = m_Ember.m_FinalRasW;//Cache values for use below.
|
||||||
size_t h = m_Ember.m_FinalRasH;
|
size_t h = m_Ember.m_FinalRasH;
|
||||||
|
|
||||||
m_Ember = ember;
|
m_Ember = ember;
|
||||||
|
|
||||||
if (!verbatim)
|
if (!verbatim)
|
||||||
@ -340,13 +321,9 @@ void FractoriumEmberController<T>::SetEmberPrivate(const Ember<U>& ember, bool v
|
|||||||
m_Ember.m_Supersample = m_Fractorium->m_SupersampleSpin->value();
|
m_Ember.m_Supersample = m_Fractorium->m_SupersampleSpin->value();
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef SAVE_EACH
|
static EmberToXml<T> writer;//Save parameters of last full render just in case there is a crash.
|
||||||
static EmberToXml<T> writer;
|
|
||||||
string filename = "last.flame";
|
string filename = "last.flame";
|
||||||
|
|
||||||
writer.Save(filename.c_str(), m_Ember, 0, true, false, true);
|
writer.Save(filename.c_str(), m_Ember, 0, true, false, true);
|
||||||
#endif
|
|
||||||
|
|
||||||
m_GLController->ResetMouseState();
|
m_GLController->ResetMouseState();
|
||||||
FillXforms();//Must do this first because the palette setup in FillParamTablesAndPalette() uses the xforms combo.
|
FillXforms();//Must do this first because the palette setup in FillParamTablesAndPalette() uses the xforms combo.
|
||||||
FillParamTablesAndPalette();
|
FillParamTablesAndPalette();
|
||||||
|
@ -261,7 +261,7 @@ protected:
|
|||||||
Fractorium* m_Fractorium;
|
Fractorium* m_Fractorium;
|
||||||
QTimer* m_RenderTimer;
|
QTimer* m_RenderTimer;
|
||||||
QTimer* m_RenderRestartTimer;
|
QTimer* m_RenderRestartTimer;
|
||||||
OpenCLInfo& m_Info;
|
shared_ptr<OpenCLInfo> m_Info;
|
||||||
};
|
};
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -8,20 +8,19 @@ void Fractorium::InitInfoUI()
|
|||||||
{
|
{
|
||||||
auto treeHeader = ui.SummaryTree->header();
|
auto treeHeader = ui.SummaryTree->header();
|
||||||
auto tableHeader = ui.SummaryTable->horizontalHeader();
|
auto tableHeader = ui.SummaryTable->horizontalHeader();
|
||||||
|
|
||||||
treeHeader->setVisible(true);
|
treeHeader->setVisible(true);
|
||||||
treeHeader->setSectionsClickable(true);
|
treeHeader->setSectionsClickable(true);
|
||||||
treeHeader->setSectionResizeMode(QHeaderView::ResizeToContents);
|
treeHeader->setSectionResizeMode(QHeaderView::ResizeToContents);
|
||||||
connect(treeHeader, SIGNAL(sectionClicked(int)), this, SLOT(OnSummaryTreeHeaderSectionClicked(int)), Qt::QueuedConnection);
|
connect(treeHeader, SIGNAL(sectionClicked(int)), this, SLOT(OnSummaryTreeHeaderSectionClicked(int)), Qt::QueuedConnection);
|
||||||
connect(tableHeader, SIGNAL(sectionResized(int, int, int)), this, SLOT(OnSummaryTableHeaderResized(int, int, int)), Qt::QueuedConnection);
|
connect(tableHeader, SIGNAL(sectionResized(int, int, int)), this, SLOT(OnSummaryTableHeaderResized(int, int, int)), Qt::QueuedConnection);
|
||||||
SetFixedTableHeader(ui.SummaryTable->verticalHeader());
|
SetFixedTableHeader(ui.SummaryTable->verticalHeader());
|
||||||
|
|
||||||
ui.SummaryTable->setItem(0, 0, m_InfoNameItem = new QTableWidgetItem(""));
|
ui.SummaryTable->setItem(0, 0, m_InfoNameItem = new QTableWidgetItem(""));
|
||||||
ui.SummaryTable->setItem(1, 0, m_InfoPaletteItem = new QTableWidgetItem(""));
|
ui.SummaryTable->setItem(1, 0, m_InfoPaletteItem = new QTableWidgetItem(""));
|
||||||
ui.SummaryTable->setItem(2, 0, m_Info3dItem = new QTableWidgetItem(""));
|
ui.SummaryTable->setItem(2, 0, m_Info3dItem = new QTableWidgetItem(""));
|
||||||
ui.SummaryTable->setItem(3, 0, m_InfoXaosItem = new QTableWidgetItem(""));
|
ui.SummaryTable->setItem(3, 0, m_InfoXaosItem = new QTableWidgetItem(""));
|
||||||
ui.SummaryTable->setItem(4, 0, m_InfoXformCountItem = new QTableWidgetItem(""));
|
ui.SummaryTable->setItem(4, 0, m_InfoXformCountItem = new QTableWidgetItem(""));
|
||||||
ui.SummaryTable->setItem(5, 0, m_InfoFinalXformItem = new QTableWidgetItem(""));
|
ui.SummaryTable->setItem(5, 0, m_InfoFinalXformItem = new QTableWidgetItem(""));
|
||||||
|
ui.InfoTabWidget->setCurrentIndex(0);//Make summary tab focused by default.
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -93,7 +92,6 @@ void FractoriumEmberController<T>::FillSummary()
|
|||||||
m_Fractorium->m_InfoXaosItem->setText(m_Ember.XaosPresent() ? "Yes" : "No");
|
m_Fractorium->m_InfoXaosItem->setText(m_Ember.XaosPresent() ? "Yes" : "No");
|
||||||
m_Fractorium->m_InfoXformCountItem->setText(QString::number(m_Ember.XformCount()));
|
m_Fractorium->m_InfoXformCountItem->setText(QString::number(m_Ember.XformCount()));
|
||||||
m_Fractorium->m_InfoFinalXformItem->setText(m_Ember.UseFinalXform() ? "Yes" : "No");
|
m_Fractorium->m_InfoFinalXformItem->setText(m_Ember.UseFinalXform() ? "Yes" : "No");
|
||||||
|
|
||||||
QPixmap pixmap = QPixmap::fromImage(m_FinalPaletteImage);//Create a QPixmap out of the QImage.
|
QPixmap pixmap = QPixmap::fromImage(m_FinalPaletteImage);//Create a QPixmap out of the QImage.
|
||||||
QSize size(table->columnWidth(0), table->rowHeight(1) + 1);
|
QSize size(table->columnWidth(0), table->rowHeight(1) + 1);
|
||||||
m_Fractorium->m_InfoPaletteItem->setData(Qt::DecorationRole, pixmap.scaled(size, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
|
m_Fractorium->m_InfoPaletteItem->setData(Qt::DecorationRole, pixmap.scaled(size, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
|
||||||
@ -121,7 +119,6 @@ void FractoriumEmberController<T>::FillSummary()
|
|||||||
item1->setText(0, "Final xform");
|
item1->setText(0, "Final xform");
|
||||||
|
|
||||||
item1->setText(1, xform->m_Name.c_str());
|
item1->setText(1, xform->m_Name.c_str());
|
||||||
|
|
||||||
auto affineItem = new QTreeWidgetItem(item1);
|
auto affineItem = new QTreeWidgetItem(item1);
|
||||||
affineItem->setText(0, "Affine");
|
affineItem->setText(0, "Affine");
|
||||||
|
|
||||||
@ -139,7 +136,6 @@ void FractoriumEmberController<T>::FillSummary()
|
|||||||
}
|
}
|
||||||
|
|
||||||
affineItem->setText(1, as);
|
affineItem->setText(1, as);
|
||||||
|
|
||||||
auto colorIndexItem = new QTreeWidgetItem(item1);
|
auto colorIndexItem = new QTreeWidgetItem(item1);
|
||||||
colorIndexItem->setText(0, "Color index");
|
colorIndexItem->setText(0, "Color index");
|
||||||
colorIndexItem->setText(1, QLocale::system().toString(xform->m_ColorX, pc, p));
|
colorIndexItem->setText(1, QLocale::system().toString(xform->m_ColorX, pc, p));
|
||||||
@ -147,15 +143,12 @@ void FractoriumEmberController<T>::FillSummary()
|
|||||||
color.setAlphaF(xform->m_Opacity);
|
color.setAlphaF(xform->m_Opacity);
|
||||||
colorIndexItem->setBackgroundColor(1, color);
|
colorIndexItem->setBackgroundColor(1, color);
|
||||||
colorIndexItem->setTextColor(1, VisibleColor(color));
|
colorIndexItem->setTextColor(1, VisibleColor(color));
|
||||||
|
|
||||||
auto colorSpeedItem = new QTreeWidgetItem(item1);
|
auto colorSpeedItem = new QTreeWidgetItem(item1);
|
||||||
colorSpeedItem->setText(0, "Color speed");
|
colorSpeedItem->setText(0, "Color speed");
|
||||||
colorSpeedItem->setText(1, QLocale::system().toString(xform->m_ColorSpeed, pc, p));
|
colorSpeedItem->setText(1, QLocale::system().toString(xform->m_ColorSpeed, pc, p));
|
||||||
|
|
||||||
auto opacityItem = new QTreeWidgetItem(item1);
|
auto opacityItem = new QTreeWidgetItem(item1);
|
||||||
opacityItem->setText(0, "Opacity");
|
opacityItem->setText(0, "Opacity");
|
||||||
opacityItem->setText(1, QLocale::system().toString(xform->m_Opacity, pc, p));
|
opacityItem->setText(1, QLocale::system().toString(xform->m_Opacity, pc, p));
|
||||||
|
|
||||||
auto dcItem = new QTreeWidgetItem(item1);
|
auto dcItem = new QTreeWidgetItem(item1);
|
||||||
dcItem->setText(0, "Direct color");
|
dcItem->setText(0, "Direct color");
|
||||||
dcItem->setText(1, QLocale::system().toString(xform->m_DirectColor, pc, p));
|
dcItem->setText(1, QLocale::system().toString(xform->m_DirectColor, pc, p));
|
||||||
@ -163,7 +156,6 @@ void FractoriumEmberController<T>::FillSummary()
|
|||||||
while (auto var = xform->GetVariation(i++))
|
while (auto var = xform->GetVariation(i++))
|
||||||
{
|
{
|
||||||
auto vitem = new QTreeWidgetItem(item1);
|
auto vitem = new QTreeWidgetItem(item1);
|
||||||
|
|
||||||
vitem->setText(0, QString::fromStdString(var->Name()));
|
vitem->setText(0, QString::fromStdString(var->Name()));
|
||||||
vitem->setText(1, QLocale::system().toString(var->m_Weight, pc, vp).rightJustified(vlen, ' '));
|
vitem->setText(1, QLocale::system().toString(var->m_Weight, pc, vp).rightJustified(vlen, ' '));
|
||||||
|
|
||||||
@ -176,7 +168,6 @@ void FractoriumEmberController<T>::FillSummary()
|
|||||||
if (!params[j].IsPrecalc())
|
if (!params[j].IsPrecalc())
|
||||||
{
|
{
|
||||||
auto pitem = new QTreeWidgetItem(vitem);
|
auto pitem = new QTreeWidgetItem(vitem);
|
||||||
|
|
||||||
pitem->setText(0, params[j].Name().c_str());
|
pitem->setText(0, params[j].Name().c_str());
|
||||||
pitem->setText(1, QLocale::system().toString(params[j].ParamVal(), pc, vp).rightJustified(vlen, ' '));
|
pitem->setText(1, QLocale::system().toString(params[j].ParamVal(), pc, vp).rightJustified(vlen, ' '));
|
||||||
}
|
}
|
||||||
@ -229,19 +220,16 @@ void Fractorium::UpdateHistogramBounds()
|
|||||||
sprintf_s(m_LRString, 32, "LR: %3.3f, %3.3f", -r->LowerLeftX(), r->LowerLeftY());
|
sprintf_s(m_LRString, 32, "LR: %3.3f, %3.3f", -r->LowerLeftX(), r->LowerLeftY());
|
||||||
sprintf_s(m_LLString, 32, "LL: %3.3f, %3.3f", r->LowerLeftX(), r->LowerLeftY());
|
sprintf_s(m_LLString, 32, "LL: %3.3f, %3.3f", r->LowerLeftX(), r->LowerLeftY());
|
||||||
sprintf_s(m_WHString, 32, "W x H: %4lu x %4lu", r->SuperRasW(), r->SuperRasH());
|
sprintf_s(m_WHString, 32, "W x H: %4lu x %4lu", r->SuperRasW(), r->SuperRasH());
|
||||||
|
|
||||||
ui.InfoBoundsLabelUL->setText(QString(m_ULString));
|
ui.InfoBoundsLabelUL->setText(QString(m_ULString));
|
||||||
ui.InfoBoundsLabelUR->setText(QString(m_URString));
|
ui.InfoBoundsLabelUR->setText(QString(m_URString));
|
||||||
ui.InfoBoundsLabelLR->setText(QString(m_LRString));
|
ui.InfoBoundsLabelLR->setText(QString(m_LRString));
|
||||||
ui.InfoBoundsLabelLL->setText(QString(m_LLString));
|
ui.InfoBoundsLabelLL->setText(QString(m_LLString));
|
||||||
ui.InfoBoundsLabelWH->setText(QString(m_WHString));
|
ui.InfoBoundsLabelWH->setText(QString(m_WHString));
|
||||||
|
|
||||||
ui.InfoBoundsTable->item(0, 1)->setText(ToString<qulonglong>(r->GutterWidth()));
|
ui.InfoBoundsTable->item(0, 1)->setText(ToString<qulonglong>(r->GutterWidth()));
|
||||||
|
|
||||||
if (r->GetDensityFilter())
|
if (r->GetDensityFilter())
|
||||||
{
|
{
|
||||||
uint deWidth = (r->GetDensityFilter()->FilterWidth() * 2) + 1;
|
uint deWidth = (r->GetDensityFilter()->FilterWidth() * 2) + 1;
|
||||||
|
|
||||||
sprintf_s(m_DEString, 16, "%d x %d", deWidth, deWidth);
|
sprintf_s(m_DEString, 16, "%d x %d", deWidth, deWidth);
|
||||||
ui.InfoBoundsTable->item(1, 1)->setText(QString(m_DEString));
|
ui.InfoBoundsTable->item(1, 1)->setText(QString(m_DEString));
|
||||||
}
|
}
|
||||||
|
@ -11,7 +11,6 @@ void Fractorium::InitParamsUI()
|
|||||||
double dmax = numeric_limits<double>::max();
|
double dmax = numeric_limits<double>::max();
|
||||||
vector<string> comboVals;
|
vector<string> comboVals;
|
||||||
QTableWidget* table = ui.ColorTable;
|
QTableWidget* table = ui.ColorTable;
|
||||||
|
|
||||||
//Because QTableWidget does not allow for a single title bar/header
|
//Because QTableWidget does not allow for a single title bar/header
|
||||||
//at the top of a multi-column table, the workaround hack is to just
|
//at the top of a multi-column table, the workaround hack is to just
|
||||||
//make another single column table with no rows, and use the single
|
//make another single column table with no rows, and use the single
|
||||||
@ -21,14 +20,12 @@ void Fractorium::InitParamsUI()
|
|||||||
SetFixedTableHeader(ui.GeometryTableHeader->horizontalHeader());
|
SetFixedTableHeader(ui.GeometryTableHeader->horizontalHeader());
|
||||||
SetFixedTableHeader(ui.FilterTableHeader->horizontalHeader());
|
SetFixedTableHeader(ui.FilterTableHeader->horizontalHeader());
|
||||||
SetFixedTableHeader(ui.IterationTableHeader->horizontalHeader());
|
SetFixedTableHeader(ui.IterationTableHeader->horizontalHeader());
|
||||||
|
|
||||||
//Color.
|
//Color.
|
||||||
SetupSpinner<DoubleSpinBox, double>(table, this, row, 1, m_BrightnessSpin, spinHeight, 0.05, 100, 1, SIGNAL(valueChanged(double)), SLOT(OnBrightnessChanged(double)), true, 4.0, 4.0, 4.0);
|
SetupSpinner<DoubleSpinBox, double>(table, this, row, 1, m_BrightnessSpin, spinHeight, 0.05, 100, 1, SIGNAL(valueChanged(double)), SLOT(OnBrightnessChanged(double)), true, 4.0, 4.0, 4.0);
|
||||||
SetupSpinner<DoubleSpinBox, double>(table, this, row, 1, m_GammaSpin, spinHeight, 1, 9999, 0.5, SIGNAL(valueChanged(double)), SLOT(OnGammaChanged(double)), true, 4.0, 4.0, 4.0);
|
SetupSpinner<DoubleSpinBox, double>(table, this, row, 1, m_GammaSpin, spinHeight, 1, 9999, 0.5, SIGNAL(valueChanged(double)), SLOT(OnGammaChanged(double)), true, 4.0, 4.0, 4.0);
|
||||||
SetupSpinner<DoubleSpinBox, double>(table, this, row, 1, m_GammaThresholdSpin, spinHeight, 0, 10, 0.01, SIGNAL(valueChanged(double)), SLOT(OnGammaThresholdChanged(double)), true, 0.1, 0.1, 0.0);
|
SetupSpinner<DoubleSpinBox, double>(table, this, row, 1, m_GammaThresholdSpin, spinHeight, 0, 10, 0.01, SIGNAL(valueChanged(double)), SLOT(OnGammaThresholdChanged(double)), true, 0.1, 0.1, 0.0);
|
||||||
SetupSpinner<DoubleSpinBox, double>(table, this, row, 1, m_VibrancySpin, spinHeight, 0, 30, 0.01, SIGNAL(valueChanged(double)), SLOT(OnVibrancyChanged(double)), true, 1.0, 1.0, 0.0);
|
SetupSpinner<DoubleSpinBox, double>(table, this, row, 1, m_VibrancySpin, spinHeight, 0, 30, 0.01, SIGNAL(valueChanged(double)), SLOT(OnVibrancyChanged(double)), true, 1.0, 1.0, 0.0);
|
||||||
SetupSpinner<DoubleSpinBox, double>(table, this, row, 1, m_HighlightSpin, spinHeight, -1.0, 2.0, 0.1, SIGNAL(valueChanged(double)), SLOT(OnHighlightPowerChanged(double)), true, -1.0, -1.0, -1.0);
|
SetupSpinner<DoubleSpinBox, double>(table, this, row, 1, m_HighlightSpin, spinHeight, -1.0, 10, 0.1, SIGNAL(valueChanged(double)), SLOT(OnHighlightPowerChanged(double)), true, -1.0, -1.0, -1.0);
|
||||||
|
|
||||||
m_GammaThresholdSpin->setDecimals(4);
|
m_GammaThresholdSpin->setDecimals(4);
|
||||||
m_BackgroundColorButton = new QPushButton("...", table);
|
m_BackgroundColorButton = new QPushButton("...", table);
|
||||||
m_BackgroundColorButton->setMinimumWidth(21);
|
m_BackgroundColorButton->setMinimumWidth(21);
|
||||||
@ -37,11 +34,10 @@ void Fractorium::InitParamsUI()
|
|||||||
table->item(row, 1)->setTextAlignment(Qt::AlignRight | Qt::AlignVCenter);
|
table->item(row, 1)->setTextAlignment(Qt::AlignRight | Qt::AlignVCenter);
|
||||||
connect(m_BackgroundColorButton, SIGNAL(clicked(bool)), this, SLOT(OnBackgroundColorButtonClicked(bool)), Qt::QueuedConnection);
|
connect(m_BackgroundColorButton, SIGNAL(clicked(bool)), this, SLOT(OnBackgroundColorButtonClicked(bool)), Qt::QueuedConnection);
|
||||||
row++;
|
row++;
|
||||||
|
|
||||||
comboVals.push_back("Step");
|
comboVals.push_back("Step");
|
||||||
comboVals.push_back("Linear");
|
comboVals.push_back("Linear");
|
||||||
SetupCombo(table, this, row, 1, m_PaletteModeCombo, comboVals, SIGNAL(currentIndexChanged(int)), SLOT(OnPaletteModeComboCurrentIndexChanged(int)));
|
SetupCombo(table, this, row, 1, m_PaletteModeCombo, comboVals, SIGNAL(currentIndexChanged(int)), SLOT(OnPaletteModeComboCurrentIndexChanged(int)));
|
||||||
|
m_PaletteModeCombo->SetCurrentIndexStealth(PALETTE_LINEAR);
|
||||||
//Geometry.
|
//Geometry.
|
||||||
row = 0;
|
row = 0;
|
||||||
table = ui.GeometryTable;
|
table = ui.GeometryTable;
|
||||||
@ -57,31 +53,24 @@ void Fractorium::InitParamsUI()
|
|||||||
SetupSpinner<DoubleSpinBox, double>(table, this, row, 1, m_PitchSpin, spinHeight, -180, 180, 1, SIGNAL(valueChanged(double)), SLOT(OnPitchChanged(double)), true, 0, 45, 0);
|
SetupSpinner<DoubleSpinBox, double>(table, this, row, 1, m_PitchSpin, spinHeight, -180, 180, 1, SIGNAL(valueChanged(double)), SLOT(OnPitchChanged(double)), true, 0, 45, 0);
|
||||||
SetupSpinner<DoubleSpinBox, double>(table, this, row, 1, m_YawSpin, spinHeight, -180, 180, 1, SIGNAL(valueChanged(double)), SLOT(OnYawChanged(double)), true, 0, 45, 0);
|
SetupSpinner<DoubleSpinBox, double>(table, this, row, 1, m_YawSpin, spinHeight, -180, 180, 1, SIGNAL(valueChanged(double)), SLOT(OnYawChanged(double)), true, 0, 45, 0);
|
||||||
SetupSpinner<DoubleSpinBox, double>(table, this, row, 1, m_DepthBlurSpin, spinHeight, -100, 100, 0.01, SIGNAL(valueChanged(double)), SLOT(OnDepthBlurChanged(double)), true, 0, 1, 0);
|
SetupSpinner<DoubleSpinBox, double>(table, this, row, 1, m_DepthBlurSpin, spinHeight, -100, 100, 0.01, SIGNAL(valueChanged(double)), SLOT(OnDepthBlurChanged(double)), true, 0, 1, 0);
|
||||||
|
|
||||||
//Set w/h max values.
|
//Set w/h max values.
|
||||||
m_CenterXSpin->setDecimals(3);
|
m_CenterXSpin->setDecimals(3);
|
||||||
m_CenterYSpin->setDecimals(3);
|
m_CenterYSpin->setDecimals(3);
|
||||||
m_ZPosSpin->setDecimals(3);
|
m_ZPosSpin->setDecimals(3);
|
||||||
m_PerspectiveSpin->setDecimals(4);
|
m_PerspectiveSpin->setDecimals(4);
|
||||||
m_DepthBlurSpin->setDecimals(3);
|
m_DepthBlurSpin->setDecimals(3);
|
||||||
|
|
||||||
//Filter.
|
//Filter.
|
||||||
row = 0;
|
row = 0;
|
||||||
table = ui.FilterTable;
|
table = ui.FilterTable;
|
||||||
SetupSpinner<DoubleSpinBox, double>(table, this, row, 1, m_SpatialFilterWidthSpin, spinHeight, 0.1, 10, 0.1, SIGNAL(valueChanged(double)), SLOT(OnSpatialFilterWidthChanged(double)), true, 1.0, 1.0, 1.0);
|
SetupSpinner<DoubleSpinBox, double>(table, this, row, 1, m_SpatialFilterWidthSpin, spinHeight, 0.1, 10, 0.1, SIGNAL(valueChanged(double)), SLOT(OnSpatialFilterWidthChanged(double)), true, 1.0, 1.0, 1.0);
|
||||||
|
|
||||||
comboVals = SpatialFilterCreator<float>::FilterTypes();
|
comboVals = SpatialFilterCreator<float>::FilterTypes();
|
||||||
SetupCombo(table, this, row, 1, m_SpatialFilterTypeCombo, comboVals, SIGNAL(currentIndexChanged(const QString&)), SLOT(OnSpatialFilterTypeComboCurrentIndexChanged(const QString&)));
|
SetupCombo(table, this, row, 1, m_SpatialFilterTypeCombo, comboVals, SIGNAL(currentIndexChanged(const QString&)), SLOT(OnSpatialFilterTypeComboCurrentIndexChanged(const QString&)));
|
||||||
|
|
||||||
SetupSpinner<DoubleSpinBox, double>(table, this, row, 1, m_TemporalFilterWidthSpin, spinHeight, 1, 10, 1, SIGNAL(valueChanged(double)), SLOT(OnTemporalFilterWidthChanged(double)), true, 1);
|
SetupSpinner<DoubleSpinBox, double>(table, this, row, 1, m_TemporalFilterWidthSpin, spinHeight, 1, 10, 1, SIGNAL(valueChanged(double)), SLOT(OnTemporalFilterWidthChanged(double)), true, 1);
|
||||||
|
|
||||||
comboVals = TemporalFilterCreator<float>::FilterTypes();
|
comboVals = TemporalFilterCreator<float>::FilterTypes();
|
||||||
SetupCombo(table, this, row, 1, m_TemporalFilterTypeCombo, comboVals, SIGNAL(currentIndexChanged(const QString&)), SLOT(OnTemporalFilterTypeComboCurrentIndexChanged(const QString&)));
|
SetupCombo(table, this, row, 1, m_TemporalFilterTypeCombo, comboVals, SIGNAL(currentIndexChanged(const QString&)), SLOT(OnTemporalFilterTypeComboCurrentIndexChanged(const QString&)));
|
||||||
|
|
||||||
SetupSpinner<DoubleSpinBox, double>(table, this, row, 1, m_DEFilterMinRadiusSpin, spinHeight, 0, 25, 1, SIGNAL(valueChanged(double)), SLOT(OnDEFilterMinRadiusWidthChanged(double)), true, 0, 0, 0);
|
SetupSpinner<DoubleSpinBox, double>(table, this, row, 1, m_DEFilterMinRadiusSpin, spinHeight, 0, 25, 1, SIGNAL(valueChanged(double)), SLOT(OnDEFilterMinRadiusWidthChanged(double)), true, 0, 0, 0);
|
||||||
SetupSpinner<DoubleSpinBox, double>(table, this, row, 1, m_DEFilterMaxRadiusSpin, spinHeight, 0, 25, 1, SIGNAL(valueChanged(double)), SLOT(OnDEFilterMaxRadiusWidthChanged(double)), true, 0.0, 9.0, 0);
|
SetupSpinner<DoubleSpinBox, double>(table, this, row, 1, m_DEFilterMaxRadiusSpin, spinHeight, 0, 25, 1, SIGNAL(valueChanged(double)), SLOT(OnDEFilterMaxRadiusWidthChanged(double)), true, 0.0, 9.0, 0);
|
||||||
SetupSpinner<DoubleSpinBox, double>(table, this, row, 1, m_DECurveSpin, spinHeight, 0.15, 5, 0.1, SIGNAL(valueChanged(double)), SLOT(OnDEFilterCurveWidthChanged(double)), true, 0.4, 0.4, 0.4);
|
SetupSpinner<DoubleSpinBox, double>(table, this, row, 1, m_DECurveSpin, spinHeight, 0.15, 5, 0.1, SIGNAL(valueChanged(double)), SLOT(OnDEFilterCurveWidthChanged(double)), true, 0.4, 0.4, 0.4);
|
||||||
|
|
||||||
//Iteration.
|
//Iteration.
|
||||||
row = 0;
|
row = 0;
|
||||||
table = ui.IterationTable;
|
table = ui.IterationTable;
|
||||||
@ -90,12 +79,10 @@ void Fractorium::InitParamsUI()
|
|||||||
SetupSpinner<DoubleSpinBox, double>(table, this, row, 1, m_QualitySpin, spinHeight, 1, dmax, 50, SIGNAL(valueChanged(double)), SLOT(OnQualityChanged(double)), true, 10, 10, 10);
|
SetupSpinner<DoubleSpinBox, double>(table, this, row, 1, m_QualitySpin, spinHeight, 1, dmax, 50, SIGNAL(valueChanged(double)), SLOT(OnQualityChanged(double)), true, 10, 10, 10);
|
||||||
SetupSpinner<SpinBox, int>( table, this, row, 1, m_SupersampleSpin, spinHeight, 1, 4, 1, SIGNAL(valueChanged(int)), SLOT(OnSupersampleChanged(int)), true, 1, 1, 1);
|
SetupSpinner<SpinBox, int>( table, this, row, 1, m_SupersampleSpin, spinHeight, 1, 4, 1, SIGNAL(valueChanged(int)), SLOT(OnSupersampleChanged(int)), true, 1, 1, 1);
|
||||||
SetupSpinner<SpinBox, int>( table, this, row, 1, m_TemporalSamplesSpin, spinHeight, 1, 5000, 1, SIGNAL(valueChanged(int)), SLOT(OnTemporalSamplesChanged(int)), true, 1000);
|
SetupSpinner<SpinBox, int>( table, this, row, 1, m_TemporalSamplesSpin, spinHeight, 1, 5000, 1, SIGNAL(valueChanged(int)), SLOT(OnTemporalSamplesChanged(int)), true, 1000);
|
||||||
|
|
||||||
comboVals.clear();
|
comboVals.clear();
|
||||||
comboVals.push_back("Step");
|
comboVals.push_back("Step");
|
||||||
comboVals.push_back("Linear");
|
comboVals.push_back("Linear");
|
||||||
SetupCombo(table, this, row, 1, m_AffineInterpTypeCombo, comboVals, SIGNAL(currentIndexChanged(int)), SLOT(OnAffineInterpTypeComboCurrentIndexChanged(int)));
|
SetupCombo(table, this, row, 1, m_AffineInterpTypeCombo, comboVals, SIGNAL(currentIndexChanged(int)), SLOT(OnAffineInterpTypeComboCurrentIndexChanged(int)));
|
||||||
|
|
||||||
comboVals.clear();
|
comboVals.clear();
|
||||||
comboVals.push_back("Linear");
|
comboVals.push_back("Linear");
|
||||||
comboVals.push_back("Smooth");
|
comboVals.push_back("Smooth");
|
||||||
@ -277,10 +264,10 @@ void Fractorium::OnZPosChanged(double d) { m_Controller->ZPosChanged(d); }
|
|||||||
template <typename T> void FractoriumEmberController<T>::PerspectiveChanged(double d) { Update([&] { m_Ember.m_CamPerspective = d; }); }
|
template <typename T> void FractoriumEmberController<T>::PerspectiveChanged(double d) { Update([&] { m_Ember.m_CamPerspective = d; }); }
|
||||||
void Fractorium::OnPerspectiveChanged(double d) { m_Controller->PerspectiveChanged(d); }
|
void Fractorium::OnPerspectiveChanged(double d) { m_Controller->PerspectiveChanged(d); }
|
||||||
|
|
||||||
template <typename T> void FractoriumEmberController<T>::PitchChanged(double d) { Update([&] { m_Ember.m_CamPitch = d * DEG_2_RAD; }); }
|
template <typename T> void FractoriumEmberController<T>::PitchChanged(double d) { Update([&] { m_Ember.m_CamPitch = d* DEG_2_RAD; }); }
|
||||||
void Fractorium::OnPitchChanged(double d) { m_Controller->PitchChanged(d); }
|
void Fractorium::OnPitchChanged(double d) { m_Controller->PitchChanged(d); }
|
||||||
|
|
||||||
template <typename T> void FractoriumEmberController<T>::YawChanged(double d) { Update([&] { m_Ember.m_CamYaw = d * DEG_2_RAD; }); }
|
template <typename T> void FractoriumEmberController<T>::YawChanged(double d) { Update([&] { m_Ember.m_CamYaw = d* DEG_2_RAD; }); }
|
||||||
void Fractorium::OnYawChanged(double d) { m_Controller->YawChanged(d); }
|
void Fractorium::OnYawChanged(double d) { m_Controller->YawChanged(d); }
|
||||||
|
|
||||||
template <typename T> void FractoriumEmberController<T>::DepthBlurChanged(double d) { Update([&] { m_Ember.m_CamDepthBlur = d; }); }
|
template <typename T> void FractoriumEmberController<T>::DepthBlurChanged(double d) { Update([&] { m_Ember.m_CamDepthBlur = d; }); }
|
||||||
@ -545,20 +532,17 @@ void FractoriumEmberController<T>::FillParamTablesAndPalette()
|
|||||||
m_Fractorium->m_TemporalSamplesSpin->SetValueStealth(m_Ember.m_TemporalSamples);
|
m_Fractorium->m_TemporalSamplesSpin->SetValueStealth(m_Ember.m_TemporalSamples);
|
||||||
m_Fractorium->m_AffineInterpTypeCombo->SetCurrentIndexStealth(m_Ember.m_AffineInterp);
|
m_Fractorium->m_AffineInterpTypeCombo->SetCurrentIndexStealth(m_Ember.m_AffineInterp);
|
||||||
m_Fractorium->m_InterpTypeCombo->SetCurrentIndexStealth(m_Ember.m_Interp);
|
m_Fractorium->m_InterpTypeCombo->SetCurrentIndexStealth(m_Ember.m_Interp);
|
||||||
|
|
||||||
//Palette related items:
|
//Palette related items:
|
||||||
//The temp palette is assigned the palette read when the file was parsed/saved. The user can apply adjustments on the GUI later.
|
//The temp palette is assigned the palette read when the file was parsed/saved. The user can apply adjustments on the GUI later.
|
||||||
//These adjustments will be applied to the temp palette, then assigned back to m_Ember.m_Palette.
|
//These adjustments will be applied to the temp palette, then assigned back to m_Ember.m_Palette.
|
||||||
//Normally, the temp palette is assigned whenever the user clicks on a palette cell. But since this is not
|
//Normally, the temp palette is assigned whenever the user clicks on a palette cell. But since this is not
|
||||||
//called in response to that event, it is skipped here so must do it manually.
|
//called in response to that event, it is skipped here so must do it manually.
|
||||||
m_TempPalette = m_Ember.m_Palette;
|
m_TempPalette = m_Ember.m_Palette;
|
||||||
|
|
||||||
//Palette controls are reset on each ember load. This means that if the palette was adjusted, saved, the selected ember
|
//Palette controls are reset on each ember load. This means that if the palette was adjusted, saved, the selected ember
|
||||||
//changed to another, then back, the previously adjusted palette will now be considered the base, and all adjustments set to 0.
|
//changed to another, then back, the previously adjusted palette will now be considered the base, and all adjustments set to 0.
|
||||||
//To fix this, the caller must preserve the temp palette and the adjustment values and reassign. See Fractorium::CreateControllerFromOptions()
|
//To fix this, the caller must preserve the temp palette and the adjustment values and reassign. See Fractorium::CreateControllerFromOptions()
|
||||||
//for an example.
|
//for an example.
|
||||||
m_Fractorium->ResetPaletteControls();
|
m_Fractorium->ResetPaletteControls();
|
||||||
|
|
||||||
auto temp = m_Ember.m_Palette.m_Filename;
|
auto temp = m_Ember.m_Palette.m_Filename;
|
||||||
|
|
||||||
if (temp.get())
|
if (temp.get())
|
||||||
@ -578,7 +562,6 @@ template <typename T>
|
|||||||
void FractoriumEmberController<T>::ParamsToEmber(Ember<T>& ember)
|
void FractoriumEmberController<T>::ParamsToEmber(Ember<T>& ember)
|
||||||
{
|
{
|
||||||
QColor color = m_Fractorium->ui.ColorTable->item(5, 1)->backgroundColor();
|
QColor color = m_Fractorium->ui.ColorTable->item(5, 1)->backgroundColor();
|
||||||
|
|
||||||
ember.m_Brightness = m_Fractorium->m_BrightnessSpin->value();//Color.
|
ember.m_Brightness = m_Fractorium->m_BrightnessSpin->value();//Color.
|
||||||
ember.m_Gamma = m_Fractorium->m_GammaSpin->value();
|
ember.m_Gamma = m_Fractorium->m_GammaSpin->value();
|
||||||
ember.m_GammaThresh = m_Fractorium->m_GammaThresholdSpin->value();
|
ember.m_GammaThresh = m_Fractorium->m_GammaThresholdSpin->value();
|
||||||
@ -614,7 +597,6 @@ void FractoriumEmberController<T>::ParamsToEmber(Ember<T>& ember)
|
|||||||
ember.m_TemporalSamples = m_Fractorium->m_TemporalSamplesSpin->value();
|
ember.m_TemporalSamples = m_Fractorium->m_TemporalSamplesSpin->value();
|
||||||
ember.m_AffineInterp = eAffineInterp(m_Fractorium->m_AffineInterpTypeCombo->currentIndex());
|
ember.m_AffineInterp = eAffineInterp(m_Fractorium->m_AffineInterpTypeCombo->currentIndex());
|
||||||
ember.m_Interp = eInterp(m_Fractorium->m_InterpTypeCombo->currentIndex());
|
ember.m_Interp = eInterp(m_Fractorium->m_InterpTypeCombo->currentIndex());
|
||||||
|
|
||||||
ember.SyncSize();
|
ember.SyncSize();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -648,5 +630,5 @@ void Fractorium::SetScale(double scale)
|
|||||||
template class FractoriumEmberController<float>;
|
template class FractoriumEmberController<float>;
|
||||||
|
|
||||||
#ifdef DO_DOUBLE
|
#ifdef DO_DOUBLE
|
||||||
template class FractoriumEmberController<double>;
|
template class FractoriumEmberController<double>;
|
||||||
#endif
|
#endif
|
||||||
|
@ -69,7 +69,7 @@ void FractoriumEmberControllerBase::Shutdown()
|
|||||||
StopRenderTimer(true);
|
StopRenderTimer(true);
|
||||||
ClearFinalImages();
|
ClearFinalImages();
|
||||||
|
|
||||||
while(m_Fractorium->ui.GLDisplay->Drawing())
|
while (m_Fractorium->ui.GLDisplay->Drawing())
|
||||||
QApplication::processEvents();
|
QApplication::processEvents();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -149,7 +149,6 @@ void FractoriumEmberControllerBase::SaveCurrentRender(const QString& filename, c
|
|||||||
if ((suffix == "jpg" || suffix == "bmp") && channels)
|
if ((suffix == "jpg" || suffix == "bmp") && channels)
|
||||||
{
|
{
|
||||||
RgbaToRgb(pixels, vecRgb, width, height);
|
RgbaToRgb(pixels, vecRgb, width, height);
|
||||||
|
|
||||||
data = vecRgb.data();
|
data = vecRgb.data();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -226,7 +225,6 @@ template <typename T>
|
|||||||
int FractoriumEmberController<T>::ProgressFunc(Ember<T>& ember, void* foo, double fraction, int stage, double etaMs)
|
int FractoriumEmberController<T>::ProgressFunc(Ember<T>& ember, void* foo, double fraction, int stage, double etaMs)
|
||||||
{
|
{
|
||||||
QString status;
|
QString status;
|
||||||
|
|
||||||
m_Fractorium->m_ProgressBar->setValue(int(fraction));//Only really applies to iter and filter, because final accum only gives progress 0 and 100.
|
m_Fractorium->m_ProgressBar->setValue(int(fraction));//Only really applies to iter and filter, because final accum only gives progress 0 and 100.
|
||||||
|
|
||||||
if (stage == 0)
|
if (stage == 0)
|
||||||
@ -297,12 +295,10 @@ template <typename T>
|
|||||||
bool FractoriumEmberController<T>::Render()
|
bool FractoriumEmberController<T>::Render()
|
||||||
{
|
{
|
||||||
m_Rendering = true;
|
m_Rendering = true;
|
||||||
|
|
||||||
bool success = true;
|
bool success = true;
|
||||||
GLWidget* gl = m_Fractorium->ui.GLDisplay;
|
GLWidget* gl = m_Fractorium->ui.GLDisplay;
|
||||||
RendererCL<T, float>* rendererCL = nullptr;
|
RendererCL<T, float>* rendererCL = nullptr;
|
||||||
eProcessAction qualityAction, action;
|
eProcessAction qualityAction, action;
|
||||||
|
|
||||||
//Quality is the only parameter we update inside the timer.
|
//Quality is the only parameter we update inside the timer.
|
||||||
//This is to allow the user to rapidly increase the quality spinner
|
//This is to allow the user to rapidly increase the quality spinner
|
||||||
//without fully resetting the render. Instead, it will just keep iterating
|
//without fully resetting the render. Instead, it will just keep iterating
|
||||||
@ -411,7 +407,6 @@ bool FractoriumEmberController<T>::Render()
|
|||||||
QString iters = ToString<qulonglong>(stats.m_Iters);
|
QString iters = ToString<qulonglong>(stats.m_Iters);
|
||||||
QString scaledQuality = ToString(uint(m_Renderer->ScaledQuality()));
|
QString scaledQuality = ToString(uint(m_Renderer->ScaledQuality()));
|
||||||
string renderTime = m_RenderElapsedTimer.Format(m_RenderElapsedTimer.Toc());
|
string renderTime = m_RenderElapsedTimer.Format(m_RenderElapsedTimer.Toc());
|
||||||
|
|
||||||
m_Fractorium->m_ProgressBar->setValue(100);
|
m_Fractorium->m_ProgressBar->setValue(100);
|
||||||
|
|
||||||
//Only certain stats can be reported with OpenCL.
|
//Only certain stats can be reported with OpenCL.
|
||||||
@ -424,7 +419,6 @@ bool FractoriumEmberController<T>::Render()
|
|||||||
double percent = double(stats.m_Badvals) / double(stats.m_Iters);
|
double percent = double(stats.m_Badvals) / double(stats.m_Iters);
|
||||||
QString badVals = ToString<qulonglong>(stats.m_Badvals);
|
QString badVals = ToString<qulonglong>(stats.m_Badvals);
|
||||||
QString badPercent = QLocale::system().toString(percent * 100, 'f', 2);
|
QString badPercent = QLocale::system().toString(percent * 100, 'f', 2);
|
||||||
|
|
||||||
m_Fractorium->m_RenderStatusLabel->setText("Iters: " + iters + ". Scaled quality: " + scaledQuality + ". Bad values: " + badVals + " (" + badPercent + "%). Total time: " + QString::fromStdString(renderTime) + ".");
|
m_Fractorium->m_RenderStatusLabel->setText("Iters: " + iters + ". Scaled quality: " + scaledQuality + ". Bad values: " + badVals + " (" + badPercent + "%). Total time: " + QString::fromStdString(renderTime) + ".");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -445,7 +439,6 @@ bool FractoriumEmberController<T>::Render()
|
|||||||
else if (!m_LastEditWasUndoRedo && m_UndoIndex < m_UndoList.size() - 1)//They were anywhere but the end of the undo list, then did a manual edit, so clear the undo list.
|
else if (!m_LastEditWasUndoRedo && m_UndoIndex < m_UndoList.size() - 1)//They were anywhere but the end of the undo list, then did a manual edit, so clear the undo list.
|
||||||
{
|
{
|
||||||
Ember<T> ember(m_UndoList[m_UndoIndex]);
|
Ember<T> ember(m_UndoList[m_UndoIndex]);
|
||||||
|
|
||||||
ClearUndo();
|
ClearUndo();
|
||||||
m_UndoList.push_back(ember);
|
m_UndoList.push_back(ember);
|
||||||
m_UndoList.push_back(m_Ember);
|
m_UndoList.push_back(m_Ember);
|
||||||
@ -465,8 +458,8 @@ bool FractoriumEmberController<T>::Render()
|
|||||||
{
|
{
|
||||||
if (m_FinalImage.size() == m_Renderer->FinalBufferSize())//Make absolutely sure the correct amount of data is passed.
|
if (m_FinalImage.size() == m_Renderer->FinalBufferSize())//Make absolutely sure the correct amount of data is passed.
|
||||||
gl->update();
|
gl->update();
|
||||||
//gl->repaint();
|
|
||||||
|
|
||||||
|
//gl->repaint();
|
||||||
//m_Fractorium->update();
|
//m_Fractorium->update();
|
||||||
//m_Fractorium->ui.GLParentScrollArea->update();
|
//m_Fractorium->ui.GLParentScrollArea->update();
|
||||||
//Uncomment for debugging kernel build and execution errors.
|
//Uncomment for debugging kernel build and execution errors.
|
||||||
@ -482,7 +475,6 @@ bool FractoriumEmberController<T>::Render()
|
|||||||
else//Something went very wrong, show error report.
|
else//Something went very wrong, show error report.
|
||||||
{
|
{
|
||||||
vector<string> errors = m_Renderer->ErrorReport();
|
vector<string> errors = m_Renderer->ErrorReport();
|
||||||
|
|
||||||
success = false;
|
success = false;
|
||||||
m_FailedRenders++;
|
m_FailedRenders++;
|
||||||
m_Fractorium->m_RenderStatusLabel->setText("Rendering failed, see info tab. Try changing parameters.");
|
m_Fractorium->m_RenderStatusLabel->setText("Rendering failed, see info tab. Try changing parameters.");
|
||||||
@ -500,7 +492,6 @@ bool FractoriumEmberController<T>::Render()
|
|||||||
if (rendererCL)
|
if (rendererCL)
|
||||||
{
|
{
|
||||||
//string s = "OpenCL Kernels: \r\n" + rendererCL->IterKernel() + "\r\n" + rendererCL->DEKernel() + "\r\n" + rendererCL->FinalAccumKernel();
|
//string s = "OpenCL Kernels: \r\n" + rendererCL->IterKernel() + "\r\n" + rendererCL->DEKernel() + "\r\n" + rendererCL->FinalAccumKernel();
|
||||||
|
|
||||||
rendererCL->ClearFinal();
|
rendererCL->ClearFinal();
|
||||||
//QMetaObject::invokeMethod(m_Fractorium->ui.InfoRenderingTextEdit, "setText", Qt::QueuedConnection, Q_ARG(const QString&, QString::fromStdString(s)));
|
//QMetaObject::invokeMethod(m_Fractorium->ui.InfoRenderingTextEdit, "setText", Qt::QueuedConnection, Q_ARG(const QString&, QString::fromStdString(s)));
|
||||||
}
|
}
|
||||||
@ -511,8 +502,8 @@ bool FractoriumEmberController<T>::Render()
|
|||||||
//Upon finishing, or having nothing to do, rest.
|
//Upon finishing, or having nothing to do, rest.
|
||||||
if (ProcessState() == ACCUM_DONE)
|
if (ProcessState() == ACCUM_DONE)
|
||||||
QThread::msleep(1);
|
QThread::msleep(1);
|
||||||
//QApplication::processEvents();
|
|
||||||
|
|
||||||
|
//QApplication::processEvents();
|
||||||
m_Rendering = false;
|
m_Rendering = false;
|
||||||
return success;
|
return success;
|
||||||
}
|
}
|
||||||
@ -536,7 +527,6 @@ bool FractoriumEmberController<T>::CreateRenderer(eRendererType renderType, cons
|
|||||||
{
|
{
|
||||||
EmberReport emberReport;
|
EmberReport emberReport;
|
||||||
vector<string> errorReport;
|
vector<string> errorReport;
|
||||||
|
|
||||||
DeleteRenderer();//Delete the renderer and refresh the textures.
|
DeleteRenderer();//Delete the renderer and refresh the textures.
|
||||||
//Before starting, must take care of allocations.
|
//Before starting, must take care of allocations.
|
||||||
gl->Allocate(true);//Forcing a realloc of the texture is necessary on AMD, but not on nVidia.
|
gl->Allocate(true);//Forcing a realloc of the texture is necessary on AMD, but not on nVidia.
|
||||||
@ -564,7 +554,6 @@ bool FractoriumEmberController<T>::CreateRenderer(eRendererType renderType, cons
|
|||||||
if (m_RenderType == OPENCL_RENDERER)
|
if (m_RenderType == OPENCL_RENDERER)
|
||||||
{
|
{
|
||||||
auto val = 30 * m_Fractorium->m_Settings->Devices().size();
|
auto val = 30 * m_Fractorium->m_Settings->Devices().size();
|
||||||
|
|
||||||
m_Fractorium->m_QualitySpin->DoubleClickZero(val);
|
m_Fractorium->m_QualitySpin->DoubleClickZero(val);
|
||||||
m_Fractorium->m_QualitySpin->DoubleClickNonZero(val);
|
m_Fractorium->m_QualitySpin->DoubleClickNonZero(val);
|
||||||
|
|
||||||
@ -635,7 +624,7 @@ void Fractorium::ShutdownAndRecreateFromOptions()
|
|||||||
bool Fractorium::CreateRendererFromOptions()
|
bool Fractorium::CreateRendererFromOptions()
|
||||||
{
|
{
|
||||||
bool ok = true;
|
bool ok = true;
|
||||||
bool useOpenCL = m_Info.Ok() && m_Settings->OpenCL();
|
bool useOpenCL = m_Info->Ok() && m_Settings->OpenCL();
|
||||||
auto v = Devices(m_Settings->Devices());
|
auto v = Devices(m_Settings->Devices());
|
||||||
|
|
||||||
//The most important option to process is what kind of renderer is desired, so do it first.
|
//The most important option to process is what kind of renderer is desired, so do it first.
|
||||||
@ -660,7 +649,6 @@ bool Fractorium::CreateRendererFromOptions()
|
|||||||
bool Fractorium::CreateControllerFromOptions()
|
bool Fractorium::CreateControllerFromOptions()
|
||||||
{
|
{
|
||||||
bool ok = true;
|
bool ok = true;
|
||||||
|
|
||||||
size_t elementSize =
|
size_t elementSize =
|
||||||
#ifdef DO_DOUBLE
|
#ifdef DO_DOUBLE
|
||||||
m_Settings->Double() ? sizeof(double) :
|
m_Settings->Double() ? sizeof(double) :
|
||||||
@ -690,11 +678,9 @@ bool Fractorium::CreateControllerFromOptions()
|
|||||||
if (m_Controller.get())
|
if (m_Controller.get())
|
||||||
{
|
{
|
||||||
m_Controller->CopyTempPalette(tempPalette);//Convert float to double or save double verbatim;
|
m_Controller->CopyTempPalette(tempPalette);//Convert float to double or save double verbatim;
|
||||||
|
|
||||||
//Replace below with this once LLVM fixes a crash in their compiler with default lambda parameters.//TODO
|
//Replace below with this once LLVM fixes a crash in their compiler with default lambda parameters.//TODO
|
||||||
//m_Controller->CopyEmber(ed);
|
//m_Controller->CopyEmber(ed);
|
||||||
//m_Controller->CopyEmberFile(efd);
|
//m_Controller->CopyEmberFile(efd);
|
||||||
|
|
||||||
#ifdef DO_DOUBLE
|
#ifdef DO_DOUBLE
|
||||||
m_Controller->CopyEmber(ed, [&](Ember<double>& ember) { });
|
m_Controller->CopyEmber(ed, [&](Ember<double>& ember) { });
|
||||||
m_Controller->CopyEmberFile(efd, [&](Ember<double>& ember) { });
|
m_Controller->CopyEmberFile(efd, [&](Ember<double>& ember) { });
|
||||||
@ -706,6 +692,7 @@ bool Fractorium::CreateControllerFromOptions()
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef DO_DOUBLE
|
#ifdef DO_DOUBLE
|
||||||
|
|
||||||
if (m_Settings->Double())
|
if (m_Settings->Double())
|
||||||
m_Controller = unique_ptr<FractoriumEmberControllerBase>(new FractoriumEmberController<double>(this));
|
m_Controller = unique_ptr<FractoriumEmberControllerBase>(new FractoriumEmberController<double>(this));
|
||||||
else
|
else
|
||||||
@ -718,7 +705,6 @@ bool Fractorium::CreateControllerFromOptions()
|
|||||||
ed.m_Palette = tempPalette;//Restore base temp palette. Adjustments will be then be applied and stored back in in m_Ember.m_Palette below.
|
ed.m_Palette = tempPalette;//Restore base temp palette. Adjustments will be then be applied and stored back in in m_Ember.m_Palette below.
|
||||||
m_Controller->SetEmber(ed);//Convert float to double or set double verbatim. This will assign m_Ember.m_Palette (which was just tempPalette) to m_TempPalette.
|
m_Controller->SetEmber(ed);//Convert float to double or set double verbatim. This will assign m_Ember.m_Palette (which was just tempPalette) to m_TempPalette.
|
||||||
m_Controller->SetEmberFile(efd);
|
m_Controller->SetEmberFile(efd);
|
||||||
|
|
||||||
//Setting these and updating the GUI overwrites the work of clearing them done in SetEmber() above.
|
//Setting these and updating the GUI overwrites the work of clearing them done in SetEmber() above.
|
||||||
//It's a corner case, but doesn't seem to matter.
|
//It's a corner case, but doesn't seem to matter.
|
||||||
m_PaletteHueSpin->SetValueStealth(hue);
|
m_PaletteHueSpin->SetValueStealth(hue);
|
||||||
@ -728,7 +714,6 @@ bool Fractorium::CreateControllerFromOptions()
|
|||||||
m_PaletteBlurSpin->SetValueStealth(blur);
|
m_PaletteBlurSpin->SetValueStealth(blur);
|
||||||
m_PaletteFrequencySpin->SetValueStealth(freq);
|
m_PaletteFrequencySpin->SetValueStealth(freq);
|
||||||
m_Controller->PaletteAdjust();//Applies the adjustments to temp and saves in m_Ember.m_Palette, then fills in the palette preview widget.
|
m_Controller->PaletteAdjust();//Applies the adjustments to temp and saves in m_Ember.m_Palette, then fills in the palette preview widget.
|
||||||
|
|
||||||
//Template specific palette table and variations tree setup in controller constructor, but
|
//Template specific palette table and variations tree setup in controller constructor, but
|
||||||
//must manually setup the library tree here because it's after the embers were assigned.
|
//must manually setup the library tree here because it's after the embers were assigned.
|
||||||
//Passing row re-selects the item that was previously selected.
|
//Passing row re-selects the item that was previously selected.
|
||||||
@ -775,5 +760,5 @@ bool Fractorium::ControllersOk() { return m_Controller.get() && m_Controller->GL
|
|||||||
template class FractoriumEmberController<float>;
|
template class FractoriumEmberController<float>;
|
||||||
|
|
||||||
#ifdef DO_DOUBLE
|
#ifdef DO_DOUBLE
|
||||||
template class FractoriumEmberController<double>;
|
template class FractoriumEmberController<double>;
|
||||||
#endif
|
#endif
|
||||||
|
@ -10,11 +10,9 @@ void Fractorium::InitToolbarUI()
|
|||||||
auto clGroup = new QActionGroup(this);
|
auto clGroup = new QActionGroup(this);
|
||||||
clGroup->addAction(ui.ActionCpu);
|
clGroup->addAction(ui.ActionCpu);
|
||||||
clGroup->addAction(ui.ActionCL);
|
clGroup->addAction(ui.ActionCL);
|
||||||
|
|
||||||
auto spGroup = new QActionGroup(this);
|
auto spGroup = new QActionGroup(this);
|
||||||
spGroup->addAction(ui.ActionSP);
|
spGroup->addAction(ui.ActionSP);
|
||||||
spGroup->addAction(ui.ActionDP);
|
spGroup->addAction(ui.ActionDP);
|
||||||
|
|
||||||
SyncOptionsToToolbar();
|
SyncOptionsToToolbar();
|
||||||
connect(ui.ActionCpu, SIGNAL(triggered(bool)), this, SLOT(OnActionCpu(bool)), Qt::QueuedConnection);
|
connect(ui.ActionCpu, SIGNAL(triggered(bool)), this, SLOT(OnActionCpu(bool)), Qt::QueuedConnection);
|
||||||
connect(ui.ActionCL, SIGNAL(triggered(bool)), this, SLOT(OnActionCL(bool)), Qt::QueuedConnection);
|
connect(ui.ActionCL, SIGNAL(triggered(bool)), this, SLOT(OnActionCL(bool)), Qt::QueuedConnection);
|
||||||
@ -90,7 +88,7 @@ void Fractorium::OnActionStyle(bool checked)
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
void Fractorium::SyncOptionsToToolbar()
|
void Fractorium::SyncOptionsToToolbar()
|
||||||
{
|
{
|
||||||
static bool openCL = !OpenCLInfo::Instance().Devices().empty();
|
static bool openCL = !m_Info->Devices().empty();
|
||||||
|
|
||||||
if (!openCL)
|
if (!openCL)
|
||||||
{
|
{
|
||||||
|
@ -9,36 +9,30 @@
|
|||||||
/// <param name="p">The parent widget. Default: nullptr.</param>
|
/// <param name="p">The parent widget. Default: nullptr.</param>
|
||||||
/// <param name="f">The window flags. Default: 0.</param>
|
/// <param name="f">The window flags. Default: 0.</param>
|
||||||
FractoriumOptionsDialog::FractoriumOptionsDialog(FractoriumSettings* settings, QWidget* p, Qt::WindowFlags f)
|
FractoriumOptionsDialog::FractoriumOptionsDialog(FractoriumSettings* settings, QWidget* p, Qt::WindowFlags f)
|
||||||
: QDialog(p, f),
|
: QDialog(p, f)
|
||||||
m_Info(OpenCLInfo::Instance())
|
|
||||||
{
|
{
|
||||||
int i, row = 0, spinHeight = 20;
|
int i, row = 0, spinHeight = 20;
|
||||||
|
|
||||||
ui.setupUi(this);
|
ui.setupUi(this);
|
||||||
m_Settings = settings;
|
m_Settings = settings;
|
||||||
|
m_Info = OpenCLInfo::Instance();
|
||||||
QTableWidget* table = ui.OptionsXmlSavingTable;
|
QTableWidget* table = ui.OptionsXmlSavingTable;
|
||||||
ui.ThreadCountSpin->setRange(1, Timing::ProcessorCount());
|
ui.ThreadCountSpin->setRange(1, Timing::ProcessorCount());
|
||||||
connect(ui.OpenCLCheckBox, SIGNAL(stateChanged(int)), this, SLOT(OnOpenCLCheckBoxStateChanged(int)), Qt::QueuedConnection);
|
connect(ui.OpenCLCheckBox, SIGNAL(stateChanged(int)), this, SLOT(OnOpenCLCheckBoxStateChanged(int)), Qt::QueuedConnection);
|
||||||
connect(ui.DeviceTable, SIGNAL(cellChanged(int, int)), this, SLOT(OnDeviceTableCellChanged(int, int)), Qt::QueuedConnection);
|
connect(ui.DeviceTable, SIGNAL(cellChanged(int, int)), this, SLOT(OnDeviceTableCellChanged(int, int)), Qt::QueuedConnection);
|
||||||
|
|
||||||
SetupSpinner<SpinBox, int>(table, this, row, 1, m_XmlTemporalSamplesSpin, spinHeight, 1, 1000, 100, "", "", true, 1000);
|
SetupSpinner<SpinBox, int>(table, this, row, 1, m_XmlTemporalSamplesSpin, spinHeight, 1, 1000, 100, "", "", true, 1000);
|
||||||
SetupSpinner<SpinBox, int>(table, this, row, 1, m_XmlQualitySpin, spinHeight, 1, 200000, 50, "", "", true, 1000);
|
SetupSpinner<SpinBox, int>(table, this, row, 1, m_XmlQualitySpin, spinHeight, 1, 200000, 50, "", "", true, 1000);
|
||||||
SetupSpinner<SpinBox, int>(table, this, row, 1, m_XmlSupersampleSpin, spinHeight, 1, 4, 1, "", "", true, 2);
|
SetupSpinner<SpinBox, int>(table, this, row, 1, m_XmlSupersampleSpin, spinHeight, 1, 4, 1, "", "", true, 2);
|
||||||
|
|
||||||
m_IdEdit = new QLineEdit(ui.OptionsIdentityTable);
|
m_IdEdit = new QLineEdit(ui.OptionsIdentityTable);
|
||||||
ui.OptionsIdentityTable->setCellWidget(0, 1, m_IdEdit);
|
ui.OptionsIdentityTable->setCellWidget(0, 1, m_IdEdit);
|
||||||
|
|
||||||
m_UrlEdit = new QLineEdit(ui.OptionsIdentityTable);
|
m_UrlEdit = new QLineEdit(ui.OptionsIdentityTable);
|
||||||
ui.OptionsIdentityTable->setCellWidget(1, 1, m_UrlEdit);
|
ui.OptionsIdentityTable->setCellWidget(1, 1, m_UrlEdit);
|
||||||
|
|
||||||
m_NickEdit = new QLineEdit(ui.OptionsIdentityTable);
|
m_NickEdit = new QLineEdit(ui.OptionsIdentityTable);
|
||||||
ui.OptionsIdentityTable->setCellWidget(2, 1, m_NickEdit);
|
ui.OptionsIdentityTable->setCellWidget(2, 1, m_NickEdit);
|
||||||
|
|
||||||
table = ui.DeviceTable;
|
table = ui.DeviceTable;
|
||||||
table->clearContents();
|
table->clearContents();
|
||||||
table->setRowCount(0);
|
table->setRowCount(0);
|
||||||
|
|
||||||
if (m_Info.Ok() && !m_Info.Devices().empty())
|
if (m_Info->Ok() && !m_Info->Devices().empty())
|
||||||
{
|
{
|
||||||
SetupDeviceTable(table, m_Settings->Devices());
|
SetupDeviceTable(table, m_Settings->Devices());
|
||||||
|
|
||||||
@ -122,7 +116,6 @@ void FractoriumOptionsDialog::OnDeviceTableRadioToggled(bool checked)
|
|||||||
void FractoriumOptionsDialog::OnOpenCLCheckBoxStateChanged(int state)
|
void FractoriumOptionsDialog::OnOpenCLCheckBoxStateChanged(int state)
|
||||||
{
|
{
|
||||||
bool checked = state == Qt::Checked;
|
bool checked = state == Qt::Checked;
|
||||||
|
|
||||||
ui.DeviceTable->setEnabled(checked);
|
ui.DeviceTable->setEnabled(checked);
|
||||||
ui.ThreadCountSpin->setEnabled(!checked);
|
ui.ThreadCountSpin->setEnabled(!checked);
|
||||||
ui.CpuSubBatchSpin->setEnabled(!checked);
|
ui.CpuSubBatchSpin->setEnabled(!checked);
|
||||||
@ -186,13 +179,11 @@ void FractoriumOptionsDialog::GuiToData()
|
|||||||
m_Settings->CpuDEFilter(ui.CpuFilteringDERadioButton->isChecked());
|
m_Settings->CpuDEFilter(ui.CpuFilteringDERadioButton->isChecked());
|
||||||
m_Settings->OpenCLDEFilter(ui.OpenCLFilteringDERadioButton->isChecked());
|
m_Settings->OpenCLDEFilter(ui.OpenCLFilteringDERadioButton->isChecked());
|
||||||
m_Settings->Devices(DeviceTableToSettings(ui.DeviceTable));
|
m_Settings->Devices(DeviceTableToSettings(ui.DeviceTable));
|
||||||
|
|
||||||
//Xml saving.
|
//Xml saving.
|
||||||
m_Settings->XmlTemporalSamples(m_XmlTemporalSamplesSpin->value());
|
m_Settings->XmlTemporalSamples(m_XmlTemporalSamplesSpin->value());
|
||||||
m_Settings->XmlQuality(m_XmlQualitySpin->value());
|
m_Settings->XmlQuality(m_XmlQualitySpin->value());
|
||||||
m_Settings->XmlSupersample(m_XmlSupersampleSpin->value());
|
m_Settings->XmlSupersample(m_XmlSupersampleSpin->value());
|
||||||
m_Settings->SaveAutoUnique(AutoUnique());
|
m_Settings->SaveAutoUnique(AutoUnique());
|
||||||
|
|
||||||
//Identity.
|
//Identity.
|
||||||
m_Settings->Id(m_IdEdit->text());
|
m_Settings->Id(m_IdEdit->text());
|
||||||
m_Settings->Url(m_UrlEdit->text());
|
m_Settings->Url(m_UrlEdit->text());
|
||||||
@ -206,7 +197,6 @@ void FractoriumOptionsDialog::DataToGui()
|
|||||||
{
|
{
|
||||||
//Interactive rendering.
|
//Interactive rendering.
|
||||||
auto devices = m_Settings->Devices();
|
auto devices = m_Settings->Devices();
|
||||||
|
|
||||||
ui.EarlyClipCheckBox->setChecked(m_Settings->EarlyClip());
|
ui.EarlyClipCheckBox->setChecked(m_Settings->EarlyClip());
|
||||||
ui.YAxisUpCheckBox->setChecked(m_Settings->YAxisUp());
|
ui.YAxisUpCheckBox->setChecked(m_Settings->YAxisUp());
|
||||||
ui.TransparencyCheckBox->setChecked(m_Settings->Transparency());
|
ui.TransparencyCheckBox->setChecked(m_Settings->Transparency());
|
||||||
@ -235,7 +225,6 @@ void FractoriumOptionsDialog::DataToGui()
|
|||||||
m_XmlQualitySpin->setValue(m_Settings->XmlQuality());
|
m_XmlQualitySpin->setValue(m_Settings->XmlQuality());
|
||||||
m_XmlSupersampleSpin->setValue(m_Settings->XmlSupersample());
|
m_XmlSupersampleSpin->setValue(m_Settings->XmlSupersample());
|
||||||
ui.AutoUniqueCheckBox->setChecked(m_Settings->SaveAutoUnique());
|
ui.AutoUniqueCheckBox->setChecked(m_Settings->SaveAutoUnique());
|
||||||
|
|
||||||
//Identity.
|
//Identity.
|
||||||
m_IdEdit->setText(m_Settings->Id());
|
m_IdEdit->setText(m_Settings->Id());
|
||||||
m_UrlEdit->setText(m_Settings->Url());
|
m_UrlEdit->setText(m_Settings->Url());
|
||||||
|
@ -52,7 +52,7 @@ private:
|
|||||||
void GuiToData();
|
void GuiToData();
|
||||||
|
|
||||||
Ui::OptionsDialog ui;
|
Ui::OptionsDialog ui;
|
||||||
OpenCLInfo& m_Info;
|
shared_ptr<OpenCLInfo> m_Info;
|
||||||
SpinBox* m_XmlTemporalSamplesSpin;
|
SpinBox* m_XmlTemporalSamplesSpin;
|
||||||
SpinBox* m_XmlQualitySpin;
|
SpinBox* m_XmlQualitySpin;
|
||||||
SpinBox* m_XmlSupersampleSpin;
|
SpinBox* m_XmlSupersampleSpin;
|
||||||
|
Loading…
Reference in New Issue
Block a user