mirror of
https://bitbucket.org/mfeemster/fractorium.git
synced 2025-01-21 05:00:06 -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*
|
||||
*.unsuccessfulbuild
|
||||
*\Obj\*
|
||||
Builds/MSVC/VS2010/Obj/x64/Debug/EmberCL_manifest.rc
|
||||
Builds/MSVC/VS2010/Obj/EmberTester/x64/Debug/EmberTester_manifest.rc
|
||||
Builds/MSVC/VS2010/Obj/EmberRender/x64/Debug/EmberRender_manifest.rc
|
||||
Builds/MSVC/VS2010/Obj/EmberGenome/x64/Debug/EmberGenome_manifest.rc
|
||||
Builds/MSVC/VS2010/Obj/EmberAnimate/x64/Debug/EmberAnimate_manifest.rc
|
||||
Builds/MSVC/VS2010/Obj/Ember/x64/Debug/Ember_manifest.rc
|
||||
Builds/MSVC/VS2013/Obj/x64/Debug/EmberCL_manifest.rc
|
||||
Builds/MSVC/VS2013/Obj/EmberTester/x64/Debug/EmberTester_manifest.rc
|
||||
Builds/MSVC/VS2013/Obj/EmberRender/x64/Debug/EmberRender_manifest.rc
|
||||
Builds/MSVC/VS2013/Obj/EmberGenome/x64/Debug/EmberGenome_manifest.rc
|
||||
Builds/MSVC/VS2013/Obj/EmberAnimate/x64/Debug/EmberAnimate_manifest.rc
|
||||
Builds/MSVC/VS2013/Obj/Ember/x64/Debug/Ember_manifest.rc
|
||||
Builds/MSVC/Installer/obj/
|
||||
Bin/x64/Release/testallvarsout.flame
|
||||
Data/~$Bench.xlsx
|
||||
*.ps1
|
||||
|
13
.gitignore
vendored
13
.gitignore
vendored
@ -30,12 +30,13 @@
|
||||
*GeneratedFiles*
|
||||
*.unsuccessfulbuild
|
||||
*\Obj\*
|
||||
Builds/MSVC/VS2010/Obj/x64/Debug/EmberCL_manifest.rc
|
||||
Builds/MSVC/VS2010/Obj/EmberTester/x64/Debug/EmberTester_manifest.rc
|
||||
Builds/MSVC/VS2010/Obj/EmberRender/x64/Debug/EmberRender_manifest.rc
|
||||
Builds/MSVC/VS2010/Obj/EmberGenome/x64/Debug/EmberGenome_manifest.rc
|
||||
Builds/MSVC/VS2010/Obj/EmberAnimate/x64/Debug/EmberAnimate_manifest.rc
|
||||
Builds/MSVC/VS2010/Obj/Ember/x64/Debug/Ember_manifest.rc
|
||||
Builds/MSVC/VS2013/Obj/x64/Debug/EmberCL_manifest.rc
|
||||
Builds/MSVC/VS2013/Obj/EmberTester/x64/Debug/EmberTester_manifest.rc
|
||||
Builds/MSVC/VS2013/Obj/EmberRender/x64/Debug/EmberRender_manifest.rc
|
||||
Builds/MSVC/VS2013/Obj/EmberGenome/x64/Debug/EmberGenome_manifest.rc
|
||||
Builds/MSVC/VS2013/Obj/EmberAnimate/x64/Debug/EmberAnimate_manifest.rc
|
||||
Builds/MSVC/VS2013/Obj/Ember/x64/Debug/Ember_manifest.rc
|
||||
Builds/MSVC/Installer/obj/
|
||||
Bin/x64/Release/testallvarsout.flame
|
||||
Data/~$Bench.xlsx
|
||||
*.ps1
|
||||
|
@ -279,6 +279,7 @@
|
||||
<ClInclude Include="..\..\..\Source\Ember\Ember.h" />
|
||||
<ClInclude Include="..\..\..\Source\Ember\DensityFilter.h" />
|
||||
<ClInclude Include="..\..\..\Source\Ember\Interpolate.h" />
|
||||
<ClInclude Include="..\..\..\Source\Ember\VarFuncs.h" />
|
||||
<ClInclude Include="..\..\..\Source\Ember\PaletteList.h" />
|
||||
<ClInclude Include="..\..\..\Source\Ember\Renderer.h" />
|
||||
<ClInclude Include="..\..\..\Source\Ember\RendererBase.h" />
|
||||
|
@ -119,6 +119,9 @@
|
||||
<ClInclude Include="..\..\..\Source\Ember\Variations06.h">
|
||||
<Filter>Header Files\Variations</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\Source\Ember\VarFuncs.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\..\..\Source\Ember\DllMain.cpp">
|
||||
|
@ -154,7 +154,7 @@
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;BUILDING_EMBERCL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ProgramDataBaseFileName>$(TargetDir)$(TargetName).pdb</ProgramDataBaseFileName>
|
||||
<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>
|
||||
<PrecompiledHeaderFile>EmberCLPch.h</PrecompiledHeaderFile>
|
||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||
@ -166,7 +166,7 @@
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<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>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
@ -227,7 +227,7 @@
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;BUILDING_EMBERCL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ProgramDataBaseFileName>$(TargetDir)$(TargetName).pdb</ProgramDataBaseFileName>
|
||||
<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>
|
||||
<PrecompiledHeaderFile>EmberCLPch.h</PrecompiledHeaderFile>
|
||||
<AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
|
||||
@ -243,7 +243,7 @@
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<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>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">
|
||||
|
@ -158,7 +158,7 @@ xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\flam3-palettes.xml" "$(OutDir)"</
|
||||
<Optimization>Disabled</Optimization>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ProgramDataBaseFileName>$(TargetDir)$(TargetName).pdb</ProgramDataBaseFileName>
|
||||
<AdditionalIncludeDirectories>$(ProjectDir)..\..\..\Source\Ember;$(ProjectDir)..\..\..\Source\EmberCommon;$(ProjectDir)..\..\..\Source\EmberCL;$(ProjectDir)..\..\..\..\glm;$(ProjectDir)..\..\..\..\tbb\include;$(ProjectDir)..\..\..\..\libjpeg;$(ProjectDir)..\..\..\..\libpng;$(ProjectDir)..\..\..\..\libxml2\include;$(AMDAPPSDKROOT)\include;$(CUDA_PATH)include</AdditionalIncludeDirectories>
|
||||
<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>
|
||||
<PrecompiledHeaderFile>EmberCommonPch.h</PrecompiledHeaderFile>
|
||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||
@ -170,7 +170,7 @@ xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\flam3-palettes.xml" "$(OutDir)"</
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<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>
|
||||
<PostBuildEvent>
|
||||
<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>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ProgramDataBaseFileName>$(TargetDir)$(TargetName).pdb</ProgramDataBaseFileName>
|
||||
<AdditionalIncludeDirectories>$(ProjectDir)..\..\..\Source\Ember;$(ProjectDir)..\..\..\Source\EmberCommon;$(ProjectDir)..\..\..\Source\EmberCL;$(ProjectDir)..\..\..\..\glm;$(ProjectDir)..\..\..\..\tbb\include;$(ProjectDir)..\..\..\..\libjpeg;$(ProjectDir)..\..\..\..\libpng;$(ProjectDir)..\..\..\..\libxml2\include;$(AMDAPPSDKROOT)\include;$(CUDA_PATH)include</AdditionalIncludeDirectories>
|
||||
<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>
|
||||
<PrecompiledHeaderFile>EmberCommonPch.h</PrecompiledHeaderFile>
|
||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||
@ -258,7 +258,7 @@ xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\flam3-palettes.xml" "$(OutDir)"</
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<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>
|
||||
<PostBuildEvent>
|
||||
<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>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ProgramDataBaseFileName>$(TargetDir)$(TargetName).pdb</ProgramDataBaseFileName>
|
||||
<AdditionalIncludeDirectories>$(ProjectDir)..\..\..\Source\Ember;$(ProjectDir)..\..\..\Source\EmberCommon;$(ProjectDir)..\..\..\Source\EmberCL;$(ProjectDir)..\..\..\..\glm;$(ProjectDir)..\..\..\..\tbb\include;$(ProjectDir)..\..\..\..\libjpeg;$(ProjectDir)..\..\..\..\libpng;$(ProjectDir)..\..\..\..\libxml2\include;$(AMDAPPSDKROOT)\include;$(CUDA_PATH)include</AdditionalIncludeDirectories>
|
||||
<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>
|
||||
<PrecompiledHeaderFile>EmberCommonPch.h</PrecompiledHeaderFile>
|
||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||
@ -170,7 +170,7 @@ xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\flam3-palettes.xml" "$(OutDir)"</
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<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>
|
||||
<PostBuildEvent>
|
||||
<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>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ProgramDataBaseFileName>$(TargetDir)$(TargetName).pdb</ProgramDataBaseFileName>
|
||||
<AdditionalIncludeDirectories>$(ProjectDir)..\..\..\Source\Ember;$(ProjectDir)..\..\..\Source\EmberCommon;$(ProjectDir)..\..\..\Source\EmberCL;$(ProjectDir)..\..\..\..\glm;$(ProjectDir)..\..\..\..\tbb\include;$(ProjectDir)..\..\..\..\libjpeg;$(ProjectDir)..\..\..\..\libpng;$(ProjectDir)..\..\..\..\libxml2\include;$(AMDAPPSDKROOT)\include;$(CUDA_PATH)include</AdditionalIncludeDirectories>
|
||||
<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>
|
||||
<PrecompiledHeaderFile>EmberCommonPch.h</PrecompiledHeaderFile>
|
||||
<FloatingPointModel>Precise</FloatingPointModel>
|
||||
@ -259,7 +259,7 @@ xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\flam3-palettes.xml" "$(OutDir)"</
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<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>
|
||||
<PostBuildEvent>
|
||||
<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>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ProgramDataBaseFileName>$(TargetDir)$(TargetName).pdb</ProgramDataBaseFileName>
|
||||
<AdditionalIncludeDirectories>$(ProjectDir)..\..\..\Source\Ember;$(ProjectDir)..\..\..\Source\EmberCommon;$(ProjectDir)..\..\..\Source\EmberCL;$(ProjectDir)..\..\..\..\glm;$(ProjectDir)..\..\..\..\tbb\include;$(ProjectDir)..\..\..\..\libjpeg;$(ProjectDir)..\..\..\..\libpng;$(ProjectDir)..\..\..\..\libxml2\include;$(AMDAPPSDKROOT)\include;$(CUDA_PATH)include</AdditionalIncludeDirectories>
|
||||
<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>
|
||||
<PrecompiledHeaderFile>EmberCommonPch.h</PrecompiledHeaderFile>
|
||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||
@ -170,7 +170,7 @@ xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\flam3-palettes.xml" "$(OutDir)"</
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<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>
|
||||
<PostBuildEvent>
|
||||
<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>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ProgramDataBaseFileName>$(TargetDir)$(TargetName).pdb</ProgramDataBaseFileName>
|
||||
<AdditionalIncludeDirectories>$(ProjectDir)..\..\..\Source\Ember;$(ProjectDir)..\..\..\Source\EmberCommon;$(ProjectDir)..\..\..\Source\EmberCL;$(ProjectDir)..\..\..\..\glm;$(ProjectDir)..\..\..\..\tbb\include;$(ProjectDir)..\..\..\..\libjpeg;$(ProjectDir)..\..\..\..\libpng;$(ProjectDir)..\..\..\..\libxml2\include;$(AMDAPPSDKROOT)\include;$(CUDA_PATH)include</AdditionalIncludeDirectories>
|
||||
<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>
|
||||
<PrecompiledHeaderFile>EmberCommonPch.h</PrecompiledHeaderFile>
|
||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||
@ -258,7 +258,7 @@ xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\flam3-palettes.xml" "$(OutDir)"</
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<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>
|
||||
<PostBuildEvent>
|
||||
<Command>xcopy /F /Y /R /D "$(SolutionDir)$(Platform)\$(Configuration)\*.dll" "$(OutDir)"
|
||||
|
@ -1,7 +1,7 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio 2013
|
||||
VisualStudioVersion = 12.0.30723.0
|
||||
VisualStudioVersion = 12.0.31101.0
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Ember", "Ember.vcxproj", "{2BDB7A54-BB1A-476B-A6E5-F81E90AD4E67}"
|
||||
EndProject
|
||||
@ -119,10 +119,6 @@ Global
|
||||
Release-MT|Win32 = Release-MT|Win32
|
||||
Release-MT|x64 = Release-MT|x64
|
||||
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|Win32 = ReleaseWithoutAsm|Win32
|
||||
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.Build.0 = 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.Build.0 = 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.Build.0 = 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.Build.0 = 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.Build.0 = 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.Build.0 = 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.Build.0 = 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.Build.0 = 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.Build.0 = 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.Build.0 = 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.Build.0 = 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.Build.0 = 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.Build.0 = 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.Build.0 = 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.Build.0 = 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.Build.0 = 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|x64.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.Build.0 = 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|x64.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.Build.0 = 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|x64.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.Build.0 = 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|x64.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.Build.0 = 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|x64.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.Build.0 = 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|x86.ActiveCfg = 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.Build.0 = 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'">
|
||||
<ClCompile>
|
||||
<PreprocessorDefinitions>UNICODE;WIN32;QT_DLL;QT_CORE_LIB;QT_GUI_LIB;QT_MULTIMEDIA_LIB;QT_HELP_LIB;QT_OPENGL_LIB;QT_WIDGETS_LIB;QT_XML_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories>.;$(QTDIR)\include;$(ProjectDir)..\..\..\Fractorium\GeneratedFiles;$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName;$(QTDIR)\..\qtmultimedia\include\QtMultimedia;$(QTDIR)\..\qtmultimedia\include;$(QTDIR)\..\qttools\include;$(QTDIR)\..\qttools\include\QtHelp;$(QTDIR)\include\QtConcurrent;$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtOpenGL;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtXml;.\GeneratedFiles;$(ProjectDir)..\..\..\Source\Ember;$(ProjectDir)..\..\..\Source\EmberCL;$(ProjectDir)..\..\..\Source\EmberCommon;$(ProjectDir)..\..\..\..\glm;$(ProjectDir)..\..\..\..\tbb\include;$(ProjectDir)..\..\..\..\libjpeg;$(ProjectDir)..\..\..\..\libpng;$(ProjectDir)..\..\..\..\libxml2\include;$(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>
|
||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||
@ -165,7 +165,7 @@ xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\flam3-palettes.xml" "$(OutDir)"</
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<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>
|
||||
<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>
|
||||
@ -233,7 +233,7 @@ xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\flam3-palettes.xml" "$(OutDir)"</
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ClCompile>
|
||||
<PreprocessorDefinitions>UNICODE;WIN32;QT_DLL;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_GUI_LIB;QT_MULTIMEDIA_LIB;QT_HELP_LIB;QT_OPENGL_LIB;QT_WIDGETS_LIB;QT_XML_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories>.;$(QTDIR)\include;$(ProjectDir)..\..\..\Fractorium\GeneratedFiles;$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName;$(QTDIR)\..\qtmultimedia\include\QtMultimedia;$(QTDIR)\..\qtmultimedia\include;$(QTDIR)\..\qttools\include;$(QTDIR)\..\qttools\include\QtHelp;$(QTDIR)\include\QtConcurrent;$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtOpenGL;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtXml;.\GeneratedFiles;$(ProjectDir)..\..\..\Source\Ember;$(ProjectDir)..\..\..\Source\EmberCL;$(ProjectDir)..\..\..\Source\EmberCommon;$(ProjectDir)..\..\..\..\glm;$(ProjectDir)..\..\..\..\tbb\include;$(ProjectDir)..\..\..\..\libjpeg;$(ProjectDir)..\..\..\..\libpng;$(ProjectDir)..\..\..\..\libxml2\include;$(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>
|
||||
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||
<TreatWChar_tAsBuiltInType>false</TreatWChar_tAsBuiltInType>
|
||||
@ -251,7 +251,7 @@ xcopy /F /Y /R /D "$(SolutionDir)..\..\..\Data\flam3-palettes.xml" "$(OutDir)"</
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<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>
|
||||
<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>
|
||||
@ -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>
|
||||
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing VariationsDialog.h...</Message>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
||||
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/VariationsDialog.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(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>
|
||||
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Moc%27ing VariationsDialog.h...</Message>
|
||||
<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>
|
||||
<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Moc%27ing VariationsDialog.h...</Message>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
||||
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/VariationsDialog.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(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>
|
||||
<Message Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">Moc%27ing VariationsDialog.h...</Message>
|
||||
<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>
|
||||
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing QssDialog.h...</Message>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
||||
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/QssDialog.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(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>
|
||||
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Moc%27ing QssDialog.h...</Message>
|
||||
<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>
|
||||
<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Moc%27ing QssDialog.h...</Message>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
||||
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/QssDialog.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(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>
|
||||
<Message Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">Moc%27ing QssDialog.h...</Message>
|
||||
<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>
|
||||
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing csshighlighter.h...</Message>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
||||
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/csshighlighter.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(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>
|
||||
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Moc%27ing csshighlighter.h...</Message>
|
||||
<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>
|
||||
<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Moc%27ing csshighlighter.h...</Message>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
||||
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/csshighlighter.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(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>
|
||||
<Message Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">Moc%27ing csshighlighter.h...</Message>
|
||||
<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>
|
||||
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing QssTextEdit.h...</Message>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
||||
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/QssTextEdit.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(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>
|
||||
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Moc%27ing QssTextEdit.h...</Message>
|
||||
<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>
|
||||
<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Moc%27ing QssTextEdit.h...</Message>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
||||
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/QssTextEdit.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(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>
|
||||
<Message Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">Moc%27ing QssTextEdit.h...</Message>
|
||||
<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>
|
||||
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing OptionsDialog.h...</Message>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
||||
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DQT_DLL -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(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)'=='ReleaseNvidia|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs)</AdditionalInputs>
|
||||
<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>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|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>
|
||||
</CustomBuild>
|
||||
<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>
|
||||
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing AboutDialog.h...</Message>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
||||
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DQT_DLL -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(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)'=='ReleaseNvidia|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs)</AdditionalInputs>
|
||||
<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>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|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>
|
||||
</CustomBuild>
|
||||
<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>
|
||||
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing FinalRenderDialog.h...</Message>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
||||
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DQT_DLL -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(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)'=='ReleaseNvidia|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs)</AdditionalInputs>
|
||||
<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>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|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>
|
||||
</CustomBuild>
|
||||
<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>
|
||||
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing FractoriumSettings.h...</Message>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
||||
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DQT_DLL -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(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)'=='ReleaseNvidia|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs)</AdditionalInputs>
|
||||
<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>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|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>
|
||||
</CustomBuild>
|
||||
<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>
|
||||
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing CurvesGraphicsView.h...</Message>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
||||
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/CurvesGraphicsView.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(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>
|
||||
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Moc%27ing CurvesGraphicsView.h...</Message>
|
||||
<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>
|
||||
<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Moc%27ing CurvesGraphicsView.h...</Message>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
||||
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fFractoriumPch.h" "-f../../../../../Source/Fractorium/CurvesGraphicsView.h" -DUNICODE -DWIN32 -DQT_DLL -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(QTDIR)\include" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles" "-I$(ProjectDir)..\..\..\Fractorium\GeneratedFiles\ConfigurationName" "-I$(QTDIR)\..\qtmultimedia\include\QtMultimedia" "-I$(QTDIR)\..\qtmultimedia\include" "-I$(QTDIR)\..\qttools\include" "-I$(QTDIR)\..\qttools\include\QtHelp" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtXml" "-I.\GeneratedFiles" "-I$(ProjectDir)..\..\..\Source\Ember" "-I$(ProjectDir)..\..\..\Source\EmberCL" "-I$(ProjectDir)..\..\..\Source\EmberCommon" "-I$(ProjectDir)..\..\..\..\glm" "-I$(ProjectDir)..\..\..\..\tbb\include" "-I$(ProjectDir)..\..\..\..\libjpeg" "-I$(ProjectDir)..\..\..\..\libpng" "-I$(ProjectDir)..\..\..\..\libxml2\include" "-I$(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>
|
||||
<Message Condition="'$(Configuration)|$(Platform)'=='ReleaseNvidia|x64'">Moc%27ing CurvesGraphicsView.h...</Message>
|
||||
<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>
|
||||
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing GLWidget.h...</Message>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
||||
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DQT_DLL -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(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)'=='ReleaseNvidia|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs)</AdditionalInputs>
|
||||
<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>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|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>
|
||||
</CustomBuild>
|
||||
<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>
|
||||
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing DoubleSpinBox.h...</Message>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
||||
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DQT_DLL -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(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)'=='ReleaseNvidia|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs)</AdditionalInputs>
|
||||
<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>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|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>
|
||||
</CustomBuild>
|
||||
<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>
|
||||
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing SpinBox.h...</Message>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
||||
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DQT_DLL -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(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)'=='ReleaseNvidia|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs)</AdditionalInputs>
|
||||
<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>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|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>
|
||||
</CustomBuild>
|
||||
<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>
|
||||
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing Fractorium.h...</Message>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
||||
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DQT_DLL -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIA_LIB -DQT_HELP_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_XML_LIB -D_MBCS "-I." "-I$(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)'=='ReleaseNvidia|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs)</AdditionalInputs>
|
||||
<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>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|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>
|
||||
</CustomBuild>
|
||||
<ClInclude Include="..\..\..\Source\Fractorium\FractoriumPch.h" />
|
||||
|
@ -301,9 +301,6 @@
|
||||
<ClCompile Include="GeneratedFiles\ReleaseNvidia\moc_QssTextEdit.cpp">
|
||||
<Filter>Generated Files\ReleaseNvidia</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\Source\Fractorium\qcssscanner.h">
|
||||
<Filter>Dialogs\Qss</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\Source\Fractorium\qcssscanner.cpp">
|
||||
<Filter>Dialogs\Qss</Filter>
|
||||
</ClCompile>
|
||||
|
@ -60,6 +60,7 @@ HEADERS += \
|
||||
$$PRJ_DIR/Variations05.h \
|
||||
$$PRJ_DIR/Variations06.h \
|
||||
$$PRJ_DIR/VariationsDC.h \
|
||||
$$PRJ_DIR/VarFuncs.h \
|
||||
$$PRJ_DIR/Xform.h \
|
||||
$$PRJ_DIR/XmlToEmber.h
|
||||
|
||||
|
@ -12,19 +12,20 @@ unix|macx {
|
||||
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 += warn_off
|
||||
DESTDIR = $$(PWD)/../../../Bin/release
|
||||
DESTDIR = $$EMBER_ROOT/Bin/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 {
|
||||
LIBS += -framework OpenGL
|
||||
LIBS += -framework OpenCL
|
||||
@ -48,10 +49,6 @@ macx {
|
||||
QMAKE_LFLAGS_RELEASE += -s
|
||||
}
|
||||
|
||||
nvidia {
|
||||
QMAKE_CXXFLAGS += -DNVIDIA
|
||||
}
|
||||
|
||||
native {
|
||||
QMAKE_CXXFLAGS += -march=native
|
||||
} else {
|
||||
|
Binary file not shown.
@ -15,6 +15,7 @@ template<> CriticalSection QTIsaac<ISAAC_SIZE, ISAAC_INT>::m_CS = CriticalSectio
|
||||
#include "Palette.h"
|
||||
#include "PaletteList.h"
|
||||
#include "Point.h"
|
||||
#include "VarFuncs.h"
|
||||
#include "Variation.h"
|
||||
#include "Variations01.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.
|
||||
/// Additional instances of static class member variables.
|
||||
/// </summary>
|
||||
|
||||
namespace EmberNs
|
||||
{
|
||||
bool Timing::m_TimingInit = false;
|
||||
@ -71,6 +71,7 @@ uint Timing::m_ProcessorCount;
|
||||
template EMBER_API class MotionParam<T>; \
|
||||
template EMBER_API class EmberMotion<T>; \
|
||||
template EMBER_API class IteratorHelper<T>; \
|
||||
template EMBER_API class VarFuncs<T>; \
|
||||
template EMBER_API class Variation<T>; \
|
||||
template EMBER_API class ParamWithName<T>; \
|
||||
template EMBER_API class ParametricVariation<T>; \
|
||||
@ -377,12 +378,14 @@ uint Timing::m_ProcessorCount;
|
||||
EXPORTPREPOSTREGVAR(Crob, T) \
|
||||
EXPORTPREPOSTREGVAR(BubbleT3D, T) \
|
||||
EXPORTPREPOSTREGVAR(Synth, T) \
|
||||
EXPORTPREPOSTREGVAR(Crackle, T) \
|
||||
EXPORTPREPOSTREGVAR(DCBubble, T) \
|
||||
EXPORTPREPOSTREGVAR(DCCarpet, T) \
|
||||
EXPORTPREPOSTREGVAR(DCCube, T) \
|
||||
EXPORTPREPOSTREGVAR(DCCylinder, T) \
|
||||
EXPORTPREPOSTREGVAR(DCGridOut, T) \
|
||||
EXPORTPREPOSTREGVAR(DCLinear, T) \
|
||||
EXPORTPREPOSTREGVAR(DCPerlin, T) \
|
||||
EXPORTPREPOSTREGVAR(DCZTransl, T) \
|
||||
EXPORTPREPOSTREGVAR(DCTriangle, 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 Interpolater<T>; \
|
||||
template EMBER_API class Ember<T>; \
|
||||
/*template EMBER_API class RenderCallback<T>;*/ \
|
||||
template EMBER_API class CarToRas<T>; \
|
||||
template EMBER_API class Curves<T>; \
|
||||
template EMBER_API class XmlToEmber<T>; \
|
||||
|
@ -107,7 +107,6 @@ public:
|
||||
m_Supersample = ember.m_Supersample;
|
||||
m_TemporalSamples = ember.m_TemporalSamples;
|
||||
m_Symmetry = ember.m_Symmetry;
|
||||
|
||||
m_Quality = T(ember.m_Quality);
|
||||
m_PixelsPerUnit = T(ember.m_PixelsPerUnit);
|
||||
m_Zoom = T(ember.m_Zoom);
|
||||
@ -130,29 +129,22 @@ public:
|
||||
m_Background = ember.m_Background;
|
||||
m_Interp = ember.m_Interp;
|
||||
m_AffineInterp = ember.m_AffineInterp;
|
||||
|
||||
m_MinRadDE = T(ember.m_MinRadDE);
|
||||
m_MaxRadDE = T(ember.m_MaxRadDE);
|
||||
m_CurveDE = T(ember.m_CurveDE);
|
||||
|
||||
m_SpatialFilterType = ember.m_SpatialFilterType;
|
||||
m_SpatialFilterRadius = T(ember.m_SpatialFilterRadius);
|
||||
|
||||
m_TemporalFilterType = ember.m_TemporalFilterType;
|
||||
m_TemporalFilterExp = T(ember.m_TemporalFilterExp);
|
||||
m_TemporalFilterWidth = T(ember.m_TemporalFilterWidth);
|
||||
|
||||
m_PaletteMode = ember.m_PaletteMode;
|
||||
m_PaletteInterp = ember.m_PaletteInterp;
|
||||
|
||||
m_Name = ember.m_Name;
|
||||
m_ParentFilename = ember.m_ParentFilename;
|
||||
|
||||
m_Index = ember.m_Index;
|
||||
m_ScaleType = ember.ScaleType();
|
||||
m_Palette = ember.m_Palette;
|
||||
m_Curves = ember.m_Curves;
|
||||
|
||||
m_Xforms.clear();
|
||||
|
||||
for (size_t i = 0; i < ember.XformCount(); i++)
|
||||
@ -160,13 +152,11 @@ public:
|
||||
if (Xform<U>* p = ember.GetXform(i))
|
||||
{
|
||||
Xform<T> xform = *p;//Will call assignment operator to convert between types T and U.
|
||||
|
||||
AddXform(xform);
|
||||
}
|
||||
}
|
||||
|
||||
Xform<T> finalXform = *ember.FinalXform();//Will call assignment operator to convert between types T and U.
|
||||
|
||||
SetFinalXform(finalXform);
|
||||
|
||||
//Interpolated-against final xforms need animate & color speed set to 0.
|
||||
@ -184,7 +174,6 @@ public:
|
||||
m_Edits = xmlCopyDoc(ember.m_Edits, 1);
|
||||
|
||||
CopyVec(m_EmberMotionElements, ember.m_EmberMotionElements);
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
@ -227,36 +216,28 @@ public:
|
||||
m_Background.Reset();
|
||||
m_Interp = EMBER_INTERP_LINEAR;
|
||||
m_AffineInterp = AFFINE_INTERP_LOG;
|
||||
|
||||
//DE filter.
|
||||
m_MinRadDE = 0;
|
||||
m_MaxRadDE = 9;
|
||||
m_CurveDE = T(0.4);
|
||||
|
||||
//Spatial filter.
|
||||
m_SpatialFilterType = GAUSSIAN_SPATIAL_FILTER;
|
||||
m_SpatialFilterRadius = T(0.5);
|
||||
|
||||
//Temporal filter.
|
||||
m_TemporalFilterType = BOX_TEMPORAL_FILTER;
|
||||
m_TemporalFilterExp = 0;
|
||||
m_TemporalFilterWidth = 1;
|
||||
|
||||
//Palette.
|
||||
m_PaletteMode = PALETTE_STEP;
|
||||
m_PaletteMode = PALETTE_LINEAR;
|
||||
m_PaletteInterp = INTERP_HSV;
|
||||
|
||||
//Curves.
|
||||
m_Curves.Init();
|
||||
|
||||
m_Name = "No name";
|
||||
m_ParentFilename = "No parent";
|
||||
|
||||
//Internal values.
|
||||
m_Index = 0;
|
||||
m_ScaleType = eScaleType::SCALE_NONE;
|
||||
m_Xforms.reserve(12);
|
||||
|
||||
m_Edits = nullptr;
|
||||
}
|
||||
|
||||
@ -280,7 +261,6 @@ public:
|
||||
for (size_t i = 0; i < count; i++)
|
||||
{
|
||||
Xform<T> xform;
|
||||
|
||||
AddXform(xform);
|
||||
}
|
||||
}
|
||||
@ -304,7 +284,6 @@ public:
|
||||
Ember<T> Copy(size_t xformPad = 0, bool doFinal = false)
|
||||
{
|
||||
Ember<T> ember(*this);
|
||||
|
||||
ember.PadXforms(xformPad);
|
||||
|
||||
if (doFinal)
|
||||
@ -367,7 +346,7 @@ public:
|
||||
bool DeleteTotalXform(size_t i)
|
||||
{
|
||||
if (DeleteXform(i))
|
||||
{ }
|
||||
{ }
|
||||
else if (i == XformCount() && UseFinalXform())
|
||||
m_FinalXform.Clear();
|
||||
else
|
||||
@ -485,7 +464,6 @@ public:
|
||||
for (size_t i = 0; i < TotalXformCount(); i++)
|
||||
{
|
||||
Xform<T>* xform = GetTotalXform(i);
|
||||
|
||||
xform->CacheColorVals();
|
||||
xform->SetPrecalcFlags();
|
||||
}
|
||||
@ -624,6 +602,7 @@ public:
|
||||
normalizedWeights.resize(m_Xforms.size());
|
||||
|
||||
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++; }
|
||||
}
|
||||
|
||||
@ -636,13 +615,15 @@ public:
|
||||
void GetPresentVariations(vector<Variation<T>*>& variations, bool baseOnly = true) const
|
||||
{
|
||||
size_t i = 0, xformIndex = 0, totalVarCount = m_FinalXform.TotalVariationCount();
|
||||
|
||||
variations.clear();
|
||||
for (auto& xform : m_Xforms) totalVarCount += xform.TotalVariationCount();
|
||||
|
||||
while (auto xform = GetTotalXform(xformIndex++))
|
||||
totalVarCount += xform->TotalVariationCount();
|
||||
|
||||
xformIndex = 0;
|
||||
variations.reserve(totalVarCount);
|
||||
|
||||
while (Xform<T>* xform = GetTotalXform(xformIndex++))
|
||||
while (auto xform = GetTotalXform(xformIndex++))
|
||||
{
|
||||
i = 0;
|
||||
totalVarCount = xform->TotalVariationCount();
|
||||
@ -654,7 +635,7 @@ public:
|
||||
string tempVarBaseName = tempVar->BaseName();
|
||||
|
||||
if (!FindIf(variations, [&] (const Variation<T>* var) -> bool { return tempVar->VariationId() == var->VariationId(); }) &&
|
||||
!FindIf(variations, [&] (const Variation<T>* var) -> bool { return tempVarBaseName == var->BaseName(); }))
|
||||
!FindIf(variations, [&] (const Variation<T>* var) -> bool { return tempVarBaseName == var->BaseName(); }))
|
||||
variations.push_back(tempVar);
|
||||
}
|
||||
else
|
||||
@ -676,24 +657,29 @@ public:
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
/// <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>
|
||||
/// <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()
|
||||
{
|
||||
size_t xformIndex = 0;
|
||||
bool unflattened = false;
|
||||
|
||||
for (auto& xform : m_Xforms)
|
||||
while (auto xform = GetTotalXform(xformIndex++))
|
||||
{
|
||||
unflattened |= xform.DeleteVariationById(VAR_PRE_FLATTEN);
|
||||
unflattened |= xform.DeleteVariationById(VAR_FLATTEN);
|
||||
unflattened |= xform.DeleteVariationById(VAR_POST_FLATTEN);
|
||||
unflattened |= xform->DeleteVariationById(VAR_PRE_FLATTEN);
|
||||
unflattened |= xform->DeleteVariationById(VAR_FLATTEN);
|
||||
unflattened |= xform->DeleteVariationById(VAR_POST_FLATTEN);
|
||||
}
|
||||
|
||||
return unflattened;
|
||||
@ -770,7 +756,6 @@ public:
|
||||
m_TemporalFilterType = embers[0].m_TemporalFilterType;
|
||||
m_PaletteMode = embers[0].m_PaletteMode;
|
||||
m_AffineInterp = embers[0].m_AffineInterp;
|
||||
|
||||
//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_FinalRasH>(embers, coefs, size);
|
||||
@ -804,10 +789,8 @@ public:
|
||||
InterpT<&Ember<T>::m_CurveDE>(embers, coefs, size);
|
||||
InterpT<&Ember<T>::m_SpatialFilterRadius>(embers, coefs, size);
|
||||
InterpX<Curves<T>, &Ember<T>::m_Curves>(embers, coefs, size);
|
||||
|
||||
//Normally done in assignment, must manually do here.
|
||||
SetProjFunc();
|
||||
|
||||
//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.
|
||||
//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);
|
||||
ParametricVariation<T>* parVar = dynamic_cast<ParametricVariation<T>*>(var);//Will use below if it's parametric.
|
||||
|
||||
var->m_Weight = 0;
|
||||
|
||||
if (parVar)
|
||||
@ -901,7 +883,6 @@ public:
|
||||
InterpXform<&Xform<T>::m_ColorSpeed>(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);
|
||||
|
||||
ClampGte0Ref(thisXform->m_Weight);
|
||||
ClampRef<T>(thisXform->m_ColorX, 0, 1);
|
||||
ClampRef<T>(thisXform->m_ColorSpeed, -1, 1);
|
||||
@ -912,13 +893,10 @@ public:
|
||||
vector<v2T> cxMag(size);
|
||||
vector<v2T> cxAng(size);
|
||||
vector<v2T> cxTrn(size);
|
||||
|
||||
thisXform->m_Affine.m_Mat = m23T(0);
|
||||
|
||||
//Affine part.
|
||||
Interpolater<T>::ConvertLinearToPolar(embers, size, i, 0, cxAng, cxMag, cxTrn);
|
||||
Interpolater<T>::InterpAndConvertBack(coefs, cxAng, cxMag, cxTrn, thisXform->m_Affine);
|
||||
|
||||
//Post part.
|
||||
allID = true;
|
||||
|
||||
@ -1032,12 +1010,10 @@ public:
|
||||
T t2 = t * t;
|
||||
T t3 = t2 * t;
|
||||
vector<T> cmc(4);
|
||||
|
||||
cmc[0] = (2 * t2 - t - t3) / 2;
|
||||
cmc[1] = (3 * t3 - 5 * t2 + 2) / 2;
|
||||
cmc[2] = (4 * t2 - 3 * t3 + t) / 2;
|
||||
cmc[3] = (t3 - t2) / 2;
|
||||
|
||||
Interpolate(embers, size, cmc, 0);
|
||||
}
|
||||
|
||||
@ -1083,13 +1059,14 @@ public:
|
||||
|
||||
if (sym == 0)
|
||||
{
|
||||
static intmax_t symDistrib[] = {
|
||||
static intmax_t symDistrib[] =
|
||||
{
|
||||
-4, -3,
|
||||
-2, -2, -2,
|
||||
-1, -1, -1,
|
||||
2, 2, 2,
|
||||
3, 3,
|
||||
4, 4,
|
||||
2, 2, 2,
|
||||
3, 3,
|
||||
4, 4,
|
||||
};
|
||||
|
||||
if (rand.Rand() & 1)
|
||||
@ -1110,7 +1087,6 @@ public:
|
||||
i = XformCount();//Don't apply sym to final.
|
||||
Xform<T> xform;
|
||||
AddXform(xform);
|
||||
|
||||
m_Xforms[i].m_Weight = 1;
|
||||
m_Xforms[i].m_ColorSpeed = 0;
|
||||
m_Xforms[i].m_Animate = 0;
|
||||
@ -1123,7 +1099,6 @@ public:
|
||||
m_Xforms[i].m_Affine.E(1);
|
||||
m_Xforms[i].m_Affine.F(0);
|
||||
m_Xforms[i].AddVariation(new LinearVariation<T>());
|
||||
|
||||
result++;
|
||||
sym = -sym;
|
||||
}
|
||||
@ -1135,7 +1110,6 @@ public:
|
||||
i = XformCount();
|
||||
Xform<T> xform;
|
||||
AddXform(xform);
|
||||
|
||||
m_Xforms[i].m_Weight = 1;
|
||||
m_Xforms[i].m_ColorSpeed = 0;
|
||||
m_Xforms[i].m_Animate = 0;
|
||||
@ -1147,7 +1121,6 @@ public:
|
||||
m_Xforms[i].m_Affine.C(0);
|
||||
m_Xforms[i].m_Affine.F(0);
|
||||
m_Xforms[i].AddVariation(new LinearVariation<T>());
|
||||
|
||||
result++;
|
||||
}
|
||||
|
||||
@ -1164,9 +1137,13 @@ public:
|
||||
size_t val = 0;
|
||||
|
||||
if (m_CamZPos != 0) val |= PROJBITS_ZPOS;
|
||||
|
||||
if (m_CamPerspective != 0) val |= PROJBITS_PERSP;
|
||||
|
||||
if (m_CamPitch != 0) val |= PROJBITS_PITCH;
|
||||
|
||||
if (m_CamYaw != 0) val |= PROJBITS_YAW;
|
||||
|
||||
if (m_CamDepthBlur != 0) val |= PROJBITS_BLUR;
|
||||
|
||||
return val;
|
||||
@ -1199,7 +1176,6 @@ public:
|
||||
void ProjectZPerspective(Point<T>& point, QTIsaac<ISAAC_SIZE, ISAAC_INT>& rand)
|
||||
{
|
||||
T zr = Zeps(1 - m_CamPerspective * (point.m_Z - m_CamZPos));
|
||||
|
||||
point.m_X /= zr;
|
||||
point.m_Y /= zr;
|
||||
point.m_Z -= m_CamZPos;
|
||||
@ -1215,7 +1191,6 @@ public:
|
||||
T z = point.m_Z - m_CamZPos;
|
||||
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));
|
||||
|
||||
point.m_X /= zr;
|
||||
point.m_Y = y / zr;
|
||||
point.m_Z -= m_CamZPos;
|
||||
@ -1231,16 +1206,12 @@ public:
|
||||
T y, z, zr;
|
||||
T dsin, dcos;
|
||||
T t = rand.Frand01<T>() * M_2PI;
|
||||
|
||||
z = point.m_Z - m_CamZPos;
|
||||
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;
|
||||
zr = Zeps(1 - m_CamPerspective * z);
|
||||
|
||||
sincos(t, &dsin, &dcos);
|
||||
|
||||
T dr = rand.Frand01<T>() * m_BlurCoef * z;
|
||||
|
||||
point.m_X = (point.m_X + dr * dcos) / zr;
|
||||
point.m_Y = (y + dr * dsin) / zr;
|
||||
point.m_Z -= m_CamZPos;
|
||||
@ -1258,14 +1229,10 @@ public:
|
||||
T z = point.m_Z - m_CamZPos;
|
||||
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;
|
||||
|
||||
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 dr = rand.Frand01<T>() * m_BlurCoef * z;
|
||||
|
||||
sincos(t, &dsin, &dcos);
|
||||
|
||||
point.m_X = (x + dr * dcos) / zr;
|
||||
point.m_Y = (y + dr * dsin) / zr;
|
||||
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 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));
|
||||
|
||||
point.m_X = x / zr;
|
||||
point.m_Y = y / zr;
|
||||
point.m_Z -= m_CamZPos;
|
||||
@ -1306,60 +1272,77 @@ public:
|
||||
|
||||
switch (param.first)
|
||||
{
|
||||
case FLAME_MOTION_ZOOM:
|
||||
APP_FMP(m_Zoom);
|
||||
break;
|
||||
case FLAME_MOTION_ZPOS:
|
||||
APP_FMP(m_CamZPos);
|
||||
break;
|
||||
case FLAME_MOTION_PERSPECTIVE:
|
||||
APP_FMP(m_CamPerspective);
|
||||
break;
|
||||
case FLAME_MOTION_YAW:
|
||||
APP_FMP(m_CamYaw);
|
||||
break;
|
||||
case FLAME_MOTION_PITCH:
|
||||
APP_FMP(m_CamPitch);
|
||||
break;
|
||||
case FLAME_MOTION_DEPTH_BLUR:
|
||||
APP_FMP(m_CamDepthBlur);
|
||||
break;
|
||||
case FLAME_MOTION_CENTER_X:
|
||||
APP_FMP(m_CenterX);
|
||||
break;
|
||||
case FLAME_MOTION_CENTER_Y:
|
||||
APP_FMP(m_CenterY);
|
||||
break;
|
||||
case FLAME_MOTION_ROTATE:
|
||||
APP_FMP(m_Rotate);
|
||||
break;
|
||||
case FLAME_MOTION_BRIGHTNESS:
|
||||
APP_FMP(m_Brightness);
|
||||
break;
|
||||
case FLAME_MOTION_GAMMA:
|
||||
APP_FMP(m_Gamma);
|
||||
break;
|
||||
case FLAME_MOTION_GAMMA_THRESH:
|
||||
APP_FMP(m_GammaThresh);
|
||||
break;
|
||||
case FLAME_MOTION_HIGHLIGHT_POWER:
|
||||
APP_FMP(m_HighlightPower);
|
||||
break;
|
||||
case FLAME_MOTION_BACKGROUND_R:
|
||||
APP_FMP(m_Background.r);
|
||||
break;
|
||||
case FLAME_MOTION_BACKGROUND_G:
|
||||
APP_FMP(m_Background.g);
|
||||
break;
|
||||
case FLAME_MOTION_BACKGROUND_B:
|
||||
APP_FMP(m_Background.b);
|
||||
break;
|
||||
case FLAME_MOTION_VIBRANCY:
|
||||
APP_FMP(m_Vibrancy);
|
||||
break;
|
||||
case FLAME_MOTION_NONE:
|
||||
default:
|
||||
break;
|
||||
case FLAME_MOTION_ZOOM:
|
||||
APP_FMP(m_Zoom);
|
||||
break;
|
||||
|
||||
case FLAME_MOTION_ZPOS:
|
||||
APP_FMP(m_CamZPos);
|
||||
break;
|
||||
|
||||
case FLAME_MOTION_PERSPECTIVE:
|
||||
APP_FMP(m_CamPerspective);
|
||||
break;
|
||||
|
||||
case FLAME_MOTION_YAW:
|
||||
APP_FMP(m_CamYaw);
|
||||
break;
|
||||
|
||||
case FLAME_MOTION_PITCH:
|
||||
APP_FMP(m_CamPitch);
|
||||
break;
|
||||
|
||||
case FLAME_MOTION_DEPTH_BLUR:
|
||||
APP_FMP(m_CamDepthBlur);
|
||||
break;
|
||||
|
||||
case FLAME_MOTION_CENTER_X:
|
||||
APP_FMP(m_CenterX);
|
||||
break;
|
||||
|
||||
case FLAME_MOTION_CENTER_Y:
|
||||
APP_FMP(m_CenterY);
|
||||
break;
|
||||
|
||||
case FLAME_MOTION_ROTATE:
|
||||
APP_FMP(m_Rotate);
|
||||
break;
|
||||
|
||||
case FLAME_MOTION_BRIGHTNESS:
|
||||
APP_FMP(m_Brightness);
|
||||
break;
|
||||
|
||||
case FLAME_MOTION_GAMMA:
|
||||
APP_FMP(m_Gamma);
|
||||
break;
|
||||
|
||||
case FLAME_MOTION_GAMMA_THRESH:
|
||||
APP_FMP(m_GammaThresh);
|
||||
break;
|
||||
|
||||
case FLAME_MOTION_HIGHLIGHT_POWER:
|
||||
APP_FMP(m_HighlightPower);
|
||||
break;
|
||||
|
||||
case FLAME_MOTION_BACKGROUND_R:
|
||||
APP_FMP(m_Background.r);
|
||||
break;
|
||||
|
||||
case FLAME_MOTION_BACKGROUND_G:
|
||||
APP_FMP(m_Background.g);
|
||||
break;
|
||||
|
||||
case FLAME_MOTION_BACKGROUND_B:
|
||||
APP_FMP(m_Background.b);
|
||||
break;
|
||||
|
||||
case FLAME_MOTION_VIBRANCY:
|
||||
APP_FMP(m_Vibrancy);
|
||||
break;
|
||||
|
||||
case FLAME_MOTION_NONE:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1475,70 +1458,62 @@ public:
|
||||
{
|
||||
size_t i;
|
||||
ostringstream ss;
|
||||
|
||||
ss << "Final Raster Width: " << m_FinalRasW << endl
|
||||
<< "Final Raster Height: " << m_FinalRasH << endl
|
||||
<< "Original Raster Width: " << m_OrigFinalRasW << endl
|
||||
<< "Original Raster Height: " << m_OrigFinalRasH << endl
|
||||
<< "Supersample: " << m_Supersample << endl
|
||||
<< "Temporal Samples: " << m_TemporalSamples << endl
|
||||
<< "Symmetry: " << m_Symmetry << endl
|
||||
|
||||
<< "Quality: " << m_Quality << endl
|
||||
<< "Pixels Per Unit: " << m_PixelsPerUnit << endl
|
||||
<< "Original Pixels Per Unit: " << m_OrigPixPerUnit << endl
|
||||
<< "Sub Batch Size: " << m_SubBatchSize << endl
|
||||
<< "Fuse Count: " << m_FuseCount << endl
|
||||
<< "Zoom: " << m_Zoom << endl
|
||||
<< "ZPos: " << m_CamZPos << endl
|
||||
<< "Perspective: " << m_CamPerspective << endl
|
||||
<< "Yaw: " << m_CamYaw << endl
|
||||
<< "Pitch: " << m_CamPitch << endl
|
||||
<< "Depth Blur: " << m_CamDepthBlur << endl
|
||||
<< "CenterX: " << m_CenterX << endl
|
||||
<< "CenterY: " << m_CenterY << endl
|
||||
<< "RotCenterY: " << m_RotCenterY << endl
|
||||
<< "Rotate: " << m_Rotate << endl
|
||||
<< "Brightness: " << m_Brightness << endl
|
||||
<< "Gamma: " << m_Gamma << endl
|
||||
<< "Vibrancy: " << m_Vibrancy << endl
|
||||
<< "Gamma Threshold: " << m_GammaThresh << endl
|
||||
<< "Highlight Power: " << m_HighlightPower << endl
|
||||
<< "Time: " << m_Time << endl
|
||||
<< "Background: " << m_Background.r << ", " << m_Background.g << ", " << m_Background.b << ", " << m_Background.a << endl
|
||||
|
||||
<< "Interp: " << m_Interp << endl
|
||||
<< "Affine Interp Type: " << m_AffineInterp << endl
|
||||
|
||||
<< "Minimum DE Radius: " << m_MinRadDE << endl
|
||||
<< "Maximum DE Radius: " << m_MaxRadDE << endl
|
||||
<< "DE Curve: " << m_CurveDE << endl
|
||||
|
||||
<< "Spatial Filter Type: " << m_SpatialFilterType << endl
|
||||
<< "Spatial Filter Radius: " << m_SpatialFilterRadius << endl
|
||||
|
||||
<< "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
|
||||
ss << "Final Raster Width: " << m_FinalRasW << "\n"
|
||||
<< "Final Raster Height: " << m_FinalRasH << "\n"
|
||||
<< "Original Raster Width: " << m_OrigFinalRasW << "\n"
|
||||
<< "Original Raster Height: " << m_OrigFinalRasH << "\n"
|
||||
<< "Supersample: " << m_Supersample << "\n"
|
||||
<< "Temporal Samples: " << m_TemporalSamples << "\n"
|
||||
<< "Symmetry: " << m_Symmetry << "\n"
|
||||
<< "Quality: " << m_Quality << "\n"
|
||||
<< "Pixels Per Unit: " << m_PixelsPerUnit << "\n"
|
||||
<< "Original Pixels Per Unit: " << m_OrigPixPerUnit << "\n"
|
||||
<< "Sub Batch Size: " << m_SubBatchSize << "\n"
|
||||
<< "Fuse Count: " << m_FuseCount << "\n"
|
||||
<< "Zoom: " << m_Zoom << "\n"
|
||||
<< "ZPos: " << m_CamZPos << "\n"
|
||||
<< "Perspective: " << m_CamPerspective << "\n"
|
||||
<< "Yaw: " << m_CamYaw << "\n"
|
||||
<< "Pitch: " << m_CamPitch << "\n"
|
||||
<< "Depth Blur: " << m_CamDepthBlur << "\n"
|
||||
<< "CenterX: " << m_CenterX << "\n"
|
||||
<< "CenterY: " << m_CenterY << "\n"
|
||||
<< "RotCenterY: " << m_RotCenterY << "\n"
|
||||
<< "Rotate: " << m_Rotate << "\n"
|
||||
<< "Brightness: " << m_Brightness << "\n"
|
||||
<< "Gamma: " << m_Gamma << "\n"
|
||||
<< "Vibrancy: " << m_Vibrancy << "\n"
|
||||
<< "Gamma Threshold: " << m_GammaThresh << "\n"
|
||||
<< "Highlight Power: " << m_HighlightPower << "\n"
|
||||
<< "Time: " << m_Time << "\n"
|
||||
<< "Background: " << m_Background.r << ", " << m_Background.g << ", " << m_Background.b << ", " << m_Background.a << "\n"
|
||||
<< "Interp: " << m_Interp << "\n"
|
||||
<< "Affine Interp Type: " << m_AffineInterp << "\n"
|
||||
<< "Minimum DE Radius: " << m_MinRadDE << "\n"
|
||||
<< "Maximum DE Radius: " << m_MaxRadDE << "\n"
|
||||
<< "DE Curve: " << m_CurveDE << "\n"
|
||||
<< "Spatial Filter Type: " << m_SpatialFilterType << "\n"
|
||||
<< "Spatial Filter Radius: " << m_SpatialFilterRadius << "\n"
|
||||
<< "Temporal Filter Type: " << m_TemporalFilterType << "\n"
|
||||
<< "Temporal Filter Exp: " << m_TemporalFilterExp << "\n"
|
||||
<< "Temporal Filter Width: " << m_TemporalFilterWidth << "\n"
|
||||
<< "Palette Mode: " << m_PaletteMode << "\n"
|
||||
<< "Palette Interp: " << m_PaletteInterp << "\n"
|
||||
<< "Palette Index: " << m_Palette.m_Index << "\n"
|
||||
//Add palette info here if needed.
|
||||
|
||||
<< "Name: " << m_Name << endl
|
||||
<< "Index: " << m_Index << endl
|
||||
<< "Scale Type: " << m_ScaleType << endl
|
||||
<< "Parent Filename: " << m_ParentFilename << endl
|
||||
<< endl;
|
||||
<< "Name: " << m_Name << "\n"
|
||||
<< "Index: " << m_Index << "\n"
|
||||
<< "Scale Type: " << m_ScaleType << "\n"
|
||||
<< "Parent Filename: " << m_ParentFilename << "\n"
|
||||
<< "\n";
|
||||
|
||||
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())
|
||||
ss << "Final Xform: " << m_FinalXform.ToString() << endl;
|
||||
ss << "Final Xform: " << m_FinalXform.ToString() << "\n";
|
||||
|
||||
return ss.str();
|
||||
}
|
||||
|
@ -28,6 +28,7 @@
|
||||
|
||||
//Standard headers.
|
||||
#include <algorithm>
|
||||
#include <array>
|
||||
#include <chrono>
|
||||
#include <complex>
|
||||
#include <cstdint>
|
||||
@ -38,9 +39,9 @@
|
||||
#include <iomanip>
|
||||
#include <limits>
|
||||
#ifdef __APPLE__
|
||||
#include <malloc/malloc.h>
|
||||
#include <malloc/malloc.h>
|
||||
#else
|
||||
#include <malloc.h>
|
||||
#include <malloc.h>
|
||||
#endif
|
||||
#include <map>
|
||||
#include <math.h>
|
||||
@ -57,9 +58,9 @@
|
||||
|
||||
//Third party headers.
|
||||
#ifdef _WIN32
|
||||
#include "libxml/parser.h"
|
||||
#include "libxml/parser.h"
|
||||
#else
|
||||
#include "libxml2/libxml/parser.h"
|
||||
#include "libxml2/libxml/parser.h"
|
||||
#endif
|
||||
|
||||
//Intel's Threading Building Blocks is what's used for all threading.
|
||||
@ -69,7 +70,7 @@
|
||||
|
||||
#define GLM_FORCE_RADIANS 1
|
||||
#ifndef __APPLE__
|
||||
#define GLM_FORCE_INLINE 1
|
||||
#define GLM_FORCE_INLINE 1
|
||||
#endif
|
||||
|
||||
//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
|
||||
//which will just end up setting all elements to 0 which means
|
||||
//only the first xform will get used.
|
||||
|
||||
//Calculate how much of a fraction of a the total density each element represents.
|
||||
size_t j = 0;
|
||||
//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)
|
||||
{
|
||||
#ifdef _DEBUG
|
||||
|
||||
//Ensure distribution contains no out of bounds indices.
|
||||
if (byte(i) >= ember.XformCount())
|
||||
throw "Out of bounds xform index in selection distribution.";
|
||||
|
||||
#endif
|
||||
//printf("offset = %d, xform = %d, running sum = %f\n", j, i, tempDensity);
|
||||
m_XformDistributions[(distrib * CHOOSE_XFORM_GRAIN) + j] = byte(i);
|
||||
@ -159,10 +160,16 @@ public:
|
||||
}
|
||||
|
||||
#ifdef _DEBUG
|
||||
|
||||
//Ensure every element of the distribution was populated.
|
||||
if (j < CHOOSE_XFORM_GRAIN)
|
||||
throw "Not all distribution elements set, undefined behavior.";
|
||||
|
||||
#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.
|
||||
//T t = xforms[0].m_Weight;
|
||||
//
|
||||
@ -217,7 +224,6 @@ protected:
|
||||
firstBadPoint.m_Z = 0;
|
||||
firstBadPoint.m_ColorX = point->m_ColorX;
|
||||
firstBadPoint.m_VizAdjusted = point->m_VizAdjusted;
|
||||
|
||||
xformIndex = NextXformFromIndex(rand.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)
|
||||
{
|
||||
T tempVizAdjusted = tempPoint.m_VizAdjusted;
|
||||
|
||||
ember.NonConstFinalXform()->Apply(&tempPoint, sample, rand);
|
||||
sample->m_VizAdjusted = tempVizAdjusted;
|
||||
}
|
||||
@ -282,7 +287,7 @@ protected:
|
||||
template <typename T>
|
||||
class EMBER_API StandardIterator : public Iterator<T>
|
||||
{
|
||||
ITERATORUSINGS
|
||||
ITERATORUSINGS
|
||||
public:
|
||||
/// <summary>
|
||||
/// Empty constructor.
|
||||
@ -405,7 +410,7 @@ public:
|
||||
template <typename T>
|
||||
class EMBER_API XaosIterator : public Iterator<T>
|
||||
{
|
||||
ITERATORUSINGS
|
||||
ITERATORUSINGS
|
||||
public:
|
||||
/// <summary>
|
||||
/// Empty constructor.
|
||||
@ -439,7 +444,6 @@ public:
|
||||
firstBadPoint.m_Z = 0;
|
||||
firstBadPoint.m_ColorX = point->m_ColorX;
|
||||
firstBadPoint.m_VizAdjusted = point->m_VizAdjusted;
|
||||
|
||||
xformIndex = NextXformFromIndex(rand.Rand(), lastXformUsed);
|
||||
|
||||
if (!xforms[xformIndex].Apply(&firstBadPoint, point, rand))
|
||||
|
@ -50,7 +50,7 @@ static inline bool FindIf(c& container, pr pred)
|
||||
template<class c, class T>
|
||||
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>
|
||||
@ -178,6 +178,67 @@ private:
|
||||
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>
|
||||
/// Open a file in binary mode and read its entire contents into a vector of bytes. Optionally null terminate.
|
||||
/// </summary>
|
||||
@ -197,7 +258,6 @@ static bool ReadFile(const char* filename, string& buf, bool nullTerminate = tru
|
||||
if (f)
|
||||
{
|
||||
struct _stat statBuf;
|
||||
|
||||
#if defined(_WIN32) || defined(__APPLE__)
|
||||
int statResult = _fstat(f->_file, &statBuf);//Get data associated with file.
|
||||
#else
|
||||
@ -582,7 +642,7 @@ static inline T SafeTan(T x)
|
||||
|
||||
template <>
|
||||
#ifdef _WIN32
|
||||
static
|
||||
static
|
||||
#endif
|
||||
float SafeTan<float>(float x)
|
||||
{
|
||||
@ -591,7 +651,7 @@ float SafeTan<float>(float x)
|
||||
|
||||
template <>
|
||||
#ifdef _WIN32
|
||||
static
|
||||
static
|
||||
#endif
|
||||
double SafeTan<double>(double x)
|
||||
{
|
||||
@ -694,7 +754,6 @@ template <typename T>
|
||||
static inline T Fabsmod(T v)
|
||||
{
|
||||
T dummy;
|
||||
|
||||
return modf(v, &dummy);
|
||||
}
|
||||
|
||||
@ -831,7 +890,6 @@ static inline T NormalizeDeg360(T angle)
|
||||
static string ToLower(const string& str)
|
||||
{
|
||||
string lower;
|
||||
|
||||
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.
|
||||
return lower;
|
||||
@ -845,7 +903,6 @@ static string ToLower(const string& str)
|
||||
static string ToUpper(const string& str)
|
||||
{
|
||||
string upper;
|
||||
|
||||
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.
|
||||
return upper;
|
||||
@ -924,7 +981,6 @@ static inline T Arg(char* name, T def)
|
||||
{
|
||||
T tempVal;
|
||||
istringstream istr(ch);
|
||||
|
||||
istr >> tempVal;
|
||||
|
||||
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>
|
||||
template <>
|
||||
#ifdef _WIN32
|
||||
static
|
||||
static
|
||||
#endif
|
||||
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>
|
||||
template <>
|
||||
#ifdef _WIN32
|
||||
static
|
||||
static
|
||||
#endif
|
||||
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 "Isaac.h"
|
||||
#include "VarFuncs.h"
|
||||
|
||||
/// <summary>
|
||||
/// Base variation classes. Individual variations will be grouped into files of roughly 50
|
||||
@ -101,6 +102,7 @@ enum eVariationId
|
||||
VAR_COTQ ,
|
||||
VAR_CPOW ,
|
||||
VAR_CPOW2 ,
|
||||
VAR_CRACKLE ,
|
||||
VAR_CRESCENTS ,
|
||||
VAR_CROB ,
|
||||
VAR_CROP ,
|
||||
@ -409,6 +411,7 @@ enum eVariationId
|
||||
VAR_PRE_COTQ,
|
||||
VAR_PRE_CPOW,
|
||||
VAR_PRE_CPOW2,
|
||||
VAR_PRE_CRACKLE,
|
||||
VAR_PRE_CRESCENTS,
|
||||
VAR_PRE_CROB,
|
||||
VAR_PRE_CROP,
|
||||
@ -717,6 +720,7 @@ enum eVariationId
|
||||
VAR_POST_COTQ,
|
||||
VAR_POST_CPOW,
|
||||
VAR_POST_CPOW2,
|
||||
VAR_POST_CRACKLE,
|
||||
VAR_POST_CRESCENTS,
|
||||
VAR_POST_CROB,
|
||||
VAR_POST_CROP,
|
||||
@ -974,6 +978,7 @@ enum eVariationId
|
||||
VAR_DC_CYLINDER,
|
||||
VAR_DC_GRIDOUT,
|
||||
VAR_DC_LINEAR,
|
||||
VAR_DC_PERLIN,
|
||||
VAR_DC_TRIANGLE,
|
||||
VAR_DC_ZTRANSL,
|
||||
|
||||
@ -983,6 +988,7 @@ enum eVariationId
|
||||
VAR_PRE_DC_CYLINDER,
|
||||
VAR_PRE_DC_GRIDOUT,
|
||||
VAR_PRE_DC_LINEAR,
|
||||
VAR_PRE_DC_PERLIN,
|
||||
VAR_PRE_DC_TRIANGLE,
|
||||
VAR_PRE_DC_ZTRANSL,
|
||||
|
||||
@ -992,6 +998,7 @@ enum eVariationId
|
||||
VAR_POST_DC_CYLINDER,
|
||||
VAR_POST_DC_GRIDOUT,
|
||||
VAR_POST_DC_LINEAR,
|
||||
VAR_POST_DC_PERLIN,
|
||||
VAR_POST_DC_TRIANGLE,
|
||||
VAR_POST_DC_ZTRANSL,
|
||||
|
||||
@ -1049,7 +1056,7 @@ public:
|
||||
bool needPrecalcAngles = false,
|
||||
bool needPrecalcAtanXY = false,
|
||||
bool needPrecalcAtanYX = false)
|
||||
: m_Name(name)//Omit unnecessary default constructor call.
|
||||
: m_Name(name)//Omit unnecessary default constructor call.
|
||||
{
|
||||
m_Xform = nullptr;
|
||||
m_VariationId = id;
|
||||
@ -1133,7 +1140,6 @@ public:
|
||||
m_NeedPrecalcAngles = variation.NeedPrecalcAngles();
|
||||
m_NeedPrecalcAtanXY = variation.NeedPrecalcAtanXY();
|
||||
m_NeedPrecalcAtanYX = variation.NeedPrecalcAtanYX();
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
@ -1288,9 +1294,7 @@ public:
|
||||
virtual string ToString() const
|
||||
{
|
||||
ostringstream ss;
|
||||
|
||||
ss << m_Name << "(" << m_Weight << ")";
|
||||
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
@ -1346,6 +1350,12 @@ public:
|
||||
/// <returns>The names for global OpenCL functions specific to this variation</returns>
|
||||
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>
|
||||
/// If the OpenCL string depends on any functions specific to this variation, return them.
|
||||
/// </summary>
|
||||
@ -1462,6 +1472,7 @@ template <typename T> class ParametricVariation;
|
||||
/// Also, some of them can be considered precalculated values, rather than
|
||||
/// formal parameters.
|
||||
/// Further, some can change state between iterations.
|
||||
/// The constructors for each case are deliberately different to prevent errors.
|
||||
/// This class encapsulates a single parameter.
|
||||
/// Template argument expected to be float or double.
|
||||
/// </summary>
|
||||
@ -1485,11 +1496,13 @@ public:
|
||||
/// <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="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,
|
||||
T* param,
|
||||
string name)
|
||||
T* param,
|
||||
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>
|
||||
@ -1500,9 +1513,9 @@ public:
|
||||
/// <param name="param">A pointer to the parameter</param>
|
||||
/// <param name="name">The name of the parameter</param>
|
||||
ParamWithName(bool isPrecalc,
|
||||
bool isState,
|
||||
T* param,
|
||||
string name)
|
||||
bool isState,
|
||||
T* param,
|
||||
string name)
|
||||
{
|
||||
Init(param, name, 0, REAL, TLOW, TMAX, true, true);
|
||||
}
|
||||
@ -1555,6 +1568,7 @@ public:
|
||||
m_Name = paramWithName.m_Name;
|
||||
m_IsPrecalc = paramWithName.m_IsPrecalc;
|
||||
m_IsState = paramWithName.m_IsState;
|
||||
m_Size = paramWithName.m_Size;
|
||||
}
|
||||
|
||||
return *this;
|
||||
@ -1571,7 +1585,8 @@ public:
|
||||
/// <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="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_Def = def;
|
||||
@ -1581,7 +1596,7 @@ public:
|
||||
m_Name = name;
|
||||
m_IsPrecalc = isPrecalc;
|
||||
m_IsState = isState;
|
||||
|
||||
m_Size = size;
|
||||
Set(m_Def);//Initial value.
|
||||
}
|
||||
|
||||
@ -1652,17 +1667,16 @@ public:
|
||||
string ToString() const
|
||||
{
|
||||
ostringstream ss;
|
||||
|
||||
ss << "Param Name: " << m_Name << endl
|
||||
<< "Param Pointer: " << m_Param << endl
|
||||
<< "Param Value: " << *m_Param << endl
|
||||
<< "Param Def: " << m_Def << endl
|
||||
<< "Param Min: " << m_Min << endl
|
||||
<< "Param Max: " << m_Max << endl
|
||||
<< "Param Type: " << m_Type << endl
|
||||
<< "Is Precalc: " << m_IsPrecalc << endl
|
||||
<< "Is State: " << m_IsState << endl;
|
||||
|
||||
ss << "Param Name: " << m_Name << "\n"
|
||||
<< "Param Pointer: " << m_Param << "\n"
|
||||
<< "Param Value: " << *m_Param << "\n"
|
||||
<< "Param Def: " << m_Def << "\n"
|
||||
<< "Param Min: " << m_Min << "\n"
|
||||
<< "Param Max: " << m_Max << "\n"
|
||||
<< "Param Type: " << m_Type << "\n"
|
||||
<< "Is Precalc: " << m_IsPrecalc << "\n"
|
||||
<< "Is State: " << m_IsState << "\n"
|
||||
<< "Size: " << m_Size << "\n";
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
@ -1678,6 +1692,7 @@ public:
|
||||
string Name() const { return m_Name; }
|
||||
bool IsPrecalc() const { return m_IsPrecalc; }
|
||||
bool IsState() const { return m_IsState; }
|
||||
size_t Size() const { return m_Size; }
|
||||
|
||||
private:
|
||||
T* m_Param;//Pointer to the parameter value.
|
||||
@ -1688,6 +1703,7 @@ private:
|
||||
string m_Name;//Name of the parameter.
|
||||
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.
|
||||
size_t m_Size;//The size of the field in bytes. Default: sizeof(T).
|
||||
};
|
||||
|
||||
#define VARUSINGS \
|
||||
@ -1729,17 +1745,17 @@ public:
|
||||
/// <param name="needPrecalcAtanXY">Whether it uses the precalc atan XY value in its calculations. Default: false.</param>
|
||||
/// <param name="needPrecalcAtanYX">Whether it uses the precalc atan YX value in its calculations. Default: false.</param>
|
||||
ParametricVariation(const char* name, eVariationId id, T weight = 1.0,
|
||||
bool needPrecalcSumSquares = false,
|
||||
bool needPrecalcSqrtSumSquares = false,
|
||||
bool needPrecalcAngles = false,
|
||||
bool needPrecalcAtanXY = false,
|
||||
bool needPrecalcAtanYX = false)
|
||||
: Variation<T>(name, id, weight,
|
||||
needPrecalcSumSquares,
|
||||
needPrecalcSqrtSumSquares,
|
||||
needPrecalcAngles,
|
||||
needPrecalcAtanXY,
|
||||
needPrecalcAtanYX)
|
||||
bool needPrecalcSumSquares = false,
|
||||
bool needPrecalcSqrtSumSquares = false,
|
||||
bool needPrecalcAngles = false,
|
||||
bool needPrecalcAtanXY = false,
|
||||
bool needPrecalcAtanYX = false)
|
||||
: Variation<T>(name, id, weight,
|
||||
needPrecalcSumSquares,
|
||||
needPrecalcSqrtSumSquares,
|
||||
needPrecalcAngles,
|
||||
needPrecalcAtanXY,
|
||||
needPrecalcAtanYX)
|
||||
{
|
||||
m_Params.reserve(5);
|
||||
}
|
||||
@ -1884,7 +1900,9 @@ public:
|
||||
virtual void Random(QTIsaac<ISAAC_SIZE, ISAAC_INT>& rand) override
|
||||
{
|
||||
Variation<T>::Random(rand);
|
||||
|
||||
for (auto& param : m_Params) param.Set(rand.Frand11<T>());
|
||||
|
||||
this->Precalc();
|
||||
}
|
||||
|
||||
@ -1894,6 +1912,7 @@ public:
|
||||
void Clear()
|
||||
{
|
||||
for (auto& param : m_Params) *(param.Param()) = 0;
|
||||
|
||||
this->Precalc();
|
||||
}
|
||||
|
||||
@ -1905,8 +1924,8 @@ public:
|
||||
vector<string> ParamNames(bool includePrecalcs = false)
|
||||
{
|
||||
vector<string> vec;
|
||||
|
||||
vec.reserve(m_Params.size());
|
||||
|
||||
for (auto& param : m_Params)
|
||||
{
|
||||
if ((includePrecalcs && param.IsPrecalc()) || !param.IsPrecalc())
|
||||
@ -1947,8 +1966,8 @@ public:
|
||||
virtual string ToString() const override
|
||||
{
|
||||
ostringstream ss;
|
||||
|
||||
ss << Variation<T>::ToString() << endl;
|
||||
|
||||
for (auto& param : m_Params) ss << param.ToString() << endl;
|
||||
|
||||
return ss.str();
|
||||
@ -2084,7 +2103,7 @@ protected:
|
||||
template <typename T> \
|
||||
class EMBER_API Pre##varName##Variation : public varName##Variation<T> \
|
||||
{ \
|
||||
VARUSINGS \
|
||||
VARUSINGS \
|
||||
public: \
|
||||
Pre##varName##Variation(T weight = 1.0) : varName##Variation<T>(weight) \
|
||||
{ \
|
||||
@ -2100,7 +2119,7 @@ protected:
|
||||
template <typename T> \
|
||||
class EMBER_API Post##varName##Variation : public varName##Variation<T> \
|
||||
{ \
|
||||
VARUSINGS \
|
||||
VARUSINGS \
|
||||
public:\
|
||||
Post##varName##Variation(T weight = 1.0) : varName##Variation<T>(weight) \
|
||||
{ \
|
||||
@ -2203,9 +2222,9 @@ protected:
|
||||
template <typename T> \
|
||||
class EMBER_API Pre##varName##Variation : public varName##Variation <T> \
|
||||
{ \
|
||||
VARUSINGS \
|
||||
PARVARUSINGS \
|
||||
using varName##Variation<T>::Init; \
|
||||
VARUSINGS \
|
||||
PARVARUSINGS \
|
||||
using varName##Variation<T>::Init; \
|
||||
public:\
|
||||
Pre##varName##Variation(T weight = 1.0) : varName##Variation<T>(weight) \
|
||||
{ \
|
||||
@ -2222,9 +2241,9 @@ protected:
|
||||
template <typename T> \
|
||||
class EMBER_API Post##varName##Variation : public varName##Variation<T> \
|
||||
{ \
|
||||
VARUSINGS \
|
||||
PARVARUSINGS \
|
||||
using varName##Variation<T>::Init; \
|
||||
VARUSINGS \
|
||||
PARVARUSINGS \
|
||||
using varName##Variation<T>::Init; \
|
||||
public:\
|
||||
Post##varName##Variation(T weight = 1.0) : varName##Variation<T>(weight) \
|
||||
{ \
|
||||
@ -2237,4 +2256,4 @@ protected:
|
||||
\
|
||||
PREPOSTPARVARCOPY(Post##varName##Variation, varName##Variation) \
|
||||
};
|
||||
}
|
||||
}
|
||||
|
@ -341,9 +341,9 @@ public:
|
||||
ADDPREPOSTREGVAR(Crob)
|
||||
ADDPREPOSTREGVAR(BubbleT3D)
|
||||
ADDPREPOSTREGVAR(Synth)
|
||||
ADDPREPOSTREGVAR(Crackle)
|
||||
//ADDPREPOSTREGVAR(LinearXZ)
|
||||
//ADDPREPOSTREGVAR(LinearYZ)
|
||||
|
||||
//DC are special.
|
||||
ADDPREPOSTREGVAR(DCBubble)
|
||||
ADDPREPOSTREGVAR(DCCarpet)
|
||||
@ -351,19 +351,22 @@ public:
|
||||
ADDPREPOSTREGVAR(DCCylinder)
|
||||
ADDPREPOSTREGVAR(DCGridOut)
|
||||
ADDPREPOSTREGVAR(DCLinear)
|
||||
ADDPREPOSTREGVAR(DCPerlin)
|
||||
ADDPREPOSTREGVAR(DCTriangle)
|
||||
ADDPREPOSTREGVAR(DCZTransl)
|
||||
|
||||
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_PreVariations.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.
|
||||
|
||||
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_POST) m_PostVariations.push_back(var);
|
||||
|
||||
//Keep a list of which variations derive from ParametricVariation.
|
||||
@ -522,7 +525,6 @@ private:
|
||||
if (var)
|
||||
{
|
||||
Variation<T>* var2 = var->Copy();
|
||||
|
||||
var2->m_Weight = weight;
|
||||
return var2;
|
||||
}
|
||||
|
@ -38,8 +38,8 @@ public:
|
||||
static const v2T offset[4] { { 0, 0 }, { 0, 1 }, { 1, 0 }, { 1, 1 } };
|
||||
int i = 0;
|
||||
T di, dj;
|
||||
T XCh, YCh, XCo, YCo, DXo, DYo, L, L1, L2, R, s, trgL, Vx, Vy;
|
||||
v2T U;
|
||||
T XCh, YCh, XCo, YCo, DXo, DYo, L, L1, L2, R, s, trgL;
|
||||
v2T u, v;
|
||||
v2T P[7];
|
||||
//For speed/convenience.
|
||||
s = m_Cellsize;
|
||||
@ -49,10 +49,10 @@ public:
|
||||
return;
|
||||
|
||||
//Get co-ordinates, and convert to hex co-ordinates.
|
||||
U.x = helper.In.x;
|
||||
U.y = helper.In.y;
|
||||
XCh = T(Floor((AXhXo * U.x + AXhYo * U.y) / s));
|
||||
YCh = T(Floor((AYhXo * U.x + AYhYo * U.y) / s));
|
||||
u.x = helper.In.x;
|
||||
u.y = helper.In.y;
|
||||
XCh = T(Floor((AXhXo * u.x + AXhYo * 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
|
||||
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).
|
||||
//First adjust centers according to which one was found to be closest.
|
||||
XCh += offset[q].x;
|
||||
@ -90,20 +90,19 @@ public:
|
||||
P[5].y = YCo - (AYoXh + AYoYh) * s;
|
||||
P[6].x = XCo - AXoXh * 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.
|
||||
DXo = U.x - P[0].x;
|
||||
DYo = U.y - P[0].y;
|
||||
DXo = u.x - P[0].x;
|
||||
DYo = u.y - P[0].y;
|
||||
//Apply "interesting bit" to cell's DXo and DYo co-ordinates.
|
||||
//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.
|
||||
//Rotate.
|
||||
Vx = DXo * m_RotCos + DYo * m_RotSin;
|
||||
Vy = -DXo * m_RotSin + DYo * m_RotCos;
|
||||
v.x = DXo * m_RotCos + DYo * m_RotSin;
|
||||
v.y = -DXo * m_RotSin + DYo * m_RotCos;
|
||||
//Measure voronoi distance again.
|
||||
U.x = Vx + P[0].x;
|
||||
U.y = Vy + P[0].y;
|
||||
L2 = Voronoi(&P[0], 7, 0, U);
|
||||
u = v + P[0];
|
||||
L2 = m_VarFuncs->Voronoi(&P[0], 7, 0, u);
|
||||
//Scale to meet target size . . . adjust according to how close
|
||||
//we are to the edge.
|
||||
//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);
|
||||
}
|
||||
|
||||
Vx *= R;
|
||||
Vy *= R;
|
||||
v *= R;
|
||||
//Add cell center co-ordinates back in.
|
||||
Vx += P[0].x;
|
||||
Vy += P[0].y;
|
||||
v += P[0];
|
||||
//Finally add values in.
|
||||
helper.Out.x = m_Weight * Vx;
|
||||
helper.Out.y = m_Weight * Vy;
|
||||
helper.Out.x = m_Weight * v.x;
|
||||
helper.Out.y = m_Weight * v.y;
|
||||
helper.Out.z = (m_VarType == VARTYPE_REG) ? 0 : helper.In.z;
|
||||
}
|
||||
|
||||
@ -242,7 +239,7 @@ public:
|
||||
|
||||
virtual vector<string> OpenCLGlobalFuncNames() const override
|
||||
{
|
||||
return vector<string> { "Zeps" };
|
||||
return vector<string> { "Zeps", "Sqr", "Vratio", "Closest", "Vratio" };
|
||||
}
|
||||
|
||||
virtual string OpenCLFuncsString() const override
|
||||
@ -257,60 +254,7 @@ public:
|
||||
"constant real_t AYoXh = (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"
|
||||
"\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"
|
||||
;
|
||||
"\n";
|
||||
}
|
||||
|
||||
virtual void Precalc() override
|
||||
@ -325,72 +269,22 @@ protected:
|
||||
string prefix = Prefix();
|
||||
m_Params.clear();
|
||||
m_Params.push_back(ParamWithName<T>(&m_Cellsize, prefix + "hexes_cellsize", 1));
|
||||
m_Params.push_back(ParamWithName<T>(&m_Power, prefix + "hexes_power", 1));
|
||||
m_Params.push_back(ParamWithName<T>(&m_Rotate, prefix + "hexes_rotate", T(0.166)));
|
||||
m_Params.push_back(ParamWithName<T>(&m_Scale, prefix + "hexes_scale", 1));
|
||||
m_Params.push_back(ParamWithName<T>(&m_Power, prefix + "hexes_power", 1));
|
||||
m_Params.push_back(ParamWithName<T>(&m_Rotate, prefix + "hexes_rotate", T(0.166)));
|
||||
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_RotCos, prefix + "hexes_rotcos"));
|
||||
m_VarFuncs = VarFuncs<T>::Instance();
|
||||
}
|
||||
|
||||
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_Power;
|
||||
T m_Rotate;
|
||||
T m_Scale;
|
||||
T m_RotSin;//Precalc.
|
||||
T m_RotCos;
|
||||
std::shared_ptr<VarFuncs<T>> m_VarFuncs;
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
@ -1916,34 +1810,34 @@ protected:
|
||||
{
|
||||
string prefix = Prefix();
|
||||
m_Params.clear();
|
||||
m_Params.push_back(ParamWithName<T>(&m_Top, prefix + "crob_top", -1));
|
||||
m_Params.push_back(ParamWithName<T>(&m_Bottom, prefix + "crob_bottom", 1));
|
||||
m_Params.push_back(ParamWithName<T>(&m_Left, prefix + "crob_left", -1));
|
||||
m_Params.push_back(ParamWithName<T>(&m_Right, prefix + "crob_right", 1));
|
||||
m_Params.push_back(ParamWithName<T>(&m_Blur, prefix + "crob_blur", 1, INTEGER));
|
||||
m_Params.push_back(ParamWithName<T>(&m_RatioBlur, prefix + "crob_ratioBlur", T(0.5), REAL, 0, 1));
|
||||
m_Params.push_back(ParamWithName<T>(&m_Top, prefix + "crob_top", -1));
|
||||
m_Params.push_back(ParamWithName<T>(&m_Bottom, prefix + "crob_bottom", 1));
|
||||
m_Params.push_back(ParamWithName<T>(&m_Left, prefix + "crob_left", -1));
|
||||
m_Params.push_back(ParamWithName<T>(&m_Right, prefix + "crob_right", 1));
|
||||
m_Params.push_back(ParamWithName<T>(&m_Blur, prefix + "crob_blur", 1, INTEGER));
|
||||
m_Params.push_back(ParamWithName<T>(&m_RatioBlur, prefix + "crob_ratioBlur", T(0.5), REAL, 0, 1));
|
||||
m_Params.push_back(ParamWithName<T>(&m_DirectBlur, prefix + "crob_directBlur", 2));
|
||||
m_Params.push_back(ParamWithName<T>(true, &m_XInterval, prefix + "crob_xinterval"));
|
||||
m_Params.push_back(ParamWithName<T>(true, &m_YInterval, prefix + "crob_yinterval"));
|
||||
m_Params.push_back(ParamWithName<T>(true, &m_XInt2, prefix + "crob_xint2"));
|
||||
m_Params.push_back(ParamWithName<T>(true, &m_YInt2, prefix + "crob_yint2"));
|
||||
m_Params.push_back(ParamWithName<T>(true, &m_MinInt2, prefix + "crob_minint2"));
|
||||
m_Params.push_back(ParamWithName<T>(true, &m_X0, prefix + "crob_x0"));
|
||||
m_Params.push_back(ParamWithName<T>(true, &m_Y0, prefix + "crob_y0"));
|
||||
m_Params.push_back(ParamWithName<T>(true, &m_X0c, prefix + "crob_x0c"));
|
||||
m_Params.push_back(ParamWithName<T>(true, &m_Y0c, prefix + "crob_y0c"));
|
||||
m_Params.push_back(ParamWithName<T>(true, &m_SetProb, prefix + "crob_set_prob"));
|
||||
m_Params.push_back(ParamWithName<T>(true, &m_SetProbH, prefix + "crob_set_prob_h"));
|
||||
m_Params.push_back(ParamWithName<T>(true, &m_SetProbQ, prefix + "crob_set_prob_q"));
|
||||
m_Params.push_back(ParamWithName<T>(true, &m_SetProbTQ, prefix + "crob_set_prob_tq"));
|
||||
m_Params.push_back(ParamWithName<T>(true, &m_SetCompProb, prefix + "crob_set_comp_prob"));
|
||||
m_Params.push_back(ParamWithName<T>(true, &m_SetCompProbH, prefix + "crob_set_comp_prob_h"));
|
||||
m_Params.push_back(ParamWithName<T>(true, &m_SetCompProbQ, prefix + "crob_set_comp_prob_q"));
|
||||
m_Params.push_back(ParamWithName<T>(true, &m_XInterval, prefix + "crob_xinterval"));
|
||||
m_Params.push_back(ParamWithName<T>(true, &m_YInterval, prefix + "crob_yinterval"));
|
||||
m_Params.push_back(ParamWithName<T>(true, &m_XInt2, prefix + "crob_xint2"));
|
||||
m_Params.push_back(ParamWithName<T>(true, &m_YInt2, prefix + "crob_yint2"));
|
||||
m_Params.push_back(ParamWithName<T>(true, &m_MinInt2, prefix + "crob_minint2"));
|
||||
m_Params.push_back(ParamWithName<T>(true, &m_X0, prefix + "crob_x0"));
|
||||
m_Params.push_back(ParamWithName<T>(true, &m_Y0, prefix + "crob_y0"));
|
||||
m_Params.push_back(ParamWithName<T>(true, &m_X0c, prefix + "crob_x0c"));
|
||||
m_Params.push_back(ParamWithName<T>(true, &m_Y0c, prefix + "crob_y0c"));
|
||||
m_Params.push_back(ParamWithName<T>(true, &m_SetProb, prefix + "crob_set_prob"));
|
||||
m_Params.push_back(ParamWithName<T>(true, &m_SetProbH, prefix + "crob_set_prob_h"));
|
||||
m_Params.push_back(ParamWithName<T>(true, &m_SetProbQ, prefix + "crob_set_prob_q"));
|
||||
m_Params.push_back(ParamWithName<T>(true, &m_SetProbTQ, prefix + "crob_set_prob_tq"));
|
||||
m_Params.push_back(ParamWithName<T>(true, &m_SetCompProb, prefix + "crob_set_comp_prob"));
|
||||
m_Params.push_back(ParamWithName<T>(true, &m_SetCompProbH, prefix + "crob_set_comp_prob_h"));
|
||||
m_Params.push_back(ParamWithName<T>(true, &m_SetCompProbQ, prefix + "crob_set_comp_prob_q"));
|
||||
m_Params.push_back(ParamWithName<T>(true, &m_SetCompProbTQ, prefix + "crob_set_comp_prob_tq"));
|
||||
m_Params.push_back(ParamWithName<T>(true, &m_TopBorder, prefix + "crob_top_border"));
|
||||
m_Params.push_back(ParamWithName<T>(true, &m_BottomBorder, prefix + "crob_bottom_border"));
|
||||
m_Params.push_back(ParamWithName<T>(true, &m_LeftBorder, prefix + "crob_left_border"));
|
||||
m_Params.push_back(ParamWithName<T>(true, &m_RightBorder, prefix + "crob_right_border"));
|
||||
m_Params.push_back(ParamWithName<T>(true, &m_TopBorder, prefix + "crob_top_border"));
|
||||
m_Params.push_back(ParamWithName<T>(true, &m_BottomBorder, prefix + "crob_bottom_border"));
|
||||
m_Params.push_back(ParamWithName<T>(true, &m_LeftBorder, prefix + "crob_left_border"));
|
||||
m_Params.push_back(ParamWithName<T>(true, &m_RightBorder, prefix + "crob_right_border"));
|
||||
}
|
||||
|
||||
private:
|
||||
@ -2210,7 +2104,7 @@ public:
|
||||
"\t\t{\n"
|
||||
"\t\t while (angXY > " << angStrip2 << ")\n"
|
||||
"\t\t {\n"
|
||||
"\t\t angXY -= " << angStrip2 << "; \n"
|
||||
"\t\t angXY -= " << angStrip2 << ";\n"
|
||||
"\t\t }\n"
|
||||
"\t\t\n"
|
||||
"\t\t if (" << invStripes << " == 0)\n"
|
||||
@ -2282,7 +2176,7 @@ public:
|
||||
"\t\t\n"
|
||||
"\t\tif ((x != 0) || (y != 0))\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 if (" << exponentZ << " <= 2)\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 else\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 fac = cos(angTmp) / cos(angZ);\n"
|
||||
"\t\t x = x * fac;\n"
|
||||
@ -2330,7 +2224,7 @@ public:
|
||||
"\t\t }\n"
|
||||
"\t\t else\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 fac = cos(angTmp) / cos(angZ);\n"
|
||||
"\t\t x = x * fac;\n"
|
||||
@ -2354,7 +2248,7 @@ public:
|
||||
"\t\t {\n"
|
||||
"\t\t if (angZ > " << angHoleTemp << ")\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 else\n"
|
||||
"\t\t {\n"
|
||||
@ -2903,7 +2797,7 @@ public:
|
||||
<< "\t\treal_t Vx, Vy, radius, theta;\n"
|
||||
<< "\t\treal_t thetaFactor;\n"
|
||||
<< "\t\treal_t s, c, mu;\n"
|
||||
<< "\t\tint synthMode = (int)" << synthMode << "; \n"
|
||||
<< "\t\tint synthMode = (int)" << synthMode << ";\n"
|
||||
<< "\t\tSynthStruct synth;\n"
|
||||
<< "\n"
|
||||
<< "\t\tsynth.SynthA = " << synthA << ";\n"
|
||||
@ -3419,40 +3313,40 @@ protected:
|
||||
string prefix = Prefix();
|
||||
m_Params.clear();
|
||||
m_Params.reserve(34);
|
||||
m_Params.push_back(ParamWithName<T>(&m_SynthA, prefix + "synth_a"));
|
||||
m_Params.push_back(ParamWithName<T>(&m_SynthMode, prefix + "synth_mode", 3, INTEGER));
|
||||
m_Params.push_back(ParamWithName<T>(&m_SynthPower, prefix + "synth_power", -2));
|
||||
m_Params.push_back(ParamWithName<T>(&m_SynthMix, prefix + "synth_mix"));
|
||||
m_Params.push_back(ParamWithName<T>(&m_SynthA, prefix + "synth_a"));
|
||||
m_Params.push_back(ParamWithName<T>(&m_SynthMode, prefix + "synth_mode", 3, INTEGER));
|
||||
m_Params.push_back(ParamWithName<T>(&m_SynthPower, prefix + "synth_power", -2));
|
||||
m_Params.push_back(ParamWithName<T>(&m_SynthMix, prefix + "synth_mix"));
|
||||
m_Params.push_back(ParamWithName<T>(&m_SynthSmooth, prefix + "synth_smooth", 0, INTEGER));
|
||||
m_Params.push_back(ParamWithName<T>(&m_SynthB, prefix + "synth_b"));
|
||||
m_Params.push_back(ParamWithName<T>(&m_SynthBType, prefix + "synth_b_type", 0, INTEGER));
|
||||
m_Params.push_back(ParamWithName<T>(&m_SynthBSkew, prefix + "synth_b_skew"));
|
||||
m_Params.push_back(ParamWithName<T>(&m_SynthBFrq, prefix + "synth_b_frq", 1, REAL));
|
||||
m_Params.push_back(ParamWithName<T>(&m_SynthBPhs, prefix + "synth_b_phs"));
|
||||
m_Params.push_back(ParamWithName<T>(&m_SynthB, prefix + "synth_b"));
|
||||
m_Params.push_back(ParamWithName<T>(&m_SynthBType, prefix + "synth_b_type", 0, INTEGER));
|
||||
m_Params.push_back(ParamWithName<T>(&m_SynthBSkew, prefix + "synth_b_skew"));
|
||||
m_Params.push_back(ParamWithName<T>(&m_SynthBFrq, prefix + "synth_b_frq", 1, REAL));
|
||||
m_Params.push_back(ParamWithName<T>(&m_SynthBPhs, prefix + "synth_b_phs"));
|
||||
m_Params.push_back(ParamWithName<T>(&m_SynthBLayer, prefix + "synth_b_layer", 0, INTEGER));
|
||||
m_Params.push_back(ParamWithName<T>(&m_SynthC, prefix + "synth_c"));
|
||||
m_Params.push_back(ParamWithName<T>(&m_SynthCType, prefix + "synth_c_type", 0, INTEGER));
|
||||
m_Params.push_back(ParamWithName<T>(&m_SynthCSkew, prefix + "synth_c_skew"));
|
||||
m_Params.push_back(ParamWithName<T>(&m_SynthCFrq, prefix + "synth_c_frq", 1, REAL));
|
||||
m_Params.push_back(ParamWithName<T>(&m_SynthCPhs, prefix + "synth_c_phs"));
|
||||
m_Params.push_back(ParamWithName<T>(&m_SynthC, prefix + "synth_c"));
|
||||
m_Params.push_back(ParamWithName<T>(&m_SynthCType, prefix + "synth_c_type", 0, INTEGER));
|
||||
m_Params.push_back(ParamWithName<T>(&m_SynthCSkew, prefix + "synth_c_skew"));
|
||||
m_Params.push_back(ParamWithName<T>(&m_SynthCFrq, prefix + "synth_c_frq", 1, REAL));
|
||||
m_Params.push_back(ParamWithName<T>(&m_SynthCPhs, prefix + "synth_c_phs"));
|
||||
m_Params.push_back(ParamWithName<T>(&m_SynthCLayer, prefix + "synth_c_layer", 0, INTEGER));
|
||||
m_Params.push_back(ParamWithName<T>(&m_SynthD, prefix + "synth_d"));
|
||||
m_Params.push_back(ParamWithName<T>(&m_SynthDType, prefix + "synth_d_type", 0, INTEGER));
|
||||
m_Params.push_back(ParamWithName<T>(&m_SynthDSkew, prefix + "synth_d_skew"));
|
||||
m_Params.push_back(ParamWithName<T>(&m_SynthDFrq, prefix + "synth_d_frq", 1, REAL));
|
||||
m_Params.push_back(ParamWithName<T>(&m_SynthDPhs, prefix + "synth_d_phs"));
|
||||
m_Params.push_back(ParamWithName<T>(&m_SynthD, prefix + "synth_d"));
|
||||
m_Params.push_back(ParamWithName<T>(&m_SynthDType, prefix + "synth_d_type", 0, INTEGER));
|
||||
m_Params.push_back(ParamWithName<T>(&m_SynthDSkew, prefix + "synth_d_skew"));
|
||||
m_Params.push_back(ParamWithName<T>(&m_SynthDFrq, prefix + "synth_d_frq", 1, REAL));
|
||||
m_Params.push_back(ParamWithName<T>(&m_SynthDPhs, prefix + "synth_d_phs"));
|
||||
m_Params.push_back(ParamWithName<T>(&m_SynthDLayer, prefix + "synth_d_layer", 0, INTEGER));
|
||||
m_Params.push_back(ParamWithName<T>(&m_SynthE, prefix + "synth_e"));
|
||||
m_Params.push_back(ParamWithName<T>(&m_SynthEType, prefix + "synth_e_type", 0, INTEGER));
|
||||
m_Params.push_back(ParamWithName<T>(&m_SynthESkew, prefix + "synth_e_skew"));
|
||||
m_Params.push_back(ParamWithName<T>(&m_SynthEFrq, prefix + "synth_e_frq", 1, REAL));
|
||||
m_Params.push_back(ParamWithName<T>(&m_SynthEPhs, prefix + "synth_e_phs"));
|
||||
m_Params.push_back(ParamWithName<T>(&m_SynthE, prefix + "synth_e"));
|
||||
m_Params.push_back(ParamWithName<T>(&m_SynthEType, prefix + "synth_e_type", 0, INTEGER));
|
||||
m_Params.push_back(ParamWithName<T>(&m_SynthESkew, prefix + "synth_e_skew"));
|
||||
m_Params.push_back(ParamWithName<T>(&m_SynthEFrq, prefix + "synth_e_frq", 1, REAL));
|
||||
m_Params.push_back(ParamWithName<T>(&m_SynthEPhs, prefix + "synth_e_phs"));
|
||||
m_Params.push_back(ParamWithName<T>(&m_SynthELayer, prefix + "synth_e_layer", 0, INTEGER));
|
||||
m_Params.push_back(ParamWithName<T>(&m_SynthF, prefix + "synth_f"));
|
||||
m_Params.push_back(ParamWithName<T>(&m_SynthFType, prefix + "synth_f_type", 0, INTEGER));
|
||||
m_Params.push_back(ParamWithName<T>(&m_SynthFSkew, prefix + "synth_f_skew"));
|
||||
m_Params.push_back(ParamWithName<T>(&m_SynthFFrq, prefix + "synth_f_frq", 1, REAL));
|
||||
m_Params.push_back(ParamWithName<T>(&m_SynthFPhs, prefix + "synth_f_phs"));
|
||||
m_Params.push_back(ParamWithName<T>(&m_SynthF, prefix + "synth_f"));
|
||||
m_Params.push_back(ParamWithName<T>(&m_SynthFType, prefix + "synth_f_type", 0, INTEGER));
|
||||
m_Params.push_back(ParamWithName<T>(&m_SynthFSkew, prefix + "synth_f_skew"));
|
||||
m_Params.push_back(ParamWithName<T>(&m_SynthFFrq, prefix + "synth_f_frq", 1, REAL));
|
||||
m_Params.push_back(ParamWithName<T>(&m_SynthFPhs, prefix + "synth_f_phs"));
|
||||
m_Params.push_back(ParamWithName<T>(&m_SynthFLayer, prefix + "synth_f_layer", 0, INTEGER));
|
||||
}
|
||||
|
||||
@ -3736,10 +3630,244 @@ private:
|
||||
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(Nblur, nBlur, NBLUR)
|
||||
MAKEPREPOSTPARVAR(Octapol, octapol, OCTAPOL)
|
||||
MAKEPREPOSTPARVAR(Crob, crob, CROB)
|
||||
MAKEPREPOSTPARVAR(BubbleT3D, bubbleT3D, BUBBLET3D)
|
||||
MAKEPREPOSTPARVAR(Synth, synth, SYNTH)
|
||||
MAKEPREPOSTPARVAR(Crackle, crackle, CRACKLE)
|
||||
}
|
||||
|
@ -24,11 +24,9 @@ public:
|
||||
T r = helper.m_PrecalcSumSquares;
|
||||
T r4_1 = Zeps(r / 4 + 1);
|
||||
r4_1 = m_Weight / r4_1;
|
||||
|
||||
helper.Out.x = r4_1 * helper.In.x;
|
||||
helper.Out.y = r4_1 * helper.In.y;
|
||||
helper.Out.z = m_Weight * (2 / r4_1 - 1);
|
||||
|
||||
T sumX, sumY;
|
||||
|
||||
if (m_VarType == VARTYPE_PRE)
|
||||
@ -44,7 +42,6 @@ public:
|
||||
|
||||
T tempX = helper.Out.x + sumX;
|
||||
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));
|
||||
}
|
||||
|
||||
@ -58,7 +55,6 @@ public:
|
||||
string centerX = "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.
|
||||
|
||||
ss << "\t{\n"
|
||||
<< "\t\treal_t r = precalcSumSquares;\n"
|
||||
<< "\t\treal_t r4_1 = Zeps(r / 4 + 1);\n"
|
||||
@ -73,23 +69,22 @@ public:
|
||||
if (m_VarType == VARTYPE_PRE)
|
||||
{
|
||||
ss
|
||||
<< "\t\tsumX = vIn.x;\n"
|
||||
<< "\t\tsumY = vIn.y;\n";
|
||||
<< "\t\tsumX = vIn.x;\n"
|
||||
<< "\t\tsumY = vIn.y;\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
ss
|
||||
<< "\t\tsumX = outPoint->m_X;\n"
|
||||
<< "\t\tsumY = outPoint->m_Y;\n";
|
||||
<< "\t\tsumX = outPoint->m_X;\n"
|
||||
<< "\t\tsumY = outPoint->m_Y;\n";
|
||||
}
|
||||
|
||||
ss
|
||||
<< "\t\treal_t tempX = vOut.x + sumX;\n"
|
||||
<< "\t\treal_t tempY = vOut.y + sumY;\n"
|
||||
<< "\n"
|
||||
<< "\t\toutPoint->m_ColorX = fmod(fabs(" << bdcs << " * (Sqr(tempX + " << centerX << ") + Sqr(tempY + " << centerY << "))), (real_t)(1.0));\n"
|
||||
<< "\t}\n";
|
||||
|
||||
<< "\t\treal_t tempX = vOut.x + sumX;\n"
|
||||
<< "\t\treal_t tempY = vOut.y + sumY;\n"
|
||||
<< "\n"
|
||||
<< "\t\toutPoint->m_ColorX = fmod(fabs(" << bdcs << " * (Sqr(tempX + " << centerX << ") + Sqr(tempY + " << centerY << "))), (real_t)(1.0));\n"
|
||||
<< "\t}\n";
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
@ -107,7 +102,6 @@ protected:
|
||||
void Init()
|
||||
{
|
||||
string prefix = Prefix();
|
||||
|
||||
m_Params.clear();
|
||||
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"));
|
||||
@ -144,7 +138,6 @@ public:
|
||||
T y = helper.In.y + y0;
|
||||
T x0_xor_y0 = T(x0 ^ y0);
|
||||
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.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;
|
||||
@ -159,7 +152,6 @@ public:
|
||||
string index = ss2.str();
|
||||
string origin = "parVars[" + ToUpper(m_Params[i++].Name()) + index;//Params.
|
||||
string h = "parVars[" + ToUpper(m_Params[i++].Name()) + index;//Precalc.
|
||||
|
||||
ss << "\t{\n"
|
||||
<< "\t\tint x0 = (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\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";
|
||||
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
@ -186,7 +177,6 @@ protected:
|
||||
void Init()
|
||||
{
|
||||
string prefix = Prefix();
|
||||
|
||||
m_Params.clear();
|
||||
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.
|
||||
@ -232,6 +222,7 @@ public:
|
||||
outPoint.m_ColorX = m_ClampC2;
|
||||
|
||||
break;
|
||||
|
||||
case 1:
|
||||
x = m_Weight * p;
|
||||
y = m_Weight * (j ? -1 : 1);
|
||||
@ -243,6 +234,7 @@ public:
|
||||
outPoint.m_ColorX = m_ClampC4;
|
||||
|
||||
break;
|
||||
|
||||
case 2:
|
||||
default:
|
||||
x = m_Weight * p;
|
||||
@ -283,7 +275,6 @@ public:
|
||||
string clampC4 = "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;
|
||||
|
||||
ss << "\t{\n"
|
||||
<< "\t\treal_t x, y, z;\n"
|
||||
<< "\t\treal_t p = 2 * MwcNext01(mwc) - 1;\n"
|
||||
@ -332,7 +323,6 @@ public:
|
||||
<< "\t\tvOut.y = y * " << cubeY << ";\n"
|
||||
<< "\t\tvOut.z = z * " << cubeZ << ";\n"
|
||||
<< "\t}\n";
|
||||
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
@ -350,7 +340,6 @@ protected:
|
||||
void Init()
|
||||
{
|
||||
string prefix = Prefix();
|
||||
|
||||
m_Params.clear();
|
||||
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"));
|
||||
@ -408,11 +397,9 @@ public:
|
||||
T sr = std::sin(temp);
|
||||
T cr = std::cos(temp);
|
||||
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.y = r + helper.In.y * m_Y;
|
||||
helper.Out.z = m_Weight * std::cos(helper.In.x + r * cr);
|
||||
|
||||
T sumX, sumY;
|
||||
|
||||
if (m_VarType == VARTYPE_PRE)
|
||||
@ -428,7 +415,6 @@ public:
|
||||
|
||||
T tempX = helper.Out.x + sumX;
|
||||
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));
|
||||
}
|
||||
|
||||
@ -448,7 +434,6 @@ public:
|
||||
string cosa = "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;
|
||||
|
||||
ss << "\t{\n"
|
||||
<< "\t\treal_t temp = MwcNext(mwc) * M_2PI;\n"
|
||||
<< "\t\treal_t sr = sin(temp);\n"
|
||||
@ -463,23 +448,22 @@ public:
|
||||
if (m_VarType == VARTYPE_PRE)
|
||||
{
|
||||
ss
|
||||
<< "\t\tsumX = vIn.x;\n"
|
||||
<< "\t\tsumY = vIn.y;\n";
|
||||
<< "\t\tsumX = vIn.x;\n"
|
||||
<< "\t\tsumY = vIn.y;\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
ss
|
||||
<< "\t\tsumX = outPoint->m_X;\n"
|
||||
<< "\t\tsumY = outPoint->m_Y;\n";
|
||||
<< "\t\tsumX = outPoint->m_X;\n"
|
||||
<< "\t\tsumY = outPoint->m_Y;\n";
|
||||
}
|
||||
|
||||
ss
|
||||
<< "\t\treal_t tempX = vOut.x + sumX;\n"
|
||||
<< "\t\treal_t tempY = vOut.y + sumY;\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}\n";
|
||||
|
||||
<< "\t\treal_t tempX = vOut.x + sumX;\n"
|
||||
<< "\t\treal_t tempY = vOut.y + sumY;\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}\n";
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
@ -494,7 +478,6 @@ protected:
|
||||
void Init()
|
||||
{
|
||||
string prefix = Prefix();
|
||||
|
||||
m_Params.clear();
|
||||
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.
|
||||
@ -613,7 +596,6 @@ public:
|
||||
{
|
||||
ostringstream ss;
|
||||
intmax_t varIndex = IndexInXform();
|
||||
|
||||
ss << "\t{\n"
|
||||
<< "\t\treal_t x = LRint(vIn.x);\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\toutPoint->m_ColorX = fmod(c, (real_t)(1.0));\n"
|
||||
<< "\t}\n";
|
||||
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
@ -719,7 +700,6 @@ public:
|
||||
helper.Out.x = m_Weight * helper.In.x;
|
||||
helper.Out.y = m_Weight * helper.In.y;
|
||||
helper.Out.z = m_Weight * helper.In.z;
|
||||
|
||||
T sumX, sumY;
|
||||
|
||||
if (m_VarType == VARTYPE_PRE)
|
||||
@ -735,7 +715,6 @@ public:
|
||||
|
||||
T tempX = helper.Out.x + sumX;
|
||||
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));
|
||||
}
|
||||
|
||||
@ -752,7 +731,6 @@ public:
|
||||
string ldca = "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;
|
||||
|
||||
ss << "\t{\n"
|
||||
<< "\t\tvOut.x = xform->m_VariationWeights[" << varIndex << "] * vIn.x;\n"
|
||||
<< "\t\tvOut.y = xform->m_VariationWeights[" << varIndex << "] * vIn.y;\n"
|
||||
@ -763,23 +741,22 @@ public:
|
||||
if (m_VarType == VARTYPE_PRE)
|
||||
{
|
||||
ss
|
||||
<< "\t\tsumX = vIn.x;\n"
|
||||
<< "\t\tsumY = vIn.y;\n";
|
||||
<< "\t\tsumX = vIn.x;\n"
|
||||
<< "\t\tsumY = vIn.y;\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
ss
|
||||
<< "\t\tsumX = outPoint->m_X;\n"
|
||||
<< "\t\tsumY = outPoint->m_Y;\n";
|
||||
<< "\t\tsumX = outPoint->m_X;\n"
|
||||
<< "\t\tsumY = outPoint->m_Y;\n";
|
||||
}
|
||||
|
||||
ss
|
||||
<< "\t\treal_t tempX = vOut.x + sumX;\n"
|
||||
<< "\t\treal_t tempY = vOut.y + sumY;\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}\n";
|
||||
|
||||
<< "\t\treal_t tempX = vOut.x + sumX;\n"
|
||||
<< "\t\treal_t tempY = vOut.y + sumY;\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}\n";
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
@ -794,7 +771,6 @@ protected:
|
||||
void Init()
|
||||
{
|
||||
string prefix = Prefix();
|
||||
|
||||
m_Params.clear();
|
||||
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"));
|
||||
@ -837,19 +813,16 @@ public:
|
||||
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
|
||||
px = helper.In.x - ox, py = helper.In.y - oy; // P
|
||||
|
||||
// calculate dot products
|
||||
const T dot00 = xx * xx + xy * xy; // X * X
|
||||
const T dot01 = xx * yx + xy * yy; // X * Y
|
||||
const T dot02 = xx * px + xy * py; // X * P
|
||||
const T dot11 = yx * yx + yy * yy; // Y * Y
|
||||
const T dot12 = yx * px + yy * py; // Y * P
|
||||
|
||||
// calculate barycentric coordinates
|
||||
const T denom = (dot00 * dot11 - dot01 * dot01);
|
||||
const T num_u = (dot11 * dot02 - dot01 * dot12);
|
||||
const T num_v = (dot00 * dot12 - dot01 * dot02);
|
||||
|
||||
// u, v must not be constant
|
||||
T u = num_u / denom;
|
||||
T v = num_v / denom;
|
||||
@ -890,7 +863,6 @@ public:
|
||||
{
|
||||
u = (u + rand.Frand01<T>() * m_A * f);
|
||||
v = (v + rand.Frand01<T>() * m_A * f);
|
||||
|
||||
ClampRef<T>(u, -1, 1);
|
||||
ClampRef<T>(v, -1, 1);
|
||||
|
||||
@ -925,7 +897,6 @@ public:
|
||||
string scatterArea = "parVars[" + ToUpper(m_Params[i++].Name()) + index;//Params.
|
||||
string zeroEdges = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
|
||||
string a = "parVars[" + ToUpper(m_Params[i++].Name()) + index;//Precalc.
|
||||
|
||||
ss << "\t{\n"
|
||||
<< "\t\tconst real_t\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\toutPoint->m_ColorX = fmod(fabs(u + v), (real_t)(1.0));\n"
|
||||
<< "\t}\n";
|
||||
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
@ -1016,7 +986,6 @@ protected:
|
||||
void Init()
|
||||
{
|
||||
string prefix = Prefix();
|
||||
|
||||
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_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 x1_ = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
|
||||
string x1_m_x0 = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
|
||||
|
||||
ss << "\t{\n"
|
||||
<< "\t\treal_t zf = " << factor << " * (outPoint->m_ColorX - " << x0_ << ") / " << x1_m_x0 << ";\n"
|
||||
<< "\n"
|
||||
@ -1090,7 +1058,6 @@ public:
|
||||
<< "\t\telse\n"
|
||||
<< "\t\t vOut.z = xform->m_VariationWeights[" << varIndex << "] * zf;\n"
|
||||
<< "\t}\n";
|
||||
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
@ -1105,7 +1072,6 @@ protected:
|
||||
void Init()
|
||||
{
|
||||
string prefix = Prefix();
|
||||
|
||||
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_X1, prefix + "dc_ztransl_x1", 1, REAL, 0, 1));
|
||||
@ -1128,6 +1094,363 @@ private:
|
||||
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(DCCarpet, dc_carpet, DC_CARPET)
|
||||
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(DCTriangle, dc_triangle, DC_TRIANGLE)
|
||||
MAKEPREPOSTPARVAR(DCZTransl, dc_ztransl, DC_ZTRANSL)
|
||||
MAKEPREPOSTPARVAR(DCPerlin, dc_perlin, DC_PERLIN)
|
||||
}
|
||||
|
@ -72,19 +72,16 @@ public:
|
||||
|
||||
{
|
||||
Init();
|
||||
|
||||
m_Weight = weight;
|
||||
m_ColorX = colorX;
|
||||
m_ColorSpeed = colorSpeed;
|
||||
m_Opacity = opacity;
|
||||
|
||||
m_Affine.A(a);
|
||||
m_Affine.B(b);
|
||||
m_Affine.C(c);
|
||||
m_Affine.D(d);
|
||||
m_Affine.E(e);
|
||||
m_Affine.F(f);
|
||||
|
||||
m_Post.A(pa);
|
||||
m_Post.B(pb);
|
||||
m_Post.C(pc);
|
||||
@ -93,7 +90,6 @@ public:
|
||||
m_Post.F(pf);
|
||||
m_HasPost = !m_Post.IsID();
|
||||
m_HasPreOrRegularVars = PreVariationCount() > 0 || VariationCount() > 0;
|
||||
|
||||
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_MotionFunc = xform.m_MotionFunc;
|
||||
m_MotionOffset = xform.m_MotionOffset;
|
||||
|
||||
ClearAndDeleteVariations();
|
||||
|
||||
//Must manually add them via the AddVariation() function so that
|
||||
@ -192,15 +187,14 @@ public:
|
||||
CopyVec<T, U>(m_Xaos, xform.XaosVec());
|
||||
CopyVec(m_Motion, xform.m_Motion);
|
||||
m_Name = xform.m_Name;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Init default values.
|
||||
/// Non default values are used to signify an uninitialized state. This is useful for
|
||||
/// Non default values are used to signify an uninitialized state. This is useful for
|
||||
/// doing motion interpolation where we don't want to apply motion to all fields. By setting
|
||||
/// unreasonable values before parsing, then only assigning the ones the motion tags specified,
|
||||
/// unreasonable values before parsing, then only assigning the ones the motion tags specified,
|
||||
/// it is clear which fields are intended to have motion applied to them.
|
||||
/// </summary>
|
||||
/// <param name="useDefaults">Use reasonable default if true, else use out of bounds values.</param>
|
||||
@ -217,21 +211,18 @@ public:
|
||||
m_ColorY = 0;
|
||||
m_DirectColor = 1;
|
||||
m_Opacity = 1;
|
||||
|
||||
m_Affine.A(1);
|
||||
m_Affine.B(0);
|
||||
m_Affine.C(0);
|
||||
m_Affine.D(0);
|
||||
m_Affine.E(1);
|
||||
m_Affine.F(0);
|
||||
|
||||
m_Post.A(1);
|
||||
m_Post.B(0);
|
||||
m_Post.C(0);
|
||||
m_Post.D(0);
|
||||
m_Post.E(1);
|
||||
m_Post.F(0);
|
||||
|
||||
m_Wind[0] = 0;
|
||||
m_Wind[1] = 0;
|
||||
m_MotionFreq = 0;
|
||||
@ -246,21 +237,18 @@ public:
|
||||
m_ColorY = EMPTYFIELD;
|
||||
m_DirectColor = EMPTYFIELD;
|
||||
m_Opacity = EMPTYFIELD;
|
||||
|
||||
m_Affine.A(EMPTYFIELD);
|
||||
m_Affine.B(EMPTYFIELD);
|
||||
m_Affine.C(EMPTYFIELD);
|
||||
m_Affine.D(EMPTYFIELD);
|
||||
m_Affine.E(EMPTYFIELD);
|
||||
m_Affine.F(EMPTYFIELD);
|
||||
|
||||
m_Post.A(EMPTYFIELD);
|
||||
m_Post.B(EMPTYFIELD);
|
||||
m_Post.C(EMPTYFIELD);
|
||||
m_Post.D(EMPTYFIELD);
|
||||
m_Post.E(EMPTYFIELD);
|
||||
m_Post.F(EMPTYFIELD);
|
||||
|
||||
m_Wind[0] = EMPTYFIELD;
|
||||
m_Wind[1] = EMPTYFIELD;
|
||||
m_MotionFreq = EMPTYFIELD;
|
||||
@ -269,7 +257,6 @@ public:
|
||||
|
||||
m_MotionFunc = MOTION_SIN;
|
||||
m_Motion.clear();
|
||||
|
||||
m_NeedPrecalcSumSquares = false;
|
||||
m_NeedPrecalcSqrtSumSquares = false;
|
||||
m_NeedPrecalcAngles = false;
|
||||
@ -340,8 +327,7 @@ public:
|
||||
{
|
||||
size_t count = 0;
|
||||
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++)
|
||||
{
|
||||
@ -353,7 +339,6 @@ public:
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return var;
|
||||
}
|
||||
|
||||
@ -365,8 +350,7 @@ public:
|
||||
Variation<T>* GetVariationById(eVariationId id) const
|
||||
{
|
||||
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)
|
||||
{
|
||||
@ -378,7 +362,6 @@ public:
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return var;
|
||||
}
|
||||
|
||||
@ -390,8 +373,7 @@ public:
|
||||
Variation<T>* GetVariationByName(const string& name) const
|
||||
{
|
||||
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)
|
||||
{
|
||||
@ -403,7 +385,6 @@ public:
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return var;
|
||||
}
|
||||
|
||||
@ -416,8 +397,7 @@ public:
|
||||
intmax_t GetVariationIndex(Variation<T>* var) const
|
||||
{
|
||||
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++)
|
||||
{
|
||||
@ -429,7 +409,6 @@ public:
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return index;
|
||||
}
|
||||
|
||||
@ -442,8 +421,7 @@ public:
|
||||
bool DeleteVariationById(eVariationId id)
|
||||
{
|
||||
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++)
|
||||
{
|
||||
@ -475,7 +453,7 @@ public:
|
||||
/// </summary>
|
||||
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();
|
||||
}
|
||||
|
||||
@ -511,7 +489,6 @@ public:
|
||||
//Figure out which is right. //TODO.
|
||||
//m_ColorSpeedCache = m_ColorX * (1 - m_ColorSpeed) / 2;//Apo style.
|
||||
//m_OneMinusColorCache = (1 + m_ColorSpeed) / 2;
|
||||
|
||||
m_ColorSpeedCache = m_ColorSpeed * m_ColorX;//Flam3 style.
|
||||
m_OneMinusColorCache = T(1.0) - m_ColorSpeed;
|
||||
m_VizAdjusted = AdjustOpacityPercentage(m_Opacity);
|
||||
@ -592,11 +569,12 @@ public:
|
||||
/// </summary>
|
||||
void NormalizeVariationWeights()
|
||||
{
|
||||
AllVarsFunc([&] (vector<Variation<T>*>& variations, bool& keepGoing)
|
||||
AllVarsFunc([&] (vector<Variation<T>*>& variations, bool & keepGoing)
|
||||
{
|
||||
T norm = 0;
|
||||
|
||||
for (auto var : variations) norm += var->m_Weight;
|
||||
|
||||
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)
|
||||
{
|
||||
size_t i;
|
||||
|
||||
//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.
|
||||
IteratorHelper<T> iterHelper;
|
||||
|
||||
//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
|
||||
//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.y = iterHelper.m_TransY;
|
||||
iterHelper.In.z = iterHelper.m_TransZ;
|
||||
|
||||
//Since these get summed, initialize them to zero.
|
||||
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.
|
||||
T inX = inPoint->m_X;
|
||||
|
||||
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_Z = inPoint->m_Z;
|
||||
@ -703,13 +677,11 @@ public:
|
||||
if (m_HasPost)
|
||||
{
|
||||
T postX = outPoint->m_X;
|
||||
|
||||
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_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?
|
||||
return BadVal(outPoint->m_X) || BadVal(outPoint->m_Y)/* || BadVal(outPoint->m_Z)*/;
|
||||
}
|
||||
@ -737,7 +709,6 @@ public:
|
||||
T freq = currentMot.m_MotionFreq;
|
||||
eMotion func = currentMot.m_MotionFunc;
|
||||
T offset = currentMot.m_MotionOffset;
|
||||
|
||||
//Clamp these to the appropriate range after all are applied.
|
||||
APPMOT(m_Weight);
|
||||
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.
|
||||
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.
|
||||
|
||||
if (!var)//It wasn't present, so add it and set the weight.
|
||||
@ -861,7 +831,7 @@ public:
|
||||
m_NeedPrecalcAtanYX = true;
|
||||
}
|
||||
|
||||
AllVarsFunc([&] (vector<Variation<T>*>& variations, bool& keepGoing)
|
||||
AllVarsFunc([&] (vector<Variation<T>*>& variations, bool & keepGoing)
|
||||
{
|
||||
for (auto var : variations)
|
||||
{
|
||||
@ -912,13 +882,13 @@ public:
|
||||
|
||||
if (GetVariationById(VAR_FLATTEN) == nullptr)
|
||||
{
|
||||
AllVarsFunc([&] (vector<Variation<T>*>& variations, bool& keepGoing)
|
||||
AllVarsFunc([&] (vector<Variation<T>*>& variations, bool & keepGoing)
|
||||
{
|
||||
for (auto var : variations)
|
||||
{
|
||||
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;
|
||||
keepGoing = false;
|
||||
@ -973,20 +943,21 @@ public:
|
||||
|
||||
switch (varType)
|
||||
{
|
||||
case VARTYPE_REG:
|
||||
case VARTYPE_PRE:
|
||||
s =
|
||||
"\tvIn.x = transX;\n"
|
||||
"\tvIn.y = transY;\n"
|
||||
"\tvIn.z = transZ;\n";
|
||||
break;
|
||||
case VARTYPE_POST:
|
||||
default:
|
||||
s =
|
||||
"\tvIn.x = outPoint->m_X;\n"
|
||||
"\tvIn.y = outPoint->m_Y;\n"
|
||||
"\tvIn.z = outPoint->m_Z;\n";
|
||||
break;
|
||||
case VARTYPE_REG:
|
||||
case VARTYPE_PRE:
|
||||
s =
|
||||
"\tvIn.x = transX;\n"
|
||||
"\tvIn.y = transY;\n"
|
||||
"\tvIn.z = transZ;\n";
|
||||
break;
|
||||
|
||||
case VARTYPE_POST:
|
||||
default:
|
||||
s =
|
||||
"\tvIn.x = outPoint->m_X;\n"
|
||||
"\tvIn.y = outPoint->m_Y;\n"
|
||||
"\tvIn.z = outPoint->m_Z;\n";
|
||||
break;
|
||||
}
|
||||
|
||||
return s;
|
||||
@ -1008,6 +979,7 @@ public:
|
||||
helper.m_TransZ = helper.Out.z;
|
||||
break;
|
||||
}
|
||||
|
||||
case ASSIGNTYPE_SUM:
|
||||
default:
|
||||
{
|
||||
@ -1035,6 +1007,7 @@ public:
|
||||
outPoint.m_Z = helper.Out.z;
|
||||
break;
|
||||
}
|
||||
|
||||
case ASSIGNTYPE_SUM:
|
||||
default:
|
||||
{
|
||||
@ -1061,11 +1034,12 @@ public:
|
||||
case VARTYPE_REG:
|
||||
{
|
||||
s =
|
||||
"\toutPoint->m_X += vOut.x;\n"
|
||||
"\toutPoint->m_Y += vOut.y;\n"
|
||||
"\toutPoint->m_Z += vOut.z;\n";
|
||||
"\toutPoint->m_X += vOut.x;\n"
|
||||
"\toutPoint->m_Y += vOut.y;\n"
|
||||
"\toutPoint->m_Z += vOut.z;\n";
|
||||
break;
|
||||
}
|
||||
|
||||
case VARTYPE_PRE:
|
||||
{
|
||||
switch (assignType)
|
||||
@ -1073,24 +1047,26 @@ public:
|
||||
case ASSIGNTYPE_SET:
|
||||
{
|
||||
s =
|
||||
"\ttransX = vOut.x;\n"
|
||||
"\ttransY = vOut.y;\n"
|
||||
"\ttransZ = vOut.z;\n";
|
||||
"\ttransX = vOut.x;\n"
|
||||
"\ttransY = vOut.y;\n"
|
||||
"\ttransZ = vOut.z;\n";
|
||||
break;
|
||||
}
|
||||
|
||||
case ASSIGNTYPE_SUM:
|
||||
default:
|
||||
{
|
||||
s =
|
||||
"\ttransX += vOut.x;\n"
|
||||
"\ttransY += vOut.y;\n"
|
||||
"\ttransZ += vOut.z;\n";
|
||||
"\ttransX += vOut.x;\n"
|
||||
"\ttransY += vOut.y;\n"
|
||||
"\ttransZ += vOut.z;\n";
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case VARTYPE_POST:
|
||||
default:
|
||||
{
|
||||
@ -1099,18 +1075,19 @@ public:
|
||||
case ASSIGNTYPE_SET:
|
||||
{
|
||||
s =
|
||||
"\toutPoint->m_X = vOut.x;\n"
|
||||
"\toutPoint->m_Y = vOut.y;\n"
|
||||
"\toutPoint->m_Z = vOut.z;\n";
|
||||
"\toutPoint->m_X = vOut.x;\n"
|
||||
"\toutPoint->m_Y = vOut.y;\n"
|
||||
"\toutPoint->m_Z = vOut.z;\n";
|
||||
break;
|
||||
}
|
||||
|
||||
case ASSIGNTYPE_SUM:
|
||||
default:
|
||||
{
|
||||
s =
|
||||
"\toutPoint->m_X += vOut.x;\n"
|
||||
"\toutPoint->m_Y += vOut.y;\n"
|
||||
"\toutPoint->m_Z += vOut.z;\n";
|
||||
"\toutPoint->m_X += vOut.x;\n"
|
||||
"\toutPoint->m_Y += vOut.y;\n"
|
||||
"\toutPoint->m_Z += vOut.z;\n";
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -1131,7 +1108,6 @@ public:
|
||||
string ToString() const
|
||||
{
|
||||
ostringstream ss;
|
||||
|
||||
ss << "A: " << m_Affine.A() << " "
|
||||
<< "B: " << m_Affine.B() << " "
|
||||
<< "C: " << m_Affine.C() << " "
|
||||
@ -1161,8 +1137,7 @@ public:
|
||||
ss << "Motion Frequency: " << m_MotionFreq << endl;
|
||||
ss << "Motion Func: " << m_MotionFunc << 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)
|
||||
ss << var->ToString() << endl;
|
||||
@ -1252,7 +1227,6 @@ private:
|
||||
void AllVarsFunc(std::function<void (vector<Variation<T>*>&, bool&)> func)
|
||||
{
|
||||
bool keepGoing = true;
|
||||
|
||||
func(m_PreVariations, keepGoing);
|
||||
|
||||
if (keepGoing)
|
||||
|
@ -11,8 +11,7 @@
|
||||
template <typename T>
|
||||
bool EmberAnimate(EmberOptions& opt)
|
||||
{
|
||||
OpenCLInfo& info(OpenCLInfo::Instance());
|
||||
|
||||
auto info = OpenCLInfo::Instance();
|
||||
std::cout.imbue(std::locale(""));
|
||||
|
||||
if (opt.DumpArgs())
|
||||
@ -21,7 +20,7 @@ bool EmberAnimate(EmberOptions& opt)
|
||||
if (opt.OpenCLInfo())
|
||||
{
|
||||
cout << "\nOpenCL Info: " << endl;
|
||||
cout << info.DumpInfo();
|
||||
cout << info->DumpInfo();
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -69,8 +68,8 @@ bool EmberAnimate(EmberOptions& opt)
|
||||
{
|
||||
for (auto& device : devices)
|
||||
{
|
||||
cout << "Platform: " << info.PlatformName(device.first) << endl;
|
||||
cout << "Device: " << info.DeviceName(device.first, device.second) << endl;
|
||||
cout << "Platform: " << info->PlatformName(device.first) << endl;
|
||||
cout << "Device: " << info->DeviceName(device.first, device.second) << endl;
|
||||
}
|
||||
}
|
||||
|
||||
@ -135,9 +134,9 @@ bool EmberAnimate(EmberOptions& opt)
|
||||
}
|
||||
|
||||
if (opt.Format() != "jpg" &&
|
||||
opt.Format() != "png" &&
|
||||
opt.Format() != "ppm" &&
|
||||
opt.Format() != "bmp")
|
||||
opt.Format() != "png" &&
|
||||
opt.Format() != "ppm" &&
|
||||
opt.Format() != "bmp")
|
||||
{
|
||||
cout << "Format must be jpg, png, ppm, or bmp not " << opt.Format() << ". Setting to jpg." << endl;
|
||||
}
|
||||
@ -235,10 +234,9 @@ bool EmberAnimate(EmberOptions& opt)
|
||||
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_PixelsPerUnit *= T(opt.SizeScale());
|
||||
|
||||
//Cast to double in case the value exceeds 2^32.
|
||||
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());
|
||||
double maxMem = pow(2.0, double((sizeof(void*) * 8) - 1));
|
||||
|
||||
if (imageMem > maxMem)//Ensure the max amount of memory for a process isn't exceeded.
|
||||
@ -256,11 +254,10 @@ bool EmberAnimate(EmberOptions& opt)
|
||||
}
|
||||
|
||||
if ((embers[i].m_FinalRasW != embers[0].m_FinalRasW) ||
|
||||
(embers[i].m_FinalRasH != embers[0].m_FinalRasH))
|
||||
(embers[i].m_FinalRasH != embers[0].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_FinalRasH = embers[0].m_FinalRasH;
|
||||
}
|
||||
@ -279,7 +276,7 @@ bool EmberAnimate(EmberOptions& opt)
|
||||
|
||||
if (opt.LastFrame() == UINT_MAX)
|
||||
opt.LastFrame(ClampGte<size_t>(size_t(embers.back().m_Time),//Make sure time - 1 is positive before converting to size_t.
|
||||
opt.FirstFrame() + opt.Dtime()));//Make sure the final value is at least first frame + dtime.
|
||||
opt.FirstFrame() + opt.Dtime()));//Make sure the final value is at least first frame + dtime.
|
||||
}
|
||||
|
||||
if (!opt.Out().empty())
|
||||
@ -306,11 +303,11 @@ bool EmberAnimate(EmberOptions& opt)
|
||||
}
|
||||
|
||||
std::function<void (vector<byte>&, string, EmberImageComments, size_t, size_t, size_t)> saveFunc = [&](vector<byte>& finalImage,
|
||||
string filename,//These are copies because this will be launched in a thread.
|
||||
EmberImageComments comments,
|
||||
size_t w,
|
||||
size_t h,
|
||||
size_t chan)
|
||||
string filename,//These are copies because this will be launched in a thread.
|
||||
EmberImageComments comments,
|
||||
size_t w,
|
||||
size_t h,
|
||||
size_t chan)
|
||||
{
|
||||
bool writeSuccess = false;
|
||||
byte* finalImagep = finalImage.data();
|
||||
@ -330,9 +327,7 @@ bool EmberAnimate(EmberOptions& opt)
|
||||
if (!writeSuccess)
|
||||
cout << "Error writing " << filename << endl;
|
||||
};
|
||||
|
||||
atomfTime.store(opt.FirstFrame());
|
||||
|
||||
std::function<void(size_t)> iterFunc = [&](size_t index)
|
||||
{
|
||||
size_t ftime, finalImageIndex = 0;
|
||||
@ -344,7 +339,6 @@ bool EmberAnimate(EmberOptions& opt)
|
||||
Ember<T> centerEmber;
|
||||
vector<byte> finalImages[2];
|
||||
std::thread writeThread;
|
||||
|
||||
os.imbue(std::locale(""));
|
||||
|
||||
while (atomfTime.fetch_add(opt.Dtime()), ((ftime = atomfTime.load()) <= opt.LastFrame()))
|
||||
@ -398,7 +392,9 @@ bool EmberAnimate(EmberOptions& opt)
|
||||
{
|
||||
verboseCs.Enter();
|
||||
cout << "\nIters ran/requested: " + os.str() << endl;
|
||||
|
||||
if (!opt.EmberCL()) cout << "Bad values: " << stats.m_Badvals << endl;
|
||||
|
||||
cout << "Render time: " << t.Format(stats.m_RenderMs) << 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;
|
||||
@ -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.
|
||||
writeThread.join();
|
||||
};
|
||||
|
||||
threadVec.reserve(renderers.size());
|
||||
|
||||
for (size_t r = 0; r < renderers.size(); r++)
|
||||
@ -441,7 +436,6 @@ bool EmberAnimate(EmberOptions& opt)
|
||||
th.join();
|
||||
|
||||
t.Toc("\nFinished in: ", true);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -455,7 +449,6 @@ int _tmain(int argc, _TCHAR* argv[])
|
||||
{
|
||||
bool b = false;
|
||||
EmberOptions opt;
|
||||
|
||||
//Required for large allocs, else GPU memory usage will be severely limited to small sizes.
|
||||
//This must be done in the application and not in the EmberCL DLL.
|
||||
#ifdef WIN32
|
||||
@ -466,23 +459,23 @@ int _tmain(int argc, _TCHAR* argv[])
|
||||
|
||||
if (!opt.Populate(argc, argv, OPT_USE_ANIMATE))
|
||||
{
|
||||
|
||||
#ifdef DO_DOUBLE
|
||||
|
||||
if (opt.Bits() == 64)
|
||||
{
|
||||
b = EmberAnimate<double>(opt);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
if (opt.Bits() == 33)
|
||||
{
|
||||
b = EmberAnimate<float>(opt);
|
||||
}
|
||||
else if (opt.Bits() == 32)
|
||||
{
|
||||
cout << "Bits 32/int histogram no longer supported. Using bits == 33 (float)." << endl;
|
||||
b = EmberAnimate<float>(opt);
|
||||
}
|
||||
if (opt.Bits() == 33)
|
||||
{
|
||||
b = EmberAnimate<float>(opt);
|
||||
}
|
||||
else if (opt.Bits() == 32)
|
||||
{
|
||||
cout << "Bits 32/int histogram no longer supported. Using bits == 33 (float)." << endl;
|
||||
b = EmberAnimate<float>(opt);
|
||||
}
|
||||
}
|
||||
|
||||
return b ? 0 : 1;
|
||||
|
@ -16,6 +16,7 @@
|
||||
#if defined(_WIN32)
|
||||
#include <windows.h>
|
||||
#include <SDKDDKVer.h>
|
||||
#include "GL/gl.h"
|
||||
#elif defined(__APPLE__)
|
||||
#include <OpenGL/gl.h>
|
||||
#else
|
||||
@ -23,21 +24,7 @@
|
||||
#endif
|
||||
|
||||
#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 <algorithm>
|
||||
#include <atomic>
|
||||
#include <cstdio>
|
||||
|
@ -23,100 +23,101 @@ static string ConstantDefinesString(bool doublePrecision)
|
||||
if (doublePrecision)
|
||||
{
|
||||
os << "#if defined(cl_amd_fp64)\n"//AMD extension available?
|
||||
" #pragma OPENCL EXTENSION cl_amd_fp64 : enable\n"
|
||||
"#endif\n"
|
||||
"#if defined(cl_khr_fp64)\n"//Khronos extension available?
|
||||
" #pragma OPENCL EXTENSION cl_khr_fp64 : enable\n"
|
||||
"#endif\n"
|
||||
"#pragma OPENCL EXTENSION cl_khr_int64_base_atomics : enable\n"//Only supported on nVidia.
|
||||
"typedef long intPrec;\n"
|
||||
"typedef uint atomi;\n"//Same size as real_bucket_t, always 4 bytes.
|
||||
"typedef double real_t;\n"
|
||||
"typedef float real_bucket_t;\n"//Assume buckets are always float, even though iter calcs are in double.
|
||||
"typedef double2 real2;\n"
|
||||
"typedef double4 real4;\n"
|
||||
"typedef float4 real4_bucket;\n"//And here too.
|
||||
"#define EPS (DBL_EPSILON)\n"
|
||||
"#define TLOW (DBL_MIN)\n"
|
||||
"#define TMAX (DBL_MAX)\n"
|
||||
;
|
||||
" #pragma OPENCL EXTENSION cl_amd_fp64 : enable\n"
|
||||
"#endif\n"
|
||||
"#if defined(cl_khr_fp64)\n"//Khronos extension available?
|
||||
" #pragma OPENCL EXTENSION cl_khr_fp64 : enable\n"
|
||||
"#endif\n"
|
||||
"#pragma OPENCL EXTENSION cl_khr_int64_base_atomics : enable\n"//Only supported on nVidia.
|
||||
"typedef long intPrec;\n"
|
||||
"typedef uint atomi;\n"//Same size as real_bucket_t, always 4 bytes.
|
||||
"typedef double real_t;\n"
|
||||
"typedef float real_bucket_t;\n"//Assume buckets are always float, even though iter calcs are in double.
|
||||
"typedef double2 real2;\n"
|
||||
"typedef double3 real3;\n"
|
||||
"typedef double4 real4;\n"
|
||||
"typedef float4 real4_bucket;\n"//And here too.
|
||||
"#define EPS (DBL_EPSILON)\n"
|
||||
"#define TLOW (DBL_MIN)\n"
|
||||
"#define TMAX (DBL_MAX)\n"
|
||||
;
|
||||
}
|
||||
else
|
||||
{
|
||||
os << "typedef int intPrec;\n"
|
||||
"typedef uint atomi;\n"
|
||||
"typedef float real_t;\n"
|
||||
"typedef float real_bucket_t;\n"
|
||||
"typedef float2 real2;\n"
|
||||
"typedef float4 real4;\n"
|
||||
"typedef float4 real4_bucket;\n"
|
||||
"#define EPS (FLT_EPSILON)\n"
|
||||
"#define TLOW (FLT_MIN)\n"
|
||||
"#define TMAX (FLT_MAX)\n"
|
||||
;
|
||||
"typedef uint atomi;\n"
|
||||
"typedef float real_t;\n"
|
||||
"typedef float real_bucket_t;\n"
|
||||
"typedef float2 real2;\n"
|
||||
"typedef float3 real3;\n"
|
||||
"typedef float4 real4;\n"
|
||||
"typedef float4 real4_bucket;\n"
|
||||
"#define EPS (FLT_EPSILON)\n"
|
||||
"#define TLOW (FLT_MIN)\n"
|
||||
"#define TMAX (FLT_MAX)\n"
|
||||
;
|
||||
}
|
||||
|
||||
os <<
|
||||
"typedef long int int64;\n"
|
||||
"typedef unsigned long int uint64;\n"
|
||||
"\n"
|
||||
"#define EPS6 ((1e-6))\n"
|
||||
"\n"
|
||||
"//The number of threads per block used in the iteration function. Don't change\n"
|
||||
"//it lightly; the block size is hard coded to be exactly 32 x 8.\n"
|
||||
"#define NTHREADS 256u\n"
|
||||
"#define THREADS_PER_WARP 32u\n"
|
||||
"#define NWARPS (NTHREADS / THREADS_PER_WARP)\n"
|
||||
"#define COLORMAP_LENGTH 256u\n"
|
||||
"#define COLORMAP_LENGTH_MINUS_1 255u\n"
|
||||
"#define DE_THRESH 100u\n"
|
||||
"#define BadVal(x) (((x) != (x)) || ((x) > 1e10) || ((x) < -1e10))\n"
|
||||
"#define Rint(A) floor((A) + (((A) < 0) ? -0.5 : 0.5))\n"
|
||||
"#define SQR(x) ((x) * (x))\n"
|
||||
"#define CUBE(x) ((x) * (x) * (x))\n"
|
||||
"#define M_2PI (M_PI * 2)\n"
|
||||
"#define M_3PI (M_PI * 3)\n"
|
||||
"#define SQRT5 2.2360679774997896964091736687313\n"
|
||||
"#define M_PHI 1.61803398874989484820458683436563\n"
|
||||
"#define DEG_2_RAD (M_PI / 180)\n"
|
||||
"\n"
|
||||
"//Index in each dimension of a thread within a block.\n"
|
||||
"#define THREAD_ID_X (get_local_id(0))\n"
|
||||
"#define THREAD_ID_Y (get_local_id(1))\n"
|
||||
"#define THREAD_ID_Z (get_local_id(2))\n"
|
||||
"\n"
|
||||
"//Index in each dimension of a block within a grid.\n"
|
||||
"#define BLOCK_ID_X (get_group_id(0))\n"
|
||||
"#define BLOCK_ID_Y (get_group_id(1))\n"
|
||||
"#define BLOCK_ID_Z (get_group_id(2))\n"
|
||||
"\n"
|
||||
"//Absolute index in each dimension of a thread within a grid.\n"
|
||||
"#define GLOBAL_ID_X (get_global_id(0))\n"
|
||||
"#define GLOBAL_ID_Y (get_global_id(1))\n"
|
||||
"#define GLOBAL_ID_Z (get_global_id(2))\n"
|
||||
"\n"
|
||||
"//Dimensions of a block.\n"
|
||||
"#define BLOCK_SIZE_X (get_local_size(0))\n"
|
||||
"#define BLOCK_SIZE_Y (get_local_size(1))\n"
|
||||
"#define BLOCK_SIZE_Z (get_local_size(2))\n"
|
||||
"\n"
|
||||
"//Dimensions of a grid, in terms of blocks.\n"
|
||||
"#define GRID_SIZE_X (get_num_groups(0))\n"
|
||||
"#define GRID_SIZE_Y (get_num_groups(1))\n"
|
||||
"#define GRID_SIZE_Z (get_num_groups(2))\n"
|
||||
"\n"
|
||||
"//Dimensions of a grid, in terms of threads.\n"
|
||||
"#define GLOBAL_SIZE_X (get_global_size(0))\n"
|
||||
"#define GLOBAL_SIZE_Y (get_global_size(1))\n"
|
||||
"#define GLOBAL_SIZE_Z (get_global_size(2))\n"
|
||||
"\n"
|
||||
"#define INDEX_IN_BLOCK_2D (THREAD_ID_Y * BLOCK_SIZE_X + THREAD_ID_X)\n"
|
||||
"#define INDEX_IN_BLOCK_3D ((BLOCK_SIZE_X * BLOCK_SIZE_Y * THREAD_ID_Z) + INDEX_IN_BLOCK_2D)\n"
|
||||
"\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"
|
||||
"\n";
|
||||
|
||||
"typedef long int int64;\n"
|
||||
"typedef unsigned long int uint64;\n"
|
||||
"\n"
|
||||
"#define EPS6 ((1e-6))\n"
|
||||
"\n"
|
||||
"//The number of threads per block used in the iteration function. Don't change\n"
|
||||
"//it lightly; the block size is hard coded to be exactly 32 x 8.\n"
|
||||
"#define NTHREADS 256u\n"
|
||||
"#define THREADS_PER_WARP 32u\n"
|
||||
"#define NWARPS (NTHREADS / THREADS_PER_WARP)\n"
|
||||
"#define COLORMAP_LENGTH 256u\n"
|
||||
"#define COLORMAP_LENGTH_MINUS_1 255u\n"
|
||||
"#define DE_THRESH 100u\n"
|
||||
"#define BadVal(x) (((x) != (x)) || ((x) > 1e10) || ((x) < -1e10))\n"
|
||||
"#define Rint(A) floor((A) + (((A) < 0) ? -0.5 : 0.5))\n"
|
||||
"#define SQR(x) ((x) * (x))\n"
|
||||
"#define CUBE(x) ((x) * (x) * (x))\n"
|
||||
"#define M_2PI (M_PI * 2)\n"
|
||||
"#define M_3PI (M_PI * 3)\n"
|
||||
"#define SQRT5 2.2360679774997896964091736687313\n"
|
||||
"#define M_PHI 1.61803398874989484820458683436563\n"
|
||||
"#define DEG_2_RAD (M_PI / 180)\n"
|
||||
"\n"
|
||||
"//Index in each dimension of a thread within a block.\n"
|
||||
"#define THREAD_ID_X (get_local_id(0))\n"
|
||||
"#define THREAD_ID_Y (get_local_id(1))\n"
|
||||
"#define THREAD_ID_Z (get_local_id(2))\n"
|
||||
"\n"
|
||||
"//Index in each dimension of a block within a grid.\n"
|
||||
"#define BLOCK_ID_X (get_group_id(0))\n"
|
||||
"#define BLOCK_ID_Y (get_group_id(1))\n"
|
||||
"#define BLOCK_ID_Z (get_group_id(2))\n"
|
||||
"\n"
|
||||
"//Absolute index in each dimension of a thread within a grid.\n"
|
||||
"#define GLOBAL_ID_X (get_global_id(0))\n"
|
||||
"#define GLOBAL_ID_Y (get_global_id(1))\n"
|
||||
"#define GLOBAL_ID_Z (get_global_id(2))\n"
|
||||
"\n"
|
||||
"//Dimensions of a block.\n"
|
||||
"#define BLOCK_SIZE_X (get_local_size(0))\n"
|
||||
"#define BLOCK_SIZE_Y (get_local_size(1))\n"
|
||||
"#define BLOCK_SIZE_Z (get_local_size(2))\n"
|
||||
"\n"
|
||||
"//Dimensions of a grid, in terms of blocks.\n"
|
||||
"#define GRID_SIZE_X (get_num_groups(0))\n"
|
||||
"#define GRID_SIZE_Y (get_num_groups(1))\n"
|
||||
"#define GRID_SIZE_Z (get_num_groups(2))\n"
|
||||
"\n"
|
||||
"//Dimensions of a grid, in terms of threads.\n"
|
||||
"#define GLOBAL_SIZE_X (get_global_size(0))\n"
|
||||
"#define GLOBAL_SIZE_Y (get_global_size(1))\n"
|
||||
"#define GLOBAL_SIZE_Z (get_global_size(2))\n"
|
||||
"\n"
|
||||
"#define INDEX_IN_BLOCK_2D (THREAD_ID_Y * BLOCK_SIZE_X + THREAD_ID_X)\n"
|
||||
"#define INDEX_IN_BLOCK_3D ((BLOCK_SIZE_X * BLOCK_SIZE_Y * THREAD_ID_Z) + INDEX_IN_BLOCK_2D)\n"
|
||||
"\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"
|
||||
"\n";
|
||||
return os.str();
|
||||
}
|
||||
|
||||
@ -141,15 +142,15 @@ struct ALIGN PointCL
|
||||
/// be supported, which will make it more than 4 members.
|
||||
/// </summary>
|
||||
static const char* PointCLStructString =
|
||||
"typedef struct __attribute__ " ALIGN_CL " _Point\n"
|
||||
"{\n"
|
||||
" real_t m_X;\n"
|
||||
" real_t m_Y;\n"
|
||||
" real_t m_Z;\n"
|
||||
" real_t m_ColorX;\n"
|
||||
" uint m_LastXfUsed;\n"
|
||||
"} Point;\n"
|
||||
"\n";
|
||||
"typedef struct __attribute__ " ALIGN_CL " _Point\n"
|
||||
"{\n"
|
||||
" real_t m_X;\n"
|
||||
" real_t m_Y;\n"
|
||||
" real_t m_Z;\n"
|
||||
" real_t m_ColorX;\n"
|
||||
" uint m_LastXfUsed;\n"
|
||||
"} Point;\n"
|
||||
"\n";
|
||||
|
||||
#define MAX_CL_VARS 8//These must always match.
|
||||
#define MAX_CL_VARS_STRING "8"
|
||||
@ -175,18 +176,18 @@ struct ALIGN XformCL
|
||||
/// The xform structure used to iterate in OpenCL.
|
||||
/// </summary>
|
||||
static const char* XformCLStructString =
|
||||
"typedef struct __attribute__ " ALIGN_CL " _XformCL\n"
|
||||
"{\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_PostA, m_PostB, m_PostC, m_PostD, m_PostE, m_PostF;\n"
|
||||
" real_t m_DirectColor;\n"
|
||||
" real_t m_ColorSpeedCache;\n"
|
||||
" real_t m_OneMinusColorCache;\n"
|
||||
" real_t m_Opacity;\n"
|
||||
" real_t m_VizAdjusted;\n"
|
||||
"} XformCL;\n"
|
||||
"\n";
|
||||
"typedef struct __attribute__ " ALIGN_CL " _XformCL\n"
|
||||
"{\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_PostA, m_PostB, m_PostC, m_PostD, m_PostE, m_PostF;\n"
|
||||
" real_t m_DirectColor;\n"
|
||||
" real_t m_ColorSpeedCache;\n"
|
||||
" real_t m_OneMinusColorCache;\n"
|
||||
" real_t m_Opacity;\n"
|
||||
" real_t m_VizAdjusted;\n"
|
||||
"} XformCL;\n"
|
||||
"\n";
|
||||
|
||||
/// <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.
|
||||
@ -210,27 +211,27 @@ struct ALIGN EmberCL
|
||||
/// The ember structure used to iterate in OpenCL.
|
||||
/// </summary>
|
||||
static const char* EmberCLStructString =
|
||||
"typedef struct __attribute__ " ALIGN_CL " _EmberCL\n"
|
||||
"{\n"
|
||||
" real_t m_CamZPos;\n"
|
||||
" real_t m_CamPerspective;\n"
|
||||
" real_t m_CamYaw;\n"
|
||||
" real_t m_CamPitch;\n"
|
||||
" real_t m_CamDepthBlur;\n"
|
||||
" real_t m_BlurCoef;\n"
|
||||
" real_t m_C00;\n"
|
||||
" real_t m_C01;\n"
|
||||
" real_t m_C02;\n"
|
||||
" real_t m_C10;\n"
|
||||
" real_t m_C11;\n"
|
||||
" real_t m_C12;\n"
|
||||
" real_t m_C20;\n"
|
||||
" real_t m_C21;\n"
|
||||
" real_t m_C22;\n"
|
||||
" real_t m_CenterX, m_CenterY;\n"
|
||||
" real_t m_RotA, m_RotB, m_RotD, m_RotE;\n"
|
||||
"} EmberCL;\n"
|
||||
"\n";
|
||||
"typedef struct __attribute__ " ALIGN_CL " _EmberCL\n"
|
||||
"{\n"
|
||||
" real_t m_CamZPos;\n"
|
||||
" real_t m_CamPerspective;\n"
|
||||
" real_t m_CamYaw;\n"
|
||||
" real_t m_CamPitch;\n"
|
||||
" real_t m_CamDepthBlur;\n"
|
||||
" real_t m_BlurCoef;\n"
|
||||
" real_t m_C00;\n"
|
||||
" real_t m_C01;\n"
|
||||
" real_t m_C02;\n"
|
||||
" real_t m_C10;\n"
|
||||
" real_t m_C11;\n"
|
||||
" real_t m_C12;\n"
|
||||
" real_t m_C20;\n"
|
||||
" real_t m_C21;\n"
|
||||
" real_t m_C22;\n"
|
||||
" real_t m_CenterX, m_CenterY;\n"
|
||||
" real_t m_RotA, m_RotB, m_RotD, m_RotE;\n"
|
||||
"} EmberCL;\n"
|
||||
"\n";
|
||||
|
||||
/// <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.
|
||||
@ -249,14 +250,14 @@ struct ALIGN CarToRasCL
|
||||
/// The cartesian to raster structure used to iterate in OpenCL.
|
||||
/// </summary>
|
||||
static const char* CarToRasCLStructString =
|
||||
"typedef struct __attribute__ " ALIGN_CL " _CarToRasCL\n"
|
||||
"{\n"
|
||||
" real_t m_PixPerImageUnitW, m_RasLlX;\n"
|
||||
" uint m_RasWidth;\n"
|
||||
" real_t m_PixPerImageUnitH, m_RasLlY;\n"
|
||||
" real_t m_CarLlX, m_CarUrX, m_CarUrY, m_CarLlY;\n"
|
||||
"} CarToRasCL;\n"
|
||||
"\n";
|
||||
"typedef struct __attribute__ " ALIGN_CL " _CarToRasCL\n"
|
||||
"{\n"
|
||||
" real_t m_PixPerImageUnitW, m_RasLlX;\n"
|
||||
" uint m_RasWidth;\n"
|
||||
" real_t m_PixPerImageUnitH, m_RasLlY;\n"
|
||||
" real_t m_CarLlX, m_CarUrX, m_CarUrY, m_CarLlY;\n"
|
||||
"} CarToRasCL;\n"
|
||||
"\n";
|
||||
|
||||
/// <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.
|
||||
@ -283,20 +284,20 @@ struct ALIGN DensityFilterCL
|
||||
/// Note that the actual filter buffer is held elsewhere.
|
||||
/// </summary>
|
||||
static const char* DensityFilterCLStructString =
|
||||
"typedef struct __attribute__ " ALIGN_CL " _DensityFilterCL\n"
|
||||
"{\n"
|
||||
" real_bucket_t m_Curve;\n"
|
||||
" real_bucket_t m_K1;\n"
|
||||
" real_bucket_t m_K2;\n"
|
||||
" uint m_Supersample;\n"
|
||||
" uint m_SuperRasW;\n"
|
||||
" uint m_SuperRasH;\n"
|
||||
" uint m_KernelSize;\n"
|
||||
" uint m_MaxFilterIndex;\n"
|
||||
" uint m_MaxFilteredCounts;\n"
|
||||
" uint m_FilterWidth;\n"
|
||||
"} DensityFilterCL;\n"
|
||||
"\n";
|
||||
"typedef struct __attribute__ " ALIGN_CL " _DensityFilterCL\n"
|
||||
"{\n"
|
||||
" real_bucket_t m_Curve;\n"
|
||||
" real_bucket_t m_K1;\n"
|
||||
" real_bucket_t m_K2;\n"
|
||||
" uint m_Supersample;\n"
|
||||
" uint m_SuperRasW;\n"
|
||||
" uint m_SuperRasH;\n"
|
||||
" uint m_KernelSize;\n"
|
||||
" uint m_MaxFilterIndex;\n"
|
||||
" uint m_MaxFilteredCounts;\n"
|
||||
" uint m_FilterWidth;\n"
|
||||
"} DensityFilterCL;\n"
|
||||
"\n";
|
||||
|
||||
/// <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.
|
||||
@ -328,26 +329,26 @@ struct ALIGN SpatialFilterCL
|
||||
/// Note that the actual filter buffer is held elsewhere.
|
||||
/// </summary>
|
||||
static const char* SpatialFilterCLStructString =
|
||||
"typedef struct __attribute__ ((aligned (16))) _SpatialFilterCL\n"
|
||||
"{\n"
|
||||
" uint m_SuperRasW;\n"
|
||||
" uint m_SuperRasH;\n"
|
||||
" uint m_FinalRasW;\n"
|
||||
" uint m_FinalRasH;\n"
|
||||
" uint m_Supersample;\n"
|
||||
" uint m_FilterWidth;\n"
|
||||
" uint m_NumChannels;\n"
|
||||
" uint m_BytesPerChannel;\n"
|
||||
" uint m_DensityFilterOffset;\n"
|
||||
" uint m_Transparency;\n"
|
||||
" uint m_YAxisUp;\n"
|
||||
" real_bucket_t m_Vibrancy;\n"
|
||||
" real_bucket_t m_HighlightPower;\n"
|
||||
" real_bucket_t m_Gamma;\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.
|
||||
"} SpatialFilterCL;\n"
|
||||
"\n";
|
||||
"typedef struct __attribute__ ((aligned (16))) _SpatialFilterCL\n"
|
||||
"{\n"
|
||||
" uint m_SuperRasW;\n"
|
||||
" uint m_SuperRasH;\n"
|
||||
" uint m_FinalRasW;\n"
|
||||
" uint m_FinalRasH;\n"
|
||||
" uint m_Supersample;\n"
|
||||
" uint m_FilterWidth;\n"
|
||||
" uint m_NumChannels;\n"
|
||||
" uint m_BytesPerChannel;\n"
|
||||
" uint m_DensityFilterOffset;\n"
|
||||
" uint m_Transparency;\n"
|
||||
" uint m_YAxisUp;\n"
|
||||
" real_bucket_t m_Vibrancy;\n"
|
||||
" real_bucket_t m_HighlightPower;\n"
|
||||
" real_bucket_t m_Gamma;\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.
|
||||
"} SpatialFilterCL;\n"
|
||||
"\n";
|
||||
|
||||
/// <summary>
|
||||
/// 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.
|
||||
/// </summary>
|
||||
static const char* UnionCLStructString =
|
||||
"typedef union\n"
|
||||
"{\n"
|
||||
" uchar3 m_Uchar3;\n"
|
||||
" uchar m_Uchars[3];\n"
|
||||
"} uchar3uchars;\n"
|
||||
"\n"
|
||||
"typedef union\n"
|
||||
"{\n"
|
||||
" uchar4 m_Uchar4;\n"
|
||||
" uchar m_Uchars[4];\n"
|
||||
"} uchar4uchars;\n"
|
||||
"\n"
|
||||
"typedef union\n"
|
||||
"{\n"
|
||||
" uint4 m_Uint4;\n"
|
||||
" uint m_Uints[4];\n"
|
||||
"} uint4uints;\n"
|
||||
"\n"
|
||||
"typedef union\n"//Use in places where float is required.
|
||||
"{\n"
|
||||
" float4 m_Float4;\n"
|
||||
" float m_Floats[4];\n"
|
||||
"} float4floats;\n"
|
||||
"\n"
|
||||
"typedef union\n"//Use in places where float or double can be used depending on the template type.
|
||||
"{\n"
|
||||
" real4 m_Real4;\n"
|
||||
" real_t m_Reals[4];\n"
|
||||
"} real4reals;\n"
|
||||
"\n"
|
||||
"typedef union\n"//Used to match the bucket template type.
|
||||
"{\n"
|
||||
" real4_bucket m_Real4;\n"
|
||||
" real_bucket_t m_Reals[4];\n"
|
||||
"} real4reals_bucket;\n"
|
||||
"\n";
|
||||
"typedef union\n"
|
||||
"{\n"
|
||||
" uchar3 m_Uchar3;\n"
|
||||
" uchar m_Uchars[3];\n"
|
||||
"} uchar3uchars;\n"
|
||||
"\n"
|
||||
"typedef union\n"
|
||||
"{\n"
|
||||
" uchar4 m_Uchar4;\n"
|
||||
" uchar m_Uchars[4];\n"
|
||||
"} uchar4uchars;\n"
|
||||
"\n"
|
||||
"typedef union\n"
|
||||
"{\n"
|
||||
" uint4 m_Uint4;\n"
|
||||
" uint m_Uints[4];\n"
|
||||
"} uint4uints;\n"
|
||||
"\n"
|
||||
"typedef union\n"//Use in places where float is required.
|
||||
"{\n"
|
||||
" float4 m_Float4;\n"
|
||||
" float m_Floats[4];\n"
|
||||
"} float4floats;\n"
|
||||
"\n"
|
||||
"typedef union\n"//Use in places where float or double can be used depending on the template type.
|
||||
"{\n"
|
||||
" real4 m_Real4;\n"
|
||||
" real_t m_Reals[4];\n"
|
||||
"} real4reals;\n"
|
||||
"\n"
|
||||
"typedef union\n"//Used to match the bucket template type.
|
||||
"{\n"
|
||||
" real4_bucket m_Real4;\n"
|
||||
" real_bucket_t m_Reals[4];\n"
|
||||
"} real4reals_bucket;\n"
|
||||
"\n";
|
||||
}
|
||||
|
@ -15,31 +15,26 @@ FunctionMapper::FunctionMapper()
|
||||
" intPrec temp = (x >= 0.0 ? (intPrec)(x + 0.5) : (intPrec)(x - 0.5));\n"
|
||||
" return (real_t)temp;\n"
|
||||
"}\n";
|
||||
|
||||
m_GlobalMap["Round"] =
|
||||
"inline real_t Round(real_t r)\n"
|
||||
"{\n"
|
||||
" return (r > 0.0) ? floor(r + 0.5) : ceil(r - 0.5);\n"
|
||||
"}\n";
|
||||
|
||||
m_GlobalMap["Sign"] =
|
||||
"inline real_t Sign(real_t v)\n"
|
||||
"{\n"
|
||||
" return (v < 0.0) ? -1 : (v > 0.0) ? 1 : 0.0;\n"
|
||||
"}\n";
|
||||
|
||||
m_GlobalMap["SignNz"] =
|
||||
"inline real_t SignNz(real_t v)\n"
|
||||
"{\n"
|
||||
" return (v < 0.0) ? -1.0 : 1.0;\n"
|
||||
"}\n";
|
||||
|
||||
m_GlobalMap["Sqr"] =
|
||||
"inline real_t Sqr(real_t v)\n"
|
||||
"{\n"
|
||||
" return v * v;\n"
|
||||
"}\n";
|
||||
|
||||
m_GlobalMap["SafeSqrt"] =
|
||||
"inline real_t SafeSqrt(real_t x)\n"
|
||||
"{\n"
|
||||
@ -48,49 +43,41 @@ FunctionMapper::FunctionMapper()
|
||||
"\n"
|
||||
" return sqrt(x);\n"
|
||||
"}\n";
|
||||
|
||||
m_GlobalMap["Cube"] =
|
||||
"inline real_t Cube(real_t v)\n"
|
||||
"{\n"
|
||||
" return v * v * v;\n"
|
||||
"}\n";
|
||||
|
||||
m_GlobalMap["Hypot"] =
|
||||
"inline real_t Hypot(real_t x, real_t y)\n"
|
||||
"{\n"
|
||||
" return sqrt(SQR(x) + SQR(y));\n"
|
||||
"}\n";
|
||||
|
||||
m_GlobalMap["Spread"] =
|
||||
"inline real_t Spread(real_t x, real_t y)\n"
|
||||
"{\n"
|
||||
" return Hypot(x, y) * ((x) > 0.0 ? 1.0 : -1.0);\n"
|
||||
"}\n";
|
||||
|
||||
m_GlobalMap["Powq4"] =
|
||||
"inline real_t Powq4(real_t x, real_t y)\n"
|
||||
"{\n"
|
||||
" return pow(fabs(x), y) * SignNz(x);\n"
|
||||
"}\n";
|
||||
|
||||
m_GlobalMap["Powq4c"] =
|
||||
"inline real_t Powq4c(real_t x, real_t y)\n"
|
||||
"{\n"
|
||||
" return y == 1.0 ? x : Powq4(x, y);\n"
|
||||
"}\n";
|
||||
|
||||
m_GlobalMap["Zeps"] =
|
||||
"inline real_t Zeps(real_t x)\n"
|
||||
"{\n"
|
||||
" return x == 0.0 ? EPS : x;\n"
|
||||
"}\n";
|
||||
|
||||
m_GlobalMap["Lerp"] =
|
||||
"inline real_t Lerp(real_t a, real_t b, real_t p)\n"
|
||||
"{\n"
|
||||
" return a + (b - a) * p;\n"
|
||||
"}\n";
|
||||
|
||||
m_GlobalMap["Fabsmod"] =
|
||||
"inline real_t Fabsmod(real_t v)\n"
|
||||
"{\n"
|
||||
@ -98,37 +85,31 @@ FunctionMapper::FunctionMapper()
|
||||
"\n"
|
||||
" return modf(v, &dummy);\n"
|
||||
"}\n";
|
||||
|
||||
m_GlobalMap["Fosc"] =
|
||||
"inline real_t Fosc(real_t p, real_t amp, real_t ph)\n"
|
||||
"{\n"
|
||||
" return 0.5 - cos(p * amp + ph) * 0.5;\n"
|
||||
"}\n";
|
||||
|
||||
m_GlobalMap["Foscn"] =
|
||||
"inline real_t Foscn(real_t p, real_t ph)\n"
|
||||
"{\n"
|
||||
" return 0.5 - cos(p + ph) * 0.5;\n"
|
||||
"}\n";
|
||||
|
||||
m_GlobalMap["LogScale"] =
|
||||
"inline real_t LogScale(real_t x)\n"
|
||||
"{\n"
|
||||
" return x == 0.0 ? 0.0 : log((fabs(x) + 1) * M_E) * SignNz(x) / M_E;\n"
|
||||
"}\n";
|
||||
|
||||
m_GlobalMap["LogMap"] =
|
||||
"inline real_t LogMap(real_t x)\n"
|
||||
"{\n"
|
||||
" return x == 0.0 ? 0.0 : (M_E + log(x * M_E)) * 0.25 * SignNz(x);\n"
|
||||
"}\n";
|
||||
|
||||
m_GlobalMap["ClampGte"] =
|
||||
"inline real_t ClampGte(real_t val, real_t gte)\n"
|
||||
"{\n"
|
||||
" return (val < gte) ? gte : val;\n"
|
||||
"}\n";
|
||||
|
||||
m_GlobalMap["Swap"] =
|
||||
"inline void Swap(real_t* val1, real_t* val2)\n"
|
||||
"{\n"
|
||||
@ -136,13 +117,172 @@ FunctionMapper::FunctionMapper()
|
||||
" *val1 = *val2;\n"
|
||||
" *val2 = tmp;\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";
|
||||
}
|
||||
}
|
||||
|
||||
const string* FunctionMapper::GetGlobalFunc(const string& func)
|
||||
{
|
||||
const auto& text = m_GlobalMap.find(func);
|
||||
|
||||
|
||||
if (text != m_GlobalMap.end())
|
||||
return &text->second;
|
||||
else
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -30,9 +30,10 @@ public:
|
||||
const string& SumHistKernel() const;
|
||||
const string& SumHistEntryPoint() 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);
|
||||
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 VariationStateInitString(const Ember<T>& ember);
|
||||
static bool IsBuildRequired(const Ember<T>& ember1, const Ember<T>& ember2);
|
||||
|
@ -3,17 +3,6 @@
|
||||
|
||||
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>
|
||||
/// Initialize the all platforms and devices and keep information about them in lists.
|
||||
/// </summary>
|
||||
@ -23,7 +12,6 @@ OpenCLInfo::OpenCLInfo()
|
||||
vector<cl::Platform> platforms;
|
||||
vector<vector<cl::Device>> devices;
|
||||
intmax_t workingPlatformIndex = -1;
|
||||
|
||||
m_Init = false;
|
||||
cl::Platform::get(&platforms);
|
||||
devices.resize(platforms.size());
|
||||
@ -210,39 +198,36 @@ bool OpenCLInfo::CreateContext(const cl::Platform& platform, cl::Context& contex
|
||||
if (shared)
|
||||
{
|
||||
//Define OS-specific context properties and create the OpenCL context.
|
||||
#if defined (__APPLE__) || defined(MACOSX)
|
||||
CGLContextObj kCGLContext = CGLGetCurrentContext();
|
||||
CGLShareGroupObj kCGLShareGroup = CGLGetShareGroup(kCGLContext);
|
||||
cl_context_properties props[] =
|
||||
{
|
||||
CL_CONTEXT_PROPERTY_USE_CGL_SHAREGROUP_APPLE, (cl_context_properties)kCGLShareGroup,
|
||||
0
|
||||
};
|
||||
|
||||
context = cl::Context(CL_DEVICE_TYPE_GPU, props, nullptr, nullptr, &err);//May need to tinker with this on Mac.
|
||||
#else
|
||||
#if defined WIN32
|
||||
cl_context_properties props[] =
|
||||
{
|
||||
CL_GL_CONTEXT_KHR, (cl_context_properties)wglGetCurrentContext(),
|
||||
CL_WGL_HDC_KHR, (cl_context_properties)wglGetCurrentDC(),
|
||||
CL_CONTEXT_PLATFORM, reinterpret_cast<cl_context_properties>((platform)()),
|
||||
0
|
||||
};
|
||||
|
||||
context = cl::Context(CL_DEVICE_TYPE_GPU, props, nullptr, nullptr, &err);
|
||||
#else
|
||||
cl_context_properties props[] =
|
||||
{
|
||||
CL_GL_CONTEXT_KHR, cl_context_properties(glXGetCurrentContext()),
|
||||
CL_GLX_DISPLAY_KHR, cl_context_properties(glXGetCurrentDisplay()),
|
||||
CL_CONTEXT_PLATFORM, reinterpret_cast<cl_context_properties>((platform)()),
|
||||
0
|
||||
};
|
||||
|
||||
context = cl::Context(CL_DEVICE_TYPE_GPU, props, nullptr, nullptr, &err);
|
||||
#endif
|
||||
#endif
|
||||
#if defined (__APPLE__) || defined(MACOSX)
|
||||
CGLContextObj kCGLContext = CGLGetCurrentContext();
|
||||
CGLShareGroupObj kCGLShareGroup = CGLGetShareGroup(kCGLContext);
|
||||
cl_context_properties props[] =
|
||||
{
|
||||
CL_CONTEXT_PROPERTY_USE_CGL_SHAREGROUP_APPLE, (cl_context_properties)kCGLShareGroup,
|
||||
0
|
||||
};
|
||||
context = cl::Context(CL_DEVICE_TYPE_GPU, props, nullptr, nullptr, &err);//May need to tinker with this on Mac.
|
||||
#else
|
||||
#if defined WIN32
|
||||
cl_context_properties props[] =
|
||||
{
|
||||
CL_GL_CONTEXT_KHR, (cl_context_properties)wglGetCurrentContext(),
|
||||
CL_WGL_HDC_KHR, (cl_context_properties)wglGetCurrentDC(),
|
||||
CL_CONTEXT_PLATFORM, reinterpret_cast<cl_context_properties>((platform)()),
|
||||
0
|
||||
};
|
||||
context = cl::Context(CL_DEVICE_TYPE_GPU, props, nullptr, nullptr, &err);
|
||||
#else
|
||||
cl_context_properties props[] =
|
||||
{
|
||||
CL_GL_CONTEXT_KHR, cl_context_properties(glXGetCurrentContext()),
|
||||
CL_GLX_DISPLAY_KHR, cl_context_properties(glXGetCurrentDisplay()),
|
||||
CL_CONTEXT_PLATFORM, reinterpret_cast<cl_context_properties>((platform)()),
|
||||
0
|
||||
};
|
||||
context = cl::Context(CL_DEVICE_TYPE_GPU, props, nullptr, nullptr, &err);
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -252,7 +237,6 @@ bool OpenCLInfo::CreateContext(const cl::Platform& platform, cl::Context& contex
|
||||
reinterpret_cast<cl_context_properties>((platform)()),
|
||||
0
|
||||
};
|
||||
|
||||
context = cl::Context(CL_DEVICE_TYPE_ALL, props, nullptr, nullptr, &err);
|
||||
}
|
||||
|
||||
@ -276,7 +260,6 @@ string OpenCLInfo::DumpInfo() const
|
||||
{
|
||||
ostringstream os;
|
||||
vector<size_t> sizes;
|
||||
|
||||
os.imbue(locale(""));
|
||||
|
||||
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_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_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_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_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_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;
|
||||
|
||||
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;
|
||||
|
||||
@ -346,55 +326,105 @@ string OpenCLInfo::ErrorToStringCL(cl_int err)
|
||||
switch (err)
|
||||
{
|
||||
case CL_SUCCESS: return "Success";
|
||||
|
||||
case CL_DEVICE_NOT_FOUND: return "Device not found";
|
||||
|
||||
case CL_DEVICE_NOT_AVAILABLE: return "Device not available";
|
||||
|
||||
case CL_COMPILER_NOT_AVAILABLE: return "Compiler not available";
|
||||
|
||||
case CL_MEM_OBJECT_ALLOCATION_FAILURE: return "Memory object allocation failure";
|
||||
|
||||
case CL_OUT_OF_RESOURCES: return "Out of resources";
|
||||
|
||||
case CL_OUT_OF_HOST_MEMORY: return "Out of host memory";
|
||||
|
||||
case CL_PROFILING_INFO_NOT_AVAILABLE: return "Profiling information not available";
|
||||
|
||||
case CL_MEM_COPY_OVERLAP: return "Memory copy overlap";
|
||||
|
||||
case CL_IMAGE_FORMAT_MISMATCH: return "Image format mismatch";
|
||||
|
||||
case CL_IMAGE_FORMAT_NOT_SUPPORTED: return "Image format not supported";
|
||||
|
||||
case CL_BUILD_PROGRAM_FAILURE: return "Program build failure";
|
||||
|
||||
case CL_MAP_FAILURE: return "Map failure";
|
||||
|
||||
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_INVALID_VALUE: return "Invalid value";
|
||||
|
||||
case CL_INVALID_DEVICE_TYPE: return "Invalid device type";
|
||||
|
||||
case CL_INVALID_PLATFORM: return "Invalid platform";
|
||||
|
||||
case CL_INVALID_DEVICE: return "Invalid device";
|
||||
|
||||
case CL_INVALID_CONTEXT: return "Invalid context";
|
||||
|
||||
case CL_INVALID_QUEUE_PROPERTIES: return "Invalid queue properties";
|
||||
|
||||
case CL_INVALID_COMMAND_QUEUE: return "Invalid command queue";
|
||||
|
||||
case CL_INVALID_HOST_PTR: return "Invalid host pointer";
|
||||
|
||||
case CL_INVALID_MEM_OBJECT: return "Invalid memory object";
|
||||
|
||||
case CL_INVALID_IMAGE_FORMAT_DESCRIPTOR: return "Invalid image format descriptor";
|
||||
|
||||
case CL_INVALID_IMAGE_SIZE: return "Invalid image size";
|
||||
|
||||
case CL_INVALID_SAMPLER: return "Invalid sampler";
|
||||
|
||||
case CL_INVALID_BINARY: return "Invalid binary";
|
||||
|
||||
case CL_INVALID_BUILD_OPTIONS: return "Invalid build options";
|
||||
|
||||
case CL_INVALID_PROGRAM: return "Invalid program";
|
||||
|
||||
case CL_INVALID_PROGRAM_EXECUTABLE: return "Invalid program executable";
|
||||
|
||||
case CL_INVALID_KERNEL_NAME: return "Invalid kernel name";
|
||||
|
||||
case CL_INVALID_KERNEL_DEFINITION: return "Invalid kernel definition";
|
||||
|
||||
case CL_INVALID_KERNEL: return "Invalid kernel";
|
||||
|
||||
case CL_INVALID_ARG_INDEX: return "Invalid argument index";
|
||||
|
||||
case CL_INVALID_ARG_VALUE: return "Invalid argument value";
|
||||
|
||||
case CL_INVALID_ARG_SIZE: return "Invalid argument size";
|
||||
|
||||
case CL_INVALID_KERNEL_ARGS: return "Invalid kernel arguments";
|
||||
|
||||
case CL_INVALID_WORK_DIMENSION: return "Invalid work dimension";
|
||||
|
||||
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_GLOBAL_OFFSET: return "Invalid global offset";
|
||||
|
||||
case CL_INVALID_EVENT_WAIT_LIST: return "Invalid event wait list";
|
||||
|
||||
case CL_INVALID_EVENT: return "Invalid event";
|
||||
|
||||
case CL_INVALID_OPERATION: return "Invalid operation";
|
||||
|
||||
case CL_INVALID_GL_OBJECT: return "Invalid OpenGL object";
|
||||
|
||||
case CL_INVALID_BUFFER_SIZE: return "Invalid buffer size";
|
||||
|
||||
case CL_INVALID_MIP_LEVEL: return "Invalid mip-map level";
|
||||
|
||||
case CL_INVALID_GLOBAL_WORK_SIZE: return "Invalid global work size";
|
||||
|
||||
case CL_INVALID_PROPERTY: return "Invalid property";
|
||||
|
||||
default:
|
||||
{
|
||||
ostringstream ss;
|
||||
@ -403,4 +433,4 @@ string OpenCLInfo::ErrorToStringCL(cl_int err)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -17,10 +17,9 @@ namespace EmberCLns
|
||||
/// This class derives from EmberReport, so the caller is able
|
||||
/// to retrieve a text dump of error information if any errors occur.
|
||||
/// </summary>
|
||||
class EMBERCL_API OpenCLInfo : public EmberReport
|
||||
class EMBERCL_API OpenCLInfo : public EmberReport, public Singleton<OpenCLInfo>
|
||||
{
|
||||
public:
|
||||
static OpenCLInfo& Instance();
|
||||
const vector<cl::Platform>& Platforms() const;
|
||||
const string& PlatformName(size_t platform) const;
|
||||
const vector<string>& PlatformNames() const;
|
||||
@ -55,6 +54,8 @@ public:
|
||||
return val;
|
||||
}
|
||||
|
||||
SINGLETON_DERIVED_IMPL(OpenCLInfo);
|
||||
|
||||
private:
|
||||
OpenCLInfo();
|
||||
|
||||
|
@ -9,19 +9,18 @@ namespace EmberCLns
|
||||
/// global OpenCLInfo object. The caller must explicitly do it.
|
||||
/// </summary>
|
||||
OpenCLWrapper::OpenCLWrapper()
|
||||
: m_Info(OpenCLInfo::Instance())
|
||||
{
|
||||
m_Init = false;
|
||||
m_Shared = false;
|
||||
m_PlatformIndex = 0;
|
||||
m_DeviceIndex = 0;
|
||||
m_LocalMemSize = 0;
|
||||
|
||||
//Pre-allocate some space to avoid temporary copying.
|
||||
m_Programs.reserve(4);
|
||||
m_Buffers.reserve(4);
|
||||
m_Images.reserve(4);
|
||||
m_GLImages.reserve(4);
|
||||
m_Info = OpenCLInfo::Instance();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -35,25 +34,24 @@ OpenCLWrapper::OpenCLWrapper()
|
||||
bool OpenCLWrapper::Init(size_t platformIndex, size_t deviceIndex, bool shared)
|
||||
{
|
||||
cl_int err;
|
||||
auto& platforms = m_Info.Platforms();
|
||||
auto& devices = m_Info.Devices();
|
||||
|
||||
auto& platforms = m_Info->Platforms();
|
||||
auto& devices = m_Info->Devices();
|
||||
m_Init = false;
|
||||
ClearErrorReport();
|
||||
|
||||
if (m_Info.Ok())
|
||||
|
||||
if (m_Info->Ok())
|
||||
{
|
||||
if (platformIndex < platforms.size() && platformIndex < devices.size())
|
||||
{
|
||||
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.
|
||||
{
|
||||
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_Device = devices[platformIndex][deviceIndex];
|
||||
@ -63,9 +61,9 @@ bool OpenCLWrapper::Init(size_t platformIndex, size_t deviceIndex, bool shared)
|
||||
m_DeviceIndex = deviceIndex;
|
||||
m_DeviceVec.clear();
|
||||
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_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_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_MaxAllocSize = size_t(m_Info->GetInfo<cl_ulong>(m_PlatformIndex, m_DeviceIndex, CL_DEVICE_MAX_MEM_ALLOC_SIZE));
|
||||
m_Shared = shared;
|
||||
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);
|
||||
|
||||
if (!m_Info.CheckCL(err, "cl::Buffer()"))
|
||||
if (!m_Info->CheckCL(err, "cl::Buffer()"))
|
||||
return false;
|
||||
|
||||
NamedBuffer nb(buff, name);
|
||||
|
||||
m_Buffers.push_back(nb);
|
||||
}
|
||||
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.
|
||||
|
||||
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;
|
||||
|
||||
NamedBuffer nb(buff, name);//Make a named buffer out of the new buffer.
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
@ -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)
|
||||
{
|
||||
int bufferIndex = FindBufferIndex(name);
|
||||
|
||||
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_int err = m_Queue.enqueueWriteBuffer(m_Buffers[bufferIndex].m_Buffer, CL_TRUE, 0, size, data, nullptr, &e);
|
||||
|
||||
e.wait();
|
||||
m_Queue.finish();
|
||||
|
||||
if (m_Info.CheckCL(err, "cl::CommandQueue::enqueueWriteBuffer()"))
|
||||
if (m_Info->CheckCL(err, "cl::CommandQueue::enqueueWriteBuffer()"))
|
||||
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)
|
||||
{
|
||||
int bufferIndex = FindBufferIndex(name);
|
||||
|
||||
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_int err = m_Queue.enqueueReadBuffer(m_Buffers[bufferIndex].m_Buffer, CL_TRUE, 0, size, data, nullptr, &e);
|
||||
|
||||
e.wait();
|
||||
m_Queue.finish();
|
||||
|
||||
if (m_Info.CheckCL(err, "cl::CommandQueue::enqueueReadBuffer()"))
|
||||
if (m_Info->CheckCL(err, "cl::CommandQueue::enqueueReadBuffer()"))
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -287,7 +278,6 @@ int OpenCLWrapper::FindBufferIndex(const string& name)
|
||||
size_t OpenCLWrapper::GetBufferSize(const string& name)
|
||||
{
|
||||
int bufferIndex = FindBufferIndex(name);
|
||||
|
||||
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);
|
||||
NamedImage2DGL namedImageGL(imageGL, name);
|
||||
|
||||
if (m_Info.CheckCL(err, "cl::ImageGL()"))
|
||||
if (m_Info->CheckCL(err, "cl::ImageGL()"))
|
||||
{
|
||||
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);
|
||||
|
||||
if (m_Info.CheckCL(err, "cl::Image2D()"))
|
||||
if (m_Info->CheckCL(err, "cl::Image2D()"))
|
||||
{
|
||||
m_Images.push_back(namedImage);
|
||||
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.
|
||||
|
||||
if (m_Info.CheckCL(err, "cl::ImageGL()"))
|
||||
if (m_Info->CheckCL(err, "cl::ImageGL()"))
|
||||
{
|
||||
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))
|
||||
{
|
||||
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);
|
||||
|
||||
if (m_Info.CheckCL(err, "cl::Image2D()"))
|
||||
if (m_Info->CheckCL(err, "cl::Image2D()"))
|
||||
{
|
||||
m_Images[imageIndex] = namedImage;
|
||||
return true;
|
||||
@ -432,11 +421,9 @@ bool OpenCLWrapper::WriteImage2D(size_t index, bool shared, ::size_t width, ::si
|
||||
cl_int err;
|
||||
cl::Event e;
|
||||
cl::size_t<3> origin, region;
|
||||
|
||||
origin[0] = 0;
|
||||
origin[1] = 0;
|
||||
origin[2] = 0;
|
||||
|
||||
region[0] = width;
|
||||
region[1] = height;
|
||||
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);
|
||||
e.wait();
|
||||
m_Queue.finish();
|
||||
|
||||
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())
|
||||
@ -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);
|
||||
e.wait();
|
||||
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::Event e;
|
||||
cl::size_t<3> origin, region;
|
||||
|
||||
origin[0] = 0;
|
||||
origin[1] = 0;
|
||||
origin[2] = 0;
|
||||
|
||||
region[0] = width;
|
||||
region[1] = height;
|
||||
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);
|
||||
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())
|
||||
{
|
||||
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())
|
||||
{
|
||||
vector<cl::Memory> images;
|
||||
|
||||
images.push_back(m_GLImages[imageIndex].m_Image);
|
||||
IMAGEGL2D image = m_GLImages[imageIndex].m_Image;
|
||||
|
||||
@ -620,12 +603,11 @@ 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)
|
||||
{
|
||||
cl_image_format tempFormat = image.getImageInfo<CL_IMAGE_FORMAT>(nullptr);
|
||||
|
||||
return (/*image.getImageInfo<CL_MEM_FLAGS>() == flags &&*/
|
||||
tempFormat.image_channel_data_type == format.image_channel_data_type &&
|
||||
tempFormat.image_channel_order == format.image_channel_order &&
|
||||
image.getImageInfo<CL_IMAGE_WIDTH>(nullptr) == width &&
|
||||
image.getImageInfo<CL_IMAGE_HEIGHT>(nullptr) == height/* &&
|
||||
tempFormat.image_channel_data_type == format.image_channel_data_type &&
|
||||
tempFormat.image_channel_order == format.image_channel_order &&
|
||||
image.getImageInfo<CL_IMAGE_WIDTH>(nullptr) == width &&
|
||||
image.getImageInfo<CL_IMAGE_HEIGHT>(nullptr) == height/* &&
|
||||
image.getImageInfo<CL_IMAGE_ROW_PITCH>() == row_pitch*/);//Pitch will be (width * bytes per pixel) + padding.
|
||||
}
|
||||
|
||||
@ -657,17 +639,15 @@ bool OpenCLWrapper::CreateImage2D(cl::Image2D& image2D, cl_mem_flags flags, cl::
|
||||
if (m_Init)
|
||||
{
|
||||
cl_int err;
|
||||
|
||||
image2D = cl::Image2D(m_Context,
|
||||
flags,
|
||||
format,
|
||||
width,
|
||||
height,
|
||||
row_pitch,
|
||||
data,
|
||||
&err);
|
||||
|
||||
return m_Info.CheckCL(err, "cl::Image2D()");
|
||||
flags,
|
||||
format,
|
||||
width,
|
||||
height,
|
||||
row_pitch,
|
||||
data,
|
||||
&err);
|
||||
return m_Info->CheckCL(err, "cl::Image2D()");
|
||||
}
|
||||
|
||||
return false;
|
||||
@ -687,15 +667,13 @@ bool OpenCLWrapper::CreateImage2DGL(IMAGEGL2D& image2DGL, cl_mem_flags flags, GL
|
||||
if (m_Init)
|
||||
{
|
||||
cl_int err;
|
||||
|
||||
image2DGL = IMAGEGL2D(m_Context,
|
||||
flags,
|
||||
target,
|
||||
miplevel,
|
||||
texobj,
|
||||
&err);
|
||||
|
||||
return m_Info.CheckCL(err, "cl::ImageGL()");
|
||||
flags,
|
||||
target,
|
||||
miplevel,
|
||||
texobj,
|
||||
&err);
|
||||
return m_Info->CheckCL(err, "cl::ImageGL()");
|
||||
}
|
||||
|
||||
return false;
|
||||
@ -726,11 +704,10 @@ bool OpenCLWrapper::EnqueueAcquireGLObjects(IMAGEGL2D& image)
|
||||
if (m_Init && m_Shared)
|
||||
{
|
||||
vector<cl::Memory> images;
|
||||
|
||||
images.push_back(image);
|
||||
cl_int err = m_Queue.enqueueAcquireGLObjects(&images);
|
||||
m_Queue.finish();
|
||||
return m_Info.CheckCL(err, "cl::CommandQueue::enqueueAcquireGLObjects()");
|
||||
return m_Info->CheckCL(err, "cl::CommandQueue::enqueueAcquireGLObjects()");
|
||||
}
|
||||
|
||||
return false;
|
||||
@ -761,11 +738,10 @@ bool OpenCLWrapper::EnqueueReleaseGLObjects(IMAGEGL2D& image)
|
||||
if (m_Init && m_Shared)
|
||||
{
|
||||
vector<cl::Memory> images;
|
||||
|
||||
images.push_back(image);
|
||||
cl_int err = m_Queue.enqueueReleaseGLObjects(&images);
|
||||
m_Queue.finish();
|
||||
return m_Info.CheckCL(err, "cl::CommandQueue::enqueueReleaseGLObjects()");
|
||||
return m_Info->CheckCL(err, "cl::CommandQueue::enqueueReleaseGLObjects()");
|
||||
}
|
||||
|
||||
return false;
|
||||
@ -781,9 +757,8 @@ bool OpenCLWrapper::EnqueueAcquireGLObjects(const VECTOR_CLASS<cl::Memory>* memO
|
||||
if (m_Init && m_Shared)
|
||||
{
|
||||
cl_int err = m_Queue.enqueueAcquireGLObjects(memObjects);
|
||||
|
||||
m_Queue.finish();
|
||||
return m_Info.CheckCL(err, "cl::CommandQueue::enqueueAcquireGLObjects()");
|
||||
return m_Info->CheckCL(err, "cl::CommandQueue::enqueueAcquireGLObjects()");
|
||||
}
|
||||
|
||||
return false;
|
||||
@ -799,9 +774,8 @@ bool OpenCLWrapper::EnqueueReleaseGLObjects(const VECTOR_CLASS<cl::Memory>* memO
|
||||
if (m_Init && m_Shared)
|
||||
{
|
||||
cl_int err = m_Queue.enqueueReleaseGLObjects(memObjects);
|
||||
|
||||
m_Queue.finish();
|
||||
return m_Info.CheckCL(err, "cl::CommandQueue::enqueueReleaseGLObjects()");
|
||||
return m_Info->CheckCL(err, "cl::CommandQueue::enqueueReleaseGLObjects()");
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
cl_int err;
|
||||
|
||||
sampler = cl::Sampler(m_Context,
|
||||
normalizedCoords,
|
||||
addressingMode,
|
||||
filterMode,
|
||||
&err);
|
||||
|
||||
return m_Info.CheckCL(err, "cl::Sampler()");
|
||||
normalizedCoords,
|
||||
addressingMode,
|
||||
filterMode,
|
||||
&err);
|
||||
return m_Info->CheckCL(err, "cl::Sampler()");
|
||||
}
|
||||
|
||||
/// <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)
|
||||
{
|
||||
int bufferIndex = OpenCLWrapper::FindBufferIndex(name);
|
||||
|
||||
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())
|
||||
{
|
||||
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())
|
||||
{
|
||||
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()");
|
||||
}
|
||||
}
|
||||
|
||||
@ -935,21 +906,20 @@ int OpenCLWrapper::FindKernelIndex(const string& name)
|
||||
/// <param name="blockDepth">Depth of each block</param>
|
||||
/// <returns>True if success, else false.</returns>
|
||||
bool OpenCLWrapper::RunKernel(size_t kernelIndex, size_t totalGridWidth, size_t totalGridHeight, size_t totalGridDepth,
|
||||
size_t blockWidth, size_t blockHeight, size_t blockDepth)
|
||||
size_t blockWidth, size_t blockHeight, size_t blockDepth)
|
||||
{
|
||||
if (m_Init && kernelIndex < m_Programs.size())
|
||||
{
|
||||
cl::Event e;
|
||||
cl_int err = m_Queue.enqueueNDRangeKernel(m_Programs[kernelIndex].m_Kernel,
|
||||
cl::NullRange,
|
||||
cl::NDRange(totalGridWidth, totalGridHeight, totalGridDepth),
|
||||
cl::NDRange(blockWidth, blockHeight, blockDepth),
|
||||
nullptr,
|
||||
&e);
|
||||
|
||||
cl::NullRange,
|
||||
cl::NDRange(totalGridWidth, totalGridHeight, totalGridDepth),
|
||||
cl::NDRange(blockWidth, blockHeight, blockDepth),
|
||||
nullptr,
|
||||
&e);
|
||||
e.wait();
|
||||
m_Queue.finish();
|
||||
return m_Info.CheckCL(err, "cl::CommandQueue::enqueueNDRangeKernel()");
|
||||
return m_Info->CheckCL(err, "cl::CommandQueue::enqueueNDRangeKernel()");
|
||||
}
|
||||
|
||||
return false;
|
||||
@ -963,7 +933,7 @@ bool OpenCLWrapper::Shared() const { return m_Shared; }
|
||||
const cl::Context& OpenCLWrapper::Context() const { return m_Context; }
|
||||
size_t OpenCLWrapper::PlatformIndex() const { return m_PlatformIndex; }
|
||||
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::GlobalMemSize() const { return m_GlobalMemSize; }
|
||||
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)
|
||||
{
|
||||
cl_int err;
|
||||
|
||||
spk.m_Name = name;
|
||||
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);
|
||||
@ -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.
|
||||
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-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-single-precision-constant");
|
||||
|
||||
if (m_Info.CheckCL(err, "cl::Program::build()"))
|
||||
//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-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");
|
||||
|
||||
if (m_Info->CheckCL(err, "cl::Program::build()"))
|
||||
{
|
||||
//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);
|
||||
|
||||
if (m_Info.CheckCL(err, "cl::Kernel()"))
|
||||
if (m_Info->CheckCL(err, "cl::Kernel()"))
|
||||
return true;//Everything is ok.
|
||||
}
|
||||
else
|
||||
|
@ -9,11 +9,7 @@
|
||||
|
||||
namespace EmberCLns
|
||||
{
|
||||
#if CL_VERSION_1_2
|
||||
#define IMAGEGL2D cl::ImageGL
|
||||
#else
|
||||
#define IMAGEGL2D cl::Image2DGL
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// 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())
|
||||
{
|
||||
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;
|
||||
@ -201,7 +196,7 @@ private:
|
||||
cl::Context m_Context;
|
||||
cl::Device m_Device;
|
||||
cl::CommandQueue m_Queue;
|
||||
OpenCLInfo& m_Info;
|
||||
shared_ptr<OpenCLInfo> m_Info;
|
||||
std::vector<cl::Device> m_DeviceVec;
|
||||
std::vector<Spk> m_Programs;
|
||||
std::vector<NamedBuffer> m_Buffers;
|
||||
|
@ -41,11 +41,11 @@ void RendererCL<T, bucketT>::Init()
|
||||
m_Init = false;
|
||||
m_DoublePrecision = typeid(T) == typeid(double);
|
||||
m_NumChannels = 4;
|
||||
|
||||
//Buffer names.
|
||||
m_EmberBufferName = "Ember";
|
||||
m_XformsBufferName = "Xforms";
|
||||
m_ParVarsBufferName = "ParVars";
|
||||
m_GlobalSharedBufferName = "GlobalShared";
|
||||
m_SeedsBufferName = "Seeds";
|
||||
m_DistBufferName = "Dist";
|
||||
m_CarToRasBufferName = "CarToRas";
|
||||
@ -60,7 +60,6 @@ void RendererCL<T, bucketT>::Init()
|
||||
m_AccumBufferName = "Accum";
|
||||
m_FinalImageName = "Final";
|
||||
m_PointsBufferName = "Points";
|
||||
|
||||
//It's critical that these numbers never change. They are
|
||||
//based on the cuburn model of each kernel launch containing
|
||||
//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_IterBlocksWide = 64;
|
||||
m_IterBlocksHigh = 2;
|
||||
|
||||
m_PaletteFormat.image_channel_order = CL_RGBA;
|
||||
m_PaletteFormat.image_channel_data_type = CL_FLOAT;
|
||||
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& sumHistProgram = m_IterOpenCLKernelCreator.SumHistKernel();
|
||||
ostringstream os;
|
||||
|
||||
m_Init = false;
|
||||
m_Devices.clear();
|
||||
m_Devices.reserve(devices.size());
|
||||
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++)
|
||||
{
|
||||
@ -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 && !(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.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)
|
||||
{
|
||||
m_Devices.push_back(std::move(cld));//Success, so move to the vector, else it will go out of scope and be deleted.
|
||||
@ -156,9 +157,10 @@ bool RendererCL<T, bucketT>::Init(const vector<pair<size_t, size_t>>& devices, b
|
||||
{
|
||||
auto& firstWrapper = m_Devices[0]->m_Wrapper;
|
||||
m_DEOpenCLKernelCreator = DEOpenCLKernelCreator(m_DoublePrecision, m_Devices[0]->Nvidia());
|
||||
|
||||
|
||||
//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_IterOpenCLKernelCreator.SumHistEntryPoint(), sumHistProgram, m_IterOpenCLKernelCreator.SumHistEntryPoint(), m_DoublePrecision))) { AddToReport(loc); }
|
||||
|
||||
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.
|
||||
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;
|
||||
|
||||
FillSeeds();
|
||||
|
||||
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;
|
||||
|
||||
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_DECoefIndicesBufferName, reinterpret_cast<void*>(const_cast<uint*>(m_DensityFilter->CoefIndices())), m_DensityFilter->CoefsIndicesSizeBytes()))) { AddToReport(loc); }
|
||||
}
|
||||
}
|
||||
@ -606,7 +609,7 @@ vector<string> RendererCL<T, bucketT>::ErrorReport()
|
||||
auto s = device->m_Wrapper.ErrorReport();
|
||||
ours.insert(ours.end(), s.begin(), s.end());
|
||||
}
|
||||
|
||||
|
||||
return ours;
|
||||
}
|
||||
|
||||
@ -655,28 +658,37 @@ bool RendererCL<T, bucketT>::Alloc(bool histOnly)
|
||||
|
||||
EnterResize();
|
||||
m_XformsCL.resize(m_Ember.TotalXformCount());
|
||||
|
||||
bool b = true;
|
||||
size_t histLength = SuperSize() * sizeof(v4bT);
|
||||
size_t accumLength = SuperSize() * sizeof(v4bT);
|
||||
const char* loc = __FUNCTION__;
|
||||
|
||||
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_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_AccumBufferName, accumLength))) { AddToReport(loc); }//Accum buffer.
|
||||
|
||||
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_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_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_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.
|
||||
|
||||
//Global shared is allocated once and written when building the kernel.
|
||||
}
|
||||
|
||||
LeaveResize();
|
||||
@ -739,12 +751,9 @@ eRenderStatus RendererCL<T, bucketT>::GaussianDensityFilter()
|
||||
//}
|
||||
//else
|
||||
// return RENDER_ERROR;
|
||||
|
||||
//Timing t(4);
|
||||
|
||||
eRenderStatus status = RunDensityFilter();
|
||||
//t.Toc(__FUNCTION__ " RunKernel()");
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
@ -802,36 +811,41 @@ EmberStats RendererCL<T, bucketT>::Iterate(size_t iterCount, size_t temporalSamp
|
||||
if (IterOpenCLKernelCreator<T>::IsBuildRequired(m_Ember, m_LastBuiltEmber))
|
||||
b = BuildIterProgramForEmber(true);
|
||||
|
||||
//Setup buffers on all devices.
|
||||
for (auto& device : m_Devices)
|
||||
if (b)
|
||||
{
|
||||
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_XformsBufferName, reinterpret_cast<void*>(m_XformsCL.data()), sizeof(m_XformsCL[0]) * m_XformsCL.size()))) { AddToReport(loc); }
|
||||
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)
|
||||
//Setup buffers on all devices.
|
||||
for (auto& device : m_Devices)
|
||||
{
|
||||
IterOpenCLKernelCreator<T>::ParVarIndexDefines(m_Ember, m_Params, true, false);//Always do this to get the values (but no string), regardless of whether a rebuild is necessary.
|
||||
auto& wrapper = device->m_Wrapper;
|
||||
|
||||
//Don't know the size of the parametric varations parameters buffer until the ember is examined.
|
||||
//So set it up right before the run.
|
||||
if (!m_Params.second.empty())
|
||||
if (b && !(b = wrapper.WriteBuffer(m_EmberBufferName, reinterpret_cast<void*>(&m_EmberCL), sizeof(m_EmberCL))))
|
||||
break;
|
||||
|
||||
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 (!wrapper.AddAndWriteBuffer(m_ParVarsBufferName, m_Params.second.data(), m_Params.second.size() * sizeof(m_Params.second[0])))
|
||||
{
|
||||
m_Abort = true;
|
||||
AddToReport(loc);
|
||||
return stats;
|
||||
}
|
||||
IterOpenCLKernelCreator<T>::ParVarIndexDefines(m_Ember, m_Params, true, false);//Always do this to get the values (but no string), regardless of whether a rebuild is necessary.
|
||||
|
||||
//Don't know the size of the parametric varations parameters buffer until the ember is examined.
|
||||
//So set it up right before the run.
|
||||
if (!m_Params.second.empty())
|
||||
if (!wrapper.AddAndWriteBuffer(m_ParVarsBufferName, m_Params.second.data(), m_Params.second.size() * sizeof(m_Params.second[0])))
|
||||
break;
|
||||
}
|
||||
else
|
||||
break;
|
||||
}
|
||||
else
|
||||
return stats;
|
||||
}
|
||||
}
|
||||
|
||||
@ -876,39 +890,53 @@ bool RendererCL<T, bucketT>::BuildIterProgramForEmber(bool doAccum)
|
||||
bool b = !m_Devices.empty();
|
||||
const char* loc = __FUNCTION__;
|
||||
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);
|
||||
//cout << "Building: " << endl << iterProgram << endl;
|
||||
vector<std::thread> threads;
|
||||
std::function<void(RendererClDevice*)> func = [&](RendererClDevice* dev)
|
||||
{
|
||||
if (!dev->m_Wrapper.AddProgram(m_IterOpenCLKernelCreator.IterEntryPoint(), m_IterKernel, m_IterOpenCLKernelCreator.IterEntryPoint(), m_DoublePrecision))
|
||||
{
|
||||
m_ResizeCs.Enter();//Just use the resize CS for lack of a better one.
|
||||
b = false;
|
||||
AddToReport(string(loc) + "()\n" + dev->m_Wrapper.DeviceName() + ":\nBuilding the following program failed: \n" + m_IterKernel + "\n");
|
||||
m_ResizeCs.Leave();
|
||||
}
|
||||
};
|
||||
|
||||
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.
|
||||
{
|
||||
if (!device)//Secondary devices on their own threads.
|
||||
threads.push_back(std::thread([&](RendererClDevice* dev) { func(dev); }, m_Devices[device].get()));
|
||||
else//Primary device on this thread.
|
||||
func(m_Devices[device].get());
|
||||
}
|
||||
|
||||
for (auto& th : threads)
|
||||
if (th.joinable())
|
||||
th.join();
|
||||
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)
|
||||
{
|
||||
//t.Toc(__FUNCTION__ " program build");
|
||||
//cout << string(loc) << "():\nBuilding the following program succeeded: \n" << iterProgram << endl;
|
||||
m_LastBuiltEmber = m_Ember;
|
||||
m_IterKernel = m_IterOpenCLKernelCreator.CreateIterKernelString(m_Ember, m_Params.first, m_GlobalShared.first, m_LockAccum, doAccum);
|
||||
//cout << "Building: " << endl << iterProgram << endl;
|
||||
vector<std::thread> threads;
|
||||
std::function<void(RendererClDevice*)> func = [&](RendererClDevice * dev)
|
||||
{
|
||||
if (!dev->m_Wrapper.AddProgram(m_IterOpenCLKernelCreator.IterEntryPoint(), m_IterKernel, m_IterOpenCLKernelCreator.IterEntryPoint(), m_DoublePrecision))
|
||||
{
|
||||
m_ResizeCs.Enter();//Just use the resize CS for lack of a better one.
|
||||
b = false;
|
||||
AddToReport(string(loc) + "()\n" + dev->m_Wrapper.DeviceName() + ":\nBuilding the following program failed: \n" + m_IterKernel + "\n");
|
||||
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);
|
||||
|
||||
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.
|
||||
threads.push_back(std::thread([&](RendererClDevice * dev) { func(dev); }, m_Devices[device].get()));
|
||||
else//Primary device on this thread.
|
||||
func(m_Devices[device].get());
|
||||
}
|
||||
|
||||
for (auto& th : threads)
|
||||
if (th.joinable())
|
||||
th.join();
|
||||
|
||||
if (b)
|
||||
{
|
||||
//t.Toc(__FUNCTION__ " program build");
|
||||
//cout << string(loc) << "():\nBuilding the following program succeeded: \n" << iterProgram << endl;
|
||||
m_LastBuiltEmber = m_Ember;
|
||||
}
|
||||
}
|
||||
|
||||
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<intmax_t> atomItersRan, atomItersRemaining;
|
||||
size_t adjustedIterCountPerKernel = m_IterCountPerKernel;
|
||||
|
||||
itersRan = 0;
|
||||
atomItersRan.store(0);
|
||||
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.
|
||||
|
||||
#ifdef TEST_CL
|
||||
m_Abort = false;
|
||||
#endif
|
||||
|
||||
std::function<void(size_t, int)> iterFunc = [&](size_t dev, int kernelIndex)
|
||||
{
|
||||
bool b = true;
|
||||
@ -979,18 +1004,31 @@ bool RendererCL<T, bucketT>::RunIter(size_t iterCount, size_t temporalSample, si
|
||||
size_t iterCountThisLaunch = iterCountPerKernel * IterGridKernelWidth() * IterGridKernelHeight();
|
||||
//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++, 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_EmberBufferName))) { AddToReport(loc); }//Ember.
|
||||
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_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_HistBufferName))) { AddToReport(loc); }//Histogram.
|
||||
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.SetBufferArg(kernelIndex, argIndex++, m_PointsBufferName))) { AddToReport(loc); }//Random start points.
|
||||
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.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_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_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_CarToRasBufferName))) { AddToReport(loc); }//Coordinate converter.
|
||||
|
||||
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.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.RunKernel(kernelIndex,
|
||||
IterGridKernelWidth(),//Total grid dims.
|
||||
@ -1014,17 +1052,16 @@ bool RendererCL<T, bucketT>::RunIter(size_t iterCount, size_t temporalSample, si
|
||||
if (m_Callback && !dev)//Will only do callback on the first device, however it will report the progress of all devices.
|
||||
{
|
||||
double percent = 100.0 *
|
||||
double
|
||||
(
|
||||
double
|
||||
(
|
||||
double
|
||||
(
|
||||
double(m_LastIter + atomItersRan.load()) / double(ItersPerTemporalSample())
|
||||
) + temporalSample
|
||||
) / double(TemporalSamples())
|
||||
);
|
||||
|
||||
double
|
||||
(
|
||||
double
|
||||
(
|
||||
double
|
||||
(
|
||||
double(m_LastIter + atomItersRan.load()) / double(ItersPerTemporalSample())
|
||||
) + temporalSample
|
||||
) / double(TemporalSamples())
|
||||
);
|
||||
double percentDiff = percent - m_LastIterPercent;
|
||||
double toc = m_ProgressTimer.Toc();
|
||||
|
||||
@ -1072,7 +1109,7 @@ bool RendererCL<T, bucketT>::RunIter(size_t iterCount, size_t temporalSample, si
|
||||
if (m_Devices.size() > 1)//Determine whether/when to sum histograms of secondary devices with the primary.
|
||||
{
|
||||
if (((TemporalSamples() == 1) || (temporalSample == TemporalSamples() - 1)) &&//If there are no temporal samples (not animating), or the current one is the last...
|
||||
((m_LastIter + itersRan) >= ItersPerTemporalSample()))//...and the required number of iters for that sample have completed...
|
||||
((m_LastIter + itersRan) >= ItersPerTemporalSample()))//...and the required number of iters for that sample have completed...
|
||||
if (success && !(success = SumDeviceHist())) { AddToReport(loc); }//...read the histogram from the secondary devices and sum them to the primary.
|
||||
}
|
||||
|
||||
@ -1104,17 +1141,19 @@ eRenderStatus RendererCL<T, bucketT>::RunLogScaleFilter()
|
||||
size_t blockH = 4;//A height of 4 seems to run the fastest.
|
||||
size_t gridW = m_DensityFilterCL.m_SuperRasW;
|
||||
size_t gridH = m_DensityFilterCL.m_SuperRasH;
|
||||
|
||||
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.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_DEFilterParamsBufferName))) { AddToReport(loc); }//DensityFilterCL.
|
||||
|
||||
//t.Tic();
|
||||
if (b && !(b = wrapper.RunKernel(kernelIndex, gridW, gridH, 1, blockW, blockH, 1))) { AddToReport(loc); }
|
||||
|
||||
//t.Toc(loc);
|
||||
}
|
||||
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
|
||||
//into the total grid dimensions.
|
||||
OpenCLWrapper::MakeEvenGridDims(blockSizeW, blockSizeH, gridW, gridH);
|
||||
|
||||
//t.Tic();
|
||||
//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.
|
||||
@ -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.
|
||||
chunkSizeH = gapH + 1;
|
||||
totalChunks = chunkSizeW * chunkSizeH;
|
||||
|
||||
OpenCLWrapper::MakeEvenGridDims(blockSizeW, blockSizeH, gridW, gridH);
|
||||
gridW /= chunkSizeW;
|
||||
gridH /= chunkSizeH;
|
||||
@ -1199,6 +1236,7 @@ eRenderStatus RendererCL<T, bucketT>::RunDensityFilter()
|
||||
{
|
||||
//t2.Tic();
|
||||
if (b && !(b = RunDensityFilterPrivate(kernelIndex, gridW, gridH, blockSizeW, blockSizeH, chunkSizeW, chunkSizeH, colChunk, rowChunk))) { m_Abort = true; AddToReport(loc); }
|
||||
|
||||
//t2.Toc(loc);
|
||||
|
||||
if (b && m_Callback)
|
||||
@ -1211,6 +1249,7 @@ eRenderStatus RendererCL<T, bucketT>::RunDensityFilter()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#else
|
||||
gridW /= chunkSizeW;
|
||||
gridH /= chunkSizeH;
|
||||
@ -1222,6 +1261,7 @@ eRenderStatus RendererCL<T, bucketT>::RunDensityFilter()
|
||||
{
|
||||
//t2.Tic();
|
||||
if (b && !(b = RunDensityFilterPrivate(kernelIndex, gridW, gridH, blockSizeW, blockSizeH, chunkSizeW, chunkSizeH, colChunk, rowChunk))) { m_Abort = true; AddToReport(loc); }
|
||||
|
||||
//t2.Toc(loc);
|
||||
|
||||
if (b && m_Callback)
|
||||
@ -1234,6 +1274,7 @@ eRenderStatus RendererCL<T, bucketT>::RunDensityFilter()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
if (b && m_Callback)
|
||||
@ -1273,11 +1314,11 @@ eRenderStatus RendererCL<T, bucketT>::RunFinalAccum()
|
||||
if (!m_Abort && accumKernelIndex != -1)
|
||||
{
|
||||
auto& wrapper = m_Devices[0]->m_Wrapper;
|
||||
|
||||
//This is needed with or without early clip.
|
||||
ConvertSpatialFilter();
|
||||
|
||||
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); }
|
||||
|
||||
//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);
|
||||
|
||||
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.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);
|
||||
|
||||
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.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_CurvesCsaName))) { AddToReport(loc); }//Curve points.
|
||||
|
||||
|
||||
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(alphaScale)))) { AddToReport(loc); }//Alpha scale.
|
||||
|
||||
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 gridW = width * elementSize;
|
||||
size_t gridH = height;
|
||||
|
||||
b = true;
|
||||
OpenCLWrapper::MakeEvenGridDims(blockW, blockH, gridW, gridH);
|
||||
|
||||
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++, height))) { AddToReport(loc); }//Height.
|
||||
|
||||
if (b && !(b = wrapper.RunKernel(kernelIndex, gridW, gridH, 1, blockW, blockH, 1))) { AddToReport(loc); }
|
||||
}
|
||||
else
|
||||
@ -1416,21 +1466,31 @@ bool RendererCL<T, bucketT>::RunDensityFilterPrivate(size_t kernelIndex, size_t
|
||||
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_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_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_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, 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, chunkH))) { AddToReport(loc); } argIndex++;//Row chunk.
|
||||
|
||||
//t.Toc(__FUNCTION__ " set args");
|
||||
|
||||
//t.Tic();
|
||||
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;
|
||||
}
|
||||
|
||||
@ -1490,6 +1550,7 @@ int RendererCL<T, bucketT>::MakeAndGetFinalAccumProgram(double& alphaBase, doubl
|
||||
if ((kernelIndex = wrapper.FindKernelIndex(finalAccumEntryPoint)) == -1)//Has not been built yet.
|
||||
{
|
||||
auto& kernel = m_FinalAccumOpenCLKernelCreator.FinalAccumKernel(EarlyClip(), Renderer<T, bucketT>::NumChannels(), Transparency());
|
||||
|
||||
if (wrapper.AddProgram(finalAccumEntryPoint, kernel, finalAccumEntryPoint, m_DoublePrecision))
|
||||
kernelIndex = wrapper.FindKernelIndex(finalAccumEntryPoint);//Try to find it again, it will be present if successfully built.
|
||||
else
|
||||
@ -1562,10 +1623,15 @@ bool RendererCL<T, bucketT>::SumDeviceHist()
|
||||
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_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(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.RunKernel (kernelIndex, gridW, gridH, 1, blockW, blockH, 1))) { break; }
|
||||
}
|
||||
else
|
||||
@ -1579,11 +1645,10 @@ bool RendererCL<T, bucketT>::SumDeviceHist()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (!b)
|
||||
{
|
||||
ostringstream os;
|
||||
|
||||
os << loc << ": failed to sum histograms from the secondary device(s) to the primary device.";
|
||||
AddToReport(os.str());
|
||||
}
|
||||
@ -1639,7 +1704,6 @@ void RendererCL<T, bucketT>::ConvertSpatialFilter()
|
||||
if (m_SpatialFilter.get())
|
||||
{
|
||||
this->PrepFinalAccumVals(background, g, linRange, vibrancy);
|
||||
|
||||
m_SpatialFilterCL.m_SuperRasW = uint(SuperRasW());
|
||||
m_SpatialFilterCL.m_SuperRasH = uint(SuperRasH());
|
||||
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)
|
||||
{
|
||||
memset(&emberCL, 0, sizeof(EmberCL<T>));//Might not really be needed.
|
||||
|
||||
emberCL.m_RotA = m_RotMat.A();
|
||||
emberCL.m_RotB = m_RotMat.B();
|
||||
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++)
|
||||
{
|
||||
Xform<T>* xform = ember.GetTotalXform(i);
|
||||
|
||||
xformsCL[i].m_A = xform->m_Affine.A();
|
||||
xformsCL[i].m_B = xform->m_Affine.B();
|
||||
xformsCL[i].m_C = xform->m_Affine.C();
|
||||
xformsCL[i].m_D = xform->m_Affine.D();
|
||||
xformsCL[i].m_E = xform->m_Affine.E();
|
||||
xformsCL[i].m_F = xform->m_Affine.F();
|
||||
|
||||
xformsCL[i].m_PostA = xform->m_Post.A();
|
||||
xformsCL[i].m_PostB = xform->m_Post.B();
|
||||
xformsCL[i].m_PostC = xform->m_Post.C();
|
||||
xformsCL[i].m_PostD = xform->m_Post.D();
|
||||
xformsCL[i].m_PostE = xform->m_Post.E();
|
||||
xformsCL[i].m_PostF = xform->m_Post.F();
|
||||
|
||||
xformsCL[i].m_DirectColor = xform->m_DirectColor;
|
||||
xformsCL[i].m_ColorSpeedCache = xform->ColorSpeedCache();
|
||||
xformsCL[i].m_OneMinusColorCache = xform->OneMinusColorCache();
|
||||
|
@ -41,57 +41,57 @@ public:
|
||||
template <typename T, typename bucketT>
|
||||
class EMBERCL_API RendererCL : public Renderer<T, bucketT>, public RendererCLBase
|
||||
{
|
||||
using EmberNs::Renderer<T, bucketT>::RendererBase::Abort;
|
||||
using EmberNs::Renderer<T, bucketT>::RendererBase::EarlyClip;
|
||||
using EmberNs::Renderer<T, bucketT>::RendererBase::Transparency;
|
||||
using EmberNs::Renderer<T, bucketT>::RendererBase::EnterResize;
|
||||
using EmberNs::Renderer<T, bucketT>::RendererBase::LeaveResize;
|
||||
using EmberNs::Renderer<T, bucketT>::RendererBase::FinalRasW;
|
||||
using EmberNs::Renderer<T, bucketT>::RendererBase::FinalRasH;
|
||||
using EmberNs::Renderer<T, bucketT>::RendererBase::SuperRasW;
|
||||
using EmberNs::Renderer<T, bucketT>::RendererBase::SuperRasH;
|
||||
using EmberNs::Renderer<T, bucketT>::RendererBase::SuperSize;
|
||||
using EmberNs::Renderer<T, bucketT>::RendererBase::BytesPerChannel;
|
||||
using EmberNs::Renderer<T, bucketT>::RendererBase::TemporalSamples;
|
||||
using EmberNs::Renderer<T, bucketT>::RendererBase::ItersPerTemporalSample;
|
||||
using EmberNs::Renderer<T, bucketT>::RendererBase::FuseCount;
|
||||
using EmberNs::Renderer<T, bucketT>::RendererBase::DensityFilterOffset;
|
||||
using EmberNs::Renderer<T, bucketT>::RendererBase::m_ProgressParameter;
|
||||
using EmberNs::Renderer<T, bucketT>::RendererBase::m_YAxisUp;
|
||||
using EmberNs::Renderer<T, bucketT>::RendererBase::m_LockAccum;
|
||||
using EmberNs::Renderer<T, bucketT>::RendererBase::m_Abort;
|
||||
using EmberNs::Renderer<T, bucketT>::RendererBase::m_NumChannels;
|
||||
using EmberNs::Renderer<T, bucketT>::RendererBase::m_LastIter;
|
||||
using EmberNs::Renderer<T, bucketT>::RendererBase::m_LastIterPercent;
|
||||
using EmberNs::Renderer<T, bucketT>::RendererBase::m_Stats;
|
||||
using EmberNs::Renderer<T, bucketT>::RendererBase::m_Callback;
|
||||
using EmberNs::Renderer<T, bucketT>::RendererBase::m_Rand;
|
||||
using EmberNs::Renderer<T, bucketT>::RendererBase::m_RenderTimer;
|
||||
using EmberNs::Renderer<T, bucketT>::RendererBase::m_IterTimer;
|
||||
using EmberNs::Renderer<T, bucketT>::RendererBase::m_ProgressTimer;
|
||||
using EmberNs::Renderer<T, bucketT>::RendererBase::EmberReport::AddToReport;
|
||||
using EmberNs::Renderer<T, bucketT>::RendererBase::m_ResizeCs;
|
||||
using EmberNs::Renderer<T, bucketT>::RendererBase::m_ProcessAction;
|
||||
using EmberNs::Renderer<T, bucketT>::m_RotMat;
|
||||
using EmberNs::Renderer<T, bucketT>::m_Ember;
|
||||
using EmberNs::Renderer<T, bucketT>::m_Csa;
|
||||
using EmberNs::Renderer<T, bucketT>::m_CurvesSet;
|
||||
using EmberNs::Renderer<T, bucketT>::CenterX;
|
||||
using EmberNs::Renderer<T, bucketT>::CenterY;
|
||||
using EmberNs::Renderer<T, bucketT>::K1;
|
||||
using EmberNs::Renderer<T, bucketT>::K2;
|
||||
using EmberNs::Renderer<T, bucketT>::Supersample;
|
||||
using EmberNs::Renderer<T, bucketT>::HighlightPower;
|
||||
using EmberNs::Renderer<T, bucketT>::HistBuckets;
|
||||
using EmberNs::Renderer<T, bucketT>::AccumulatorBuckets;
|
||||
using EmberNs::Renderer<T, bucketT>::GetDensityFilter;
|
||||
using EmberNs::Renderer<T, bucketT>::GetSpatialFilter;
|
||||
using EmberNs::Renderer<T, bucketT>::CoordMap;
|
||||
using EmberNs::Renderer<T, bucketT>::XformDistributions;
|
||||
using EmberNs::Renderer<T, bucketT>::XformDistributionsSize;
|
||||
using EmberNs::Renderer<T, bucketT>::m_Dmap;
|
||||
using EmberNs::Renderer<T, bucketT>::m_DensityFilter;
|
||||
using EmberNs::Renderer<T, bucketT>::m_SpatialFilter;
|
||||
using EmberNs::Renderer<T, bucketT>::RendererBase::Abort;
|
||||
using EmberNs::Renderer<T, bucketT>::RendererBase::EarlyClip;
|
||||
using EmberNs::Renderer<T, bucketT>::RendererBase::Transparency;
|
||||
using EmberNs::Renderer<T, bucketT>::RendererBase::EnterResize;
|
||||
using EmberNs::Renderer<T, bucketT>::RendererBase::LeaveResize;
|
||||
using EmberNs::Renderer<T, bucketT>::RendererBase::FinalRasW;
|
||||
using EmberNs::Renderer<T, bucketT>::RendererBase::FinalRasH;
|
||||
using EmberNs::Renderer<T, bucketT>::RendererBase::SuperRasW;
|
||||
using EmberNs::Renderer<T, bucketT>::RendererBase::SuperRasH;
|
||||
using EmberNs::Renderer<T, bucketT>::RendererBase::SuperSize;
|
||||
using EmberNs::Renderer<T, bucketT>::RendererBase::BytesPerChannel;
|
||||
using EmberNs::Renderer<T, bucketT>::RendererBase::TemporalSamples;
|
||||
using EmberNs::Renderer<T, bucketT>::RendererBase::ItersPerTemporalSample;
|
||||
using EmberNs::Renderer<T, bucketT>::RendererBase::FuseCount;
|
||||
using EmberNs::Renderer<T, bucketT>::RendererBase::DensityFilterOffset;
|
||||
using EmberNs::Renderer<T, bucketT>::RendererBase::m_ProgressParameter;
|
||||
using EmberNs::Renderer<T, bucketT>::RendererBase::m_YAxisUp;
|
||||
using EmberNs::Renderer<T, bucketT>::RendererBase::m_LockAccum;
|
||||
using EmberNs::Renderer<T, bucketT>::RendererBase::m_Abort;
|
||||
using EmberNs::Renderer<T, bucketT>::RendererBase::m_NumChannels;
|
||||
using EmberNs::Renderer<T, bucketT>::RendererBase::m_LastIter;
|
||||
using EmberNs::Renderer<T, bucketT>::RendererBase::m_LastIterPercent;
|
||||
using EmberNs::Renderer<T, bucketT>::RendererBase::m_Stats;
|
||||
using EmberNs::Renderer<T, bucketT>::RendererBase::m_Callback;
|
||||
using EmberNs::Renderer<T, bucketT>::RendererBase::m_Rand;
|
||||
using EmberNs::Renderer<T, bucketT>::RendererBase::m_RenderTimer;
|
||||
using EmberNs::Renderer<T, bucketT>::RendererBase::m_IterTimer;
|
||||
using EmberNs::Renderer<T, bucketT>::RendererBase::m_ProgressTimer;
|
||||
using EmberNs::Renderer<T, bucketT>::RendererBase::EmberReport::AddToReport;
|
||||
using EmberNs::Renderer<T, bucketT>::RendererBase::m_ResizeCs;
|
||||
using EmberNs::Renderer<T, bucketT>::RendererBase::m_ProcessAction;
|
||||
using EmberNs::Renderer<T, bucketT>::m_RotMat;
|
||||
using EmberNs::Renderer<T, bucketT>::m_Ember;
|
||||
using EmberNs::Renderer<T, bucketT>::m_Csa;
|
||||
using EmberNs::Renderer<T, bucketT>::m_CurvesSet;
|
||||
using EmberNs::Renderer<T, bucketT>::CenterX;
|
||||
using EmberNs::Renderer<T, bucketT>::CenterY;
|
||||
using EmberNs::Renderer<T, bucketT>::K1;
|
||||
using EmberNs::Renderer<T, bucketT>::K2;
|
||||
using EmberNs::Renderer<T, bucketT>::Supersample;
|
||||
using EmberNs::Renderer<T, bucketT>::HighlightPower;
|
||||
using EmberNs::Renderer<T, bucketT>::HistBuckets;
|
||||
using EmberNs::Renderer<T, bucketT>::AccumulatorBuckets;
|
||||
using EmberNs::Renderer<T, bucketT>::GetDensityFilter;
|
||||
using EmberNs::Renderer<T, bucketT>::GetSpatialFilter;
|
||||
using EmberNs::Renderer<T, bucketT>::CoordMap;
|
||||
using EmberNs::Renderer<T, bucketT>::XformDistributions;
|
||||
using EmberNs::Renderer<T, bucketT>::XformDistributionsSize;
|
||||
using EmberNs::Renderer<T, bucketT>::m_Dmap;
|
||||
using EmberNs::Renderer<T, bucketT>::m_DensityFilter;
|
||||
using EmberNs::Renderer<T, bucketT>::m_SpatialFilter;
|
||||
|
||||
public:
|
||||
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_XformsBufferName;
|
||||
string m_ParVarsBufferName;
|
||||
string m_GlobalSharedBufferName;
|
||||
string m_SeedsBufferName;
|
||||
string m_DistBufferName;
|
||||
string m_CarToRasBufferName;
|
||||
@ -233,6 +234,7 @@ private:
|
||||
DEOpenCLKernelCreator m_DEOpenCLKernelCreator;
|
||||
FinalAccumOpenCLKernelCreator m_FinalAccumOpenCLKernelCreator;
|
||||
pair<string, vector<T>> m_Params;
|
||||
pair<string, vector<T>> m_GlobalShared;
|
||||
vector<unique_ptr<RendererClDevice>> m_Devices;
|
||||
Ember<T> m_LastBuiltEmber;
|
||||
};
|
||||
|
@ -13,7 +13,6 @@ namespace EmberCLns
|
||||
/// <param name="shared">True if shared with OpenGL, else false.</param>
|
||||
/// <returns>True if success, else false.</returns>
|
||||
RendererClDevice::RendererClDevice(bool doublePrec, size_t platform, size_t device, bool shared)
|
||||
: m_Info(OpenCLInfo::Instance())
|
||||
{
|
||||
m_Init = false;
|
||||
m_Shared = shared;
|
||||
@ -22,6 +21,7 @@ RendererClDevice::RendererClDevice(bool doublePrec, size_t platform, size_t devi
|
||||
m_Calls = 0;
|
||||
m_PlatformIndex = platform;
|
||||
m_DeviceIndex = device;
|
||||
m_Info = OpenCLInfo::Instance();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -40,7 +40,7 @@ bool RendererClDevice::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_Init = true;
|
||||
}
|
||||
|
@ -37,6 +37,6 @@ private:
|
||||
size_t m_WarpSize;
|
||||
size_t m_PlatformIndex;
|
||||
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;
|
||||
|
||||
strips = uint(ceil(memRequired / memAvailable));
|
||||
|
||||
return strips;
|
||||
}
|
||||
|
||||
@ -210,7 +209,6 @@ static T NextLowestEvenDiv(T numerator, T denominator)
|
||||
{
|
||||
T result = 1;
|
||||
T numDiv2 = numerator / 2;
|
||||
|
||||
denominator--;
|
||||
|
||||
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)
|
||||
{
|
||||
vector<pair<size_t, size_t>> vec;
|
||||
OpenCLInfo& info = OpenCLInfo::Instance();
|
||||
auto& devices = info.DeviceIndices();
|
||||
|
||||
auto info = OpenCLInfo::Instance();
|
||||
auto& devices = info->DeviceIndices();
|
||||
vec.reserve(selectedDevices.size());
|
||||
|
||||
for (size_t i = 0; i < selectedDevices.size(); i++)
|
||||
@ -400,10 +397,10 @@ static vector<unique_ptr<Renderer<T, float>>> CreateRenderers(eRendererType rend
|
||||
/// <returns>True if all rendering was successful, else false.</returns>
|
||||
template <typename T>
|
||||
static bool StripsRender(RendererBase* renderer, Ember<T>& ember, vector<byte>& finalImage, double time, size_t strips, bool yAxisUp,
|
||||
std::function<void(size_t strip)> perStripStart,
|
||||
std::function<void(size_t strip)> perStripFinish,
|
||||
std::function<void(size_t strip)> perStripError,
|
||||
std::function<void(Ember<T>& finalEmber)> allStripsFinished)
|
||||
std::function<void(size_t strip)> perStripStart,
|
||||
std::function<void(size_t strip)> perStripFinish,
|
||||
std::function<void(size_t strip)> perStripError,
|
||||
std::function<void(Ember<T>& finalEmber)> allStripsFinished)
|
||||
{
|
||||
bool success = false;
|
||||
size_t origHeight, realHeight = ember.m_FinalRasH;
|
||||
@ -412,7 +409,6 @@ static bool StripsRender(RendererBase* renderer, Ember<T>& ember, vector<byte>&
|
||||
T zoomScale = pow(T(2), ember.m_Zoom);
|
||||
T centerBase = centerY - ((strips - 1) * floatStripH) / (2 * ember.m_PixelsPerUnit * zoomScale);
|
||||
vector<QTIsaac<ISAAC_SIZE, ISAAC_INT>> randVec;
|
||||
|
||||
ember.m_Quality *= strips;
|
||||
ember.m_FinalRasH = size_t(ceil(floatStripH));
|
||||
|
||||
@ -469,7 +465,6 @@ static bool StripsRender(RendererBase* renderer, Ember<T>& ember, vector<byte>&
|
||||
allStripsFinished(ember);
|
||||
|
||||
Memset(finalImage);
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
@ -485,9 +480,9 @@ static bool StripsRender(RendererBase* renderer, Ember<T>& ember, vector<byte>&
|
||||
/// <param name="stripError3">Called if for any reason the number of strips used will differ from the value passed in</param>
|
||||
/// <returns>The actual number of strips that will be used</returns>
|
||||
static size_t VerifyStrips(size_t height, size_t strips,
|
||||
std::function<void(const string& s)> stripError1,
|
||||
std::function<void(const string& s)> stripError2,
|
||||
std::function<void(const string& s)> stripError3)
|
||||
std::function<void(const string& s)> stripError1,
|
||||
std::function<void(const string& s)> stripError2,
|
||||
std::function<void(const string& s)> stripError3)
|
||||
{
|
||||
ostringstream os;
|
||||
|
||||
@ -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 << ".";
|
||||
stripError2(os.str()); os.str("");
|
||||
|
||||
strips = NextHighestEvenDiv(height, strips);
|
||||
|
||||
if (strips == 1)//No higher divisor, check for a lower one.
|
||||
|
@ -10,28 +10,28 @@
|
||||
template <typename T>
|
||||
void SetDefaultTestValues(Ember<T>& ember)
|
||||
{
|
||||
ember.m_Time = 0.0;
|
||||
ember.m_Interp = EMBER_INTERP_LINEAR;
|
||||
ember.m_PaletteInterp = INTERP_HSV;
|
||||
ember.m_Background[0] = 0;
|
||||
ember.m_Background[1] = 0;
|
||||
ember.m_Background[2] = 0;
|
||||
ember.m_Background[3] = 255;
|
||||
ember.m_CenterX = 0;
|
||||
ember.m_CenterY = 0;
|
||||
ember.m_Rotate = 0;
|
||||
ember.m_PixelsPerUnit = 64;
|
||||
ember.m_FinalRasW = 128;
|
||||
ember.m_FinalRasH = 128;
|
||||
ember.m_Supersample = 1;
|
||||
ember.m_SpatialFilterRadius = T(0.5);
|
||||
ember.m_SpatialFilterType = GAUSSIAN_SPATIAL_FILTER;
|
||||
ember.m_Zoom = 0;
|
||||
ember.m_Quality = 1;
|
||||
ember.m_TemporalSamples = 1;
|
||||
ember.m_MaxRadDE = 0;
|
||||
ember.m_MinRadDE = 0;
|
||||
ember.m_CurveDE = T(0.6);
|
||||
ember.m_Time = 0.0;
|
||||
ember.m_Interp = EMBER_INTERP_LINEAR;
|
||||
ember.m_PaletteInterp = INTERP_HSV;
|
||||
ember.m_Background[0] = 0;
|
||||
ember.m_Background[1] = 0;
|
||||
ember.m_Background[2] = 0;
|
||||
ember.m_Background[3] = 255;
|
||||
ember.m_CenterX = 0;
|
||||
ember.m_CenterY = 0;
|
||||
ember.m_Rotate = 0;
|
||||
ember.m_PixelsPerUnit = 64;
|
||||
ember.m_FinalRasW = 128;
|
||||
ember.m_FinalRasH = 128;
|
||||
ember.m_Supersample = 1;
|
||||
ember.m_SpatialFilterRadius = T(0.5);
|
||||
ember.m_SpatialFilterType = GAUSSIAN_SPATIAL_FILTER;
|
||||
ember.m_Zoom = 0;
|
||||
ember.m_Quality = 1;
|
||||
ember.m_TemporalSamples = 1;
|
||||
ember.m_MaxRadDE = 0;
|
||||
ember.m_MinRadDE = 0;
|
||||
ember.m_CurveDE = T(0.6);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -43,8 +43,7 @@ void SetDefaultTestValues(Ember<T>& ember)
|
||||
template <typename T>
|
||||
bool EmberGenome(EmberOptions& opt)
|
||||
{
|
||||
OpenCLInfo& info(OpenCLInfo::Instance());
|
||||
|
||||
auto info = OpenCLInfo::Instance();
|
||||
std::cout.imbue(std::locale(""));
|
||||
|
||||
if (opt.DumpArgs())
|
||||
@ -53,7 +52,7 @@ bool EmberGenome(EmberOptions& opt)
|
||||
if (opt.OpenCLInfo())
|
||||
{
|
||||
cerr << "\nOpenCL Info: " << endl;
|
||||
cerr << info.DumpInfo();
|
||||
cerr << info->DumpInfo();
|
||||
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));
|
||||
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();
|
||||
|
||||
os.imbue(std::locale(""));
|
||||
os2.imbue(std::locale(""));
|
||||
|
||||
@ -112,15 +110,14 @@ bool EmberGenome(EmberOptions& opt)
|
||||
{
|
||||
for (auto& device : devices)
|
||||
{
|
||||
cerr << "Platform: " << info.PlatformName(device.first) << endl;
|
||||
cerr << "Device: " << info.DeviceName(device.first, device.second) << endl;
|
||||
cerr << "Platform: " << info->PlatformName(device.first) << 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<T, float> tools(opt.PalettePath(), CreateRenderer<T>(opt.EmberCL() ? OPENCL_RENDERER : CPU_RENDERER, devices, false, 0, emberReport2));
|
||||
|
||||
tools.SetSpinParams(!opt.UnsmoothEdge(),
|
||||
T(opt.Stagger()),
|
||||
T(opt.OffsetX()),
|
||||
@ -217,7 +214,6 @@ bool EmberGenome(EmberOptions& opt)
|
||||
bool doStrip = opt.Strip() != "";
|
||||
bool doCross0 = opt.Cross0() != "";
|
||||
bool doCross1 = opt.Cross1() != "";
|
||||
|
||||
count += (doMutate ? 1 : 0);
|
||||
count += (doInter ? 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, result2, frame , blend );
|
||||
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(result2, 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, result2, frame , 0, blend );
|
||||
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(result2, 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++)
|
||||
{
|
||||
T oldX, oldY;
|
||||
|
||||
embers[i].DeleteMotionElements();
|
||||
|
||||
oldX = embers[i].m_CenterX;
|
||||
oldY = embers[i].m_CenterY;
|
||||
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) /
|
||||
(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));
|
||||
|
||||
tools.RotateOldCenterBy(embers[i].m_CenterX, embers[i].m_CenterY, oldX, oldY, embers[i].m_Rotate);
|
||||
|
||||
if (pTemplate)
|
||||
@ -602,10 +592,8 @@ bool EmberGenome(EmberOptions& opt)
|
||||
{
|
||||
i0 = rand.Rand() % embers.size();
|
||||
i1 = rand.Rand() % embers2.size();
|
||||
|
||||
selp0 = embers[i0];
|
||||
selp1 = embers2[i1];
|
||||
|
||||
aselp0 = &selp0;
|
||||
aselp1 = &selp1;
|
||||
|
||||
@ -711,6 +699,7 @@ bool EmberGenome(EmberOptions& opt)
|
||||
tot += (finalImage[i] + finalImage[i + 1] + finalImage[i + 2]);
|
||||
|
||||
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++;
|
||||
}
|
||||
|
||||
@ -723,10 +712,11 @@ bool EmberGenome(EmberOptions& opt)
|
||||
|
||||
orig.Clear();
|
||||
count++;
|
||||
} while ((avgPix < opt.AvgThresh() ||
|
||||
fractionBlack < opt.BlackThresh() ||
|
||||
fractionWhite > opt.WhiteLimit()) &&
|
||||
count < opt.Tries());
|
||||
}
|
||||
while ((avgPix < opt.AvgThresh() ||
|
||||
fractionBlack < opt.BlackThresh() ||
|
||||
fractionWhite > opt.WhiteLimit()) &&
|
||||
count < opt.Tries());
|
||||
|
||||
if (count == opt.Tries())
|
||||
cerr << "Warning: reached maximum attempts, giving up." << endl;
|
||||
@ -767,7 +757,6 @@ int _tmain(int argc, _TCHAR* argv[])
|
||||
{
|
||||
bool b = false;
|
||||
EmberOptions opt;
|
||||
|
||||
//Required for large allocs, else GPU memory usage will be severely limited to small sizes.
|
||||
//This must be done in the application and not in the EmberCL DLL.
|
||||
#ifdef WIN32
|
||||
@ -778,23 +767,23 @@ int _tmain(int argc, _TCHAR* argv[])
|
||||
|
||||
if (!opt.Populate(argc, argv, OPT_USE_GENOME))
|
||||
{
|
||||
|
||||
#ifdef DO_DOUBLE
|
||||
|
||||
if (opt.Bits() == 64)
|
||||
{
|
||||
b = EmberGenome<double>(opt);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
if (opt.Bits() == 33)
|
||||
{
|
||||
b = EmberGenome<float>(opt);
|
||||
}
|
||||
else if (opt.Bits() == 32)
|
||||
{
|
||||
cerr << "Bits 32/int histogram no longer supported. Using bits == 33 (float)." << endl;
|
||||
b = EmberGenome<float>(opt);
|
||||
}
|
||||
if (opt.Bits() == 33)
|
||||
{
|
||||
b = EmberGenome<float>(opt);
|
||||
}
|
||||
else if (opt.Bits() == 32)
|
||||
{
|
||||
cerr << "Bits 32/int histogram no longer supported. Using bits == 33 (float)." << endl;
|
||||
b = EmberGenome<float>(opt);
|
||||
}
|
||||
}
|
||||
|
||||
return b ? 0 : 1;
|
||||
|
@ -2,6 +2,8 @@
|
||||
#include "EmberRender.h"
|
||||
#include "JpegUtils.h"
|
||||
|
||||
//template <class OpenCLInfo> weak_ptr<OpenCLInfo> Singleton<OpenCLInfo>::m_Instance = weak_ptr<OpenCLInfo>();
|
||||
|
||||
/// <summary>
|
||||
/// The core of the EmberRender.exe program.
|
||||
/// Template argument expected to be float or double.
|
||||
@ -11,8 +13,7 @@
|
||||
template <typename T>
|
||||
bool EmberRender(EmberOptions& opt)
|
||||
{
|
||||
EmberCLns::OpenCLInfo& info(EmberCLns::OpenCLInfo::Instance());
|
||||
|
||||
auto info = EmberCLns::OpenCLInfo::Instance();
|
||||
std::cout.imbue(std::locale(""));
|
||||
|
||||
if (opt.DumpArgs())
|
||||
@ -21,7 +22,7 @@ bool EmberRender(EmberOptions& opt)
|
||||
if (opt.OpenCLInfo())
|
||||
{
|
||||
cout << "\nOpenCL Info: " << endl;
|
||||
cout << info.DumpInfo();
|
||||
cout << info->DumpInfo();
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -89,8 +90,8 @@ bool EmberRender(EmberOptions& opt)
|
||||
{
|
||||
for (auto& device : devices)
|
||||
{
|
||||
cout << "Platform: " << info.PlatformName(device.first) << endl;
|
||||
cout << "Device: " << info.DeviceName(device.first, device.second) << endl;
|
||||
cout << "Platform: " << info->PlatformName(device.first) << endl;
|
||||
cout << "Device: " << info->DeviceName(device.first, device.second) << endl;
|
||||
}
|
||||
}
|
||||
|
||||
@ -108,9 +109,9 @@ bool EmberRender(EmberOptions& opt)
|
||||
}
|
||||
|
||||
if (opt.Format() != "jpg" &&
|
||||
opt.Format() != "png" &&
|
||||
opt.Format() != "ppm" &&
|
||||
opt.Format() != "bmp")
|
||||
opt.Format() != "png" &&
|
||||
opt.Format() != "ppm" &&
|
||||
opt.Format() != "bmp")
|
||||
{
|
||||
cout << "Format must be jpg, png, ppm, or bmp not " << opt.Format() << ". Setting to jpg." << endl;
|
||||
}
|
||||
@ -189,7 +190,7 @@ bool EmberRender(EmberOptions& opt)
|
||||
|
||||
//Cast to double in case the value exceeds 2^32.
|
||||
double imageMem = double(renderer->NumChannels()) * double(embers[i].m_FinalRasW)
|
||||
* double(embers[i].m_FinalRasH) * double(renderer->BytesPerChannel());
|
||||
* double(embers[i].m_FinalRasH) * double(renderer->BytesPerChannel());
|
||||
double maxMem = pow(2.0, double((sizeof(void*) * 8) - 1));
|
||||
|
||||
if (imageMem > maxMem)//Ensure the max amount of memory for a process is not exceeded.
|
||||
@ -217,10 +218,9 @@ bool EmberRender(EmberOptions& opt)
|
||||
}
|
||||
|
||||
strips = VerifyStrips(embers[i].m_FinalRasH, strips,
|
||||
[&](const string& s) { cout << s << endl; },//Greater than height.
|
||||
[&](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; }, //Greater than height.
|
||||
[&](const string & s) { cout << s << endl; }, //Mod height != 0.
|
||||
[&](const string & s) { cout << s << endl; }); //Final strips value to be set.
|
||||
//For testing incremental renderer.
|
||||
//int sb = 1;
|
||||
//bool resume = false, success = false;
|
||||
@ -231,9 +231,8 @@ bool EmberRender(EmberOptions& opt)
|
||||
// resume = true;
|
||||
//}
|
||||
//while (success && renderer->ProcessState() != ACCUM_DONE);
|
||||
|
||||
StripsRender<T>(renderer.get(), embers[i], finalImage, 0, strips, opt.YAxisUp(),
|
||||
[&](size_t strip)//Pre strip.
|
||||
[&](size_t strip)//Pre strip.
|
||||
{
|
||||
if (opt.Verbose() && (strips > 1) && strip > 0)
|
||||
cout << endl;
|
||||
@ -267,7 +266,6 @@ bool EmberRender(EmberOptions& opt)
|
||||
else
|
||||
{
|
||||
ostringstream fnstream;
|
||||
|
||||
fnstream << inputPath << opt.Prefix() << setfill('0') << setw(padding) << i << opt.Suffix() << "." << opt.Format();
|
||||
filename = fnstream.str();
|
||||
}
|
||||
@ -278,9 +276,10 @@ bool EmberRender(EmberOptions& opt)
|
||||
comments = renderer->ImageComments(stats, opt.PrintEditDepth(), opt.IntPalette(), opt.HexPalette());
|
||||
os.str("");
|
||||
os << comments.m_NumIters << " / " << iterCount << " (" << std::fixed << std::setprecision(2) << ((double(stats.m_Iters) / double(iterCount)) * 100) << "%)";
|
||||
|
||||
VerbosePrint("\nIters ran/requested: " + os.str());
|
||||
|
||||
if (!opt.EmberCL()) VerbosePrint("Bad values: " << stats.m_Badvals);
|
||||
|
||||
VerbosePrint("Render time: " + t.Format(stats.m_RenderMs));
|
||||
VerbosePrint("Pure iter time: " + t.Format(stats.m_IterMs));
|
||||
VerbosePrint("Iters/sec: " << size_t(stats.m_Iters / (stats.m_IterMs / 1000.0)) << endl);
|
||||
@ -310,11 +309,11 @@ bool EmberRender(EmberOptions& opt)
|
||||
if (auto rendererCL = dynamic_cast<RendererCL<T, float>*>(renderer.get()))
|
||||
{
|
||||
cout << "Iteration kernel:\n" <<
|
||||
rendererCL->IterKernel() << "\n\n" <<
|
||||
"Density filter kernel:\n" <<
|
||||
rendererCL->DEKernel() << "\n\n" <<
|
||||
"Final accumulation kernel:\n" <<
|
||||
rendererCL->FinalAccumKernel() << endl;
|
||||
rendererCL->IterKernel() << "\n\n" <<
|
||||
"Density filter kernel:\n" <<
|
||||
rendererCL->DEKernel() << "\n\n" <<
|
||||
"Final accumulation kernel:\n" <<
|
||||
rendererCL->FinalAccumKernel() << endl;
|
||||
}
|
||||
}
|
||||
|
||||
@ -322,7 +321,6 @@ bool EmberRender(EmberOptions& opt)
|
||||
}
|
||||
|
||||
t.Toc("\nFinished in: ", true);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -336,7 +334,6 @@ int _tmain(int argc, _TCHAR* argv[])
|
||||
{
|
||||
bool b = false;
|
||||
EmberOptions opt;
|
||||
|
||||
//Required for large allocs, else GPU memory usage will be severely limited to small sizes.
|
||||
//This must be done in the application and not in the EmberCL DLL.
|
||||
#ifdef WIN32
|
||||
@ -348,23 +345,23 @@ int _tmain(int argc, _TCHAR* argv[])
|
||||
|
||||
if (!opt.Populate(argc, argv, OPT_USE_RENDER))
|
||||
{
|
||||
|
||||
#ifdef DO_DOUBLE
|
||||
|
||||
if (opt.Bits() == 64)
|
||||
{
|
||||
b = EmberRender<double>(opt);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
if (opt.Bits() == 33)
|
||||
{
|
||||
b = EmberRender<float>(opt);
|
||||
}
|
||||
else if (opt.Bits() == 32)
|
||||
{
|
||||
cout << "Bits 32/int histogram no longer supported. Using bits == 33 (float)." << endl;
|
||||
b = EmberRender<float>(opt);
|
||||
}
|
||||
if (opt.Bits() == 33)
|
||||
{
|
||||
b = EmberRender<float>(opt);
|
||||
}
|
||||
else if (opt.Bits() == 32)
|
||||
{
|
||||
cout << "Bits 32/int histogram no longer supported. Using bits == 33 (float)." << endl;
|
||||
b = EmberRender<float>(opt);
|
||||
}
|
||||
}
|
||||
|
||||
return b ? 0 : 1;
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -11,17 +11,15 @@
|
||||
/// <param name="p">The parent widget</param>
|
||||
/// <param name="f">The window flags. Default: 0.</param>
|
||||
FractoriumFinalRenderDialog::FractoriumFinalRenderDialog(FractoriumSettings* settings, QWidget* p, Qt::WindowFlags f)
|
||||
: QDialog(p, f),
|
||||
m_Info(OpenCLInfo::Instance())
|
||||
{
|
||||
: QDialog(p, f)
|
||||
{
|
||||
ui.setupUi(this);
|
||||
|
||||
int row = 0, spinHeight = 20;
|
||||
uint i;
|
||||
double dmax = numeric_limits<double>::max();
|
||||
QTableWidget* table = ui.FinalRenderParamsTable;
|
||||
QTableWidgetItem* item = nullptr;
|
||||
|
||||
m_Info = OpenCLInfo::Instance();
|
||||
m_Fractorium = qobject_cast<Fractorium*>(p);
|
||||
m_Settings = settings;
|
||||
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.FinalRenderScaleHeightRadioButton, SIGNAL(toggled(bool)), this, SLOT(OnScaleRadioButtonChanged(bool)), 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_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);
|
||||
@ -48,46 +45,37 @@ FractoriumFinalRenderDialog::FractoriumFinalRenderDialog(FractoriumSettings* set
|
||||
m_HeightScaleSpin->setSuffix(" ( )");
|
||||
m_WidthScaleSpin->SmallStep(0.001);
|
||||
m_HeightScaleSpin->SmallStep(0.001);
|
||||
|
||||
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<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_StripsSpin, spinHeight, 1, 64, 1, SIGNAL(valueChanged(int)), SLOT(OnStripsChanged(int)), true, 1, 1, 1);
|
||||
|
||||
m_MemoryCellIndex = row++;//Memory usage.
|
||||
m_ItersCellIndex = row++;//Iters.
|
||||
m_PathCellIndex = row;
|
||||
|
||||
QStringList comboList;
|
||||
|
||||
comboList.append("jpg");
|
||||
comboList.append("png");
|
||||
|
||||
m_Tbcw = new TwoButtonComboWidget("...", "Open", comboList, 22, 40, 22, table);
|
||||
table->setCellWidget(row, 1, m_Tbcw);
|
||||
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_Button2, SIGNAL(clicked(bool)), this, SLOT(OnShowFolderButtonClicked(bool)), Qt::QueuedConnection);
|
||||
connect(m_Tbcw->m_Combo, SIGNAL(currentIndexChanged(int)), this, SLOT(OnExtIndexChanged(int)), Qt::QueuedConnection);
|
||||
|
||||
m_PrefixEdit = new QLineEdit(table);
|
||||
table->setCellWidget(row++, 1, m_PrefixEdit);
|
||||
|
||||
m_SuffixEdit = new QLineEdit(table);
|
||||
table->setCellWidget(row++, 1, m_SuffixEdit);
|
||||
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);
|
||||
|
||||
ui.FinalRenderStartButton->disconnect(SIGNAL(clicked(bool)));
|
||||
connect(ui.FinalRenderStartButton, SIGNAL(clicked(bool)), this, SLOT(OnRenderClicked(bool)), Qt::QueuedConnection);
|
||||
connect(ui.FinalRenderStopButton, SIGNAL(clicked(bool)), this, SLOT(OnCancelRenderClicked(bool)), Qt::QueuedConnection);
|
||||
|
||||
table = ui.FinalRenderDeviceTable;
|
||||
table->clearContents();
|
||||
table->setRowCount(0);
|
||||
|
||||
if (m_Info.Ok() && !m_Info.Devices().empty())
|
||||
if (m_Info->Ok() && !m_Info->Devices().empty())
|
||||
{
|
||||
SetupDeviceTable(table, m_Settings->FinalDevices());
|
||||
|
||||
@ -124,28 +112,25 @@ FractoriumFinalRenderDialog::FractoriumFinalRenderDialog(FractoriumSettings* set
|
||||
ui.FinalRenderThreadPriorityComboBox->setCurrentIndex(tpc);
|
||||
else
|
||||
ui.FinalRenderThreadPriorityComboBox->setCurrentIndex(Clamp<int>(m_Settings->FinalThreadPriority() / 25, 0, tpc));
|
||||
#endif
|
||||
|
||||
#endif
|
||||
m_QualitySpin->setValue(m_Settings->FinalQuality());
|
||||
m_TemporalSamplesSpin->setValue(m_Settings->FinalTemporalSamples());
|
||||
m_SupersampleSpin->setValue(m_Settings->FinalSupersample());
|
||||
m_StripsSpin->setValue(m_Settings->FinalStrips());
|
||||
|
||||
Scale(eScaleType(m_Settings->FinalScale()));
|
||||
|
||||
if (m_Settings->FinalExt() == "jpg")
|
||||
m_Tbcw->m_Combo->setCurrentIndex(0);
|
||||
else
|
||||
m_Tbcw->m_Combo->setCurrentIndex(1);
|
||||
|
||||
|
||||
//Explicitly call these to enable/disable the appropriate controls.
|
||||
OnOpenCLCheckBoxStateChanged(ui.FinalRenderOpenCLCheckBox->isChecked());
|
||||
OnDoAllCheckBoxStateChanged(ui.FinalRenderDoAllCheckBox->isChecked());
|
||||
OnDoSequenceCheckBoxStateChanged(ui.FinalRenderDoSequenceCheckBox->isChecked());
|
||||
|
||||
QSize s = size();
|
||||
int desktopHeight = qApp->desktop()->availableGeometry().height();
|
||||
|
||||
s.setHeight(std::min(s.height(), int(double(desktopHeight * 0.90))));
|
||||
setGeometry(QStyle::alignedRect(Qt::LeftToRight, Qt::AlignCenter, s, qApp->desktop()->availableGeometry()));
|
||||
ui.FinalRenderThreadHorizontalLayout->setAlignment(Qt::AlignLeft);
|
||||
@ -153,7 +138,6 @@ FractoriumFinalRenderDialog::FractoriumFinalRenderDialog(FractoriumSettings* set
|
||||
ui.FinalRenderThreadHorizontalLayout->setAlignment(ui.FinalRenderThreadPriorityLabel, Qt::AlignLeft);
|
||||
ui.FinalRenderThreadHorizontalLayout->setAlignment(ui.FinalRenderThreadPriorityComboBox, Qt::AlignLeft);
|
||||
QWidget* w = SetTabOrder(this, ui.FinalRenderEarlyClipCheckBox, ui.FinalRenderYAxisUpCheckBox);
|
||||
|
||||
//Update these with new controls.
|
||||
w = SetTabOrder(this, w, ui.FinalRenderTransparencyCheckBox);
|
||||
w = SetTabOrder(this, w, ui.FinalRenderOpenCLCheckBox);
|
||||
@ -238,7 +222,6 @@ QList<QVariant> FractoriumFinalRenderDialog::Devices() { return DeviceTableToSet
|
||||
FinalRenderGuiState FractoriumFinalRenderDialog::State()
|
||||
{
|
||||
FinalRenderGuiState state;
|
||||
|
||||
state.m_EarlyClip = EarlyClip();
|
||||
state.m_YAxisUp = YAxisUp();
|
||||
state.m_Transparency = Transparency();
|
||||
@ -262,7 +245,6 @@ FinalRenderGuiState FractoriumFinalRenderDialog::State()
|
||||
state.m_TemporalSamples = TemporalSamples();
|
||||
state.m_Supersample = Supersample();
|
||||
state.m_Strips = Strips();
|
||||
|
||||
return state;
|
||||
}
|
||||
|
||||
@ -346,7 +328,6 @@ void FractoriumFinalRenderDialog::OnTransparencyCheckBoxStateChanged(int state)
|
||||
void FractoriumFinalRenderDialog::OnOpenCLCheckBoxStateChanged(int state)
|
||||
{
|
||||
bool checked = state == Qt::Checked;
|
||||
|
||||
ui.FinalRenderDeviceTable->setEnabled(checked);
|
||||
ui.FinalRenderThreadCountSpin->setEnabled(!checked);
|
||||
ui.FinalRenderThreadPriorityLabel->setEnabled(!checked);
|
||||
@ -387,7 +368,6 @@ void FractoriumFinalRenderDialog::OnDoAllCheckBoxStateChanged(int state)
|
||||
void FractoriumFinalRenderDialog::OnDoSequenceCheckBoxStateChanged(int state)
|
||||
{
|
||||
bool checked = ui.FinalRenderDoSequenceCheckBox->isChecked();
|
||||
|
||||
m_TemporalSamplesSpin->setEnabled(checked);
|
||||
|
||||
if (checked)
|
||||
@ -428,7 +408,7 @@ void FractoriumFinalRenderDialog::OnApplyAllCheckBoxStateChanged(int state)
|
||||
void FractoriumFinalRenderDialog::OnWidthScaleChanged(double d)
|
||||
{
|
||||
if (ui.FinalRenderKeepAspectCheckBox->isChecked() && m_Controller.get())
|
||||
m_HeightScaleSpin->SetValueStealth(m_WidthScaleSpin->value());
|
||||
m_HeightScaleSpin->SetValueStealth(m_WidthScaleSpin->value());
|
||||
|
||||
if (SetMemory())
|
||||
m_Controller->SyncCurrentToSizeSpinners(false, true);
|
||||
@ -443,7 +423,7 @@ void FractoriumFinalRenderDialog::OnWidthScaleChanged(double d)
|
||||
void FractoriumFinalRenderDialog::OnHeightScaleChanged(double d)
|
||||
{
|
||||
if (ui.FinalRenderKeepAspectCheckBox->isChecked() && m_Controller.get())
|
||||
m_WidthScaleSpin->SetValueStealth(m_HeightScaleSpin->value());
|
||||
m_WidthScaleSpin->SetValueStealth(m_HeightScaleSpin->value());
|
||||
|
||||
if (SetMemory())
|
||||
m_Controller->SyncCurrentToSizeSpinners(false, true);
|
||||
@ -578,7 +558,7 @@ void FractoriumFinalRenderDialog::OnFileButtonClicked(bool checked)
|
||||
void FractoriumFinalRenderDialog::OnShowFolderButtonClicked(bool checked)
|
||||
{
|
||||
QString s = m_Settings->SaveFolder();
|
||||
|
||||
|
||||
if (Exists(s))
|
||||
QDesktopServices::openUrl(QUrl::fromLocalFile(s));
|
||||
else
|
||||
@ -673,13 +653,12 @@ void FractoriumFinalRenderDialog::showEvent(QShowEvent* e)
|
||||
m_Controller->m_ImageCount = 0;
|
||||
SetMemory();
|
||||
m_Controller->ResetProgress();
|
||||
|
||||
QString s = m_Settings->SaveFolder();
|
||||
|
||||
if (Exists(s))
|
||||
Path(m_Controller->ComposePath(m_Controller->Name()));//Update the GUI.
|
||||
}
|
||||
|
||||
|
||||
ui.FinalRenderTextOutput->clear();
|
||||
QDialog::showEvent(e);
|
||||
}
|
||||
@ -708,13 +687,12 @@ bool FractoriumFinalRenderDialog::CreateControllerFromGUI(bool createRenderer)
|
||||
{
|
||||
bool ok = true;
|
||||
int index = Current() - 1;
|
||||
|
||||
#ifdef DO_DOUBLE
|
||||
size_t elementSize = Double() ? sizeof(double) : sizeof(float);
|
||||
#else
|
||||
size_t elementSize = sizeof(float);
|
||||
#endif
|
||||
|
||||
|
||||
if (!m_Controller.get() || (m_Controller->SizeOfT() != elementSize))
|
||||
{
|
||||
#ifdef DO_DOUBLE
|
||||
@ -740,6 +718,7 @@ bool FractoriumFinalRenderDialog::CreateControllerFromGUI(bool createRenderer)
|
||||
|
||||
//Create a float or double controller based on the GUI.
|
||||
#ifdef DO_DOUBLE
|
||||
|
||||
if (Double())
|
||||
m_Controller = unique_ptr<FinalRenderEmberControllerBase>(new FinalRenderEmberController<double>(this));
|
||||
else
|
||||
@ -778,10 +757,9 @@ bool FractoriumFinalRenderDialog::SetMemory()
|
||||
bool error = false;
|
||||
tuple<size_t, size_t, size_t> p = m_Controller->SyncAndComputeMemory();
|
||||
QString s;
|
||||
|
||||
ui.FinalRenderParamsTable->item(m_MemoryCellIndex, 1)->setText(ToString<qulonglong>(get<1>(p)));
|
||||
ui.FinalRenderParamsTable->item(m_ItersCellIndex, 1)->setText(ToString<qulonglong>(get<2>(p)));
|
||||
|
||||
|
||||
if (OpenCL() && !m_Wrappers.empty())
|
||||
{
|
||||
auto devices = Devices();
|
||||
@ -799,13 +777,13 @@ bool FractoriumFinalRenderDialog::SetMemory()
|
||||
if (histSize > maxAlloc)
|
||||
{
|
||||
temp = "Histogram/Accumulator memory size of " + ToString<qulonglong>(histSize) +
|
||||
" is greater than the max OpenCL allocation size of " + ToString<qulonglong>(maxAlloc);
|
||||
" is greater than the max OpenCL allocation size of " + ToString<qulonglong>(maxAlloc);
|
||||
}
|
||||
|
||||
if (totalSize > totalAvail)
|
||||
{
|
||||
temp += "\n\nTotal required memory size of " + ToString<qulonglong>(totalSize) +
|
||||
" is greater than the max OpenCL available memory of " + ToString<qulonglong>(totalAvail);
|
||||
" is greater than the max OpenCL available memory of " + ToString<qulonglong>(totalAvail);
|
||||
}
|
||||
|
||||
if (!temp.isEmpty())
|
||||
|
@ -40,7 +40,7 @@ class FractoriumFinalRenderDialog : public QDialog
|
||||
friend Fractorium;
|
||||
friend FinalRenderEmberControllerBase;
|
||||
friend FinalRenderEmberController<float>;
|
||||
|
||||
|
||||
#ifdef DO_DOUBLE
|
||||
friend FinalRenderEmberController<double>;
|
||||
#endif
|
||||
@ -112,7 +112,7 @@ protected:
|
||||
private:
|
||||
bool CreateControllerFromGUI(bool createRenderer);
|
||||
bool SetMemory();
|
||||
|
||||
|
||||
int m_MemoryCellIndex;
|
||||
int m_ItersCellIndex;
|
||||
int m_PathCellIndex;
|
||||
@ -128,7 +128,7 @@ private:
|
||||
QLineEdit* m_SuffixEdit;
|
||||
FractoriumSettings* m_Settings;
|
||||
Fractorium* m_Fractorium;
|
||||
OpenCLInfo& m_Info;
|
||||
shared_ptr<OpenCLInfo> m_Info;
|
||||
vector<OpenCLWrapper> m_Wrappers;
|
||||
unique_ptr<FinalRenderEmberControllerBase> m_Controller;
|
||||
Ui::FinalRenderDialog ui;
|
||||
|
@ -32,7 +32,6 @@ void FinalRenderEmberController<T>::CancelRender()
|
||||
if (m_Result.isRunning())
|
||||
{
|
||||
tbb::task_group g;
|
||||
|
||||
g.run([&]
|
||||
{
|
||||
m_Run = false;
|
||||
@ -65,7 +64,6 @@ void FinalRenderEmberController<T>::CancelRender()
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
g.wait();
|
||||
|
||||
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>
|
||||
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());
|
||||
|
||||
return CreateRenderer((useOpenCL && !v.empty()) ? OPENCL_RENDERER : CPU_RENDERER,
|
||||
v,
|
||||
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->Callback(nullptr);
|
||||
m_FinalPreviewRenderer->NumChannels(4);
|
||||
|
||||
m_FinalPreviewRenderFunc = [&]()
|
||||
{
|
||||
m_PreviewCs.Enter();//Thread prep.
|
||||
m_PreviewRun = true;
|
||||
m_FinalPreviewRenderer->Abort();
|
||||
|
||||
T scalePercentage;
|
||||
size_t maxDim = 100;
|
||||
QLabel* widget = m_FinalRenderDialog->ui.FinalRenderPreviewLabel;
|
||||
@ -134,32 +129,27 @@ 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_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_FinalPreviewRenderer->EarlyClip(m_FinalRenderDialog->EarlyClip());
|
||||
m_FinalPreviewRenderer->YAxisUp(m_FinalRenderDialog->YAxisUp());
|
||||
m_FinalPreviewRenderer->Transparency(m_FinalRenderDialog->Transparency());
|
||||
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().
|
||||
|
||||
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(),
|
||||
[&](size_t strip) { },//Pre strip.
|
||||
[&](size_t strip) { },//Post strip.
|
||||
[&](size_t strip) { },//Error.
|
||||
[&](Ember<T>& finalEmber)//Final strip.
|
||||
{
|
||||
QImage image(finalEmber.m_FinalRasW, finalEmber.m_FinalRasH, QImage::Format_RGBA8888);//The label wants RGBA.
|
||||
memcpy(image.scanLine(0), m_PreviewFinalImage.data(), finalEmber.m_FinalRasW * finalEmber.m_FinalRasH * 4);//Memcpy the data in.
|
||||
QPixmap pixmap = QPixmap::fromImage(image);
|
||||
QMetaObject::invokeMethod(widget, "setPixmap", Qt::QueuedConnection, Q_ARG(QPixmap, pixmap));
|
||||
});
|
||||
|
||||
[&](size_t strip) { },//Pre strip.
|
||||
[&](size_t strip) { },//Post strip.
|
||||
[&](size_t strip) { },//Error.
|
||||
[&](Ember<T>& finalEmber)//Final strip.
|
||||
{
|
||||
QImage image(finalEmber.m_FinalRasW, finalEmber.m_FinalRasH, QImage::Format_RGBA8888);//The label wants RGBA.
|
||||
memcpy(image.scanLine(0), m_PreviewFinalImage.data(), finalEmber.m_FinalRasW * finalEmber.m_FinalRasH * 4);//Memcpy the data in.
|
||||
QPixmap pixmap = QPixmap::fromImage(image);
|
||||
QMetaObject::invokeMethod(widget, "setPixmap", Qt::QueuedConnection, Q_ARG(QPixmap, pixmap));
|
||||
});
|
||||
m_PreviewRun = false;
|
||||
m_PreviewCs.Leave();
|
||||
};
|
||||
|
||||
//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.
|
||||
//If it finishes successfully, delete the backup file.
|
||||
@ -168,7 +158,6 @@ FinalRenderEmberController<T>::FinalRenderEmberController(FractoriumFinalRenderD
|
||||
m_Run = true;
|
||||
m_TotalTimer.Tic();//Begin timing for progress of all operations.
|
||||
m_GuiState = m_FinalRenderDialog->State();//Cache render settings from the GUI before running.
|
||||
|
||||
size_t i;
|
||||
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.
|
||||
@ -184,11 +173,10 @@ FinalRenderEmberController<T>::FinalRenderEmberController(FractoriumFinalRenderD
|
||||
m_FinishedImageCount.store(0);
|
||||
SyncGuiToRenderer();
|
||||
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,
|
||||
[&](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) + "\n"); });//Final strips value to be set.
|
||||
[&](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) + "\n"); }); //Final strips value to be set.
|
||||
ResetProgress();
|
||||
|
||||
//The rendering process is different between doing a single image, and doing multiple.
|
||||
@ -205,7 +193,7 @@ FinalRenderEmberController<T>::FinalRenderEmberController(FractoriumFinalRenderD
|
||||
for (i = 0; i < m_EmberFile.Size() && m_Run; i++)
|
||||
{
|
||||
SyncGuiToEmber(m_EmberFile.m_Embers[i], firstEmber->m_FinalRasW, firstEmber->m_FinalRasH);
|
||||
|
||||
|
||||
if (i > 0)
|
||||
{
|
||||
if (m_EmberFile.m_Embers[i].m_Time <= m_EmberFile.m_Embers[i - 1].m_Time)
|
||||
@ -221,13 +209,11 @@ FinalRenderEmberController<T>::FinalRenderEmberController(FractoriumFinalRenderD
|
||||
|
||||
std::atomic<size_t> atomfTime;
|
||||
vector<std::thread> threadVec;
|
||||
|
||||
//Not supporting strips with animation.
|
||||
//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;
|
||||
atomfTime.store(0);
|
||||
|
||||
std::function<void(size_t)> iterFunc = [&](size_t index)
|
||||
{
|
||||
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.
|
||||
{
|
||||
T localTime = T(ftime);
|
||||
|
||||
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.
|
||||
renderTimer.Tic();//Toc() is called in RenderComplete().
|
||||
@ -264,18 +249,16 @@ FinalRenderEmberController<T>::FinalRenderEmberController(FractoriumFinalRenderD
|
||||
|
||||
stats = renderer->Stats();
|
||||
comments = renderer->ImageComments(stats, 0, false, true);
|
||||
|
||||
writeThread = std::thread([&](size_t tempTime, size_t threadFinalImageIndex)
|
||||
{
|
||||
SaveCurrentRender(m_EmberFile.m_Embers[tempTime],
|
||||
comments,//These all don't change during the renders, so it's ok to access them in the thread.
|
||||
finalImages[threadFinalImageIndex],
|
||||
renderer->FinalRasW(),
|
||||
renderer->FinalRasH(),
|
||||
renderer->NumChannels(),
|
||||
renderer->BytesPerChannel());
|
||||
comments,//These all don't change during the renders, so it's ok to access them in the thread.
|
||||
finalImages[threadFinalImageIndex],
|
||||
renderer->FinalRasW(),
|
||||
renderer->FinalRasH(),
|
||||
renderer->NumChannels(),
|
||||
renderer->BytesPerChannel());
|
||||
}, ftime, finalImageIndex);
|
||||
|
||||
m_FinishedImageCount.fetch_add(1);
|
||||
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.
|
||||
writeThread.join();
|
||||
};
|
||||
|
||||
threadVec.reserve(m_Renderers.size());
|
||||
|
||||
for (size_t r = 0; r < m_Renderers.size(); r++)
|
||||
@ -318,7 +300,6 @@ FinalRenderEmberController<T>::FinalRenderEmberController(FractoriumFinalRenderD
|
||||
m_Stats.Clear();
|
||||
Memset(m_FinalImage);
|
||||
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,
|
||||
[&](size_t strip) { currentStripForProgress = strip; },//Pre strip.
|
||||
[&](size_t strip) { m_Stats += m_Renderer->Stats(); },//Post strip.
|
||||
@ -351,7 +332,6 @@ FinalRenderEmberController<T>::FinalRenderEmberController(FractoriumFinalRenderD
|
||||
Memset(m_FinalImage);
|
||||
Output(ComposePath(QString::fromStdString(m_Ember->m_Name)));
|
||||
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,
|
||||
[&](size_t strip) { currentStripForProgress = strip; },//Pre 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())) + ".";
|
||||
Output(totalTimeString);
|
||||
|
||||
QFile::remove(backup);
|
||||
m_Run = false;
|
||||
};
|
||||
@ -457,7 +436,6 @@ bool FinalRenderEmberController<T>::Render()
|
||||
if (CreateRendererFromGUI())
|
||||
{
|
||||
m_FinalRenderDialog->ui.FinalRenderTextOutput->setText("Preparing all parameters.\n");
|
||||
|
||||
//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
|
||||
//and dedicates an entire core just to this thread which does nothing waiting for the
|
||||
@ -486,18 +464,16 @@ bool FinalRenderEmberController<T>::CreateRenderer(eRendererType renderType, con
|
||||
bool deviceDiff = false;
|
||||
//uint channels = m_FinalRenderDialog->Ext().endsWith("png", Qt::CaseInsensitive) ? 4 : 3;
|
||||
bool renderTypeMismatch = (m_Renderer.get() && (m_Renderer->RendererType() != renderType)) ||
|
||||
(!m_Renderers.empty() && (m_Renderers[0]->RendererType() != renderType));
|
||||
|
||||
(!m_Renderers.empty() && (m_Renderers[0]->RendererType() != renderType));
|
||||
CancelRender();
|
||||
|
||||
if ((!m_FinalRenderDialog->DoSequence() && (!m_Renderer.get() || !m_Renderer->Ok())) ||
|
||||
(m_FinalRenderDialog->DoSequence() && m_Renderers.empty()) ||
|
||||
renderTypeMismatch ||
|
||||
!Equal(m_Devices, devices))
|
||||
(m_FinalRenderDialog->DoSequence() && m_Renderers.empty()) ||
|
||||
renderTypeMismatch ||
|
||||
!Equal(m_Devices, devices))
|
||||
{
|
||||
EmberReport emberReport;
|
||||
vector<string> errorReport;
|
||||
|
||||
m_Devices = devices;//Store values for re-creation later on.
|
||||
m_OutputTexID = 0;//Don't care about tex ID when doing final render.
|
||||
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.FinalRenderTextOutput, "update", Qt::QueuedConnection);
|
||||
|
||||
return m_Run ? 1 : 0;
|
||||
}
|
||||
|
||||
@ -698,14 +673,12 @@ tuple<size_t, size_t, size_t> FinalRenderEmberController<T>::SyncAndComputeMemor
|
||||
size_t strips;
|
||||
bool b = false;
|
||||
uint channels = m_FinalRenderDialog->Ext() == "png" ? 4 : 3;//4 channels for Png, else 3.
|
||||
|
||||
SyncGuiToEmbers();
|
||||
|
||||
|
||||
if (m_Renderer.get())
|
||||
{
|
||||
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->CreateSpatialFilter(b);
|
||||
m_Renderer->CreateTemporalFilter(b);
|
||||
@ -715,7 +688,6 @@ tuple<size_t, size_t, size_t> FinalRenderEmberController<T>::SyncAndComputeMemor
|
||||
m_Renderer->ComputeCamera();
|
||||
CancelPreviewRender();
|
||||
m_FinalPreviewRenderFunc();
|
||||
|
||||
p = m_Renderer->MemoryRequired(strips, true, m_FinalRenderDialog->DoSequence());
|
||||
iterCount = m_Renderer->TotalIterCount(strips);
|
||||
}
|
||||
@ -734,14 +706,12 @@ tuple<size_t, size_t, size_t> FinalRenderEmberController<T>::SyncAndComputeMemor
|
||||
|
||||
CancelPreviewRender();
|
||||
m_FinalPreviewRenderFunc();
|
||||
|
||||
strips = 1;
|
||||
p = m_Renderers[0]->MemoryRequired(1, true, m_FinalRenderDialog->DoSequence());
|
||||
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);
|
||||
}
|
||||
|
||||
@ -757,7 +727,6 @@ QString FinalRenderEmberController<T>::ComposePath(const QString& name)
|
||||
{
|
||||
QString path = MakeEnd(m_Settings->SaveFolder(), '/');//Base path.
|
||||
QString full = path + m_FinalRenderDialog->Prefix() + name + m_FinalRenderDialog->Suffix() + "." + m_FinalRenderDialog->Ext();
|
||||
|
||||
return EmberFile<T>::UniqueFilename(full);
|
||||
}
|
||||
|
||||
@ -794,7 +763,9 @@ void FinalRenderEmberController<T>::CancelPreviewRender()
|
||||
m_FinalPreviewRenderer->Abort();
|
||||
|
||||
while (m_FinalPreviewRenderer->InRender()) { QApplication::processEvents(); }
|
||||
|
||||
while (m_PreviewRun) { QApplication::processEvents(); }
|
||||
|
||||
while (m_FinalPreviewResult.isRunning()) { QApplication::processEvents(); }
|
||||
}
|
||||
|
||||
@ -871,13 +842,12 @@ void FinalRenderEmberController<T>::RenderComplete(Ember<T>& ember, const EmberS
|
||||
QString status, filename = ComposePath(QString::fromStdString(ember.m_Name));
|
||||
QString itersString = ToString<qulonglong>(stats.m_Iters);
|
||||
QString itersPerSecString = ToString<qulonglong>(size_t(stats.m_Iters / (stats.m_IterMs / 1000.0)));
|
||||
|
||||
|
||||
if (m_GuiState.m_SaveXml)
|
||||
{
|
||||
QFileInfo xmlFileInfo(filename);//Create another one in case it was modified for batch rendering.
|
||||
QString newPath = xmlFileInfo.absolutePath() + '/' + xmlFileInfo.completeBaseName() + ".flame";
|
||||
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);
|
||||
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);
|
||||
Output(status);
|
||||
|
||||
totalTimeString = renderTimer.Format(renderTimer.Toc());
|
||||
status = "Total time: " + QString::fromStdString(totalTimeString) + "\nTotal iters: " + itersString + "\nIters/second: " + itersPerSecString + "\n";
|
||||
Output(status);
|
||||
@ -940,14 +909,12 @@ void FinalRenderEmberController<T>::SyncGuiToEmber(Ember<T>& ember, size_t width
|
||||
{
|
||||
double wScale = m_FinalRenderDialog->m_WidthScaleSpin->value();
|
||||
double hScale = m_FinalRenderDialog->m_HeightScaleSpin->value();
|
||||
|
||||
w = ember.m_OrigFinalRasW * wScale;
|
||||
h = ember.m_OrigFinalRasH * hScale;
|
||||
}
|
||||
|
||||
w = std::max<size_t>(w, 10);
|
||||
h = std::max<size_t>(h, 10);
|
||||
|
||||
ember.SetSizeAndAdjustScale(w, h, false, m_FinalRenderDialog->Scale());
|
||||
ember.m_Quality = m_FinalRenderDialog->m_QualitySpin->value();
|
||||
ember.m_Supersample = m_FinalRenderDialog->m_SupersampleSpin->value();
|
||||
|
@ -14,20 +14,18 @@
|
||||
/// is present here, it's safe to assume it can't be done in the designer.
|
||||
/// </summary>
|
||||
/// <param name="p">The parent widget of this item</param>
|
||||
Fractorium::Fractorium(QWidget* p)
|
||||
: QMainWindow(p),
|
||||
m_Info(OpenCLInfo::Instance())
|
||||
Fractorium::Fractorium(QWidget* p)
|
||||
: QMainWindow(p)
|
||||
{
|
||||
int spinHeight = 20, iconSize_ = 9;
|
||||
size_t i = 0;
|
||||
string s;
|
||||
Timing t;
|
||||
ui.setupUi(this);
|
||||
|
||||
m_Info = OpenCLInfo::Instance();
|
||||
qRegisterMetaType<QVector<int>>("QVector<int>");//For previews.
|
||||
qRegisterMetaType<vector<byte>>("vector<byte>");
|
||||
qRegisterMetaType<EmberTreeWidgetItemBase*>("EmberTreeWidgetItemBase*");
|
||||
|
||||
setDockOptions(DockOption::AllowNestedDocks | DockOption::AllowTabbedDocks);
|
||||
setTabPosition(Qt::AllDockWidgetAreas, QTabWidget::TabPosition::North);
|
||||
setTabShape(QTabWidget::TabShape::Triangular);
|
||||
@ -36,7 +34,6 @@ Fractorium::Fractorium(QWidget* p)
|
||||
tabifyDockWidget(ui.XformsDockWidget, ui.XaosDockWidget);
|
||||
tabifyDockWidget(ui.XaosDockWidget, ui.PaletteDockWidget);
|
||||
tabifyDockWidget(ui.PaletteDockWidget, ui.InfoDockWidget);
|
||||
|
||||
m_Docks.reserve(8);
|
||||
m_Docks.push_back(ui.LibraryDockWidget);
|
||||
m_Docks.push_back(ui.FlameDockWidget);
|
||||
@ -44,58 +41,48 @@ Fractorium::Fractorium(QWidget* p)
|
||||
m_Docks.push_back(ui.XaosDockWidget);
|
||||
m_Docks.push_back(ui.PaletteDockWidget);
|
||||
m_Docks.push_back(ui.InfoDockWidget);
|
||||
|
||||
m_FontSize = 9;
|
||||
m_VarSortMode = 1;//Sort by weight by default.
|
||||
m_PaletteSortMode = 0;//Sort by palette ascending by default.
|
||||
m_ColorDialog = new QColorDialog(this);
|
||||
m_Settings = new FractoriumSettings(this);
|
||||
m_QssDialog = new QssDialog(this);
|
||||
|
||||
m_FileDialog = nullptr;//Use lazy instantiation upon first use.
|
||||
m_FolderDialog = nullptr;
|
||||
m_FinalRenderDialog = new FractoriumFinalRenderDialog(m_Settings, this);
|
||||
m_OptionsDialog = new FractoriumOptionsDialog(m_Settings, this);
|
||||
m_VarDialog = new FractoriumVariationsDialog(m_Settings, this);
|
||||
m_AboutDialog = new FractoriumAboutDialog(this);
|
||||
|
||||
//Put the about dialog in the screen center.
|
||||
const QRect screen = QApplication::desktop()->screenGeometry();
|
||||
m_AboutDialog->move(screen.center() - m_AboutDialog->rect().center());
|
||||
|
||||
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(0XCC, 0XCC, 0X00);
|
||||
m_XformComboColors[i++] = QColor(0X00, 0XCC, 0X00);
|
||||
m_XformComboColors[i++] = QColor(0X00, 0XCC, 0XCC);
|
||||
m_XformComboColors[i++] = QColor(0X40, 0X40, 0XFF);
|
||||
|
||||
m_XformComboColors[i++] = QColor(0XCC, 0X00, 0XCC);
|
||||
m_XformComboColors[i++] = QColor(0XCC, 0X80, 0X00);
|
||||
m_XformComboColors[i++] = QColor(0X80, 0X00, 0X4F);
|
||||
m_XformComboColors[i++] = QColor(0X80, 0X80, 0X22);
|
||||
m_XformComboColors[i++] = QColor(0X60, 0X80, 0X60);
|
||||
|
||||
m_XformComboColors[i++] = QColor(0X50, 0X80, 0X80);
|
||||
m_XformComboColors[i++] = QColor(0X4F, 0X4F, 0X80);
|
||||
m_XformComboColors[i++] = QColor(0X80, 0X50, 0X80);
|
||||
m_XformComboColors[i++] = QColor(0X80, 0X60, 0X22);
|
||||
m_FinalXformComboColor = QColor(0x7F, 0x7F, 0x7F);
|
||||
|
||||
|
||||
for (i = 0; i < XFORM_COLOR_COUNT; i++)
|
||||
{
|
||||
QPixmap pixmap(iconSize_, iconSize_);
|
||||
|
||||
pixmap.fill(m_XformComboColors[i]);
|
||||
m_XformComboIcons[i] = QIcon(pixmap);
|
||||
}
|
||||
|
||||
QPixmap pixmap(iconSize_, iconSize_);
|
||||
|
||||
pixmap.fill(m_FinalXformComboColor);
|
||||
m_FinalXformComboIcon = QIcon(pixmap);
|
||||
|
||||
InitToolbarUI();
|
||||
InitParamsUI();
|
||||
InitXformsUI();
|
||||
@ -108,10 +95,10 @@ Fractorium::Fractorium(QWidget* p)
|
||||
InitLibraryUI();
|
||||
InitInfoUI();
|
||||
InitMenusUI();
|
||||
|
||||
//This will init the controller and fill in the variations and palette tables with template specific instances
|
||||
//of their respective objects.
|
||||
#ifdef DO_DOUBLE
|
||||
|
||||
if (m_Settings->Double())
|
||||
m_Controller = unique_ptr<FractoriumEmberControllerBase>(new FractoriumEmberController<double>(this));
|
||||
else
|
||||
@ -121,24 +108,21 @@ Fractorium::Fractorium(QWidget* p)
|
||||
m_Controller->SetupVariationTree();
|
||||
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());
|
||||
|
||||
int statusBarHeight = 20 * devicePixelRatio();
|
||||
ui.StatusBar->setMinimumHeight(statusBarHeight);
|
||||
ui.StatusBar->setMaximumHeight(statusBarHeight);
|
||||
|
||||
m_RenderStatusLabel = new QLabel(this);
|
||||
m_RenderStatusLabel->setMinimumWidth(200);
|
||||
m_RenderStatusLabel->setAlignment(Qt::AlignRight);
|
||||
ui.StatusBar->addPermanentWidget(m_RenderStatusLabel);
|
||||
|
||||
m_CoordinateStatusLabel = new QLabel(this);
|
||||
m_CoordinateStatusLabel->setMinimumWidth(300);
|
||||
m_CoordinateStatusLabel->setMaximumWidth(300);
|
||||
m_CoordinateStatusLabel->setAlignment(Qt::AlignLeft);
|
||||
ui.StatusBar->addWidget(m_CoordinateStatusLabel);
|
||||
|
||||
int progressBarHeight = 15;
|
||||
int progressBarWidth = 300;
|
||||
m_ProgressBar = new QProgressBar(this);
|
||||
@ -149,15 +133,13 @@ Fractorium::Fractorium(QWidget* p)
|
||||
m_ProgressBar->setMinimumWidth(progressBarWidth);
|
||||
m_ProgressBar->setMaximumWidth(progressBarWidth);
|
||||
ui.StatusBar->addPermanentWidget(m_ProgressBar);
|
||||
|
||||
//Setup pointer in the GL window to point back to here.
|
||||
ui.GLDisplay->SetMainWindow(this);
|
||||
bool restored = restoreState(m_Settings->value("windowState").toByteArray());
|
||||
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(topLevelChanged(bool)), this, SLOT(OnDockTopLevelChanged(bool)));
|
||||
|
||||
|
||||
//Always ensure the library tab is selected, which will show preview renders.
|
||||
if (!restored)
|
||||
{
|
||||
@ -243,7 +225,6 @@ void Fractorium::CenterScrollbars()
|
||||
{
|
||||
QScrollBar* w = ui.GLParentScrollArea->horizontalScrollBar();
|
||||
QScrollBar* h = ui.GLParentScrollArea->verticalScrollBar();
|
||||
|
||||
w->setValue(w->maximum() / 2);
|
||||
h->setValue(h->maximum() / 2);
|
||||
}
|
||||
@ -267,7 +248,6 @@ void FractoriumEmberController<T>::ApplyXmlSavingTemplate(Ember<T>& ember)
|
||||
bool Fractorium::HaveFinal()
|
||||
{
|
||||
QComboBox* combo = ui.CurrentXformCombo;
|
||||
|
||||
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
|
||||
/// it to refresh this.
|
||||
/// <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.
|
||||
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)
|
||||
{
|
||||
comboBox = new StealthComboBox(table);
|
||||
|
||||
for (auto& s : vals) comboBox->addItem(s.c_str());
|
||||
|
||||
table->setCellWidget(row, col, comboBox);
|
||||
connect(comboBox, signal, receiver, slot, connectionType);
|
||||
row++;
|
||||
@ -507,14 +489,13 @@ QStringList Fractorium::SetupOpenXmlDialog()
|
||||
m_FileDialog = new QFileDialog(this);
|
||||
m_FileDialog->setViewMode(QFileDialog::List);
|
||||
}
|
||||
|
||||
|
||||
if (!m_FileDialog)
|
||||
return QStringList("");
|
||||
|
||||
QStringList filenames;
|
||||
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->setAcceptMode(QFileDialog::AcceptOpen);
|
||||
m_FileDialog->setNameFilter("Flam3 (*.flam3);;Flame (*.flame);;Xml (*.xml)");
|
||||
@ -547,15 +528,13 @@ QString Fractorium::SetupSaveXmlDialog(const QString& defaultFilename)
|
||||
m_FileDialog = new QFileDialog(this);
|
||||
m_FileDialog->setViewMode(QFileDialog::List);
|
||||
}
|
||||
|
||||
|
||||
if (!m_FileDialog)
|
||||
return "";
|
||||
|
||||
QString filename;
|
||||
|
||||
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 is most likely a bug in QFileDialog.
|
||||
m_FileDialog->setAcceptMode(QFileDialog::AcceptSave);
|
||||
@ -585,15 +564,13 @@ QString Fractorium::SetupSaveImageDialog(const QString& defaultFilename)
|
||||
m_FileDialog = new QFileDialog(this);
|
||||
m_FileDialog->setViewMode(QFileDialog::List);
|
||||
}
|
||||
|
||||
|
||||
if (!m_FileDialog)
|
||||
return "";
|
||||
|
||||
|
||||
QString filename;
|
||||
|
||||
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 is most likely a bug in QFileDialog.
|
||||
m_FileDialog->setAcceptMode(QFileDialog::AcceptSave);
|
||||
@ -625,12 +602,11 @@ QString Fractorium::SetupSaveFolderDialog()
|
||||
m_FolderDialog = new QFileDialog(this);
|
||||
m_FolderDialog->setViewMode(QFileDialog::List);
|
||||
}
|
||||
|
||||
|
||||
if (!m_FolderDialog)
|
||||
return "";
|
||||
|
||||
|
||||
QString filename;
|
||||
|
||||
//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.
|
||||
m_FolderDialog->setAcceptMode(QFileDialog::AcceptSave);
|
||||
@ -672,14 +648,12 @@ void Fractorium::ShowCritical(const QString& title, const QString& text, bool in
|
||||
void Fractorium::SetTabOrders()
|
||||
{
|
||||
QWidget* w = SetTabOrder(this, ui.ColorTable, m_BrightnessSpin);//Flame.
|
||||
|
||||
w = SetTabOrder(this, w, m_GammaSpin);
|
||||
w = SetTabOrder(this, w, m_GammaThresholdSpin);
|
||||
w = SetTabOrder(this, w, m_VibrancySpin);
|
||||
w = SetTabOrder(this, w, m_HighlightSpin);
|
||||
w = SetTabOrder(this, w, m_BackgroundColorButton);
|
||||
w = SetTabOrder(this, w, m_PaletteModeCombo);
|
||||
|
||||
w = SetTabOrder(this, w, m_CenterXSpin);
|
||||
w = SetTabOrder(this, w, m_CenterYSpin);
|
||||
w = SetTabOrder(this, w, m_ScaleSpin);
|
||||
@ -690,20 +664,17 @@ void Fractorium::SetTabOrders()
|
||||
w = SetTabOrder(this, w, m_PitchSpin);
|
||||
w = SetTabOrder(this, w, m_YawSpin);
|
||||
w = SetTabOrder(this, w, m_DepthBlurSpin);
|
||||
|
||||
w = SetTabOrder(this, w, m_SpatialFilterWidthSpin);
|
||||
w = SetTabOrder(this, w, m_SpatialFilterTypeCombo);
|
||||
w = SetTabOrder(this, w, m_TemporalFilterTypeCombo);
|
||||
w = SetTabOrder(this, w, m_DEFilterMinRadiusSpin);
|
||||
w = SetTabOrder(this, w, m_DEFilterMaxRadiusSpin);
|
||||
w = SetTabOrder(this, w, m_DECurveSpin);
|
||||
|
||||
w = SetTabOrder(this, w, m_TemporalSamplesSpin);
|
||||
w = SetTabOrder(this, w, m_QualitySpin);
|
||||
w = SetTabOrder(this, w, m_SupersampleSpin);
|
||||
w = SetTabOrder(this, w, m_AffineInterpTypeCombo);
|
||||
w = SetTabOrder(this, w, m_InterpTypeCombo);
|
||||
|
||||
w = SetTabOrder(this, ui.CurrentXformCombo, ui.AddXformButton);//Xforms.
|
||||
w = SetTabOrder(this, w, ui.DuplicateXformButton);
|
||||
w = SetTabOrder(this, w, ui.ClearXformButton);
|
||||
@ -711,13 +682,11 @@ void Fractorium::SetTabOrders()
|
||||
w = SetTabOrder(this, w, ui.AddFinalXformButton);
|
||||
w = SetTabOrder(this, w, m_XformWeightSpin);
|
||||
w = SetTabOrder(this, w, m_XformWeightSpinnerButtonWidget->m_Button);
|
||||
|
||||
w = SetTabOrder(this, m_XformColorIndexSpin, ui.XformColorScroll);//Xforms color.
|
||||
w = SetTabOrder(this, w, m_XformColorSpeedSpin);
|
||||
w = SetTabOrder(this, w, m_XformOpacitySpin);
|
||||
w = SetTabOrder(this, w, m_XformDirectColorSpin);
|
||||
w = SetTabOrder(this, w, ui.SoloXformCheckBox);
|
||||
|
||||
w = SetTabOrder(this, ui.PreAffineGroupBox, m_PreX1Spin);//Xforms affine.
|
||||
w = SetTabOrder(this, w, m_PreX2Spin);
|
||||
w = SetTabOrder(this, w, m_PreY1Spin);
|
||||
@ -769,12 +738,9 @@ void Fractorium::SetTabOrders()
|
||||
w = SetTabOrder(this, w, ui.ShowPostAffineAllRadio);
|
||||
w = SetTabOrder(this, w, ui.LocalPivotRadio);
|
||||
w = SetTabOrder(this, w, ui.WorldPivotRadio);
|
||||
|
||||
w = SetTabOrder(this, ui.VariationsFilterLineEdit, ui.VariationsFilterClearButton);//Xforms variation.
|
||||
w = SetTabOrder(this, w, ui.VariationsTree);
|
||||
|
||||
//Xforms xaos is done dynamically every time.
|
||||
|
||||
w = SetTabOrder(this, m_PaletteHueSpin, m_PaletteContrastSpin);//Palette.
|
||||
w = SetTabOrder(this, w, m_PaletteSaturationSpin);
|
||||
w = SetTabOrder(this, w, m_PaletteBlurSpin);
|
||||
@ -783,12 +749,8 @@ void Fractorium::SetTabOrders()
|
||||
w = SetTabOrder(this, w, ui.PaletteFilterLineEdit);
|
||||
w = SetTabOrder(this, w, ui.PaletteFilterClearButton);
|
||||
w = SetTabOrder(this, w, ui.PaletteListTable);
|
||||
|
||||
|
||||
w = SetTabOrder(this, ui.SummaryTable, ui.SummaryTree);//Info summary.
|
||||
|
||||
w = SetTabOrder(this, ui.InfoBoundsGroupBox, ui.InfoBoundsFrame);//Info bounds.
|
||||
|
||||
w = SetTabOrder(this, w, ui.InfoBoundsTable);
|
||||
w = SetTabOrder(this, w, ui.InfoFileOpeningGroupBox);
|
||||
w = SetTabOrder(this, w, ui.InfoFileOpeningTextEdit);
|
||||
@ -872,7 +834,6 @@ void Fractorium::ToggleTableCol(QTableView* table, int logicalIndex)
|
||||
auto model = table->model();
|
||||
int rows = model->rowCount();
|
||||
bool shift = QGuiApplication::keyboardModifiers().testFlag(Qt::ShiftModifier);
|
||||
|
||||
auto tableWidget = qobject_cast<QTableWidget*>(table);
|
||||
|
||||
if (tableWidget)
|
||||
|
@ -50,7 +50,7 @@ template <typename T> class FinalRenderEmberController;
|
||||
/// upon first use with lazy instantiation and then kept around for the remainder of the program.
|
||||
/// Additional dialogs are for the about box, options, and final rendering out to a file.
|
||||
/// While all class member variables and functions are declared in this .h file, the implementation
|
||||
/// for them is far too lengthy to put in a single .cpp file. So general functionality is placed in
|
||||
/// for them is far too lengthy to put in a single .cpp file. So general functionality is placed in
|
||||
/// Fractorium.cpp and the other functional areas are each broken out into their own files.
|
||||
/// The order of the functions in each .cpp file should roughly match the order they appear in the .h file.
|
||||
/// Future todo list:
|
||||
@ -74,13 +74,13 @@ class Fractorium : public QMainWindow
|
||||
friend FractoriumEmberController<float>;
|
||||
friend FinalRenderEmberControllerBase;
|
||||
friend FinalRenderEmberController<float>;
|
||||
|
||||
|
||||
#ifdef DO_DOUBLE
|
||||
friend GLEmberController<double>;
|
||||
friend FractoriumEmberController<double>;
|
||||
friend FinalRenderEmberController<double>;
|
||||
#endif
|
||||
|
||||
|
||||
public:
|
||||
Fractorium(QWidget* p = 0);
|
||||
~Fractorium();
|
||||
@ -99,7 +99,7 @@ public:
|
||||
bool DrawAllPre();
|
||||
bool DrawAllPost();
|
||||
bool LocalPivot();
|
||||
|
||||
|
||||
public slots:
|
||||
//Dock.
|
||||
void OnDockTopLevelChanged(bool topLevel);
|
||||
@ -306,7 +306,7 @@ protected:
|
||||
virtual void dragEnterEvent(QDragEnterEvent* e) override;
|
||||
virtual void dragMoveEvent(QDragMoveEvent* e) override;
|
||||
virtual void dropEvent(QDropEvent* e) override;
|
||||
virtual void showEvent(QShowEvent *e) override;
|
||||
virtual void showEvent(QShowEvent* e) override;
|
||||
|
||||
private:
|
||||
void InitMenusUI();
|
||||
@ -353,7 +353,7 @@ private:
|
||||
|
||||
//Xaos.
|
||||
void FillXaosTable();
|
||||
|
||||
|
||||
//Palette.
|
||||
void ResetPaletteControls();
|
||||
void SetPaletteFileComboIndex(const string& filename);
|
||||
@ -415,7 +415,7 @@ private:
|
||||
SpinBox* m_TemporalSamplesSpin;
|
||||
StealthComboBox* m_AffineInterpTypeCombo;
|
||||
StealthComboBox* m_InterpTypeCombo;
|
||||
|
||||
|
||||
//Xforms.
|
||||
DoubleSpinBox* m_XformWeightSpin;
|
||||
SpinnerButtonWidget* m_XformWeightSpinnerButtonWidget;
|
||||
@ -444,7 +444,7 @@ private:
|
||||
DoubleSpinBox* m_PostY2Spin;
|
||||
DoubleSpinBox* m_PostO1Spin;
|
||||
DoubleSpinBox* m_PostO2Spin;
|
||||
|
||||
|
||||
DoubleSpinBox* m_PreSpins[6];
|
||||
DoubleSpinBox* m_PostSpins[6];
|
||||
|
||||
@ -499,7 +499,7 @@ private:
|
||||
int m_VarSortMode;
|
||||
int m_PaletteSortMode;
|
||||
int m_PreviousPaletteRow;
|
||||
OpenCLInfo& m_Info;
|
||||
shared_ptr<OpenCLInfo> m_Info;
|
||||
unique_ptr<FractoriumEmberControllerBase> m_Controller;
|
||||
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="ok">Pointer to boolean which stores the success value of the conversion</param>
|
||||
/// <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);
|
||||
}
|
||||
@ -109,7 +109,7 @@ static QString MakeEnd(const QString& s, T e)
|
||||
/// <returns>True if s was not empty and existed, else false.</returns>
|
||||
static bool Exists(const QString& s)
|
||||
{
|
||||
return s != "" && QDir(s).exists();
|
||||
return s != "" && QDir(s).exists();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -121,9 +121,8 @@ static QColor VisibleColor(const QColor& color)
|
||||
{
|
||||
int threshold = 105;
|
||||
int delta = (color.red() * 0.299) + //Magic numbers gotten from a Stack Overflow post.
|
||||
(color.green() * 0.587) +
|
||||
(color.blue() * 0.114);
|
||||
|
||||
(color.green() * 0.587) +
|
||||
(color.blue() * 0.114);
|
||||
QColor textColor = (255 - delta < threshold) ? QColor(0, 0, 0) : QColor(255, 255, 255);
|
||||
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)
|
||||
{
|
||||
vector<pair<size_t, size_t>> vec;
|
||||
OpenCLInfo& info = OpenCLInfo::Instance();
|
||||
auto& devices = info.DeviceIndices();
|
||||
|
||||
auto& devices = OpenCLInfo::Instance()->DeviceIndices();
|
||||
vec.reserve(selectedDevices.size());
|
||||
|
||||
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)
|
||||
{
|
||||
bool primary = false;
|
||||
auto& deviceNames = OpenCLInfo::Instance().AllDeviceNames();
|
||||
|
||||
auto& deviceNames = OpenCLInfo::Instance()->AllDeviceNames();
|
||||
table->clearContents();
|
||||
table->setRowCount(deviceNames.size());
|
||||
|
||||
@ -233,7 +229,6 @@ static void SetupDeviceTable(QTableWidget* table, const QList<QVariant>& setting
|
||||
auto checkItem = new QTableWidgetItem();
|
||||
auto radio = new QRadioButton();
|
||||
auto deviceItem = new QTableWidgetItem(QString::fromStdString(deviceNames[i]));
|
||||
|
||||
table->setItem(i, 0, checkItem);
|
||||
table->setCellWidget(i, 1, radio);
|
||||
table->setItem(i, 2, deviceItem);
|
||||
@ -365,17 +360,17 @@ static void HandleDeviceTableCheckChanged(QTableWidget* table, int row, int col)
|
||||
static QString BaseStyle()
|
||||
{
|
||||
return "/*---Base Style---\n"
|
||||
"This is needed to deal with the large tabs in the fusion theme which is the default on Linux, and optional on Windows.\n"
|
||||
"It's not needed for other themes."
|
||||
"You should keep this at the top of whatever custom style you make to ensure the tabs aren't unusually large.*/\n"
|
||||
"This is needed to deal with the large tabs in the fusion theme which is the default on Linux, and optional on Windows.\n"
|
||||
"It's not needed for other themes."
|
||||
"You should keep this at the top of whatever custom style you make to ensure the tabs aren't unusually large.*/\n"
|
||||
#ifndef WIN32
|
||||
"QTabBar::tab { height: 3ex; }\n\n"
|
||||
"QTabBar::tab { height: 3ex; }\n\n"
|
||||
#else
|
||||
"QTabBar::tab { height: 5ex; }\n\n"
|
||||
"QTabBar::tab { height: 5ex; }\n\n"
|
||||
#endif
|
||||
"/*This is needed to give the labels on the status bar some padding.*/\n"
|
||||
"QStatusBar QLabel { padding-left: 2px; padding-right: 2px; }\n\n"
|
||||
;
|
||||
"/*This is needed to give the labels on the status bar some padding.*/\n"
|
||||
"QStatusBar QLabel { padding-left: 2px; padding-right: 2px; }\n\n"
|
||||
;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -3,18 +3,14 @@
|
||||
#include "Fractorium.h"
|
||||
#include "GLEmberController.h"
|
||||
|
||||
#define SAVE_EACH 1
|
||||
|
||||
/// <summary>
|
||||
/// 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.
|
||||
/// </summary>
|
||||
/// <param name="fractorium">Pointer to the main window.</param>
|
||||
FractoriumEmberControllerBase::FractoriumEmberControllerBase(Fractorium* fractorium)
|
||||
: m_Info(OpenCLInfo::Instance())
|
||||
{
|
||||
Timing t;
|
||||
|
||||
m_Rendering = false;
|
||||
m_Shared = true;
|
||||
m_FailedRenders = 0;
|
||||
@ -25,12 +21,11 @@ FractoriumEmberControllerBase::FractoriumEmberControllerBase(Fractorium* fractor
|
||||
m_Fractorium = fractorium;
|
||||
m_RenderTimer = 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_RenderTimer = new QTimer(m_Fractorium);
|
||||
m_RenderTimer->setInterval(0);
|
||||
m_Fractorium->connect(m_RenderTimer, SIGNAL(timeout()), SLOT(IdleTimer()));
|
||||
|
||||
m_RenderRestartTimer = new QTimer(m_Fractorium);
|
||||
m_Fractorium->connect(m_RenderRestartTimer, SIGNAL(timeout()), SLOT(StartRenderTimer()));
|
||||
}
|
||||
@ -71,42 +66,34 @@ FractoriumEmberController<T>::FractoriumEmberController(Fractorium* fractorium)
|
||||
m_PreviewRun = false;
|
||||
m_PreviewRunning = false;
|
||||
m_SheepTools = unique_ptr<SheepTools<T, float>>(new SheepTools<T, float>(
|
||||
QString(QApplication::applicationDirPath() + "flam3-palettes.xml").toLocal8Bit().data(),
|
||||
new EmberNs::Renderer<T, float>()));
|
||||
QString(QApplication::applicationDirPath() + "flam3-palettes.xml").toLocal8Bit().data(),
|
||||
new EmberNs::Renderer<T, float>()));
|
||||
m_GLController = unique_ptr<GLEmberController<T>>(new GLEmberController<T>(fractorium, fractorium->ui.GLDisplay, this));
|
||||
m_PreviewRenderer = unique_ptr<EmberNs::Renderer<T, float>>(new EmberNs::Renderer<T, float>());
|
||||
|
||||
//Initial combo change event to fill the palette table will be called automatically later.
|
||||
|
||||
// Look hard for a palette.
|
||||
|
||||
// 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(QCoreApplication::applicationDirPath().toLocal8Bit().data()) ||
|
||||
InitPaletteList(QString("/usr/local/share/fractorium").toLocal8Bit().data()) ||
|
||||
InitPaletteList(QString("/usr/share/fractorium").toLocal8Bit().data())) )
|
||||
{
|
||||
// TODO better error dialog
|
||||
throw "No palettes found, exiting.";
|
||||
}
|
||||
//Look hard for a palette.
|
||||
if (!(InitPaletteList(QDir::currentPath().toLocal8Bit().data()) ||
|
||||
InitPaletteList(QDir::homePath().toLocal8Bit().data()) ||
|
||||
InitPaletteList(QCoreApplication::applicationDirPath().toLocal8Bit().data()) ||
|
||||
InitPaletteList(QString("/usr/local/share/fractorium").toLocal8Bit().data()) ||
|
||||
InitPaletteList(QString("/usr/share/fractorium").toLocal8Bit().data())) )
|
||||
{
|
||||
throw "No palettes found, exiting.";
|
||||
}
|
||||
|
||||
BackgroundChanged(QColor(0, 0, 0));//Default to black.
|
||||
ClearUndo();
|
||||
|
||||
m_PreviewRenderer->Callback(nullptr);
|
||||
m_PreviewRenderer->NumChannels(4);
|
||||
m_PreviewRenderer->EarlyClip(m_Fractorium->m_Settings->EarlyClip());
|
||||
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->ThreadCount(1);//For debugging.
|
||||
|
||||
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++)
|
||||
{
|
||||
Ember<T> ember = m_EmberFile.m_Embers[i];
|
||||
|
||||
ember.SyncSize();
|
||||
ember.SetSizeAndAdjustScale(PREVIEW_SIZE, PREVIEW_SIZE, false, SCALE_WIDTH);
|
||||
ember.m_TemporalSamples = 1;
|
||||
@ -136,11 +122,10 @@ FractoriumEmberController<T>::FractoriumEmberController(Fractorium* fractorium)
|
||||
//This ensures the events are processed in order as each preview is updated, and that control does not return here
|
||||
//until the update is complete.
|
||||
QMetaObject::invokeMethod(m_Fractorium, "SetLibraryTreeItemData", Qt::BlockingQueuedConnection,
|
||||
Q_ARG(EmberTreeWidgetItemBase*, dynamic_cast<EmberTreeWidgetItemBase*>(treeItem)),
|
||||
Q_ARG(vector<byte>&, m_PreviewFinalImage),
|
||||
Q_ARG(uint, PREVIEW_SIZE),
|
||||
Q_ARG(uint, PREVIEW_SIZE));
|
||||
|
||||
Q_ARG(EmberTreeWidgetItemBase*, dynamic_cast<EmberTreeWidgetItemBase*>(treeItem)),
|
||||
Q_ARG(vector<byte>&, m_PreviewFinalImage),
|
||||
Q_ARG(uint, PREVIEW_SIZE),
|
||||
Q_ARG(uint, 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())
|
||||
func(xform);
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
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++))
|
||||
func(xform);
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
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++))
|
||||
func(xform);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
@ -326,10 +308,9 @@ void FractoriumEmberController<T>::SetEmberPrivate(const Ember<U>& ember, bool v
|
||||
{
|
||||
if (ember.m_Name != m_Ember.m_Name)
|
||||
m_LastSaveCurrent = "";
|
||||
|
||||
|
||||
size_t w = m_Ember.m_FinalRasW;//Cache values for use below.
|
||||
size_t h = m_Ember.m_FinalRasH;
|
||||
|
||||
m_Ember = ember;
|
||||
|
||||
if (!verbatim)
|
||||
@ -340,20 +321,16 @@ void FractoriumEmberController<T>::SetEmberPrivate(const Ember<U>& ember, bool v
|
||||
m_Ember.m_Supersample = m_Fractorium->m_SupersampleSpin->value();
|
||||
}
|
||||
|
||||
#ifdef SAVE_EACH
|
||||
static EmberToXml<T> writer;
|
||||
static EmberToXml<T> writer;//Save parameters of last full render just in case there is a crash.
|
||||
string filename = "last.flame";
|
||||
|
||||
writer.Save(filename.c_str(), m_Ember, 0, true, false, true);
|
||||
#endif
|
||||
|
||||
m_GLController->ResetMouseState();
|
||||
FillXforms();//Must do this first because the palette setup in FillParamTablesAndPalette() uses the xforms combo.
|
||||
FillParamTablesAndPalette();
|
||||
FillSummary();
|
||||
|
||||
//If a resize happened, this won't do anything because the new size is not reflected in the scroll area yet.
|
||||
//However, it will have been taken care of in SyncSizes() in that case, so it's ok.
|
||||
//However, it will have been taken care of in SyncSizes() in that case, so it's ok.
|
||||
//This is for when a new ember with the same size was loaded. If it was larger than the scroll area, and was scrolled, re-center it.
|
||||
if (m_Ember.m_FinalRasW == w && m_Ember.m_FinalRasH == h)
|
||||
m_Fractorium->CenterScrollbars();
|
||||
|
@ -206,7 +206,7 @@ public:
|
||||
|
||||
//Info.
|
||||
virtual void FillSummary() { }
|
||||
|
||||
|
||||
//Rendering/progress.
|
||||
virtual bool Render() { return false; }
|
||||
virtual bool CreateRenderer(eRendererType renderType, const vector<pair<size_t, size_t>>& devices, bool shared = true) { return false; }
|
||||
@ -232,7 +232,7 @@ protected:
|
||||
void AddProcessAction(eProcessAction action);
|
||||
eProcessAction CondenseAndClearProcessActions();
|
||||
eProcessState ProcessState() { return m_Renderer.get() ? m_Renderer->ProcessState() : NONE; }
|
||||
|
||||
|
||||
//Non-templated members.
|
||||
bool m_Rendering;
|
||||
bool m_Shared;
|
||||
@ -261,7 +261,7 @@ protected:
|
||||
Fractorium* m_Fractorium;
|
||||
QTimer* m_RenderTimer;
|
||||
QTimer* m_RenderRestartTimer;
|
||||
OpenCLInfo& m_Info;
|
||||
shared_ptr<OpenCLInfo> m_Info;
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
@ -434,7 +434,7 @@ public:
|
||||
virtual void XaosChanged(int x, int y, double val) override;
|
||||
virtual void ClearXaos() override;
|
||||
virtual void RandomXaos() override;
|
||||
|
||||
|
||||
//Palette.
|
||||
virtual int InitPaletteList(const string& s) override;
|
||||
virtual bool FillPaletteTable(const string& s) override;
|
||||
|
@ -8,20 +8,19 @@ void Fractorium::InitInfoUI()
|
||||
{
|
||||
auto treeHeader = ui.SummaryTree->header();
|
||||
auto tableHeader = ui.SummaryTable->horizontalHeader();
|
||||
|
||||
treeHeader->setVisible(true);
|
||||
treeHeader->setSectionsClickable(true);
|
||||
treeHeader->setSectionResizeMode(QHeaderView::ResizeToContents);
|
||||
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);
|
||||
SetFixedTableHeader(ui.SummaryTable->verticalHeader());
|
||||
|
||||
ui.SummaryTable->setItem(0, 0, m_InfoNameItem = new QTableWidgetItem(""));
|
||||
ui.SummaryTable->setItem(1, 0, m_InfoPaletteItem = new QTableWidgetItem(""));
|
||||
ui.SummaryTable->setItem(2, 0, m_Info3dItem = new QTableWidgetItem(""));
|
||||
ui.SummaryTable->setItem(3, 0, m_InfoXaosItem = new QTableWidgetItem(""));
|
||||
ui.SummaryTable->setItem(4, 0, m_InfoXformCountItem = new QTableWidgetItem(""));
|
||||
ui.SummaryTable->setItem(5, 0, m_InfoFinalXformItem = new QTableWidgetItem(""));
|
||||
ui.InfoTabWidget->setCurrentIndex(0);//Make summary tab focused by default.
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -93,7 +92,6 @@ void FractoriumEmberController<T>::FillSummary()
|
||||
m_Fractorium->m_InfoXaosItem->setText(m_Ember.XaosPresent() ? "Yes" : "No");
|
||||
m_Fractorium->m_InfoXformCountItem->setText(QString::number(m_Ember.XformCount()));
|
||||
m_Fractorium->m_InfoFinalXformItem->setText(m_Ember.UseFinalXform() ? "Yes" : "No");
|
||||
|
||||
QPixmap pixmap = QPixmap::fromImage(m_FinalPaletteImage);//Create a QPixmap out of the QImage.
|
||||
QSize size(table->columnWidth(0), table->rowHeight(1) + 1);
|
||||
m_Fractorium->m_InfoPaletteItem->setData(Qt::DecorationRole, pixmap.scaled(size, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
|
||||
@ -112,19 +110,18 @@ void FractoriumEmberController<T>::FillSummary()
|
||||
if (!m_Ember.IsFinalXform(xform) && index != -1)
|
||||
{
|
||||
item1->setText(0, "Xform " +
|
||||
QString::number(x + 1) +
|
||||
" (" + QLocale::system().toString(xform->m_Weight, pc, p) + ") (" +
|
||||
QLocale::system().toString(double(m_NormalizedWeights[index]), pc, p) + ") " +
|
||||
linked);
|
||||
QString::number(x + 1) +
|
||||
" (" + QLocale::system().toString(xform->m_Weight, pc, p) + ") (" +
|
||||
QLocale::system().toString(double(m_NormalizedWeights[index]), pc, p) + ") " +
|
||||
linked);
|
||||
}
|
||||
else
|
||||
item1->setText(0, "Final xform");
|
||||
|
||||
item1->setText(1, xform->m_Name.c_str());
|
||||
|
||||
auto affineItem = new QTreeWidgetItem(item1);
|
||||
affineItem->setText(0, "Affine");
|
||||
|
||||
|
||||
if (xform->m_Affine.IsZero())
|
||||
as += " Empty";
|
||||
else if (xform->m_Affine.IsID())
|
||||
@ -139,7 +136,6 @@ void FractoriumEmberController<T>::FillSummary()
|
||||
}
|
||||
|
||||
affineItem->setText(1, as);
|
||||
|
||||
auto colorIndexItem = new QTreeWidgetItem(item1);
|
||||
colorIndexItem->setText(0, "Color index");
|
||||
colorIndexItem->setText(1, QLocale::system().toString(xform->m_ColorX, pc, p));
|
||||
@ -147,15 +143,12 @@ void FractoriumEmberController<T>::FillSummary()
|
||||
color.setAlphaF(xform->m_Opacity);
|
||||
colorIndexItem->setBackgroundColor(1, color);
|
||||
colorIndexItem->setTextColor(1, VisibleColor(color));
|
||||
|
||||
auto colorSpeedItem = new QTreeWidgetItem(item1);
|
||||
colorSpeedItem->setText(0, "Color speed");
|
||||
colorSpeedItem->setText(1, QLocale::system().toString(xform->m_ColorSpeed, pc, p));
|
||||
|
||||
auto opacityItem = new QTreeWidgetItem(item1);
|
||||
opacityItem->setText(0, "Opacity");
|
||||
opacityItem->setText(1, QLocale::system().toString(xform->m_Opacity, pc, p));
|
||||
|
||||
auto dcItem = new QTreeWidgetItem(item1);
|
||||
dcItem->setText(0, "Direct color");
|
||||
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++))
|
||||
{
|
||||
auto vitem = new QTreeWidgetItem(item1);
|
||||
|
||||
vitem->setText(0, QString::fromStdString(var->Name()));
|
||||
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())
|
||||
{
|
||||
auto pitem = new QTreeWidgetItem(vitem);
|
||||
|
||||
pitem->setText(0, params[j].Name().c_str());
|
||||
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_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());
|
||||
|
||||
ui.InfoBoundsLabelUL->setText(QString(m_ULString));
|
||||
ui.InfoBoundsLabelUR->setText(QString(m_URString));
|
||||
ui.InfoBoundsLabelLR->setText(QString(m_LRString));
|
||||
ui.InfoBoundsLabelLL->setText(QString(m_LLString));
|
||||
ui.InfoBoundsLabelWH->setText(QString(m_WHString));
|
||||
|
||||
ui.InfoBoundsTable->item(0, 1)->setText(ToString<qulonglong>(r->GutterWidth()));
|
||||
|
||||
if (r->GetDensityFilter())
|
||||
{
|
||||
uint deWidth = (r->GetDensityFilter()->FilterWidth() * 2) + 1;
|
||||
|
||||
sprintf_s(m_DEString, 16, "%d x %d", deWidth, deWidth);
|
||||
ui.InfoBoundsTable->item(1, 1)->setText(QString(m_DEString));
|
||||
}
|
||||
|
@ -11,7 +11,6 @@ void Fractorium::InitParamsUI()
|
||||
double dmax = numeric_limits<double>::max();
|
||||
vector<string> comboVals;
|
||||
QTableWidget* table = ui.ColorTable;
|
||||
|
||||
//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
|
||||
//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.FilterTableHeader->horizontalHeader());
|
||||
SetFixedTableHeader(ui.IterationTableHeader->horizontalHeader());
|
||||
|
||||
//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_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_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_BackgroundColorButton = new QPushButton("...", table);
|
||||
m_BackgroundColorButton->setMinimumWidth(21);
|
||||
@ -37,11 +34,10 @@ void Fractorium::InitParamsUI()
|
||||
table->item(row, 1)->setTextAlignment(Qt::AlignRight | Qt::AlignVCenter);
|
||||
connect(m_BackgroundColorButton, SIGNAL(clicked(bool)), this, SLOT(OnBackgroundColorButtonClicked(bool)), Qt::QueuedConnection);
|
||||
row++;
|
||||
|
||||
comboVals.push_back("Step");
|
||||
comboVals.push_back("Linear");
|
||||
SetupCombo(table, this, row, 1, m_PaletteModeCombo, comboVals, SIGNAL(currentIndexChanged(int)), SLOT(OnPaletteModeComboCurrentIndexChanged(int)));
|
||||
|
||||
m_PaletteModeCombo->SetCurrentIndexStealth(PALETTE_LINEAR);
|
||||
//Geometry.
|
||||
row = 0;
|
||||
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_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);
|
||||
|
||||
//Set w/h max values.
|
||||
m_CenterXSpin->setDecimals(3);
|
||||
m_CenterYSpin->setDecimals(3);
|
||||
m_ZPosSpin->setDecimals(3);
|
||||
m_PerspectiveSpin->setDecimals(4);
|
||||
m_DepthBlurSpin->setDecimals(3);
|
||||
|
||||
//Filter.
|
||||
row = 0;
|
||||
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);
|
||||
|
||||
comboVals = SpatialFilterCreator<float>::FilterTypes();
|
||||
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);
|
||||
|
||||
comboVals = TemporalFilterCreator<float>::FilterTypes();
|
||||
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_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);
|
||||
|
||||
//Iteration.
|
||||
row = 0;
|
||||
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<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);
|
||||
|
||||
comboVals.clear();
|
||||
comboVals.push_back("Step");
|
||||
comboVals.push_back("Linear");
|
||||
SetupCombo(table, this, row, 1, m_AffineInterpTypeCombo, comboVals, SIGNAL(currentIndexChanged(int)), SLOT(OnAffineInterpTypeComboCurrentIndexChanged(int)));
|
||||
|
||||
comboVals.clear();
|
||||
comboVals.push_back("Linear");
|
||||
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; }); }
|
||||
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); }
|
||||
|
||||
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); }
|
||||
|
||||
template <typename T> void FractoriumEmberController<T>::DepthBlurChanged(double d) { Update([&] { m_Ember.m_CamDepthBlur = d; }); }
|
||||
@ -408,7 +395,7 @@ void Fractorium::OnFuseChanged(int d) { m_Controller->FuseChanged(d); }
|
||||
/// 20-50 is good for OpenCL.
|
||||
/// Above 500 seems to offer little additional value for final renders.
|
||||
/// Called when the quality spinner is changed.
|
||||
/// If rendering is done, and the value is greater than the last value,
|
||||
/// If rendering is done, and the value is greater than the last value,
|
||||
/// the rendering process is continued, else it's reset.
|
||||
/// </summary>
|
||||
/// <param name="d">The quality in terms of iterations per pixel</param>
|
||||
@ -545,20 +532,17 @@ void FractoriumEmberController<T>::FillParamTablesAndPalette()
|
||||
m_Fractorium->m_TemporalSamplesSpin->SetValueStealth(m_Ember.m_TemporalSamples);
|
||||
m_Fractorium->m_AffineInterpTypeCombo->SetCurrentIndexStealth(m_Ember.m_AffineInterp);
|
||||
m_Fractorium->m_InterpTypeCombo->SetCurrentIndexStealth(m_Ember.m_Interp);
|
||||
|
||||
//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.
|
||||
//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
|
||||
//called in response to that event, it is skipped here so must do it manually.
|
||||
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
|
||||
//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()
|
||||
//for an example.
|
||||
m_Fractorium->ResetPaletteControls();
|
||||
|
||||
auto temp = m_Ember.m_Palette.m_Filename;
|
||||
|
||||
if (temp.get())
|
||||
@ -578,7 +562,6 @@ template <typename T>
|
||||
void FractoriumEmberController<T>::ParamsToEmber(Ember<T>& ember)
|
||||
{
|
||||
QColor color = m_Fractorium->ui.ColorTable->item(5, 1)->backgroundColor();
|
||||
|
||||
ember.m_Brightness = m_Fractorium->m_BrightnessSpin->value();//Color.
|
||||
ember.m_Gamma = m_Fractorium->m_GammaSpin->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_AffineInterp = eAffineInterp(m_Fractorium->m_AffineInterpTypeCombo->currentIndex());
|
||||
ember.m_Interp = eInterp(m_Fractorium->m_InterpTypeCombo->currentIndex());
|
||||
|
||||
ember.SyncSize();
|
||||
}
|
||||
|
||||
@ -648,5 +630,5 @@ void Fractorium::SetScale(double scale)
|
||||
template class FractoriumEmberController<float>;
|
||||
|
||||
#ifdef DO_DOUBLE
|
||||
template class FractoriumEmberController<double>;
|
||||
template class FractoriumEmberController<double>;
|
||||
#endif
|
||||
|
@ -69,7 +69,7 @@ void FractoriumEmberControllerBase::Shutdown()
|
||||
StopRenderTimer(true);
|
||||
ClearFinalImages();
|
||||
|
||||
while(m_Fractorium->ui.GLDisplay->Drawing())
|
||||
while (m_Fractorium->ui.GLDisplay->Drawing())
|
||||
QApplication::processEvents();
|
||||
}
|
||||
|
||||
@ -136,7 +136,7 @@ void FractoriumEmberControllerBase::SaveCurrentRender(const QString& filename, c
|
||||
QFileInfo fileInfo(filename);
|
||||
QString suffix = fileInfo.suffix();
|
||||
FractoriumSettings* settings = m_Fractorium->m_Settings;
|
||||
|
||||
|
||||
//Ensure dimensions are valid.
|
||||
if (pixels.size() < (width * height * channels * bpc))
|
||||
{
|
||||
@ -145,14 +145,13 @@ void FractoriumEmberControllerBase::SaveCurrentRender(const QString& filename, c
|
||||
}
|
||||
|
||||
data = pixels.data();//Png and channels == 4.
|
||||
|
||||
|
||||
if ((suffix == "jpg" || suffix == "bmp") && channels)
|
||||
{
|
||||
RgbaToRgb(pixels, vecRgb, width, height);
|
||||
|
||||
data = vecRgb.data();
|
||||
}
|
||||
|
||||
|
||||
string s = filename.toStdString();
|
||||
string id = settings->Id().toStdString();
|
||||
string url = settings->Url().toStdString();
|
||||
@ -207,7 +206,7 @@ eProcessAction FractoriumEmberControllerBase::CondenseAndClearProcessActions()
|
||||
for (auto a : m_ProcessActions)
|
||||
if (a > action)
|
||||
action = a;
|
||||
|
||||
|
||||
m_ProcessActions.clear();
|
||||
m_Cs.Leave();
|
||||
return action;
|
||||
@ -226,7 +225,6 @@ template <typename T>
|
||||
int FractoriumEmberController<T>::ProgressFunc(Ember<T>& ember, void* foo, double fraction, int stage, double etaMs)
|
||||
{
|
||||
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.
|
||||
|
||||
if (stage == 0)
|
||||
@ -297,12 +295,10 @@ template <typename T>
|
||||
bool FractoriumEmberController<T>::Render()
|
||||
{
|
||||
m_Rendering = true;
|
||||
|
||||
bool success = true;
|
||||
GLWidget* gl = m_Fractorium->ui.GLDisplay;
|
||||
RendererCL<T, float>* rendererCL = nullptr;
|
||||
eProcessAction qualityAction, action;
|
||||
|
||||
//Quality is the only parameter we update inside the timer.
|
||||
//This is to allow the user to rapidly increase the quality spinner
|
||||
//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 scaledQuality = ToString(uint(m_Renderer->ScaledQuality()));
|
||||
string renderTime = m_RenderElapsedTimer.Format(m_RenderElapsedTimer.Toc());
|
||||
|
||||
m_Fractorium->m_ProgressBar->setValue(100);
|
||||
|
||||
//Only certain stats can be reported with OpenCL.
|
||||
@ -424,10 +419,9 @@ bool FractoriumEmberController<T>::Render()
|
||||
double percent = double(stats.m_Badvals) / double(stats.m_Iters);
|
||||
QString badVals = ToString<qulonglong>(stats.m_Badvals);
|
||||
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) + ".");
|
||||
}
|
||||
|
||||
|
||||
if (m_LastEditWasUndoRedo && (m_UndoIndex == m_UndoList.size() - 1))//Traversing through undo list, reached the end, so put back in regular edit mode.
|
||||
{
|
||||
m_EditState = REGULAR_EDIT;
|
||||
@ -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.
|
||||
{
|
||||
Ember<T> ember(m_UndoList[m_UndoIndex]);
|
||||
|
||||
ClearUndo();
|
||||
m_UndoList.push_back(ember);
|
||||
m_UndoList.push_back(m_Ember);
|
||||
@ -458,15 +451,15 @@ bool FractoriumEmberController<T>::Render()
|
||||
m_Fractorium->UpdateHistogramBounds();//Mostly of engineering interest.
|
||||
FillSummary();//Only update summary on render completion since it's not the type of thing the user needs real-time updates on.
|
||||
}
|
||||
|
||||
|
||||
//Update the GL window on start because the output will be forced.
|
||||
//Update it on finish because the rendering process is completely done.
|
||||
if (iterBegin || ProcessState() == ACCUM_DONE)
|
||||
{
|
||||
if (m_FinalImage.size() == m_Renderer->FinalBufferSize())//Make absolutely sure the correct amount of data is passed.
|
||||
gl->update();
|
||||
//gl->repaint();
|
||||
|
||||
|
||||
//gl->repaint();
|
||||
//m_Fractorium->update();
|
||||
//m_Fractorium->ui.GLParentScrollArea->update();
|
||||
//Uncomment for debugging kernel build and execution errors.
|
||||
@ -482,13 +475,12 @@ bool FractoriumEmberController<T>::Render()
|
||||
else//Something went very wrong, show error report.
|
||||
{
|
||||
vector<string> errors = m_Renderer->ErrorReport();
|
||||
|
||||
success = false;
|
||||
m_FailedRenders++;
|
||||
m_Fractorium->m_RenderStatusLabel->setText("Rendering failed, see info tab. Try changing parameters.");
|
||||
m_Fractorium->ErrorReportToQTextEdit(errors, m_Fractorium->ui.InfoRenderingTextEdit);
|
||||
m_Renderer->ClearErrorReport();
|
||||
|
||||
|
||||
if (m_FailedRenders >= 3)
|
||||
{
|
||||
m_Rendering = false;
|
||||
@ -500,19 +492,18 @@ bool FractoriumEmberController<T>::Render()
|
||||
if (rendererCL)
|
||||
{
|
||||
//string s = "OpenCL Kernels: \r\n" + rendererCL->IterKernel() + "\r\n" + rendererCL->DEKernel() + "\r\n" + rendererCL->FinalAccumKernel();
|
||||
|
||||
rendererCL->ClearFinal();
|
||||
//QMetaObject::invokeMethod(m_Fractorium->ui.InfoRenderingTextEdit, "setText", Qt::QueuedConnection, Q_ARG(const QString&, QString::fromStdString(s)));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//Upon finishing, or having nothing to do, rest.
|
||||
if (ProcessState() == ACCUM_DONE)
|
||||
QThread::msleep(1);
|
||||
//QApplication::processEvents();
|
||||
|
||||
//QApplication::processEvents();
|
||||
m_Rendering = false;
|
||||
return success;
|
||||
}
|
||||
@ -536,7 +527,6 @@ bool FractoriumEmberController<T>::CreateRenderer(eRendererType renderType, cons
|
||||
{
|
||||
EmberReport emberReport;
|
||||
vector<string> errorReport;
|
||||
|
||||
DeleteRenderer();//Delete the renderer and refresh the textures.
|
||||
//Before starting, must take care of allocations.
|
||||
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)
|
||||
{
|
||||
auto val = 30 * m_Fractorium->m_Settings->Devices().size();
|
||||
|
||||
m_Fractorium->m_QualitySpin->DoubleClickZero(val);
|
||||
m_Fractorium->m_QualitySpin->DoubleClickNonZero(val);
|
||||
|
||||
@ -588,14 +577,14 @@ bool FractoriumEmberController<T>::CreateRenderer(eRendererType renderType, cons
|
||||
m_Renderer->YAxisUp(s->YAxisUp());
|
||||
m_Renderer->ThreadCount(s->ThreadCount());
|
||||
m_Renderer->Transparency(s->Transparency());
|
||||
|
||||
|
||||
if (m_Renderer->RendererType() == CPU_RENDERER)
|
||||
m_Renderer->InteractiveFilter(s->CpuDEFilter() ? FILTER_DE : FILTER_LOG);
|
||||
else
|
||||
m_Renderer->InteractiveFilter(s->OpenCLDEFilter() ? FILTER_DE : FILTER_LOG);
|
||||
|
||||
if ((m_Renderer->EarlyClip() != m_PreviewRenderer->EarlyClip()) ||
|
||||
(m_Renderer->YAxisUp() != m_PreviewRenderer->YAxisUp()))
|
||||
(m_Renderer->YAxisUp() != m_PreviewRenderer->YAxisUp()))
|
||||
{
|
||||
StopPreviewRender();
|
||||
m_PreviewRenderer->EarlyClip(m_Renderer->EarlyClip());
|
||||
@ -635,9 +624,9 @@ void Fractorium::ShutdownAndRecreateFromOptions()
|
||||
bool Fractorium::CreateRendererFromOptions()
|
||||
{
|
||||
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());
|
||||
|
||||
|
||||
//The most important option to process is what kind of renderer is desired, so do it first.
|
||||
if (!m_Controller->CreateRenderer((useOpenCL && !v.empty()) ? OPENCL_RENDERER : CPU_RENDERER, v))
|
||||
{
|
||||
@ -660,13 +649,12 @@ bool Fractorium::CreateRendererFromOptions()
|
||||
bool Fractorium::CreateControllerFromOptions()
|
||||
{
|
||||
bool ok = true;
|
||||
|
||||
size_t elementSize =
|
||||
#ifdef DO_DOUBLE
|
||||
m_Settings->Double() ? sizeof(double) :
|
||||
#endif
|
||||
sizeof(float);
|
||||
|
||||
|
||||
if (!m_Controller.get() || (m_Controller->SizeOfT() != elementSize))
|
||||
{
|
||||
double hue = m_PaletteHueSpin->value();
|
||||
@ -690,11 +678,9 @@ bool Fractorium::CreateControllerFromOptions()
|
||||
if (m_Controller.get())
|
||||
{
|
||||
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
|
||||
//m_Controller->CopyEmber(ed);
|
||||
//m_Controller->CopyEmberFile(efd);
|
||||
|
||||
#ifdef DO_DOUBLE
|
||||
m_Controller->CopyEmber(ed, [&](Ember<double>& ember) { });
|
||||
m_Controller->CopyEmberFile(efd, [&](Ember<double>& ember) { });
|
||||
@ -706,6 +692,7 @@ bool Fractorium::CreateControllerFromOptions()
|
||||
}
|
||||
|
||||
#ifdef DO_DOUBLE
|
||||
|
||||
if (m_Settings->Double())
|
||||
m_Controller = unique_ptr<FractoriumEmberControllerBase>(new FractoriumEmberController<double>(this));
|
||||
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.
|
||||
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);
|
||||
|
||||
//Setting these and updating the GUI overwrites the work of clearing them done in SetEmber() above.
|
||||
//It's a corner case, but doesn't seem to matter.
|
||||
m_PaletteHueSpin->SetValueStealth(hue);
|
||||
@ -728,7 +714,6 @@ bool Fractorium::CreateControllerFromOptions()
|
||||
m_PaletteBlurSpin->SetValueStealth(blur);
|
||||
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.
|
||||
|
||||
//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.
|
||||
//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>;
|
||||
|
||||
#ifdef DO_DOUBLE
|
||||
template class FractoriumEmberController<double>;
|
||||
template class FractoriumEmberController<double>;
|
||||
#endif
|
||||
|
@ -10,11 +10,9 @@ void Fractorium::InitToolbarUI()
|
||||
auto clGroup = new QActionGroup(this);
|
||||
clGroup->addAction(ui.ActionCpu);
|
||||
clGroup->addAction(ui.ActionCL);
|
||||
|
||||
auto spGroup = new QActionGroup(this);
|
||||
spGroup->addAction(ui.ActionSP);
|
||||
spGroup->addAction(ui.ActionDP);
|
||||
|
||||
SyncOptionsToToolbar();
|
||||
connect(ui.ActionCpu, SIGNAL(triggered(bool)), this, SLOT(OnActionCpu(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>
|
||||
void Fractorium::SyncOptionsToToolbar()
|
||||
{
|
||||
static bool openCL = !OpenCLInfo::Instance().Devices().empty();
|
||||
static bool openCL = !m_Info->Devices().empty();
|
||||
|
||||
if (!openCL)
|
||||
{
|
||||
|
@ -9,36 +9,30 @@
|
||||
/// <param name="p">The parent widget. Default: nullptr.</param>
|
||||
/// <param name="f">The window flags. Default: 0.</param>
|
||||
FractoriumOptionsDialog::FractoriumOptionsDialog(FractoriumSettings* settings, QWidget* p, Qt::WindowFlags f)
|
||||
: QDialog(p, f),
|
||||
m_Info(OpenCLInfo::Instance())
|
||||
: QDialog(p, f)
|
||||
{
|
||||
int i, row = 0, spinHeight = 20;
|
||||
|
||||
ui.setupUi(this);
|
||||
m_Settings = settings;
|
||||
m_Info = OpenCLInfo::Instance();
|
||||
QTableWidget* table = ui.OptionsXmlSavingTable;
|
||||
ui.ThreadCountSpin->setRange(1, Timing::ProcessorCount());
|
||||
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);
|
||||
|
||||
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_XmlSupersampleSpin, spinHeight, 1, 4, 1, "", "", true, 2);
|
||||
|
||||
m_IdEdit = new QLineEdit(ui.OptionsIdentityTable);
|
||||
ui.OptionsIdentityTable->setCellWidget(0, 1, m_IdEdit);
|
||||
|
||||
m_UrlEdit = new QLineEdit(ui.OptionsIdentityTable);
|
||||
ui.OptionsIdentityTable->setCellWidget(1, 1, m_UrlEdit);
|
||||
|
||||
m_NickEdit = new QLineEdit(ui.OptionsIdentityTable);
|
||||
ui.OptionsIdentityTable->setCellWidget(2, 1, m_NickEdit);
|
||||
|
||||
table = ui.DeviceTable;
|
||||
table->clearContents();
|
||||
table->setRowCount(0);
|
||||
|
||||
if (m_Info.Ok() && !m_Info.Devices().empty())
|
||||
if (m_Info->Ok() && !m_Info->Devices().empty())
|
||||
{
|
||||
SetupDeviceTable(table, m_Settings->Devices());
|
||||
|
||||
@ -122,7 +116,6 @@ void FractoriumOptionsDialog::OnDeviceTableRadioToggled(bool checked)
|
||||
void FractoriumOptionsDialog::OnOpenCLCheckBoxStateChanged(int state)
|
||||
{
|
||||
bool checked = state == Qt::Checked;
|
||||
|
||||
ui.DeviceTable->setEnabled(checked);
|
||||
ui.ThreadCountSpin->setEnabled(!checked);
|
||||
ui.CpuSubBatchSpin->setEnabled(!checked);
|
||||
@ -186,13 +179,11 @@ void FractoriumOptionsDialog::GuiToData()
|
||||
m_Settings->CpuDEFilter(ui.CpuFilteringDERadioButton->isChecked());
|
||||
m_Settings->OpenCLDEFilter(ui.OpenCLFilteringDERadioButton->isChecked());
|
||||
m_Settings->Devices(DeviceTableToSettings(ui.DeviceTable));
|
||||
|
||||
//Xml saving.
|
||||
m_Settings->XmlTemporalSamples(m_XmlTemporalSamplesSpin->value());
|
||||
m_Settings->XmlQuality(m_XmlQualitySpin->value());
|
||||
m_Settings->XmlSupersample(m_XmlSupersampleSpin->value());
|
||||
m_Settings->SaveAutoUnique(AutoUnique());
|
||||
|
||||
//Identity.
|
||||
m_Settings->Id(m_IdEdit->text());
|
||||
m_Settings->Url(m_UrlEdit->text());
|
||||
@ -206,7 +197,6 @@ void FractoriumOptionsDialog::DataToGui()
|
||||
{
|
||||
//Interactive rendering.
|
||||
auto devices = m_Settings->Devices();
|
||||
|
||||
ui.EarlyClipCheckBox->setChecked(m_Settings->EarlyClip());
|
||||
ui.YAxisUpCheckBox->setChecked(m_Settings->YAxisUp());
|
||||
ui.TransparencyCheckBox->setChecked(m_Settings->Transparency());
|
||||
@ -235,7 +225,6 @@ void FractoriumOptionsDialog::DataToGui()
|
||||
m_XmlQualitySpin->setValue(m_Settings->XmlQuality());
|
||||
m_XmlSupersampleSpin->setValue(m_Settings->XmlSupersample());
|
||||
ui.AutoUniqueCheckBox->setChecked(m_Settings->SaveAutoUnique());
|
||||
|
||||
//Identity.
|
||||
m_IdEdit->setText(m_Settings->Id());
|
||||
m_UrlEdit->setText(m_Settings->Url());
|
||||
|
@ -52,7 +52,7 @@ private:
|
||||
void GuiToData();
|
||||
|
||||
Ui::OptionsDialog ui;
|
||||
OpenCLInfo& m_Info;
|
||||
shared_ptr<OpenCLInfo> m_Info;
|
||||
SpinBox* m_XmlTemporalSamplesSpin;
|
||||
SpinBox* m_XmlQualitySpin;
|
||||
SpinBox* m_XmlSupersampleSpin;
|
||||
|
Loading…
Reference in New Issue
Block a user