More linux work.

This commit is contained in:
mfeemster 2014-12-10 21:50:15 -08:00
parent 0438827ba5
commit a9ecb6a78e
61 changed files with 1415 additions and 627 deletions

View File

@ -1,154 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<CodeBlocks_layout_file> <CodeBlocks_layout_file>
<ActiveTarget name="Release x64" /> <ActiveTarget name="Release x64" />
<File name="../../Source/Ember/SpatialFilter.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0"> <File name="../../Source/Ember/Variations04.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor> <Cursor>
<Cursor1 position="3789" topLine="98" /> <Cursor1 position="90092" topLine="2971" />
</Cursor>
</File>
<File name="../../Source/Ember/Xform.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="11593" topLine="422" />
</Cursor>
</File>
<File name="../../Source/Ember/DllMain.cpp" open="0" top="0" tabpos="2" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="0" topLine="0" />
</Cursor>
</File>
<File name="../../Source/Ember/RendererBase.h" open="0" top="0" tabpos="1" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="6894" topLine="183" />
</Cursor>
</File>
<File name="../../Source/Ember/Variations01.h" open="0" top="0" tabpos="12" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="24427" topLine="850" />
</Cursor>
</File>
<File name="../../Source/Ember/SheepTools.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="17291" topLine="598" />
</Cursor>
</File>
<File name="../../Source/Ember/VariationsDC.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="22857" topLine="672" />
</Cursor>
</File>
<File name="../../Source/Ember/VariationList.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="14159" topLine="419" />
</Cursor>
</File>
<File name="../../Source/Ember/Interpolate.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="18225" topLine="507" />
</Cursor>
</File>
<File name="../../Source/Ember/Ember.h" open="0" top="0" tabpos="8" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="39146" topLine="1242" />
</Cursor>
</File>
<File name="../../Source/Ember/Variations03.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="121967" topLine="3845" />
</Cursor>
</File>
<File name="../../Source/Ember/EmberToXml.h" open="0" top="0" tabpos="4" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="21325" topLine="635" />
</Cursor>
</File>
<File name="../../Source/Ember/Renderer.cpp" open="0" top="0" tabpos="18" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="54173" topLine="1346" />
</Cursor>
</File>
<File name="../../Source/Ember/Utils.h" open="0" top="0" tabpos="6" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="21157" topLine="689" />
</Cursor>
</File>
<File name="../../Source/Ember/TemporalFilter.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="9058" topLine="269" />
</Cursor>
</File>
<File name="../../Source/Ember/Isaac.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="8233" topLine="210" />
</Cursor>
</File>
<File name="../../Source/Ember/Timing.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="3212" topLine="91" />
</Cursor>
</File>
<File name="../../Source/Ember/EmberDefines.h" open="0" top="0" tabpos="3" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="1899" topLine="57" />
</Cursor>
</File>
<File name="../../Source/Ember/Renderer.h" open="0" top="0" tabpos="16" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="4461" topLine="77" />
</Cursor>
</File>
<File name="../../Source/Ember/EmberPch.h" open="0" top="0" tabpos="2" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="314" topLine="0" />
</Cursor>
</File>
<File name="../../Source/Ember/Palette.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="14170" topLine="295" />
</Cursor>
</File>
<File name="../../Source/Ember/DensityFilter.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="5542" topLine="173" />
</Cursor>
</File>
<File name="../../Source/Ember/XmlToEmber.h" open="0" top="0" tabpos="5" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="17930" topLine="385" />
</Cursor>
</File>
<File name="../../Source/Ember/Affine2D.cpp" open="0" top="0" tabpos="14" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="10791" topLine="325" />
</Cursor>
</File>
<File name="../../Source/Ember/CarToRas.h" open="0" top="0" tabpos="7" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="4534" topLine="119" />
</Cursor>
</File>
<File name="../../Source/Ember/RendererBase.cpp" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="14912" topLine="437" />
</Cursor>
</File>
<File name="../../Source/Ember/EmberPch.cpp" open="0" top="0" tabpos="4" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="0" topLine="0" />
</Cursor>
</File>
<File name="../../Source/Ember/Variations02.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="325" topLine="3" />
</Cursor>
</File>
<File name="../../Source/Ember/Point.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="3621" topLine="148" />
</Cursor>
</File>
<File name="../../Source/Ember/Variations05.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="59509" topLine="1823" />
</Cursor> </Cursor>
</File> </File>
<File name="../../Source/Ember/Iterator.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0"> <File name="../../Source/Ember/Iterator.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
@ -156,14 +11,99 @@
<Cursor1 position="2705" topLine="57" /> <Cursor1 position="2705" topLine="57" />
</Cursor> </Cursor>
</File> </File>
<File name="../../Source/Ember/Palette.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="14170" topLine="295" />
</Cursor>
</File>
<File name="../../Source/Ember/Variations01.h" open="0" top="0" tabpos="12" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="24427" topLine="850" />
</Cursor>
</File>
<File name="../../Source/Ember/Point.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="3621" topLine="148" />
</Cursor>
</File>
<File name="../../Source/Ember/Variation.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0"> <File name="../../Source/Ember/Variation.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor> <Cursor>
<Cursor1 position="23279" topLine="1073" /> <Cursor1 position="23279" topLine="1073" />
</Cursor> </Cursor>
</File> </File>
<File name="../../Source/Ember/Affine2D.h" open="0" top="0" tabpos="13" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0"> <File name="../../Source/Ember/CarToRas.h" open="0" top="0" tabpos="7" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor> <Cursor>
<Cursor1 position="2877" topLine="81" /> <Cursor1 position="4534" topLine="119" />
</Cursor>
</File>
<File name="../../Source/Ember/VariationList.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="14159" topLine="419" />
</Cursor>
</File>
<File name="../../Source/Ember/Xform.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="11593" topLine="422" />
</Cursor>
</File>
<File name="../../Source/Ember/Timing.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="3212" topLine="91" />
</Cursor>
</File>
<File name="../../Source/Ember/DensityFilter.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="5542" topLine="173" />
</Cursor>
</File>
<File name="../../Source/Ember/RendererBase.h" open="0" top="0" tabpos="1" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="6894" topLine="183" />
</Cursor>
</File>
<File name="../../Source/Ember/VariationsDC.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="22857" topLine="672" />
</Cursor>
</File>
<File name="../../Source/Ember/Utils.h" open="0" top="0" tabpos="6" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="21157" topLine="689" />
</Cursor>
</File>
<File name="../../Source/Ember/Renderer.cpp" open="0" top="0" tabpos="18" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="54173" topLine="1346" />
</Cursor>
</File>
<File name="../../Source/Ember/Variations02.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="325" topLine="3" />
</Cursor>
</File>
<File name="../../Source/Ember/EmberToXml.h" open="0" top="0" tabpos="4" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="21325" topLine="635" />
</Cursor>
</File>
<File name="../../Source/Ember/Affine2D.cpp" open="0" top="0" tabpos="14" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="9859" topLine="325" />
</Cursor>
</File>
<File name="../../Source/Ember/XmlToEmber.h" open="0" top="0" tabpos="5" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="17930" topLine="385" />
</Cursor>
</File>
<File name="../../Source/Ember/Isaac.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="8233" topLine="210" />
</Cursor>
</File>
<File name="../../Source/Ember/Ember.h" open="0" top="0" tabpos="8" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="39146" topLine="1242" />
</Cursor> </Cursor>
</File> </File>
<File name="../../Source/Ember/Ember.cpp" open="0" top="0" tabpos="15" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0"> <File name="../../Source/Ember/Ember.cpp" open="0" top="0" tabpos="15" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
@ -171,9 +111,34 @@
<Cursor1 position="14346" topLine="378" /> <Cursor1 position="14346" topLine="378" />
</Cursor> </Cursor>
</File> </File>
<File name="../../Source/Ember/Variations04.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0"> <File name="../../Source/Ember/DllMain.cpp" open="0" top="0" tabpos="2" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor> <Cursor>
<Cursor1 position="90092" topLine="2971" /> <Cursor1 position="0" topLine="0" />
</Cursor>
</File>
<File name="../../Source/Ember/EmberDefines.h" open="0" top="0" tabpos="3" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="1899" topLine="57" />
</Cursor>
</File>
<File name="../../Source/Ember/Interpolate.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="18225" topLine="507" />
</Cursor>
</File>
<File name="../../Source/Ember/Affine2D.h" open="0" top="0" tabpos="13" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="2877" topLine="81" />
</Cursor>
</File>
<File name="../../Source/Ember/Variations03.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="121967" topLine="3845" />
</Cursor>
</File>
<File name="../../Source/Ember/EmberPch.cpp" open="0" top="0" tabpos="4" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="0" topLine="0" />
</Cursor> </Cursor>
</File> </File>
<File name="../../Source/Ember/PaletteList.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0"> <File name="../../Source/Ember/PaletteList.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
@ -181,4 +146,39 @@
<Cursor1 position="4617" topLine="160" /> <Cursor1 position="4617" topLine="160" />
</Cursor> </Cursor>
</File> </File>
<File name="../../Source/Ember/EmberPch.h" open="0" top="0" tabpos="2" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="314" topLine="0" />
</Cursor>
</File>
<File name="../../Source/Ember/Variations05.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="59509" topLine="1823" />
</Cursor>
</File>
<File name="../../Source/Ember/Renderer.h" open="0" top="0" tabpos="16" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="4461" topLine="77" />
</Cursor>
</File>
<File name="../../Source/Ember/TemporalFilter.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="9058" topLine="269" />
</Cursor>
</File>
<File name="../../Source/Ember/SheepTools.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="17291" topLine="598" />
</Cursor>
</File>
<File name="../../Source/Ember/SpatialFilter.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="3789" topLine="98" />
</Cursor>
</File>
<File name="../../Source/Ember/RendererBase.cpp" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="14912" topLine="437" />
</Cursor>
</File>
</CodeBlocks_layout_file> </CodeBlocks_layout_file>

View File

@ -1,69 +1,64 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<CodeBlocks_layout_file> <CodeBlocks_layout_file>
<ActiveTarget name="Release x64" /> <ActiveTarget name="Release x64" />
<File name="../../Source/EmberCL/FinalAccumOpenCLKernelCreator.cpp" open="0" top="0" tabpos="9" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="23124" topLine="478" />
</Cursor>
</File>
<File name="../../Source/EmberCL/EmberCLStructs.h" open="0" top="0" tabpos="16" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0"> <File name="../../Source/EmberCL/EmberCLStructs.h" open="0" top="0" tabpos="16" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor> <Cursor>
<Cursor1 position="10704" topLine="341" /> <Cursor1 position="10704" topLine="341" />
</Cursor> </Cursor>
</File> </File>
<File name="../../Source/EmberCL/OpenCLWrapper.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="5054" topLine="127" />
</Cursor>
</File>
<File name="../../Source/EmberCL/IterOpenCLKernelCreator.h" open="0" top="0" tabpos="15" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0"> <File name="../../Source/EmberCL/IterOpenCLKernelCreator.h" open="0" top="0" tabpos="15" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor> <Cursor>
<Cursor1 position="1445" topLine="29" /> <Cursor1 position="1445" topLine="29" />
</Cursor> </Cursor>
</File> </File>
<File name="../../Source/EmberCL/EmberCLFunctions.h" open="0" top="0" tabpos="7" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="7346" topLine="309" />
</Cursor>
</File>
<File name="../../Source/EmberCL/DEOpenCLKernelCreator.cpp" open="0" top="0" tabpos="10" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0"> <File name="../../Source/EmberCL/DEOpenCLKernelCreator.cpp" open="0" top="0" tabpos="10" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor> <Cursor>
<Cursor1 position="7955" topLine="174" /> <Cursor1 position="7955" topLine="174" />
</Cursor> </Cursor>
</File> </File>
<File name="../../Source/EmberCL/RendererCL.cpp" open="0" top="0" tabpos="2" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="58613" topLine="1449" />
</Cursor>
</File>
<File name="../../Source/EmberCL/EmberCLPch.h" open="0" top="0" tabpos="12" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="794" topLine="2" />
</Cursor>
</File>
<File name="../../Source/EmberCL/DEOpenCLKernelCreator.h" open="0" top="0" tabpos="14" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="2365" topLine="35" />
</Cursor>
</File>
<File name="../../Source/EmberCL/FinalAccumOpenCLKernelCreator.h" open="0" top="0" tabpos="17" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="3386" topLine="37" />
</Cursor>
</File>
<File name="../../Source/EmberCL/RendererCL.h" open="0" top="0" tabpos="1" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="1822" topLine="38" />
</Cursor>
</File>
<File name="../../Source/EmberCL/OpenCLWrapper.cpp" open="0" top="0" tabpos="11" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0"> <File name="../../Source/EmberCL/OpenCLWrapper.cpp" open="0" top="0" tabpos="11" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor> <Cursor>
<Cursor1 position="39340" topLine="1173" /> <Cursor1 position="39340" topLine="1173" />
</Cursor> </Cursor>
</File> </File>
<File name="../../Source/EmberCL/IterOpenCLKernelCreator.cpp" open="0" top="0" tabpos="8" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0"> <File name="../../Source/EmberCL/FinalAccumOpenCLKernelCreator.h" open="0" top="0" tabpos="17" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor> <Cursor>
<Cursor1 position="28977" topLine="799" /> <Cursor1 position="3386" topLine="37" />
</Cursor>
</File>
<File name="../../Source/EmberCL/EmberCLFunctions.h" open="0" top="0" tabpos="7" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="7346" topLine="309" />
</Cursor>
</File>
<File name="../../Source/EmberCL/RendererCL.cpp" open="0" top="0" tabpos="2" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="58613" topLine="1449" />
</Cursor>
</File>
<File name="../../Source/EmberCL/DEOpenCLKernelCreator.h" open="0" top="0" tabpos="14" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="2365" topLine="35" />
</Cursor>
</File>
<File name="../../Source/EmberCL/OpenCLWrapper.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="5054" topLine="127" />
</Cursor>
</File>
<File name="../../Source/EmberCL/RendererCL.h" open="0" top="0" tabpos="1" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="1822" topLine="38" />
</Cursor>
</File>
<File name="../../Source/EmberCL/EmberCLPch.h" open="0" top="0" tabpos="12" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="794" topLine="2" />
</Cursor>
</File>
<File name="../../Source/EmberCL/FinalAccumOpenCLKernelCreator.cpp" open="0" top="0" tabpos="9" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="23124" topLine="478" />
</Cursor> </Cursor>
</File> </File>
<File name="../../Source/EmberCL/DllMain.cpp" open="0" top="0" tabpos="6" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0"> <File name="../../Source/EmberCL/DllMain.cpp" open="0" top="0" tabpos="6" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
@ -71,4 +66,9 @@
<Cursor1 position="0" topLine="0" /> <Cursor1 position="0" topLine="0" />
</Cursor> </Cursor>
</File> </File>
<File name="../../Source/EmberCL/IterOpenCLKernelCreator.cpp" open="0" top="0" tabpos="8" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="28977" topLine="799" />
</Cursor>
</File>
</CodeBlocks_layout_file> </CodeBlocks_layout_file>

View File

@ -1,39 +1,34 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<CodeBlocks_layout_file> <CodeBlocks_layout_file>
<ActiveTarget name="Release x64" /> <ActiveTarget name="Release x64" />
<File name="../../Source/EmberGenome/EmberGenome.cpp" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="21828" topLine="752" />
</Cursor>
</File>
<File name="../../Source/EmberCommon/JpegUtils.h" open="1" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="0" topLine="0" />
</Cursor>
</File>
<File name="../../Source/EmberCommon/SimpleGlob.h" open="1" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="0" topLine="0" />
</Cursor>
</File>
<File name="../../Source/EmberCommon/EmberCommon.h" open="1" top="0" tabpos="1" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="0" topLine="0" />
</Cursor>
</File>
<File name="../../Source/EmberCommon/EmberCommonPch.cpp" open="1" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0"> <File name="../../Source/EmberCommon/EmberCommonPch.cpp" open="1" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor> <Cursor>
<Cursor1 position="0" topLine="0" /> <Cursor1 position="0" topLine="0" />
</Cursor> </Cursor>
</File> </File>
<File name="../../Source/EmberCommon/EmberOptions.h" open="1" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="0" topLine="0" />
</Cursor>
</File>
<File name="../../Source/EmberCommon/SimpleOpt.h" open="1" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0"> <File name="../../Source/EmberCommon/SimpleOpt.h" open="1" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor> <Cursor>
<Cursor1 position="0" topLine="0" /> <Cursor1 position="0" topLine="0" />
</Cursor> </Cursor>
</File> </File>
<File name="../../Source/EmberCommon/JpegUtils.h" open="1" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="0" topLine="0" />
</Cursor>
</File>
<File name="../../Source/EmberCommon/EmberCommon.h" open="0" top="0" tabpos="1" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="0" topLine="0" />
</Cursor>
</File>
<File name="../../Source/EmberCommon/SimpleGlob.h" open="1" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="0" topLine="0" />
</Cursor>
</File>
<File name="../../Source/EmberGenome/EmberGenome.cpp" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="21828" topLine="752" />
</Cursor>
</File>
</CodeBlocks_layout_file> </CodeBlocks_layout_file>

View File

@ -6,14 +6,9 @@
<Cursor1 position="6646" topLine="170" /> <Cursor1 position="6646" topLine="170" />
</Cursor> </Cursor>
</File> </File>
<File name="../../Source/EmberCommon/EmberOptions.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0"> <File name="../../Source/EmberCommon/EmberCommon.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor> <Cursor>
<Cursor1 position="3660" topLine="147" /> <Cursor1 position="2710" topLine="73" />
</Cursor>
</File>
<File name="../../Source/EmberCommon/EmberCommonPch.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="546" topLine="0" />
</Cursor> </Cursor>
</File> </File>
<File name="../../Source/EmberCommon/SimpleOpt.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0"> <File name="../../Source/EmberCommon/SimpleOpt.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
@ -21,9 +16,14 @@
<Cursor1 position="19841" topLine="580" /> <Cursor1 position="19841" topLine="580" />
</Cursor> </Cursor>
</File> </File>
<File name="../../Source/EmberRender/EmberRender.cpp" open="1" top="1" tabpos="1" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0"> <File name="../../Source/EmberRender/EmberRender.cpp" open="0" top="0" tabpos="1" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor> <Cursor>
<Cursor1 position="11353" topLine="330" /> <Cursor1 position="11033" topLine="315" />
</Cursor>
</File>
<File name="../../Source/EmberCommon/EmberOptions.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="3660" topLine="147" />
</Cursor> </Cursor>
</File> </File>
<File name="../../Source/EmberCommon/SimpleGlob.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0"> <File name="../../Source/EmberCommon/SimpleGlob.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
@ -31,9 +31,9 @@
<Cursor1 position="28888" topLine="905" /> <Cursor1 position="28888" topLine="905" />
</Cursor> </Cursor>
</File> </File>
<File name="../../Source/EmberCommon/EmberCommon.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0"> <File name="../../Source/EmberCommon/EmberCommonPch.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor> <Cursor>
<Cursor1 position="2710" topLine="73" /> <Cursor1 position="546" topLine="0" />
</Cursor> </Cursor>
</File> </File>
</CodeBlocks_layout_file> </CodeBlocks_layout_file>

View File

@ -1,6 +1,7 @@
TEMPLATE = lib TEMPLATE = lib
CONFIG += shared CONFIG += shared
CONFIG += warn_off CONFIG += warn_off
CONFIG += precompile_header
CONFIG -= app_bundle CONFIG -= app_bundle
CONFIG -= qt CONFIG -= qt
VERSION = 0.1.4.7 VERSION = 0.1.4.7
@ -13,6 +14,7 @@ LIBS += -L/usr/lib/x86_64-linux-gnu -lxml2
INCLUDEPATH += /usr/include/glm INCLUDEPATH += /usr/include/glm
INCLUDEPATH += /usr/include/tbb INCLUDEPATH += /usr/include/tbb
INCLUDEPATH += /usr/include/libxml2 INCLUDEPATH += /usr/include/libxml2
INCLUDEPATH += ../../../Source/Ember
QMAKE_CXXFLAGS += -O2 QMAKE_CXXFLAGS += -O2
QMAKE_CXXFLAGS += -march=k8 QMAKE_CXXFLAGS += -march=k8
@ -47,6 +49,8 @@ QMAKE_CXXFLAGS += -DBUILDING_EMBER
QMAKE_LFLAGS += -s QMAKE_LFLAGS += -s
PRECOMPILED_HEADER = ../../../Source/Ember/EmberPch.h
SOURCES += \ SOURCES += \
../../../Source/Ember/Affine2D.cpp \ ../../../Source/Ember/Affine2D.cpp \
../../../Source/Ember/DllMain.cpp \ ../../../Source/Ember/DllMain.cpp \

View File

@ -0,0 +1,77 @@
TEMPLATE = app
CONFIG += console
CONFIG += warn_off
CONFIG += precompile_header
CONFIG -= app_bundle
CONFIG -= qt
VERSION = 0.1.4.7
DESTDIR = ../../../Bin
LIBS += -L/usr/lib -lOpenCL
LIBS += -L/usr/lib -lGL
LIBS += -L/usr/lib -ljpeg
LIBS += -L/usr/lib -lpng
LIBS += -L/usr/lib/x86_64-linux-gnu -lxml2
LIBS += -L../../../Bin -lEmber
LIBS += -L../../../Bin -lEmberCL
INCLUDEPATH += /usr/include/CL
INCLUDEPATH += /usr/include/GL
INCLUDEPATH += /usr/include/glm
INCLUDEPATH += /usr/include/tbb
INCLUDEPATH += /usr/include/libxml2
INCLUDEPATH += ../../../Source/Ember
INCLUDEPATH += ../../../Source/EmberCL
INCLUDEPATH += ../../../Source/EmberCommon
QMAKE_CXXFLAGS += -O2
QMAKE_CXXFLAGS += -march=k8
QMAKE_CXXFLAGS += -fPIC
QMAKE_CXXFLAGS += -fpermissive
QMAKE_CXXFLAGS += -fomit-frame-pointer
QMAKE_CXXFLAGS += -pedantic
QMAKE_CXXFLAGS += -std=c++11
QMAKE_CXXFLAGS += -Wnon-virtual-dtor
QMAKE_CXXFLAGS += -Wshadow
QMAKE_CXXFLAGS += -Winit-self
QMAKE_CXXFLAGS += -Wredundant-decls
QMAKE_CXXFLAGS += -Wcast-align
QMAKE_CXXFLAGS += -Winline
QMAKE_CXXFLAGS += -Wunreachable-code
QMAKE_CXXFLAGS += -Wmissing-include-dirs
QMAKE_CXXFLAGS += -Wswitch-enum
QMAKE_CXXFLAGS += -Wswitch-default
QMAKE_CXXFLAGS += -Wmain
QMAKE_CXXFLAGS += -Wzero-as-null-pointer-constant
QMAKE_CXXFLAGS += -Wfatal-errors
QMAKE_CXXFLAGS += -Wall -fpermissive
QMAKE_CXXFLAGS += -Wold-style-cast
QMAKE_CXXFLAGS += -Wno-unused-parameter
QMAKE_CXXFLAGS += -Wno-unused-function
QMAKE_CXXFLAGS += -Wold-style-cast
QMAKE_CXXFLAGS += -D_M_X64
QMAKE_CXXFLAGS += -D_USRDLL
QMAKE_CXXFLAGS += -DNDEBUG
QMAKE_CXXFLAGS += -D_CONSOLE
QMAKE_LFLAGS += -s
PRECOMPILED_HEADER = ../../../Source/EmberCommon/EmberCommonPch.h
SOURCES += \
../../../Source/EmberAnimate/EmberAnimate.cpp \
../../../Source/EmberCommon/EmberCommonPch.cpp
include(deployment.pri)
qtcAddDeployment()
HEADERS += \
../../../Source/EmberAnimate/EmberAnimate.h \
../../../Source/EmberCommon/EmberCommon.h \
../../../Source/EmberCommon/EmberCommonPch.h \
../../../Source/EmberCommon/EmberOptions.h \
../../../Source/EmberCommon/JpegUtils.h \
../../../Source/EmberCommon/SimpleGlob.h \
../../../Source/EmberCommon/SimpleOpt.h

View File

@ -0,0 +1,191 @@
# This file was generated by an application wizard of Qt Creator.
# The code below handles deployment to Android and Maemo, aswell as copying
# of the application data to shadow build directories on desktop.
# It is recommended not to modify this file, since newer versions of Qt Creator
# may offer an updated version of it.
defineTest(qtcAddDeployment) {
for(deploymentfolder, DEPLOYMENTFOLDERS) {
item = item$${deploymentfolder}
greaterThan(QT_MAJOR_VERSION, 4) {
itemsources = $${item}.files
} else {
itemsources = $${item}.sources
}
$$itemsources = $$eval($${deploymentfolder}.source)
itempath = $${item}.path
$$itempath= $$eval($${deploymentfolder}.target)
export($$itemsources)
export($$itempath)
DEPLOYMENT += $$item
}
MAINPROFILEPWD = $$PWD
android-no-sdk {
for(deploymentfolder, DEPLOYMENTFOLDERS) {
item = item$${deploymentfolder}
itemfiles = $${item}.files
$$itemfiles = $$eval($${deploymentfolder}.source)
itempath = $${item}.path
$$itempath = /data/user/qt/$$eval($${deploymentfolder}.target)
export($$itemfiles)
export($$itempath)
INSTALLS += $$item
}
target.path = /data/user/qt
export(target.path)
INSTALLS += target
} else:android {
for(deploymentfolder, DEPLOYMENTFOLDERS) {
item = item$${deploymentfolder}
itemfiles = $${item}.files
$$itemfiles = $$eval($${deploymentfolder}.source)
itempath = $${item}.path
$$itempath = /assets/$$eval($${deploymentfolder}.target)
export($$itemfiles)
export($$itempath)
INSTALLS += $$item
}
x86 {
target.path = /libs/x86
} else: armeabi-v7a {
target.path = /libs/armeabi-v7a
} else {
target.path = /libs/armeabi
}
export(target.path)
INSTALLS += target
} else:win32 {
copyCommand =
for(deploymentfolder, DEPLOYMENTFOLDERS) {
source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source)
source = $$replace(source, /, \\)
sourcePathSegments = $$split(source, \\)
target = $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(sourcePathSegments)
target = $$replace(target, /, \\)
target ~= s,\\\\\\.?\\\\,\\,
!isEqual(source,$$target) {
!isEmpty(copyCommand):copyCommand += &&
isEqual(QMAKE_DIR_SEP, \\) {
copyCommand += $(COPY_DIR) \"$$source\" \"$$target\"
} else {
source = $$replace(source, \\\\, /)
target = $$OUT_PWD/$$eval($${deploymentfolder}.target)
target = $$replace(target, \\\\, /)
copyCommand += test -d \"$$target\" || mkdir -p \"$$target\" && cp -r \"$$source\" \"$$target\"
}
}
}
!isEmpty(copyCommand) {
copyCommand = @echo Copying application data... && $$copyCommand
copydeploymentfolders.commands = $$copyCommand
first.depends = $(first) copydeploymentfolders
export(first.depends)
export(copydeploymentfolders.commands)
QMAKE_EXTRA_TARGETS += first copydeploymentfolders
}
} else:ios {
copyCommand =
for(deploymentfolder, DEPLOYMENTFOLDERS) {
source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source)
source = $$replace(source, \\\\, /)
target = $CODESIGNING_FOLDER_PATH/$$eval($${deploymentfolder}.target)
target = $$replace(target, \\\\, /)
sourcePathSegments = $$split(source, /)
targetFullPath = $$target/$$last(sourcePathSegments)
targetFullPath ~= s,/\\.?/,/,
!isEqual(source,$$targetFullPath) {
!isEmpty(copyCommand):copyCommand += &&
copyCommand += mkdir -p \"$$target\"
copyCommand += && cp -r \"$$source\" \"$$target\"
}
}
!isEmpty(copyCommand) {
copyCommand = echo Copying application data... && $$copyCommand
!isEmpty(QMAKE_POST_LINK): QMAKE_POST_LINK += ";"
QMAKE_POST_LINK += "$$copyCommand"
export(QMAKE_POST_LINK)
}
} else:unix {
maemo5 {
desktopfile.files = $${TARGET}.desktop
desktopfile.path = /usr/share/applications/hildon
icon.files = $${TARGET}64.png
icon.path = /usr/share/icons/hicolor/64x64/apps
} else:!isEmpty(MEEGO_VERSION_MAJOR) {
desktopfile.files = $${TARGET}_harmattan.desktop
desktopfile.path = /usr/share/applications
icon.files = $${TARGET}80.png
icon.path = /usr/share/icons/hicolor/80x80/apps
} else { # Assumed to be a Desktop Unix
copyCommand =
for(deploymentfolder, DEPLOYMENTFOLDERS) {
source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source)
source = $$replace(source, \\\\, /)
macx {
target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target)
} else {
target = $$OUT_PWD/$$eval($${deploymentfolder}.target)
}
target = $$replace(target, \\\\, /)
sourcePathSegments = $$split(source, /)
targetFullPath = $$target/$$last(sourcePathSegments)
targetFullPath ~= s,/\\.?/,/,
!isEqual(source,$$targetFullPath) {
!isEmpty(copyCommand):copyCommand += &&
copyCommand += $(MKDIR) \"$$target\"
copyCommand += && $(COPY_DIR) \"$$source\" \"$$target\"
}
}
!isEmpty(copyCommand) {
copyCommand = @echo Copying application data... && $$copyCommand
copydeploymentfolders.commands = $$copyCommand
first.depends = $(first) copydeploymentfolders
export(first.depends)
export(copydeploymentfolders.commands)
QMAKE_EXTRA_TARGETS += first copydeploymentfolders
}
}
!isEmpty(target.path) {
installPrefix = $${target.path}
} else {
installPrefix = /opt/$${TARGET}
}
for(deploymentfolder, DEPLOYMENTFOLDERS) {
item = item$${deploymentfolder}
itemfiles = $${item}.files
$$itemfiles = $$eval($${deploymentfolder}.source)
itempath = $${item}.path
$$itempath = $${installPrefix}/$$eval($${deploymentfolder}.target)
export($$itemfiles)
export($$itempath)
INSTALLS += $$item
}
!isEmpty(desktopfile.path) {
export(icon.files)
export(icon.path)
export(desktopfile.files)
export(desktopfile.path)
INSTALLS += icon desktopfile
}
isEmpty(target.path) {
target.path = $${installPrefix}/bin
export(target.path)
}
INSTALLS += target
}
export (ICON)
export (INSTALLS)
export (DEPLOYMENT)
export (LIBS)
export (QMAKE_EXTRA_TARGETS)
}

View File

@ -1,6 +1,7 @@
TEMPLATE = lib TEMPLATE = lib
CONFIG += shared CONFIG += shared
CONFIG += warn_off CONFIG += warn_off
CONFIG += precompile_header
CONFIG -= app_bundle CONFIG -= app_bundle
CONFIG -= qt CONFIG -= qt
VERSION = 0.1.4.7 VERSION = 0.1.4.7
@ -8,7 +9,7 @@ VERSION = 0.1.4.7
DESTDIR = ../../../Bin DESTDIR = ../../../Bin
LIBS += -L/usr/lib -lOpenCL LIBS += -L/usr/lib -lOpenCL
LIBS += -L/usr/lib -lGL #LIBS += -L/usr/lib -lGL
INCLUDEPATH += /usr/include/CL INCLUDEPATH += /usr/include/CL
INCLUDEPATH += /usr/include/GL INCLUDEPATH += /usr/include/GL
@ -46,10 +47,12 @@ QMAKE_CXXFLAGS += -D_M_X64
QMAKE_CXXFLAGS += -D_USRDLL QMAKE_CXXFLAGS += -D_USRDLL
QMAKE_CXXFLAGS += -DNDEBUG QMAKE_CXXFLAGS += -DNDEBUG
QMAKE_CXXFLAGS += -D_CONSOLE QMAKE_CXXFLAGS += -D_CONSOLE
QMAKE_CXXFLAGS += -DBUILDING_EMBER QMAKE_CXXFLAGS += -BUILDING_EMBERCL
QMAKE_LFLAGS += -s QMAKE_LFLAGS += -s
PRECOMPILED_HEADER = ../../../Source/EmberCL/EmberCLPch.h
SOURCES += \ SOURCES += \
../../../Source/EmberCL/DllMain.cpp \ ../../../Source/EmberCL/DllMain.cpp \
../../../Source/EmberCL/FinalAccumOpenCLKernelCreator.cpp \ ../../../Source/EmberCL/FinalAccumOpenCLKernelCreator.cpp \

View File

@ -0,0 +1,77 @@
TEMPLATE = app
CONFIG += console
CONFIG += warn_off
CONFIG += precompile_header
CONFIG -= app_bundle
CONFIG -= qt
VERSION = 0.1.4.7
DESTDIR = ../../../Bin
LIBS += -L/usr/lib -lOpenCL
LIBS += -L/usr/lib -lGL
LIBS += -L/usr/lib -ljpeg
LIBS += -L/usr/lib -lpng
LIBS += -L/usr/lib/x86_64-linux-gnu -lxml2
LIBS += -L../../../Bin -lEmber
LIBS += -L../../../Bin -lEmberCL
INCLUDEPATH += /usr/include/CL
INCLUDEPATH += /usr/include/GL
INCLUDEPATH += /usr/include/glm
INCLUDEPATH += /usr/include/tbb
INCLUDEPATH += /usr/include/libxml2
INCLUDEPATH += ../../../Source/Ember
INCLUDEPATH += ../../../Source/EmberCL
INCLUDEPATH += ../../../Source/EmberCommon
QMAKE_CXXFLAGS += -O2
QMAKE_CXXFLAGS += -march=k8
QMAKE_CXXFLAGS += -fPIC
QMAKE_CXXFLAGS += -fpermissive
QMAKE_CXXFLAGS += -fomit-frame-pointer
QMAKE_CXXFLAGS += -pedantic
QMAKE_CXXFLAGS += -std=c++11
QMAKE_CXXFLAGS += -Wnon-virtual-dtor
QMAKE_CXXFLAGS += -Wshadow
QMAKE_CXXFLAGS += -Winit-self
QMAKE_CXXFLAGS += -Wredundant-decls
QMAKE_CXXFLAGS += -Wcast-align
QMAKE_CXXFLAGS += -Winline
QMAKE_CXXFLAGS += -Wunreachable-code
QMAKE_CXXFLAGS += -Wmissing-include-dirs
QMAKE_CXXFLAGS += -Wswitch-enum
QMAKE_CXXFLAGS += -Wswitch-default
QMAKE_CXXFLAGS += -Wmain
QMAKE_CXXFLAGS += -Wzero-as-null-pointer-constant
QMAKE_CXXFLAGS += -Wfatal-errors
QMAKE_CXXFLAGS += -Wall -fpermissive
QMAKE_CXXFLAGS += -Wold-style-cast
QMAKE_CXXFLAGS += -Wno-unused-parameter
QMAKE_CXXFLAGS += -Wno-unused-function
QMAKE_CXXFLAGS += -Wold-style-cast
QMAKE_CXXFLAGS += -D_M_X64
QMAKE_CXXFLAGS += -D_USRDLL
QMAKE_CXXFLAGS += -DNDEBUG
QMAKE_CXXFLAGS += -D_CONSOLE
QMAKE_LFLAGS += -s
PRECOMPILED_HEADER = ../../../Source/EmberCommon/EmberCommonPch.h
SOURCES += \
../../../Source/EmberGenome/EmberGenome.cpp \
../../../Source/EmberCommon/EmberCommonPch.cpp
include(deployment.pri)
qtcAddDeployment()
HEADERS += \
../../../Source/EmberGenome/EmberGenome.h \
../../../Source/EmberCommon/EmberCommon.h \
../../../Source/EmberCommon/EmberCommonPch.h \
../../../Source/EmberCommon/EmberOptions.h \
../../../Source/EmberCommon/JpegUtils.h \
../../../Source/EmberCommon/SimpleGlob.h \
../../../Source/EmberCommon/SimpleOpt.h

View File

@ -0,0 +1,191 @@
# This file was generated by an application wizard of Qt Creator.
# The code below handles deployment to Android and Maemo, aswell as copying
# of the application data to shadow build directories on desktop.
# It is recommended not to modify this file, since newer versions of Qt Creator
# may offer an updated version of it.
defineTest(qtcAddDeployment) {
for(deploymentfolder, DEPLOYMENTFOLDERS) {
item = item$${deploymentfolder}
greaterThan(QT_MAJOR_VERSION, 4) {
itemsources = $${item}.files
} else {
itemsources = $${item}.sources
}
$$itemsources = $$eval($${deploymentfolder}.source)
itempath = $${item}.path
$$itempath= $$eval($${deploymentfolder}.target)
export($$itemsources)
export($$itempath)
DEPLOYMENT += $$item
}
MAINPROFILEPWD = $$PWD
android-no-sdk {
for(deploymentfolder, DEPLOYMENTFOLDERS) {
item = item$${deploymentfolder}
itemfiles = $${item}.files
$$itemfiles = $$eval($${deploymentfolder}.source)
itempath = $${item}.path
$$itempath = /data/user/qt/$$eval($${deploymentfolder}.target)
export($$itemfiles)
export($$itempath)
INSTALLS += $$item
}
target.path = /data/user/qt
export(target.path)
INSTALLS += target
} else:android {
for(deploymentfolder, DEPLOYMENTFOLDERS) {
item = item$${deploymentfolder}
itemfiles = $${item}.files
$$itemfiles = $$eval($${deploymentfolder}.source)
itempath = $${item}.path
$$itempath = /assets/$$eval($${deploymentfolder}.target)
export($$itemfiles)
export($$itempath)
INSTALLS += $$item
}
x86 {
target.path = /libs/x86
} else: armeabi-v7a {
target.path = /libs/armeabi-v7a
} else {
target.path = /libs/armeabi
}
export(target.path)
INSTALLS += target
} else:win32 {
copyCommand =
for(deploymentfolder, DEPLOYMENTFOLDERS) {
source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source)
source = $$replace(source, /, \\)
sourcePathSegments = $$split(source, \\)
target = $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(sourcePathSegments)
target = $$replace(target, /, \\)
target ~= s,\\\\\\.?\\\\,\\,
!isEqual(source,$$target) {
!isEmpty(copyCommand):copyCommand += &&
isEqual(QMAKE_DIR_SEP, \\) {
copyCommand += $(COPY_DIR) \"$$source\" \"$$target\"
} else {
source = $$replace(source, \\\\, /)
target = $$OUT_PWD/$$eval($${deploymentfolder}.target)
target = $$replace(target, \\\\, /)
copyCommand += test -d \"$$target\" || mkdir -p \"$$target\" && cp -r \"$$source\" \"$$target\"
}
}
}
!isEmpty(copyCommand) {
copyCommand = @echo Copying application data... && $$copyCommand
copydeploymentfolders.commands = $$copyCommand
first.depends = $(first) copydeploymentfolders
export(first.depends)
export(copydeploymentfolders.commands)
QMAKE_EXTRA_TARGETS += first copydeploymentfolders
}
} else:ios {
copyCommand =
for(deploymentfolder, DEPLOYMENTFOLDERS) {
source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source)
source = $$replace(source, \\\\, /)
target = $CODESIGNING_FOLDER_PATH/$$eval($${deploymentfolder}.target)
target = $$replace(target, \\\\, /)
sourcePathSegments = $$split(source, /)
targetFullPath = $$target/$$last(sourcePathSegments)
targetFullPath ~= s,/\\.?/,/,
!isEqual(source,$$targetFullPath) {
!isEmpty(copyCommand):copyCommand += &&
copyCommand += mkdir -p \"$$target\"
copyCommand += && cp -r \"$$source\" \"$$target\"
}
}
!isEmpty(copyCommand) {
copyCommand = echo Copying application data... && $$copyCommand
!isEmpty(QMAKE_POST_LINK): QMAKE_POST_LINK += ";"
QMAKE_POST_LINK += "$$copyCommand"
export(QMAKE_POST_LINK)
}
} else:unix {
maemo5 {
desktopfile.files = $${TARGET}.desktop
desktopfile.path = /usr/share/applications/hildon
icon.files = $${TARGET}64.png
icon.path = /usr/share/icons/hicolor/64x64/apps
} else:!isEmpty(MEEGO_VERSION_MAJOR) {
desktopfile.files = $${TARGET}_harmattan.desktop
desktopfile.path = /usr/share/applications
icon.files = $${TARGET}80.png
icon.path = /usr/share/icons/hicolor/80x80/apps
} else { # Assumed to be a Desktop Unix
copyCommand =
for(deploymentfolder, DEPLOYMENTFOLDERS) {
source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source)
source = $$replace(source, \\\\, /)
macx {
target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target)
} else {
target = $$OUT_PWD/$$eval($${deploymentfolder}.target)
}
target = $$replace(target, \\\\, /)
sourcePathSegments = $$split(source, /)
targetFullPath = $$target/$$last(sourcePathSegments)
targetFullPath ~= s,/\\.?/,/,
!isEqual(source,$$targetFullPath) {
!isEmpty(copyCommand):copyCommand += &&
copyCommand += $(MKDIR) \"$$target\"
copyCommand += && $(COPY_DIR) \"$$source\" \"$$target\"
}
}
!isEmpty(copyCommand) {
copyCommand = @echo Copying application data... && $$copyCommand
copydeploymentfolders.commands = $$copyCommand
first.depends = $(first) copydeploymentfolders
export(first.depends)
export(copydeploymentfolders.commands)
QMAKE_EXTRA_TARGETS += first copydeploymentfolders
}
}
!isEmpty(target.path) {
installPrefix = $${target.path}
} else {
installPrefix = /opt/$${TARGET}
}
for(deploymentfolder, DEPLOYMENTFOLDERS) {
item = item$${deploymentfolder}
itemfiles = $${item}.files
$$itemfiles = $$eval($${deploymentfolder}.source)
itempath = $${item}.path
$$itempath = $${installPrefix}/$$eval($${deploymentfolder}.target)
export($$itemfiles)
export($$itempath)
INSTALLS += $$item
}
!isEmpty(desktopfile.path) {
export(icon.files)
export(icon.path)
export(desktopfile.files)
export(desktopfile.path)
INSTALLS += icon desktopfile
}
isEmpty(target.path) {
target.path = $${installPrefix}/bin
export(target.path)
}
INSTALLS += target
}
export (ICON)
export (INSTALLS)
export (DEPLOYMENT)
export (LIBS)
export (QMAKE_EXTRA_TARGETS)
}

View File

@ -1,6 +1,7 @@
TEMPLATE = app TEMPLATE = app
CONFIG += console CONFIG += console
CONFIG += warn_off CONFIG += warn_off
CONFIG += precompile_header
CONFIG -= app_bundle CONFIG -= app_bundle
CONFIG -= qt CONFIG -= qt
VERSION = 0.1.4.7 VERSION = 0.1.4.7
@ -53,10 +54,11 @@ QMAKE_CXXFLAGS += -D_M_X64
QMAKE_CXXFLAGS += -D_USRDLL QMAKE_CXXFLAGS += -D_USRDLL
QMAKE_CXXFLAGS += -DNDEBUG QMAKE_CXXFLAGS += -DNDEBUG
QMAKE_CXXFLAGS += -D_CONSOLE QMAKE_CXXFLAGS += -D_CONSOLE
QMAKE_CXXFLAGS += -DBUILDING_EMBER
QMAKE_LFLAGS += -s QMAKE_LFLAGS += -s
PRECOMPILED_HEADER = ../../../Source/EmberCommon/EmberCommonPch.h
SOURCES += \ SOURCES += \
../../../Source/EmberRender/EmberRender.cpp \ ../../../Source/EmberRender/EmberRender.cpp \
../../../Source/EmberCommon/EmberCommonPch.cpp ../../../Source/EmberCommon/EmberCommonPch.cpp

View File

@ -0,0 +1,135 @@
#-------------------------------------------------
#
# Project created by QtCreator 2014-12-09T21:18:06
#
#-------------------------------------------------
QT += core gui opengl concurrent
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = Fractorium
TEMPLATE = app
CONFIG += precompile_header
VERSION = 0.1.4.7
DESTDIR = ../../../Bin
LIBS += -L/usr/lib -lOpenCL
#LIBS += -L/usr/lib -lGL
LIBS += -L/usr/lib -ljpeg
LIBS += -L/usr/lib -lpng
LIBS += -L/usr/lib -ltbb
LIBS += -L/usr/lib/x86_64-linux-gnu -lxml2
LIBS += -L../../../Bin -lEmber
LIBS += -L../../../Bin -lEmberCL
INCLUDEPATH += /usr/include/CL
INCLUDEPATH += /usr/include/GL
INCLUDEPATH += /usr/include/glm
INCLUDEPATH += /usr/include/tbb
INCLUDEPATH += /usr/include/libxml2
INCLUDEPATH += ../../../Source/Ember
INCLUDEPATH += ../../../Source/EmberCL
INCLUDEPATH += ../../../Source/EmberCommon
INCLUDEPATH += ../../../Source/Fractorium
QMAKE_CXXFLAGS += -O2
QMAKE_CXXFLAGS += -march=k8
QMAKE_CXXFLAGS += -fPIC
QMAKE_CXXFLAGS += -fpermissive
QMAKE_CXXFLAGS += -fomit-frame-pointer
QMAKE_CXXFLAGS += -pedantic
QMAKE_CXXFLAGS += -std=c++11
QMAKE_CXXFLAGS += -Wnon-virtual-dtor
QMAKE_CXXFLAGS += -Wshadow
QMAKE_CXXFLAGS += -Winit-self
#QMAKE_CXXFLAGS += -Wredundant-decls
QMAKE_CXXFLAGS += -Wcast-align
#QMAKE_CXXFLAGS += -Winline
QMAKE_CXXFLAGS += -Wunreachable-code
QMAKE_CXXFLAGS += -Wmissing-include-dirs
#QMAKE_CXXFLAGS += -Wswitch-enum
#QMAKE_CXXFLAGS += -Wswitch-default
QMAKE_CXXFLAGS += -Wmain
#QMAKE_CXXFLAGS += -Wzero-as-null-pointer-constant
#QMAKE_CXXFLAGS += -Wfatal-errors
QMAKE_CXXFLAGS += -Wall -fpermissive
QMAKE_CXXFLAGS += -Wold-style-cast
QMAKE_CXXFLAGS += -Wno-unused-variable
QMAKE_CXXFLAGS += -Wno-unused-parameter
QMAKE_CXXFLAGS += -Wno-unused-function
QMAKE_CXXFLAGS += -Wold-style-cast
QMAKE_CXXFLAGS += -D_M_X64
QMAKE_CXXFLAGS += -D_USRDLL
QMAKE_CXXFLAGS += -DNDEBUG
QMAKE_CXXFLAGS += -D_CONSOLE
QMAKE_LFLAGS += -s
PRECOMPILED_HEADER = ../../../Source/Fractorium/FractoriumPch.h
SOURCES += \
../../../Source/Fractorium/AboutDialog.cpp \
../../../Source/Fractorium/DoubleSpinBox.cpp \
../../../Source/Fractorium/FinalRenderDialog.cpp \
../../../Source/Fractorium/FinalRenderEmberController.cpp \
../../../Source/Fractorium/Fractorium.cpp \
../../../Source/Fractorium/FractoriumEmberController.cpp \
../../../Source/Fractorium/FractoriumInfo.cpp \
../../../Source/Fractorium/FractoriumLibrary.cpp \
../../../Source/Fractorium/FractoriumMenus.cpp \
../../../Source/Fractorium/FractoriumPalette.cpp \
../../../Source/Fractorium/FractoriumParams.cpp \
../../../Source/Fractorium/FractoriumPch.cpp \
../../../Source/Fractorium/FractoriumRender.cpp \
../../../Source/Fractorium/FractoriumSettings.cpp \
../../../Source/Fractorium/FractoriumToolbar.cpp \
../../../Source/Fractorium/FractoriumXforms.cpp \
../../../Source/Fractorium/FractoriumXformsAffine.cpp \
../../../Source/Fractorium/FractoriumXformsColor.cpp \
../../../Source/Fractorium/FractoriumXformsVariations.cpp \
../../../Source/Fractorium/FractoriumXformsXaos.cpp \
../../../Source/Fractorium/GLEmberController.cpp \
../../../Source/Fractorium/GLWidget.cpp \
../../../Source/Fractorium/Main.cpp \
../../../Source/Fractorium/OptionsDialog.cpp \
../../../Source/Fractorium/SpinBox.cpp
HEADERS += \
../../../Source/Fractorium/AboutDialog.h \
../../../Source/Fractorium/DoubleSpinBox.h \
../../../Source/Fractorium/EmberFile.h \
../../../Source/Fractorium/EmberTreeWidgetItem.h \
../../../Source/Fractorium/FinalRenderDialog.h \
../../../Source/Fractorium/FinalRenderEmberController.h \
../../../Source/Fractorium/Fractorium.h \
../../../Source/Fractorium/FractoriumEmberController.h \
../../../Source/Fractorium/FractoriumPch.h \
../../../Source/Fractorium/FractoriumSettings.h \
../../../Source/Fractorium/GLEmberController.h \
../../../Source/Fractorium/GLWidget.h \
../../../Source/Fractorium/OptionsDialog.h \
../../../Source/Fractorium/resource.h \
../../../Source/Fractorium/SpinBox.h \
../../../Source/Fractorium/StealthComboBox.h \
../../../Source/Fractorium/TableWidget.h \
../../../Source/Fractorium/TwoButtonComboWidget.h \
../../../Source/Fractorium/VariationTreeWidgetItem.h \
../../../Source/EmberCommon/EmberCommon.h \
../../../Source/EmberCommon/JpegUtils.h \
../../../Source/EmberCommon/EmberCommonPch.h \
../../../Source/Fractorium/FractoriumCommon.h
FORMS += \
../../../Source/Fractorium/AboutDialog.ui \
../../../Source/Fractorium/FinalRenderDialog.ui \
../../../Source/Fractorium/Fractorium.ui \
../../../Source/Fractorium/OptionsDialog.ui
OTHER_FILES += \
../../../Source/Fractorium/Fractorium.aps \
../../../Source/Fractorium/Fractorium.rc
RESOURCES += \
../../../Source/Fractorium/Fractorium.qrc

View File

@ -178,7 +178,7 @@ void Affine2D<T>::Rotate(T angle)
/// </summary> /// </summary>
/// <param name="v">The vec2 describing how far to move in the x and y directions</param> /// <param name="v">The vec2 describing how far to move in the x and y directions</param>
template <typename T> template <typename T>
void Affine2D<T>::Translate(v2T& v) void Affine2D<T>::Translate(const v2T& v)
{ {
O(O() + v); O(O() + v);
} }
@ -188,7 +188,7 @@ void Affine2D<T>::Translate(v2T& v)
/// </summary> /// </summary>
/// <param name="v">The vec2 describing how much to rotate and scale the X and Y components</param> /// <param name="v">The vec2 describing how much to rotate and scale the X and Y components</param>
template <typename T> template <typename T>
void Affine2D<T>::RotateScaleXTo(v2T& v) void Affine2D<T>::RotateScaleXTo(const v2T& v)
{ {
Affine2D<T> rs = CalcRotateScale(X(), v); Affine2D<T> rs = CalcRotateScale(X(), v);
@ -201,7 +201,7 @@ void Affine2D<T>::RotateScaleXTo(v2T& v)
/// </summary> /// </summary>
/// <param name="v">The vec2 describing how much to rotate and scale the X and Y components</param> /// <param name="v">The vec2 describing how much to rotate and scale the X and Y components</param>
template <typename T> template <typename T>
void Affine2D<T>::RotateScaleYTo(v2T& v) void Affine2D<T>::RotateScaleYTo(const v2T& v)
{ {
Affine2D<T> rs = CalcRotateScale(Y(), v); Affine2D<T> rs = CalcRotateScale(Y(), v);

View File

@ -75,9 +75,9 @@ public:
bool IsID() const; bool IsID() const;
bool IsZero() const; bool IsZero() const;
void Rotate(T angle); void Rotate(T angle);
void Translate(v2T& v); void Translate(const v2T& v);
void RotateScaleXTo(v2T& v); void RotateScaleXTo(const v2T& v);
void RotateScaleYTo(v2T& v); void RotateScaleYTo(const v2T& v);
Affine2D<T> Inverse() const; Affine2D<T> Inverse() const;
v2T TransformNormal(const v2T& v) const; v2T TransformNormal(const v2T& v) const;
v2T TransformVector(const v2T& v) const; v2T TransformVector(const v2T& v) const;

View File

@ -36,7 +36,7 @@
namespace EmberNs namespace EmberNs
{ {
bool Timing::m_TimingInit = false; bool Timing::m_TimingInit = false;
int Timing::m_ProcessorCount; uint Timing::m_ProcessorCount;
template<> unique_ptr<QTIsaac<ISAAC_SIZE, ISAAC_INT>> QTIsaac<ISAAC_SIZE, ISAAC_INT>::GlobalRand = unique_ptr<QTIsaac<ISAAC_SIZE, ISAAC_INT>>(new QTIsaac<ISAAC_SIZE, ISAAC_INT>()); template<> unique_ptr<QTIsaac<ISAAC_SIZE, ISAAC_INT>> QTIsaac<ISAAC_SIZE, ISAAC_INT>::GlobalRand = unique_ptr<QTIsaac<ISAAC_SIZE, ISAAC_INT>>(new QTIsaac<ISAAC_SIZE, ISAAC_INT>());
#define EXPORTPREPOSTREGVAR(varName, T) \ #define EXPORTPREPOSTREGVAR(varName, T) \

View File

@ -119,7 +119,7 @@ public:
/// Return the number of cores in the system. /// Return the number of cores in the system.
/// </summary> /// </summary>
/// <returns>The number of cores in the system</returns> /// <returns>The number of cores in the system</returns>
static int ProcessorCount() static uint ProcessorCount()
{ {
Init(); Init();
return m_ProcessorCount; return m_ProcessorCount;
@ -144,7 +144,7 @@ private:
time_point<Clock> m_BeginTime;//The start of the timing, set with Tic(). time_point<Clock> m_BeginTime;//The start of the timing, set with Tic().
time_point<Clock> m_EndTime;//The end of the timing, set with Toc(). time_point<Clock> m_EndTime;//The end of the timing, set with Toc().
static bool m_TimingInit;//Whether the performance info has bee queried. static bool m_TimingInit;//Whether the performance info has bee queried.
static int m_ProcessorCount;//The number of cores on the system, set in Init(). static uint m_ProcessorCount;//The number of cores on the system, set in Init().
}; };
/// <summary> /// <summary>

View File

@ -79,30 +79,30 @@ static bool WriteJpeg(const char* filename, byte* image, size_t width, size_t he
//Write comments to jpeg. //Write comments to jpeg.
if (enableComments) if (enableComments)
{ {
jpeg_write_marker(&info, JPEG_COM, reinterpret_cast<byte*>(verString), (uint)strlen(verString)); jpeg_write_marker(&info, JPEG_COM, reinterpret_cast<byte*>(verString), uint(strlen(verString)));
if (nick != "") if (nick != "")
{ {
snprintf_s(nickString, 64, "flam3_nickname: %s", nick.c_str()); snprintf_s(nickString, 64, "flam3_nickname: %s", nick.c_str());
jpeg_write_marker(&info, JPEG_COM, reinterpret_cast<byte*>(nickString), (uint)strlen(nickString)); jpeg_write_marker(&info, JPEG_COM, reinterpret_cast<byte*>(nickString), uint(strlen(nickString)));
} }
if (url != "") if (url != "")
{ {
snprintf_s(urlString, 128, "flam3_url: %s", url.c_str()); snprintf_s(urlString, 128, "flam3_url: %s", url.c_str());
jpeg_write_marker(&info, JPEG_COM, reinterpret_cast<byte*>(urlString), (uint)strlen(urlString)); jpeg_write_marker(&info, JPEG_COM, reinterpret_cast<byte*>(urlString), uint(strlen(urlString)));
} }
if (id != "") if (id != "")
{ {
snprintf_s(idString, 128, "flam3_id: %s", id.c_str()); snprintf_s(idString, 128, "flam3_id: %s", id.c_str());
jpeg_write_marker(&info, JPEG_COM, reinterpret_cast<byte*>(idString), (uint)strlen(idString)); jpeg_write_marker(&info, JPEG_COM, reinterpret_cast<byte*>(idString), uint(strlen(idString)));
} }
jpeg_write_marker(&info, JPEG_COM, reinterpret_cast<byte*>(bvString), (uint)strlen(bvString)); jpeg_write_marker(&info, JPEG_COM, reinterpret_cast<byte*>(bvString), uint(strlen(bvString)));
jpeg_write_marker(&info, JPEG_COM, reinterpret_cast<byte*>(niString), (uint)strlen(niString)); jpeg_write_marker(&info, JPEG_COM, reinterpret_cast<byte*>(niString), uint(strlen(niString)));
jpeg_write_marker(&info, JPEG_COM, reinterpret_cast<byte*>(rtString), (uint)strlen(rtString)); jpeg_write_marker(&info, JPEG_COM, reinterpret_cast<byte*>(rtString), uint(strlen(rtString)));
jpeg_write_marker(&info, JPEG_COM, reinterpret_cast<byte*>(genomeString), (uint)strlen(genomeString)); jpeg_write_marker(&info, JPEG_COM, reinterpret_cast<byte*>(genomeString), uint(strlen(genomeString)));
} }
for (i = 0; i < height; i++) for (i = 0; i < height; i++)

View File

@ -5,10 +5,10 @@
/// Constructor that takes a parent widget and passes it to the base, then /// Constructor that takes a parent widget and passes it to the base, then
/// sets up the GUI. /// sets up the GUI.
/// </summary> /// </summary>
/// <param name="parent">The parent widget. Default: NULL.</param> /// <param name="p">The parent widget. Default: NULL.</param>
/// <param name="f">The window flags. Default: 0.</param> /// <param name="f">The window flags. Default: 0.</param>
FractoriumAboutDialog::FractoriumAboutDialog(QWidget* parent, Qt::WindowFlags f) FractoriumAboutDialog::FractoriumAboutDialog(QWidget* p, Qt::WindowFlags f)
: QDialog(parent, f) : QDialog(p, f)
{ {
ui.setupUi(this); ui.setupUi(this);
} }

View File

@ -15,7 +15,7 @@ class FractoriumAboutDialog : public QDialog
{ {
Q_OBJECT Q_OBJECT
public: public:
FractoriumAboutDialog(QWidget* parent = 0, Qt::WindowFlags f = 0); FractoriumAboutDialog(QWidget* p = 0, Qt::WindowFlags f = 0);
private: private:
Ui::AboutDialog ui; Ui::AboutDialog ui;

View File

@ -7,11 +7,11 @@
/// and change its value using the mouse wheel without explicitly having to click /// and change its value using the mouse wheel without explicitly having to click
/// inside of it. /// inside of it.
/// </summary> /// </summary>
/// <param name="parent">The parent widget. Default: NULL.</param> /// <param name="p">The parent widget. Default: NULL.</param>
/// <param name="height">The height of the spin box. Default: 16.</param> /// <param name="height">The height of the spin box. Default: 16.</param>
/// <param name="step">The step used to increment/decrement the spin box when using the mouse wheel. Default: 0.05.</param> /// <param name="step">The step used to increment/decrement the spin box when using the mouse wheel. Default: 0.05.</param>
DoubleSpinBox::DoubleSpinBox(QWidget* parent, int height, double step) DoubleSpinBox::DoubleSpinBox(QWidget* p, int h, double step)
: QDoubleSpinBox(parent) : QDoubleSpinBox(p)
{ {
m_Select = false; m_Select = false;
m_DoubleClick = false; m_DoubleClick = false;
@ -23,8 +23,8 @@ DoubleSpinBox::DoubleSpinBox(QWidget* parent, int height, double step)
setFrame(false); setFrame(false);
setButtonSymbols(QAbstractSpinBox::NoButtons); setButtonSymbols(QAbstractSpinBox::NoButtons);
setFocusPolicy(Qt::StrongFocus); setFocusPolicy(Qt::StrongFocus);
setMinimumHeight(height);//setGeometry() has no effect, so must set both of these instead. setMinimumHeight(h);//setGeometry() has no effect, so must set both of these instead.
setMaximumHeight(height); setMaximumHeight(h);
lineEdit()->installEventFilter(this); lineEdit()->installEventFilter(this);
lineEdit()->setAlignment(Qt::AlignLeft | Qt::AlignVCenter); lineEdit()->setAlignment(Qt::AlignLeft | Qt::AlignVCenter);
connect(this, SIGNAL(valueChanged(double)), this, SLOT(onSpinBoxValueChanged(double)), Qt::QueuedConnection); connect(this, SIGNAL(valueChanged(double)), this, SLOT(onSpinBoxValueChanged(double)), Qt::QueuedConnection);
@ -151,9 +151,9 @@ bool DoubleSpinBox::eventFilter(QObject* o, QEvent* e)
{ {
//Take special action for shift to reduce the scroll amount. Control already //Take special action for shift to reduce the scroll amount. Control already
//increases it automatically. //increases it automatically.
if (QWheelEvent* wheelEvent = dynamic_cast<QWheelEvent*>(e)) if (QWheelEvent* we = dynamic_cast<QWheelEvent*>(e))
{ {
Qt::KeyboardModifiers mod = wheelEvent->modifiers(); Qt::KeyboardModifiers mod = we->modifiers();
if (mod.testFlag(Qt::ShiftModifier)) if (mod.testFlag(Qt::ShiftModifier))
setSingleStep(m_SmallStep); setSingleStep(m_SmallStep);

View File

@ -62,14 +62,14 @@ public:
/// <summary> /// <summary>
/// Constructor that passes agruments to the base and assigns the m_Param and m_Variation members. /// Constructor that passes agruments to the base and assigns the m_Param and m_Variation members.
/// </summary> /// </summary>
/// <param name="parent">The parent widget</param> /// <param name="p">The parent widget</param>
/// <param name="widgetItem">The widget item this spinner is contained in</param> /// <param name="widgetItem">The widget item this spinner is contained in</param>
/// <param name="var">The variation this spinner is for</param> /// <param name="var">The variation this spinner is for</param>
/// <param name="param">The name of the parameter this is for</param> /// <param name="param">The name of the parameter this is for</param>
/// <param name="height">The height of the spin box. Default: 16.</param> /// <param name="h">The height of the spin box. Default: 16.</param>
/// <param name="step">The step used to increment/decrement the spin box when using the mouse wheel. Default: 0.05.</param> /// <param name="step">The step used to increment/decrement the spin box when using the mouse wheel. Default: 0.05.</param>
explicit VariationTreeDoubleSpinBox(QWidget* parent, VariationTreeWidgetItem<T>* widgetItem, Variation<T>* var, string param, int height = 16, double step = 0.05) explicit VariationTreeDoubleSpinBox(QWidget* p, VariationTreeWidgetItem<T>* widgetItem, Variation<T>* var, string param, int h = 16, double step = 0.05)
: DoubleSpinBox(parent, height, step) : DoubleSpinBox(p, h, step)
{ {
m_WidgetItem = widgetItem; m_WidgetItem = widgetItem;
m_Param = param; m_Param = param;

View File

@ -1,6 +1,6 @@
#pragma once #pragma once
#include "FractoriumPch.h" #include "FractoriumCommon.h"
/// <summary> /// <summary>
/// EmberFile class. /// EmberFile class.

View File

@ -18,9 +18,9 @@ public:
/// Constructor that takes a pointer to a QTreeWidget as a parent widget. /// Constructor that takes a pointer to a QTreeWidget as a parent widget.
/// This is meant to be a root level item. /// This is meant to be a root level item.
/// </summary> /// </summary>
/// <param name="parent">The parent widget of this item</param> /// <param name="p">The parent widget of this item</param>
explicit EmberTreeWidgetItemBase(QTreeWidget* parent = 0) explicit EmberTreeWidgetItemBase(QTreeWidget* p = 0)
: QTreeWidgetItem(parent) : QTreeWidgetItem(p)
{ {
} }
@ -28,9 +28,9 @@ public:
/// Constructor that takes a pointer to a QTreeWidgetItem as a parent widget. /// Constructor that takes a pointer to a QTreeWidgetItem as a parent widget.
/// This is meant to be the child of a root level item. /// This is meant to be the child of a root level item.
/// </summary> /// </summary>
/// <param name="parent">The parent widget of this item</param> /// <param name="p">The parent widget of this item</param>
explicit EmberTreeWidgetItemBase(QTreeWidgetItem* parent = 0) explicit EmberTreeWidgetItemBase(QTreeWidgetItem* p = 0)
: QTreeWidgetItem(parent) : QTreeWidgetItem(p)
{ {
} }
@ -68,9 +68,9 @@ public:
/// This is meant to be a root level item. /// This is meant to be a root level item.
/// </summary> /// </summary>
/// <param name="ember">A pointer to the ember this item will represent</param> /// <param name="ember">A pointer to the ember this item will represent</param>
/// <param name="parent">The parent widget of this item</param> /// <param name="p">The parent widget of this item</param>
explicit EmberTreeWidgetItem(Ember<T>* ember, QTreeWidget* parent = 0) explicit EmberTreeWidgetItem(Ember<T>* ember, QTreeWidget* p = 0)
: EmberTreeWidgetItemBase(parent) : EmberTreeWidgetItemBase(p)
{ {
m_Ember = ember; m_Ember = ember;
} }
@ -80,9 +80,9 @@ public:
/// This is meant to be the child of a root level item. /// This is meant to be the child of a root level item.
/// </summary> /// </summary>
/// <param name="ember">A pointer to the ember this item will represent</param> /// <param name="ember">A pointer to the ember this item will represent</param>
/// <param name="parent">The parent widget of this item</param> /// <param name="p">The parent widget of this item</param>
explicit EmberTreeWidgetItem(Ember<T>* ember, QTreeWidgetItem* parent = 0) explicit EmberTreeWidgetItem(Ember<T>* ember, QTreeWidgetItem* p = 0)
: EmberTreeWidgetItemBase(parent) : EmberTreeWidgetItemBase(p)
{ {
m_Ember = ember; m_Ember = ember;
} }

View File

@ -8,10 +8,10 @@
/// This function contains the render function as a lambda. /// This function contains the render function as a lambda.
/// </summary> /// </summary>
/// <param name="settings">Pointer to the global settings object to use</param> /// <param name="settings">Pointer to the global settings object to use</param>
/// <param name="parent">The parent widget</param> /// <param name="p">The parent widget</param>
/// <param name="f">The window flags. Default: 0.</param> /// <param name="f">The window flags. Default: 0.</param>
FractoriumFinalRenderDialog::FractoriumFinalRenderDialog(FractoriumSettings* settings, QWidget* parent, Qt::WindowFlags f) FractoriumFinalRenderDialog::FractoriumFinalRenderDialog(FractoriumSettings* settings, QWidget* p, Qt::WindowFlags f)
: QDialog(parent, f) : QDialog(p, f)
{ {
ui.setupUi(this); ui.setupUi(this);
@ -21,7 +21,7 @@ FractoriumFinalRenderDialog::FractoriumFinalRenderDialog(FractoriumSettings* set
QTableWidget* table = ui.FinalRenderParamsTable; QTableWidget* table = ui.FinalRenderParamsTable;
QTableWidgetItem* item = NULL; QTableWidgetItem* item = NULL;
m_Fractorium = (Fractorium*)parent; m_Fractorium = dynamic_cast<Fractorium*>(p);
m_Settings = settings; m_Settings = settings;
ui.FinalRenderThreadCountSpin->setRange(1, Timing::ProcessorCount()); ui.FinalRenderThreadCountSpin->setRange(1, Timing::ProcessorCount());
connect(ui.FinalRenderEarlyClipCheckBox, SIGNAL(stateChanged(int)), this, SLOT(OnEarlyClipCheckBoxStateChanged(int)), Qt::QueuedConnection); connect(ui.FinalRenderEarlyClipCheckBox, SIGNAL(stateChanged(int)), this, SLOT(OnEarlyClipCheckBoxStateChanged(int)), Qt::QueuedConnection);
@ -124,7 +124,7 @@ FractoriumFinalRenderDialog::FractoriumFinalRenderDialog(FractoriumSettings* set
m_SupersampleSpin->setValue(m_Settings->FinalSupersample()); m_SupersampleSpin->setValue(m_Settings->FinalSupersample());
m_StripsSpin->setValue(m_Settings->FinalStrips()); m_StripsSpin->setValue(m_Settings->FinalStrips());
Scale((eScaleType)m_Settings->FinalScale()); Scale(eScaleType(m_Settings->FinalScale()));
if (m_Settings->FinalExt() == "jpg") if (m_Settings->FinalExt() == "jpg")
m_Tbcw->m_Combo->setCurrentIndex(0); m_Tbcw->m_Combo->setCurrentIndex(0);
@ -139,7 +139,7 @@ FractoriumFinalRenderDialog::FractoriumFinalRenderDialog(FractoriumSettings* set
QSize s = size(); QSize s = size();
int desktopHeight = qApp->desktop()->availableGeometry().height(); int desktopHeight = qApp->desktop()->availableGeometry().height();
s.setHeight(min(s.height(), (int)((double)desktopHeight * 0.90))); s.setHeight(min(s.height(), int(double(desktopHeight * 0.90))));
setGeometry(QStyle::alignedRect(Qt::LeftToRight, Qt::AlignCenter, s, qApp->desktop()->availableGeometry())); setGeometry(QStyle::alignedRect(Qt::LeftToRight, Qt::AlignCenter, s, qApp->desktop()->availableGeometry()));
QWidget* w = SetTabOrder(this, ui.FinalRenderEarlyClipCheckBox, ui.FinalRenderYAxisUpCheckBox); QWidget* w = SetTabOrder(this, ui.FinalRenderEarlyClipCheckBox, ui.FinalRenderYAxisUpCheckBox);
@ -647,20 +647,18 @@ bool FractoriumFinalRenderDialog::CreateControllerFromGUI(bool createRenderer)
int index = Current() - 1; int index = Current() - 1;
#ifdef DO_DOUBLE #ifdef DO_DOUBLE
size_t size = Double() ? sizeof(double) : sizeof(float); size_t elementSize = Double() ? sizeof(double) : sizeof(float);
#else #else
size_t size = sizeof(float); size_t elementSize = sizeof(float);
#endif #endif
if (!m_Controller.get() || (m_Controller->SizeOfT() != size)) if (!m_Controller.get() || (m_Controller->SizeOfT() != elementSize))
{ {
#ifdef DO_DOUBLE #ifdef DO_DOUBLE
size_t size = Double() ? sizeof(double) : sizeof(float);
Ember<double> ed; Ember<double> ed;
Ember<double> orig; Ember<double> orig;
EmberFile<double> efd; EmberFile<double> efd;
#else #else
size_t size = sizeof(float);
Ember<float> ed; Ember<float> ed;
Ember<float> orig; Ember<float> orig;
EmberFile<float> efd; EmberFile<float> efd;
@ -711,8 +709,8 @@ bool FractoriumFinalRenderDialog::SetMemory()
bool error = false; bool error = false;
tuple<size_t, size_t, size_t> p = m_Controller->SyncAndComputeMemory(); tuple<size_t, size_t, size_t> p = m_Controller->SyncAndComputeMemory();
ui.FinalRenderParamsTable->item(m_MemoryCellIndex, 1)->setText(ToString(get<1>(p))); ui.FinalRenderParamsTable->item(m_MemoryCellIndex, 1)->setText(ToString<qulonglong>(get<1>(p)));
ui.FinalRenderParamsTable->item(m_ItersCellIndex, 1)->setText(ToString(get<2>(p))); ui.FinalRenderParamsTable->item(m_ItersCellIndex, 1)->setText(ToString<qulonglong>(get<2>(p)));
if (OpenCL()) if (OpenCL())
{ {
@ -729,14 +727,14 @@ bool FractoriumFinalRenderDialog::SetMemory()
if (histSize > maxAlloc) if (histSize > maxAlloc)
{ {
s = "Histogram/Accumulator memory size of " + ToString(histSize) + s = "Histogram/Accumulator memory size of " + ToString<qulonglong>(histSize) +
" is greater than the max OpenCL allocation size of " + ToString(maxAlloc); " is greater than the max OpenCL allocation size of " + ToString<qulonglong>(maxAlloc);
} }
if (totalSize > totalAvail) if (totalSize > totalAvail)
{ {
s += "\n\nTotal required memory size of " + ToString(totalSize) + s += "\n\nTotal required memory size of " + ToString<qulonglong>(totalSize) +
" is greater than the max OpenCL available memory of " + ToString(totalAvail); " is greater than the max OpenCL available memory of " + ToString<qulonglong>(totalAvail);
} }
if (!s.isEmpty()) if (!s.isEmpty())

View File

@ -12,6 +12,8 @@
/// </summary> /// </summary>
class Fractorium;//Forward declaration since Fractorium uses this dialog. class Fractorium;//Forward declaration since Fractorium uses this dialog.
class FinalRenderEmberControllerBase;
template <typename T> class FinalRenderEmberController;
/// <summary> /// <summary>
/// The final render dialog is for when the user is satisfied with the parameters they've /// The final render dialog is for when the user is satisfied with the parameters they've
@ -38,12 +40,13 @@ class FractoriumFinalRenderDialog : public QDialog
friend Fractorium; friend Fractorium;
friend FinalRenderEmberControllerBase; friend FinalRenderEmberControllerBase;
friend FinalRenderEmberController<float>; friend FinalRenderEmberController<float>;
#ifdef DO_DOUBLE #ifdef DO_DOUBLE
friend FinalRenderEmberController<double>; friend FinalRenderEmberController<double>;
#endif #endif
public: public:
FractoriumFinalRenderDialog(FractoriumSettings* settings, QWidget* parent, Qt::WindowFlags f = 0); FractoriumFinalRenderDialog(FractoriumSettings* settings, QWidget* p, Qt::WindowFlags f = 0);
bool EarlyClip(); bool EarlyClip();
bool YAxisUp(); bool YAxisUp();
bool Transparency(); bool Transparency();

View File

@ -170,7 +170,7 @@ FinalRenderEmberController<T>::FinalRenderEmberController(FractoriumFinalRenderD
m_Renderer->YAxisUp(m_GuiState.m_YAxisUp); m_Renderer->YAxisUp(m_GuiState.m_YAxisUp);
m_Renderer->ThreadCount(m_GuiState.m_ThreadCount); m_Renderer->ThreadCount(m_GuiState.m_ThreadCount);
m_Renderer->Transparency(m_GuiState.m_Transparency); m_Renderer->Transparency(m_GuiState.m_Transparency);
m_Renderer->m_ProgressParameter = (void*)&currentStripForProgress; m_Renderer->m_ProgressParameter = reinterpret_cast<void*>(&currentStripForProgress);
if (path.endsWith(".png", Qt::CaseInsensitive) || m_Renderer->RendererType() == OPENCL_RENDERER)//This is creating the wrong thing.//TODO if (path.endsWith(".png", Qt::CaseInsensitive) || m_Renderer->RendererType() == OPENCL_RENDERER)//This is creating the wrong thing.//TODO
m_Renderer->NumChannels(4); m_Renderer->NumChannels(4);
@ -399,7 +399,6 @@ template <typename T>
bool FinalRenderEmberController<T>::CreateRenderer(eRendererType renderType, uint platform, uint device, bool shared) bool FinalRenderEmberController<T>::CreateRenderer(eRendererType renderType, uint platform, uint device, bool shared)
{ {
bool ok = true; bool ok = true;
vector<string> errorReport;
uint channels = m_FinalRenderDialog->Ext() == "png" ? 4 : 3; uint channels = m_FinalRenderDialog->Ext() == "png" ? 4 : 3;
CancelRender(); CancelRender();
@ -465,10 +464,10 @@ template <typename T>
int FinalRenderEmberController<T>::ProgressFunc(Ember<T>& ember, void* foo, double fraction, int stage, double etaMs) int FinalRenderEmberController<T>::ProgressFunc(Ember<T>& ember, void* foo, double fraction, int stage, double etaMs)
{ {
static int count = 0; static int count = 0;
uint strip = *((uint*)m_Renderer->m_ProgressParameter); uint strip = *(reinterpret_cast<uint*>(m_Renderer->m_ProgressParameter));
double fracPerStrip = ceil(100.0 / m_GuiState.m_Strips); double fracPerStrip = ceil(100.0 / m_GuiState.m_Strips);
double stripsfrac = ceil(fracPerStrip * strip) + ceil(fraction / m_GuiState.m_Strips); double stripsfrac = ceil(fracPerStrip * strip) + ceil(fraction / m_GuiState.m_Strips);
int intFract = (int)stripsfrac; int intFract = int(stripsfrac);
if (stage == 0) if (stage == 0)
QMetaObject::invokeMethod(m_FinalRenderDialog->ui.FinalRenderIterationProgress, "setValue", Qt::QueuedConnection, Q_ARG(int, intFract)); QMetaObject::invokeMethod(m_FinalRenderDialog->ui.FinalRenderIterationProgress, "setValue", Qt::QueuedConnection, Q_ARG(int, intFract));
@ -531,14 +530,14 @@ void FinalRenderEmberController<T>::SyncCurrentToSizeSpinners(bool scale, bool s
{ {
if (scale) if (scale)
{ {
m_FinalRenderDialog->m_WidthScaleSpin->SetValueStealth((double)m_Ember->m_FinalRasW / m_Ember->m_OrigFinalRasW);//Work backward to determine the scale. m_FinalRenderDialog->m_WidthScaleSpin->SetValueStealth(double(m_Ember->m_FinalRasW) / m_Ember->m_OrigFinalRasW);//Work backward to determine the scale.
m_FinalRenderDialog->m_HeightScaleSpin->SetValueStealth((double)m_Ember->m_FinalRasH / m_Ember->m_OrigFinalRasH); m_FinalRenderDialog->m_HeightScaleSpin->SetValueStealth(double(m_Ember->m_FinalRasH) / m_Ember->m_OrigFinalRasH);
} }
if (size) if (size)
{ {
m_FinalRenderDialog->m_WidthScaleSpin->setSuffix(" (" + ToString(m_Ember->m_FinalRasW) + ")"); m_FinalRenderDialog->m_WidthScaleSpin->setSuffix(" (" + ToString<qulonglong>(m_Ember->m_FinalRasW) + ")");
m_FinalRenderDialog->m_HeightScaleSpin->setSuffix(" (" + ToString(m_Ember->m_FinalRasH) + ")"); m_FinalRenderDialog->m_HeightScaleSpin->setSuffix(" (" + ToString<qulonglong>(m_Ember->m_FinalRasH) + ")");
} }
} }
@ -580,7 +579,7 @@ tuple<size_t, size_t, size_t> FinalRenderEmberController<T>::SyncAndComputeMemor
[&](const string& s) { }, [&](const string& s) { }, [&](const string& s) { }); [&](const string& s) { }, [&](const string& s) { }, [&](const string& s) { });
SyncGuiToEmbers(); SyncGuiToEmbers();
m_FinalRenderDialog->m_StripsSpin->setSuffix(" (" + ToString(strips) + ")"); m_FinalRenderDialog->m_StripsSpin->setSuffix(" (" + ToString<qulonglong>(strips) + ")");
m_Renderer->SetEmber(*m_Ember); m_Renderer->SetEmber(*m_Ember);
m_Renderer->CreateSpatialFilter(b); m_Renderer->CreateSpatialFilter(b);
m_Renderer->CreateTemporalFilter(b); m_Renderer->CreateTemporalFilter(b);
@ -640,8 +639,8 @@ void FinalRenderEmberController<T>::RenderComplete(Ember<T>& ember)
{ {
string renderTimeString = m_RenderTimer.Format(m_RenderTimer.Toc()), totalTimeString; string renderTimeString = m_RenderTimer.Format(m_RenderTimer.Toc()), totalTimeString;
QString status, filename = ComposePath(QString::fromStdString(ember.m_Name)); QString status, filename = ComposePath(QString::fromStdString(ember.m_Name));
QString itersString = ToString(m_Stats.m_Iters); QString itersString = ToString<qulonglong>(m_Stats.m_Iters);
QString itersPerSecString = ToString(size_t(m_Stats.m_Iters / (m_Stats.m_IterMs / 1000.0))); QString itersPerSecString = ToString<qulonglong>(size_t(m_Stats.m_Iters / (m_Stats.m_IterMs / 1000.0)));
//Save whatever options were specified on the GUI to the settings. //Save whatever options were specified on the GUI to the settings.
m_Settings->FinalEarlyClip(m_GuiState.m_EarlyClip); m_Settings->FinalEarlyClip(m_GuiState.m_EarlyClip);
@ -681,8 +680,8 @@ void FinalRenderEmberController<T>::RenderComplete(Ember<T>& ember)
QMetaObject::invokeMethod(m_FinalRenderDialog->ui.FinalRenderIterationProgress, "setValue", Qt::QueuedConnection, Q_ARG(int, 100));//Just to be safe. QMetaObject::invokeMethod(m_FinalRenderDialog->ui.FinalRenderIterationProgress, "setValue", Qt::QueuedConnection, Q_ARG(int, 100));//Just to be safe.
QMetaObject::invokeMethod(m_FinalRenderDialog->ui.FinalRenderFilteringProgress, "setValue", Qt::QueuedConnection, Q_ARG(int, 100)); QMetaObject::invokeMethod(m_FinalRenderDialog->ui.FinalRenderFilteringProgress, "setValue", Qt::QueuedConnection, Q_ARG(int, 100));
QMetaObject::invokeMethod(m_FinalRenderDialog->ui.FinalRenderAccumProgress, "setValue", Qt::QueuedConnection, Q_ARG(int, 100)); QMetaObject::invokeMethod(m_FinalRenderDialog->ui.FinalRenderAccumProgress, "setValue", Qt::QueuedConnection, Q_ARG(int, 100));
QMetaObject::invokeMethod(m_FinalRenderDialog->ui.FinalRenderTotalProgress, "setValue", Qt::QueuedConnection, Q_ARG(int, int(((float)m_FinishedImageCount / (float)m_ImageCount) * 100))); QMetaObject::invokeMethod(m_FinalRenderDialog->ui.FinalRenderTotalProgress, "setValue", Qt::QueuedConnection, Q_ARG(int, int((float(m_FinishedImageCount) / float(m_ImageCount)) * 100)));
QMetaObject::invokeMethod(m_FinalRenderDialog->ui.FinalRenderImageCountLabel, "setText", Qt::QueuedConnection, Q_ARG(const QString&, ToString(m_FinishedImageCount) + " / " + ToString(m_ImageCount))); QMetaObject::invokeMethod(m_FinalRenderDialog->ui.FinalRenderImageCountLabel, "setText", Qt::QueuedConnection, Q_ARG(const QString&, ToString(m_FinishedImageCount) + " / " + ToString(m_ImageCount)));
status = "Pure render time: " + QString::fromStdString(renderTimeString); status = "Pure render time: " + QString::fromStdString(renderTimeString);
Output(status); Output(status);
@ -733,3 +732,9 @@ void FinalRenderEmberController<T>::SyncGuiToEmber(Ember<T>& ember, size_t width
ember.m_Quality = m_FinalRenderDialog->m_QualitySpin->value(); ember.m_Quality = m_FinalRenderDialog->m_QualitySpin->value();
ember.m_Supersample = m_FinalRenderDialog->m_SupersampleSpin->value(); ember.m_Supersample = m_FinalRenderDialog->m_SupersampleSpin->value();
} }
template class FinalRenderEmberController<float>;
#ifdef DO_DOUBLE
template class FinalRenderEmberController<double>;
#endif

View File

@ -13,6 +13,7 @@
/// </summary> /// </summary>
class Fractorium; class Fractorium;
class FractoriumFinalRenderDialog; class FractoriumFinalRenderDialog;
//class FractoriumEmberControllerBase;
/// <summary> /// <summary>
/// Used to hold the options specified in the current state of the Gui for performing the final render. /// Used to hold the options specified in the current state of the Gui for performing the final render.
@ -138,8 +139,3 @@ protected:
unique_ptr<EmberNs::Renderer<T, T>> m_FinalPreviewRenderer; unique_ptr<EmberNs::Renderer<T, T>> m_FinalPreviewRenderer;
}; };
template class FinalRenderEmberController<float>;
#ifdef DO_DOUBLE
template class FinalRenderEmberController<double>;
#endif

View File

@ -7,10 +7,11 @@
/// to the GUI widgets that are not possible to do through the designer. So if something /// to the GUI widgets that are not possible to do through the designer. So if something
/// is present here, it's safe to assume it can't be done in the designer. /// is present here, it's safe to assume it can't be done in the designer.
/// </summary> /// </summary>
Fractorium::Fractorium(QWidget* parent) /// <param name="p">The parent widget of this item</param>
: QMainWindow(parent) Fractorium::Fractorium(QWidget* p)
: QMainWindow(p)
{ {
int spinHeight = 20, iconSize = 9; int spinHeight = 20, iconSize_ = 9;
size_t i = 0; size_t i = 0;
Timing t; Timing t;
ui.setupUi(this); ui.setupUi(this);
@ -58,13 +59,13 @@ Fractorium::Fractorium(QWidget* parent)
for (i = 0; i < XFORM_COLOR_COUNT; i++) for (i = 0; i < XFORM_COLOR_COUNT; i++)
{ {
QPixmap pixmap(iconSize, iconSize); QPixmap pixmap(iconSize_, iconSize_);
pixmap.fill(m_XformComboColors[i]); pixmap.fill(m_XformComboColors[i]);
m_XformComboIcons[i] = QIcon(pixmap); m_XformComboIcons[i] = QIcon(pixmap);
} }
QPixmap pixmap(iconSize, iconSize); QPixmap pixmap(iconSize_, iconSize_);
pixmap.fill(m_FinalXformComboColor); pixmap.fill(m_FinalXformComboColor);
m_FinalXformComboIcon = QIcon(pixmap); m_FinalXformComboIcon = QIcon(pixmap);
@ -168,14 +169,14 @@ Fractorium::~Fractorium()
/// <summary> /// <summary>
/// Set the coordinate text in the status bar. /// Set the coordinate text in the status bar.
/// </summary> /// </summary>
/// <param name="x">The raster x coordinate</param> /// <param name="rasX">The raster x coordinate</param>
/// <param name="y">The raster y coordinate</param> /// <param name="rasY">The raster y coordinate</param>
/// <param name="worldX">The cartesian world x coordinate</param> /// <param name="worldX">The cartesian world x coordinate</param>
/// <param name="worldY">The cartesian world y coordinate</param> /// <param name="worldY">The cartesian world y coordinate</param>
void Fractorium::SetCoordinateStatus(int x, int y, float worldX, float worldY) void Fractorium::SetCoordinateStatus(int rasX, int rasY, float worldX, float worldY)
{ {
//Use sprintf rather than allocating and concatenating 6 QStrings for efficiency since this is called on every mouse move. //Use sprintf rather than allocating and concatenating 6 QStrings for efficiency since this is called on every mouse move.
sprintf_s(m_CoordinateString, 128, "Window: %4d, %4d World: %2.2f, %2.2f", x, y, worldX, worldY); sprintf_s(m_CoordinateString, 128, "Window: %4d, %4d World: %2.2f, %2.2f", rasX, rasY, worldX, worldY);
m_CoordinateStatusLabel->setText(QString(m_CoordinateString)); m_CoordinateStatusLabel->setText(QString(m_CoordinateString));
} }
@ -711,3 +712,9 @@ int Fractorium::FlipDet(Affine2D<float>& affine)
// if (incRow) // if (incRow)
// row++; // row++;
//} //}
template class FractoriumEmberController<float>;
#ifdef DO_DOUBLE
template class FractoriumEmberController<double>;
#endif

View File

@ -1,6 +1,7 @@
#pragma once #pragma once
#include "ui_Fractorium.h" #include "ui_Fractorium.h"
#include "FractoriumCommon.h"
#include "GLWidget.h" #include "GLWidget.h"
#include "EmberTreeWidgetItem.h" #include "EmberTreeWidgetItem.h"
#include "VariationTreeWidgetItem.h" #include "VariationTreeWidgetItem.h"
@ -14,6 +15,17 @@
/// Fractorium class. /// Fractorium class.
/// </summary> /// </summary>
class GLWidget;
class FractoriumOptionsDialog;
class FractoriumFinalRenderDialog;
class FractoriumAboutDialog;
class GLEmberControllerBase;
class FractoriumEmberControllerBase;
class FinalRenderEmberControllerBase;
template <typename T> class GLEmberController;
template <typename T> class FractoriumEmberController;
template <typename T> class FinalRenderEmberController;
/// <summary> /// <summary>
/// Fractorium is the main window for the interactive renderer. The main viewable area /// Fractorium is the main window for the interactive renderer. The main viewable area
/// is a derivation of QGLWidget named GLWidget. The design uses the concept of a controller /// is a derivation of QGLWidget named GLWidget. The design uses the concept of a controller
@ -55,23 +67,26 @@ class Fractorium : public QMainWindow
friend FractoriumAboutDialog; friend FractoriumAboutDialog;
friend GLEmberControllerBase; friend GLEmberControllerBase;
friend GLEmberController<float>; friend GLEmberController<float>;
friend GLEmberController<double>;
friend FractoriumEmberControllerBase; friend FractoriumEmberControllerBase;
friend FractoriumEmberController<float>; friend FractoriumEmberController<float>;
friend FractoriumEmberController<double>;
friend FinalRenderEmberControllerBase; friend FinalRenderEmberControllerBase;
friend FinalRenderEmberController<float>; friend FinalRenderEmberController<float>;
friend FinalRenderEmberController<double>;
#ifdef DO_DOUBLE
friend GLEmberController<double>;
friend FractoriumEmberController<double>;
friend FinalRenderEmberController<double>;
#endif
public: public:
Fractorium(QWidget* parent = 0); Fractorium(QWidget* p = 0);
~Fractorium(); ~Fractorium();
//Geometry. //Geometry.
void SetCenter(float x, float y); void SetCenter(float x, float y);
void SetRotation(double rot, bool stealth); void SetRotation(double rot, bool stealth);
void SetScale(double scale); void SetScale(double scale);
void SetCoordinateStatus(int x, int y, float worldX, float worldY); void SetCoordinateStatus(int rasX, int rasY, float worldX, float worldY);
//Xforms. //Xforms.
void CurrentXform(uint i); void CurrentXform(uint i);
@ -236,7 +251,7 @@ public slots:
void ShowCritical(const QString& title, const QString& text, bool invokeRequired = false); void ShowCritical(const QString& title, const QString& text, bool invokeRequired = false);
//Can't have a template function be a slot. //Can't have a template function be a slot.
void SetLibraryTreeItemData(EmberTreeWidgetItemBase* item, vector<byte>& v, uint width, uint height); void SetLibraryTreeItemData(EmberTreeWidgetItemBase* item, vector<byte>& v, uint w, uint h);
public: public:
//template<typename spinType, typename valType>//See below. //template<typename spinType, typename valType>//See below.
@ -290,7 +305,7 @@ private:
//Info. //Info.
void UpdateHistogramBounds(); void UpdateHistogramBounds();
void ErrorReportToQTextEdit(vector<string>& errors, QTextEdit* textEdit, bool clear = true); void ErrorReportToQTextEdit(const vector<string>& errors, QTextEdit* textEdit, bool clear = true);
//Rendering/progress. //Rendering/progress.
bool CreateRendererFromOptions(); bool CreateRendererFromOptions();
@ -406,112 +421,5 @@ private:
Ui::FractoriumClass ui; Ui::FractoriumClass ui;
}; };
/// <summary>
/// Setup a spinner to be placed in a table cell.
/// Due to a serious compiler bug in MSVC, this must be declared as an outside function instead of a static member of Fractorium.
/// The reason is that the default arguments of type valType will not be interpreted correctly by the compiler.
/// If the bug is ever fixed, put it back as a static member function.
/// </summary>
/// <param name="table">The table the spinner belongs to</param>
/// <param name="receiver">The receiver object</param>
/// <param name="row">The row in the table where this spinner resides</param>
/// <param name="col">The col in the table where this spinner resides</param>
/// <param name="spinBox">Double pointer to spin box which will hold the spinner upon exit</param>
/// <param name="height">The height of the spinner</param>
/// <param name="min">The minimum value of the spinner</param>
/// <param name="max">The maximum value of the spinner</param>
/// <param name="step">The step of the spinner</param>
/// <param name="signal">The signal the spinner emits</param>
/// <param name="slot">The slot to receive the signal</param>
/// <param name="incRow">Whether to increment the row value</param>
/// <param name="val">The default value for the spinner</param>
/// <param name="doubleClickZero">When the spinner has a value of zero and is double clicked, assign this value</param>
/// <param name="doubleClickNonZero">When the spinner has a value of non-zero and is double clicked, assign this value</param>
template<typename spinType, typename valType>
static void SetupSpinner(QTableWidget* table, const QObject* receiver, int& row, int col, spinType*& spinBox, int height, valType min, valType max, valType step, const char* signal, const char* slot, bool incRow = true, valType val = 0, valType doubleClickZero = -999, valType doubleClickNonZero = -999)
{
spinBox = new spinType(table, height, step);
spinBox->setRange(min, max);
spinBox->setValue(val);
if (col >= 0)
table->setCellWidget(row, col, spinBox);
if (string(signal) != "" && string(slot) != "")
receiver->connect(spinBox, signal, receiver, slot, Qt::QueuedConnection);
if (doubleClickNonZero != -999 && doubleClickZero != -999)
{
spinBox->DoubleClick(true);
spinBox->DoubleClickZero((valType)doubleClickZero);
spinBox->DoubleClickNonZero((valType)doubleClickNonZero);
}
if (incRow)
row++;
}
/// <summary>
/// Wrapper around QWidget::setTabOrder() to return the second widget.
/// This makes it easy to chain multiple calls without having to retype
/// all of them if the order changes or if a new widget is inserted.
/// </summary>
/// <param name="parent">The parent widget that w1 and w2 belong to</param>
/// <param name="w1">The widget to come first in the tab order</param>
/// <param name="w2">The widget to come second in the tab order</param>
static QWidget* SetTabOrder(QWidget* parent, QWidget* w1, QWidget* w2)
{
parent->setTabOrder(w1, w2);
return w2;
}
/// <summary>
/// Wrapper around QLocale::system().toDouble().
/// </summary>
/// <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)
{
return QLocale::system().toDouble(s, ok);
}
/// <summary>
/// Wrapper around QLocale::system().toString().
/// </summary>
/// <param name="s">The value to convert</param>
/// <returns>The string value if successful, else "".</returns>
template <typename T>
static QString ToString(T val)
{
return QLocale::system().toString(val);
}
/// <summary>
/// Force a QString to end with the specified value.
/// </summary>
/// <param name="s">The string to append a suffix to</param>
/// <param name="e">The suffix to append</param>
/// <returns>The original string value if it already ended in e, else the original value appended with e.</returns>
template <typename T>
static QString MakeEnd(const QString& s, T e)
{
if (!s.endsWith(e))
return s + e;
else
return s;
}
/// <summary>
/// Check if a path is not empty and exists on the file system.
/// </summary>
/// <param name="s">The path to check</param>
/// <returns>True if s was not empty and existed, else false.</returns>
static bool Exists(const QString& s)
{
return s != "" && QDir(s).exists();
}
//template void Fractorium::SetupSpinner<SpinBox, int> (QTableWidget* table, const QObject* receiver, int& row, int col, SpinBox*& spinBox, int height, int min, int max, int step, const char* signal, const char* slot, bool incRow, int val, int doubleClickZero, int doubleClickNonZero); //template void Fractorium::SetupSpinner<SpinBox, int> (QTableWidget* table, const QObject* receiver, int& row, int col, SpinBox*& spinBox, int height, int min, int max, int step, const char* signal, const char* slot, bool incRow, int val, int doubleClickZero, int doubleClickNonZero);
//template void Fractorium::SetupSpinner<DoubleSpinBox, double>(QTableWidget* table, const QObject* receiver, int& row, int col, DoubleSpinBox*& spinBox, int height, double min, double max, double step, const char* signal, const char* slot, bool incRow, double val, double doubleClickZero, double doubleClickNonZero); //template void Fractorium::SetupSpinner<DoubleSpinBox, double>(QTableWidget* table, const QObject* receiver, int& row, int col, DoubleSpinBox*& spinBox, int height, double min, double max, double step, const char* signal, const char* slot, bool incRow, double val, double doubleClickZero, double doubleClickNonZero);

View File

@ -5837,7 +5837,7 @@ SpinBox
<customwidget> <customwidget>
<class>GLWidget</class> <class>GLWidget</class>
<extends>QWidget</extends> <extends>QWidget</extends>
<header>glwidget.h</header> <header>GLWidget.h</header>
<container>1</container> <container>1</container>
</customwidget> </customwidget>
</customwidgets> </customwidgets>

View File

@ -0,0 +1,113 @@
#pragma once
#include "FractoriumPch.h"
/// <summary>
/// Fractorium global utility functions.
/// </summary>
/// <summary>
/// Setup a spinner to be placed in a table cell.
/// Due to a serious compiler bug in MSVC, this must be declared as an outside function instead of a static member of Fractorium.
/// The reason is that the default arguments of type valType will not be interpreted correctly by the compiler.
/// If the bug is ever fixed, put it back as a static member function.
/// </summary>
/// <param name="table">The table the spinner belongs to</param>
/// <param name="receiver">The receiver object</param>
/// <param name="row">The row in the table where this spinner resides</param>
/// <param name="col">The col in the table where this spinner resides</param>
/// <param name="spinBox">Double pointer to spin box which will hold the spinner upon exit</param>
/// <param name="height">The height of the spinner</param>
/// <param name="min">The minimum value of the spinner</param>
/// <param name="max">The maximum value of the spinner</param>
/// <param name="step">The step of the spinner</param>
/// <param name="signal">The signal the spinner emits</param>
/// <param name="slot">The slot to receive the signal</param>
/// <param name="incRow">Whether to increment the row value</param>
/// <param name="val">The default value for the spinner</param>
/// <param name="doubleClickZero">When the spinner has a value of zero and is double clicked, assign this value</param>
/// <param name="doubleClickNonZero">When the spinner has a value of non-zero and is double clicked, assign this value</param>
template<typename spinType, typename valType>
static void SetupSpinner(QTableWidget* table, const QObject* receiver, int& row, int col, spinType*& spinBox, int height, valType min, valType max, valType step, const char* signal, const char* slot, bool incRow = true, valType val = 0, valType doubleClickZero = -999, valType doubleClickNonZero = -999)
{
spinBox = new spinType(table, height, step);
spinBox->setRange(min, max);
spinBox->setValue(val);
if (col >= 0)
table->setCellWidget(row, col, spinBox);
if (string(signal) != "" && string(slot) != "")
receiver->connect(spinBox, signal, receiver, slot, Qt::QueuedConnection);
if (doubleClickNonZero != -999 && doubleClickZero != -999)
{
spinBox->DoubleClick(true);
spinBox->DoubleClickZero(valType(doubleClickZero));
spinBox->DoubleClickNonZero(valType(doubleClickNonZero));
}
if (incRow)
row++;
}
/// <summary>
/// Wrapper around QWidget::setTabOrder() to return the second widget.
/// This makes it easy to chain multiple calls without having to retype
/// all of them if the order changes or if a new widget is inserted.
/// </summary>
/// <param name="p">The parent widget that w1 and w2 belong to</param>
/// <param name="w1">The widget to come first in the tab order</param>
/// <param name="w2">The widget to come second in the tab order</param>
static QWidget* SetTabOrder(QWidget* p, QWidget* w1, QWidget* w2)
{
p->setTabOrder(w1, w2);
return w2;
}
/// <summary>
/// Wrapper around QLocale::system().toDouble().
/// </summary>
/// <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)
{
return QLocale::system().toDouble(s, ok);
}
/// <summary>
/// Wrapper around QLocale::system().toString().
/// </summary>
/// <param name="s">The value to convert</param>
/// <returns>The string value if successful, else "".</returns>
template <typename T>
static QString ToString(T val)
{
return QLocale::system().toString(val);
}
/// <summary>
/// Force a QString to end with the specified value.
/// </summary>
/// <param name="s">The string to append a suffix to</param>
/// <param name="e">The suffix to append</param>
/// <returns>The original string value if it already ended in e, else the original value appended with e.</returns>
template <typename T>
static QString MakeEnd(const QString& s, T e)
{
if (!s.endsWith(e))
return s + e;
else
return s;
}
/// <summary>
/// Check if a path is not empty and exists on the file system.
/// </summary>
/// <param name="s">The path to check</param>
/// <returns>True if s was not empty and existed, else false.</returns>
static bool Exists(const QString& s)
{
return s != "" && QDir(s).exists();
}

View File

@ -92,7 +92,7 @@ FractoriumEmberController<T>::FractoriumEmberController(Fractorium* fractorium)
m_PreviewRun = true; m_PreviewRun = true;
m_PreviewRunning = true; m_PreviewRunning = true;
m_PreviewRenderer->ThreadCount(max(1, Timing::ProcessorCount() - 1));//Leave one processor free so the GUI can breathe. m_PreviewRenderer->ThreadCount(max(1u, Timing::ProcessorCount() - 1));//Leave one processor free so the GUI can breathe.
QTreeWidget* tree = m_Fractorium->ui.LibraryTree; QTreeWidget* tree = m_Fractorium->ui.LibraryTree;
if (QTreeWidgetItem* top = tree->topLevelItem(0)) if (QTreeWidgetItem* top = tree->topLevelItem(0))
@ -116,7 +116,7 @@ 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 //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. //until the update is complete.
QMetaObject::invokeMethod(m_Fractorium, "SetLibraryTreeItemData", Qt::BlockingQueuedConnection, QMetaObject::invokeMethod(m_Fractorium, "SetLibraryTreeItemData", Qt::BlockingQueuedConnection,
Q_ARG(EmberTreeWidgetItemBase*, (EmberTreeWidgetItemBase*)treeItem), Q_ARG(EmberTreeWidgetItemBase*, dynamic_cast<EmberTreeWidgetItemBase*>(treeItem)),
Q_ARG(vector<byte>&, m_PreviewFinalImage), Q_ARG(vector<byte>&, m_PreviewFinalImage),
Q_ARG(uint, PREVIEW_SIZE), Q_ARG(uint, PREVIEW_SIZE),
Q_ARG(uint, PREVIEW_SIZE)); Q_ARG(uint, PREVIEW_SIZE));
@ -260,4 +260,10 @@ void FractoriumEmberController<T>::SetEmberPrivate(const Ember<U>& ember, bool v
m_Fractorium->FillXforms();//Must do this first because the palette setup in FillParamTablesAndPalette() uses the xforms combo. m_Fractorium->FillXforms();//Must do this first because the palette setup in FillParamTablesAndPalette() uses the xforms combo.
FillParamTablesAndPalette(); FillParamTablesAndPalette();
} }
template class FractoriumEmberController<float>;
#ifdef DO_DOUBLE
template class FractoriumEmberController<double>;
#endif

View File

@ -456,8 +456,3 @@ private:
std::function<void (uint, uint)> m_PreviewRenderFunc; std::function<void (uint, uint)> m_PreviewRenderFunc;
}; };
template class FractoriumEmberController<float>;
#ifdef DO_DOUBLE
template class FractoriumEmberController<double>;
#endif

View File

@ -14,8 +14,8 @@ void Fractorium::UpdateHistogramBounds()
sprintf_s(m_URString, 32, "UR: %3.3f, %3.3f", -r->LowerLeftX(), r->UpperRightY()); sprintf_s(m_URString, 32, "UR: %3.3f, %3.3f", -r->LowerLeftX(), r->UpperRightY());
sprintf_s(m_LRString, 32, "LR: %3.3f, %3.3f", -r->LowerLeftX(), r->LowerLeftY()); sprintf_s(m_LRString, 32, "LR: %3.3f, %3.3f", -r->LowerLeftX(), r->LowerLeftY());
sprintf_s(m_LLString, 32, "LL: %3.3f, %3.3f", r->LowerLeftX(), r->LowerLeftY()); sprintf_s(m_LLString, 32, "LL: %3.3f, %3.3f", r->LowerLeftX(), r->LowerLeftY());
sprintf_s(m_WString, 16, "W: %4d" , r->SuperRasW()); sprintf_s(m_WString, 16, "W: %4lu" , r->SuperRasW());
sprintf_s(m_HString, 16, "H: %4d" , r->SuperRasH()); sprintf_s(m_HString, 16, "H: %4lu" , r->SuperRasH());
ui.InfoBoundsLabelUL->setText(QString(m_ULString)); ui.InfoBoundsLabelUL->setText(QString(m_ULString));
ui.InfoBoundsLabelUR->setText(QString(m_URString)); ui.InfoBoundsLabelUR->setText(QString(m_URString));
@ -24,7 +24,7 @@ void Fractorium::UpdateHistogramBounds()
ui.InfoBoundsLabelW->setText(QString(m_WString)); ui.InfoBoundsLabelW->setText(QString(m_WString));
ui.InfoBoundsLabelH->setText(QString(m_HString)); ui.InfoBoundsLabelH->setText(QString(m_HString));
ui.InfoBoundsTable->item(0, 1)->setText(ToString(r->GutterWidth())); ui.InfoBoundsTable->item(0, 1)->setText(ToString<qulonglong>(r->GutterWidth()));
if (r->GetDensityFilter()) if (r->GetDensityFilter())
{ {
@ -48,11 +48,11 @@ void Fractorium::UpdateHistogramBounds()
/// <param name="errors">The vector of error strings</param> /// <param name="errors">The vector of error strings</param>
/// <param name="textEdit">The QTextEdit to fill</param> /// <param name="textEdit">The QTextEdit to fill</param>
/// <param name="clear">Clear if true, else don't.</param> /// <param name="clear">Clear if true, else don't.</param>
void Fractorium::ErrorReportToQTextEdit(vector<string>& errors, QTextEdit* textEdit, bool clear) void Fractorium::ErrorReportToQTextEdit(const vector<string>& errors, QTextEdit* textEdit, bool clear)
{ {
if (clear) if (clear)
QMetaObject::invokeMethod(textEdit, "clear", Qt::QueuedConnection); QMetaObject::invokeMethod(textEdit, "clear", Qt::QueuedConnection);
for (size_t i = 0; i < errors.size(); i++) for (size_t i = 0; i < errors.size(); i++)
QMetaObject::invokeMethod(textEdit, "append", Qt::QueuedConnection, Q_ARG(const QString&, QString::fromStdString(errors[i]) + "\n")); QMetaObject::invokeMethod(textEdit, "append", Qt::QueuedConnection, Q_ARG(const QString&, QString::fromStdString(errors[i]) + "\n"));
} }

View File

@ -15,11 +15,11 @@ void Fractorium::InitLibraryUI()
/// </summary> /// </summary>
/// <param name="item">The item double clicked on</param> /// <param name="item">The item double clicked on</param>
/// <param name="v">The vector holding the RGBA bitmap</param> /// <param name="v">The vector holding the RGBA bitmap</param>
/// <param name="width">The width of the bitmap</param> /// <param name="w">The width of the bitmap</param>
/// <param name="height">The height of the bitmap</param> /// <param name="h">The height of the bitmap</param>
void Fractorium::SetLibraryTreeItemData(EmberTreeWidgetItemBase* item, vector<byte>& v, uint width, uint height) void Fractorium::SetLibraryTreeItemData(EmberTreeWidgetItemBase* item, vector<byte>& v, uint w, uint h)
{ {
item->SetImage(v, width, height); item->SetImage(v, w, h);
} }
/// <summary> /// <summary>
@ -275,3 +275,9 @@ void FractoriumEmberController<T>::StopPreviewRender()
QCoreApplication::sendPostedEvents(m_Fractorium->ui.LibraryTree); QCoreApplication::sendPostedEvents(m_Fractorium->ui.LibraryTree);
QCoreApplication::flush(); QCoreApplication::flush();
} }
template class FractoriumEmberController<float>;
#ifdef DO_DOUBLE
template class FractoriumEmberController<double>;
#endif

View File

@ -191,7 +191,7 @@ void FractoriumEmberController<T>::OpenAndPrepFiles(const QStringList& filenames
//Also ensure it has a name. //Also ensure it has a name.
if (embers[i].m_Name == "" || embers[i].m_Name == "No name") if (embers[i].m_Name == "" || embers[i].m_Name == "No name")
embers[i].m_Name = ToString(i).toStdString(); embers[i].m_Name = ToString<qulonglong>(i).toStdString();
embers[i].m_Quality = m_Fractorium->m_QualitySpin->value(); embers[i].m_Quality = m_Fractorium->m_QualitySpin->value();
embers[i].m_Supersample = m_Fractorium->m_SupersampleSpin->value(); embers[i].m_Supersample = m_Fractorium->m_SupersampleSpin->value();
@ -504,13 +504,13 @@ void FractoriumEmberController<T>::PasteXmlAppend()
for (i = 0; i < b.size(); i++) for (i = 0; i < b.size(); i++)
{ {
if ((uint)b[i] < 128u) if (uint(b[i]) < 128u)
s.push_back(b[i]); s.push_back(b[i]);
} }
b.clear(); b.clear();
StopPreviewRender(); StopPreviewRender();
parser.Parse((byte*)s.c_str(), "", embers); parser.Parse(reinterpret_cast<byte*>(const_cast<char*>(s.c_str())), "", embers);
errors = parser.ErrorReportString(); errors = parser.ErrorReportString();
if (errors != "") if (errors != "")
@ -527,7 +527,7 @@ void FractoriumEmberController<T>::PasteXmlAppend()
//Also ensure it has a name. //Also ensure it has a name.
if (embers[i].m_Name == "" || embers[i].m_Name == "No name") if (embers[i].m_Name == "" || embers[i].m_Name == "No name")
embers[i].m_Name = ToString(embers[i].m_Index).toStdString(); embers[i].m_Name = ToString<qulonglong>(embers[i].m_Index).toStdString();
m_EmberFile.m_Embers.push_back(embers[i]);//Will invalidate the pointers contained in the EmberTreeWidgetItems, UpdateLibraryTree() will resync. m_EmberFile.m_Embers.push_back(embers[i]);//Will invalidate the pointers contained in the EmberTreeWidgetItems, UpdateLibraryTree() will resync.
} }
@ -559,14 +559,14 @@ void FractoriumEmberController<T>::PasteXmlOver()
for (i = 0; i < b.size(); i++) for (i = 0; i < b.size(); i++)
{ {
if ((uint)b[i] < 128u) if (uint(b[i]) < 128u)
s.push_back(b[i]); s.push_back(b[i]);
} }
b.clear(); b.clear();
StopPreviewRender(); StopPreviewRender();
m_EmberFile.m_Embers.clear();//Will invalidate the pointers contained in the EmberTreeWidgetItems, UpdateLibraryTree() will resync. m_EmberFile.m_Embers.clear();//Will invalidate the pointers contained in the EmberTreeWidgetItems, UpdateLibraryTree() will resync.
parser.Parse((byte*)s.c_str(), "", m_EmberFile.m_Embers); parser.Parse(reinterpret_cast<byte*>(const_cast<char*>(s.c_str())), "", m_EmberFile.m_Embers);
errors = parser.ErrorReportString(); errors = parser.ErrorReportString();
if (errors != "") if (errors != "")
@ -583,7 +583,7 @@ void FractoriumEmberController<T>::PasteXmlOver()
//Also ensure it has a name. //Also ensure it has a name.
if (m_EmberFile.m_Embers[i].m_Name == "" || m_EmberFile.m_Embers[i].m_Name == "No name") if (m_EmberFile.m_Embers[i].m_Name == "" || m_EmberFile.m_Embers[i].m_Name == "No name")
m_EmberFile.m_Embers[i].m_Name = ToString(m_EmberFile.m_Embers[i].m_Index).toStdString(); m_EmberFile.m_Embers[i].m_Name = ToString<qulonglong>(m_EmberFile.m_Embers[i].m_Index).toStdString();
} }
} }
else else
@ -758,3 +758,9 @@ void Fractorium::OnActionAbout(bool checked)
{ {
m_AboutDialog->exec(); m_AboutDialog->exec();
} }
template class FractoriumEmberController<float>;
#ifdef DO_DOUBLE
template class FractoriumEmberController<double>;
#endif

View File

@ -111,11 +111,11 @@ void FractoriumEmberController<T>::ApplyPaletteToEmber()
int i, rot = 0; int i, rot = 0;
uint blur = m_Fractorium->m_PaletteBlurSpin->value(); uint blur = m_Fractorium->m_PaletteBlurSpin->value();
uint freq = m_Fractorium->m_PaletteFrequencySpin->value(); uint freq = m_Fractorium->m_PaletteFrequencySpin->value();
double sat = (double)m_Fractorium->m_PaletteSaturationSpin->value() / 100.0; double sat = double(m_Fractorium->m_PaletteSaturationSpin->value() / 100.0);
double brightness = (double)m_Fractorium->m_PaletteBrightnessSpin->value() / 255.0; double brightness = double(m_Fractorium->m_PaletteBrightnessSpin->value() / 255.0);
double contrast = (double)(m_Fractorium->m_PaletteContrastSpin->value() > 0 ? (m_Fractorium->m_PaletteContrastSpin->value() * 2) : m_Fractorium->m_PaletteContrastSpin->value()) / 100.0; double contrast = double(m_Fractorium->m_PaletteContrastSpin->value() > 0 ? (m_Fractorium->m_PaletteContrastSpin->value() * 2) : m_Fractorium->m_PaletteContrastSpin->value()) / 100.0;
m_Ember.m_Hue = (double)(m_Fractorium->m_PaletteHueSpin->value()) / 360.0;//This is the only palette adjustment value that gets saved with the ember, so just assign it here. m_Ember.m_Hue = double(m_Fractorium->m_PaletteHueSpin->value()) / 360.0;//This is the only palette adjustment value that gets saved with the ember, so just assign it here.
//Use the temp palette as the base and apply the adjustments gotten from the GUI and save the result in the ember palette. //Use the temp palette as the base and apply the adjustments gotten from the GUI and save the result in the ember palette.
m_TempPalette.MakeAdjustedPalette(m_Ember.m_Palette, 0, m_Ember.m_Hue, sat, brightness, contrast, blur, freq); m_TempPalette.MakeAdjustedPalette(m_Ember.m_Palette, 0, m_Ember.m_Hue, sat, brightness, contrast, blur, freq);
@ -235,7 +235,7 @@ void Fractorium::OnPaletteRandomSelectButtonClicked(bool checked)
uint i = 0; uint i = 0;
int rowCount = ui.PaletteListTable->rowCount() - 1; int rowCount = ui.PaletteListTable->rowCount() - 1;
while ((i = QTIsaac<ISAAC_SIZE, ISAAC_INT>::GlobalRand->Rand(rowCount)) == m_PreviousPaletteRow); while ((i = QTIsaac<ISAAC_SIZE, ISAAC_INT>::GlobalRand->Rand(rowCount)) == uint(m_PreviousPaletteRow));
OnPaletteCellClicked(i, 1); OnPaletteCellClicked(i, 1);
} }
@ -282,3 +282,9 @@ void Fractorium::ResetPaletteControls()
m_PaletteBlurSpin->SetValueStealth(0); m_PaletteBlurSpin->SetValueStealth(0);
m_PaletteFrequencySpin->SetValueStealth(1); m_PaletteFrequencySpin->SetValueStealth(1);
} }
template class FractoriumEmberController<float>;
#ifdef DO_DOUBLE
template class FractoriumEmberController<double>;
#endif

View File

@ -523,7 +523,7 @@ void FractoriumEmberController<T>::FillParamTablesAndPalette()
m_Fractorium->m_HighlightSpin->SetValueStealth(m_Ember.m_HighlightPower); m_Fractorium->m_HighlightSpin->SetValueStealth(m_Ember.m_HighlightPower);
m_Fractorium->m_ColorDialog->setCurrentColor(QColor(m_Ember.m_Background.r * 255, m_Ember.m_Background.g * 255, m_Ember.m_Background.b * 255)); m_Fractorium->m_ColorDialog->setCurrentColor(QColor(m_Ember.m_Background.r * 255, m_Ember.m_Background.g * 255, m_Ember.m_Background.b * 255));
m_Fractorium->ui.ColorTable->item(5, 1)->setBackgroundColor(m_Fractorium->m_ColorDialog->currentColor()); m_Fractorium->ui.ColorTable->item(5, 1)->setBackgroundColor(m_Fractorium->m_ColorDialog->currentColor());
m_Fractorium->m_PaletteModeCombo->SetCurrentIndexStealth((int)m_Ember.m_PaletteMode); m_Fractorium->m_PaletteModeCombo->SetCurrentIndexStealth(int(m_Ember.m_PaletteMode));
m_Fractorium->m_WidthSpin->SetValueStealth(m_Ember.m_FinalRasW);//Geometry. m_Fractorium->m_WidthSpin->SetValueStealth(m_Ember.m_FinalRasW);//Geometry.
m_Fractorium->m_HeightSpin->SetValueStealth(m_Ember.m_FinalRasH); m_Fractorium->m_HeightSpin->SetValueStealth(m_Ember.m_FinalRasH);
m_Fractorium->m_CenterXSpin->SetValueStealth(m_Ember.m_CenterX); m_Fractorium->m_CenterXSpin->SetValueStealth(m_Ember.m_CenterX);
@ -537,9 +537,9 @@ void FractoriumEmberController<T>::FillParamTablesAndPalette()
m_Fractorium->m_YawSpin->SetValueStealth(m_Ember.m_CamYaw * RAD_2_DEG_T); m_Fractorium->m_YawSpin->SetValueStealth(m_Ember.m_CamYaw * RAD_2_DEG_T);
m_Fractorium->m_DepthBlurSpin->SetValueStealth(m_Ember.m_CamDepthBlur); m_Fractorium->m_DepthBlurSpin->SetValueStealth(m_Ember.m_CamDepthBlur);
m_Fractorium->m_SpatialFilterWidthSpin->SetValueStealth(m_Ember.m_SpatialFilterRadius);//Filter. m_Fractorium->m_SpatialFilterWidthSpin->SetValueStealth(m_Ember.m_SpatialFilterRadius);//Filter.
m_Fractorium->m_SpatialFilterTypeCombo->SetCurrentIndexStealth((int)m_Ember.m_SpatialFilterType); m_Fractorium->m_SpatialFilterTypeCombo->SetCurrentIndexStealth(int(m_Ember.m_SpatialFilterType));
m_Fractorium->m_TemporalFilterWidthSpin->SetValueStealth(m_Ember.m_TemporalFilterWidth); m_Fractorium->m_TemporalFilterWidthSpin->SetValueStealth(m_Ember.m_TemporalFilterWidth);
m_Fractorium->m_TemporalFilterTypeCombo->SetCurrentIndexStealth((int)m_Ember.m_TemporalFilterType); m_Fractorium->m_TemporalFilterTypeCombo->SetCurrentIndexStealth(int(m_Ember.m_TemporalFilterType));
m_Fractorium->m_DEFilterMinRadiusSpin->SetValueStealth(m_Ember.m_MinRadDE); m_Fractorium->m_DEFilterMinRadiusSpin->SetValueStealth(m_Ember.m_MinRadDE);
m_Fractorium->m_DEFilterMaxRadiusSpin->SetValueStealth(m_Ember.m_MaxRadDE); m_Fractorium->m_DEFilterMaxRadiusSpin->SetValueStealth(m_Ember.m_MaxRadDE);
m_Fractorium->m_DECurveSpin->SetValueStealth(m_Ember.m_CurveDE); m_Fractorium->m_DECurveSpin->SetValueStealth(m_Ember.m_CurveDE);
@ -587,7 +587,7 @@ void FractoriumEmberController<T>::ParamsToEmber(Ember<T>& ember)
ember.m_Background.r = color.red() / 255.0; ember.m_Background.r = color.red() / 255.0;
ember.m_Background.g = color.green() / 255.0; ember.m_Background.g = color.green() / 255.0;
ember.m_Background.b = color.blue() / 255.0; ember.m_Background.b = color.blue() / 255.0;
ember.m_PaletteMode = (ePaletteMode)m_Fractorium->m_PaletteModeCombo->currentIndex(); ember.m_PaletteMode = ePaletteMode(m_Fractorium->m_PaletteModeCombo->currentIndex());
ember.m_FinalRasW = m_Fractorium->m_WidthSpin->value();//Geometry. ember.m_FinalRasW = m_Fractorium->m_WidthSpin->value();//Geometry.
ember.m_FinalRasH = m_Fractorium->m_HeightSpin->value(); ember.m_FinalRasH = m_Fractorium->m_HeightSpin->value();
ember.m_CenterX = m_Fractorium->m_CenterXSpin->value(); ember.m_CenterX = m_Fractorium->m_CenterXSpin->value();
@ -601,9 +601,9 @@ void FractoriumEmberController<T>::ParamsToEmber(Ember<T>& ember)
ember.m_CamYaw = m_Fractorium->m_YawSpin->value() * DEG_2_RAD_T; ember.m_CamYaw = m_Fractorium->m_YawSpin->value() * DEG_2_RAD_T;
ember.m_CamDepthBlur = m_Fractorium->m_DepthBlurSpin->value(); ember.m_CamDepthBlur = m_Fractorium->m_DepthBlurSpin->value();
ember.m_SpatialFilterRadius = m_Fractorium->m_SpatialFilterWidthSpin->value();//Filter. ember.m_SpatialFilterRadius = m_Fractorium->m_SpatialFilterWidthSpin->value();//Filter.
ember.m_SpatialFilterType = (eSpatialFilterType)m_Fractorium->m_SpatialFilterTypeCombo->currentIndex(); ember.m_SpatialFilterType = eSpatialFilterType(m_Fractorium->m_SpatialFilterTypeCombo->currentIndex());
ember.m_TemporalFilterWidth = m_Fractorium->m_TemporalFilterWidthSpin->value(); ember.m_TemporalFilterWidth = m_Fractorium->m_TemporalFilterWidthSpin->value();
ember.m_TemporalFilterType = (eTemporalFilterType)m_Fractorium->m_TemporalFilterTypeCombo->currentIndex(); ember.m_TemporalFilterType = eTemporalFilterType(m_Fractorium->m_TemporalFilterTypeCombo->currentIndex());
ember.m_MinRadDE = m_Fractorium->m_DEFilterMinRadiusSpin->value(); ember.m_MinRadDE = m_Fractorium->m_DEFilterMinRadiusSpin->value();
ember.m_MaxRadDE = m_Fractorium->m_DEFilterMaxRadiusSpin->value(); ember.m_MaxRadDE = m_Fractorium->m_DEFilterMaxRadiusSpin->value();
ember.m_CurveDE = m_Fractorium->m_DECurveSpin->value(); ember.m_CurveDE = m_Fractorium->m_DECurveSpin->value();
@ -612,8 +612,8 @@ void FractoriumEmberController<T>::ParamsToEmber(Ember<T>& ember)
ember.m_Quality = m_Fractorium->m_QualitySpin->value(); ember.m_Quality = m_Fractorium->m_QualitySpin->value();
ember.m_Supersample = m_Fractorium->m_SupersampleSpin->value(); ember.m_Supersample = m_Fractorium->m_SupersampleSpin->value();
ember.m_TemporalSamples = m_Fractorium->m_TemporalSamplesSpin->value(); ember.m_TemporalSamples = m_Fractorium->m_TemporalSamplesSpin->value();
ember.m_AffineInterp = (eAffineInterp)m_Fractorium->m_AffineInterpTypeCombo->currentIndex(); ember.m_AffineInterp = eAffineInterp(m_Fractorium->m_AffineInterpTypeCombo->currentIndex());
ember.m_Interp = (eInterp)m_Fractorium->m_InterpTypeCombo->currentIndex(); ember.m_Interp = eInterp(m_Fractorium->m_InterpTypeCombo->currentIndex());
ember.SyncSize(); ember.SyncSize();
} }
@ -644,3 +644,9 @@ void Fractorium::SetScale(double scale)
{ {
m_ScaleSpin->setValue(scale); m_ScaleSpin->setValue(scale);
} }
template class FractoriumEmberController<float>;
#ifdef DO_DOUBLE
template class FractoriumEmberController<double>;
#endif

View File

@ -1,18 +1,6 @@
#pragma once
#define GL_GLEXT_PROTOTYPES #define GL_GLEXT_PROTOTYPES
#define GLM_FORCE_INLINE 1 #define GLM_FORCE_INLINE 1
#include "Renderer.h"
#include "RendererCL.h"
#include "VariationList.h"
#include "OpenCLWrapper.h"
#include "XmlToEmber.h"
#include "EmberToXml.h"
#include "SheepTools.h"
#include "JpegUtils.h"
#include "EmberCommon.h"
#include <deque>
#undef QT_OPENGL_ES_2//Make absolutely sure OpenGL ES is not used. #undef QT_OPENGL_ES_2//Make absolutely sure OpenGL ES is not used.
#define QT_NO_OPENGL_ES_2 #define QT_NO_OPENGL_ES_2
#include <QtWidgets> #include <QtWidgets>
@ -29,11 +17,23 @@
#include <QSettings> #include <QSettings>
#include <QStandardPaths> #include <QStandardPaths>
#include <QGLWidget> #include <QGLWidget>
#include <QOpenGLFunctions_2_0.h> //#include <QOpenGLFunctions_2_0.h>
#include <qopenglfunctions_2_0.h>
#include <QtWidgets/QMainWindow> #include <QtWidgets/QMainWindow>
#include <QFuture> #include <QFuture>
#include <QtConcurrentRun> #include <QtConcurrentRun>
#include "Renderer.h"
#include "RendererCL.h"
#include "VariationList.h"
#include "OpenCLWrapper.h"
#include "XmlToEmber.h"
#include "EmberToXml.h"
#include "SheepTools.h"
#include "JpegUtils.h"
#include "EmberCommon.h"
#include <deque>
#define GLM_FORCE_RADIANS #define GLM_FORCE_RADIANS
#include "glm/glm.hpp" #include "glm/glm.hpp"
@ -42,6 +42,10 @@
#define XFORM_COLOR_COUNT 14 #define XFORM_COLOR_COUNT 14
#ifndef WIN32
#undef Bool
#endif
using namespace std; using namespace std;
using namespace EmberNs; using namespace EmberNs;
using namespace EmberCLns; using namespace EmberCLns;

View File

@ -224,7 +224,7 @@ int FractoriumEmberController<T>::ProgressFunc(Ember<T>& ember, void* foo, doubl
{ {
QString status; QString status;
m_Fractorium->m_ProgressBar->setValue((int)fraction);//Only really applies to iter and filter, because final accum only gives progress 0 and 100. m_Fractorium->m_ProgressBar->setValue(int(fraction));//Only really applies to iter and filter, because final accum only gives progress 0 and 100.
if (stage == 0) if (stage == 0)
status = "Iterating"; status = "Iterating";
@ -275,7 +275,7 @@ bool FractoriumEmberController<T>::SyncSizes()
gl->Allocate(); gl->Allocate();
gl->SetViewport(); gl->SetViewport();
if (m_Renderer->RendererType() == OPENCL_RENDERER && (rendererCL = (RendererCL<T>*)m_Renderer.get())) if (m_Renderer->RendererType() == OPENCL_RENDERER && (rendererCL = dynamic_cast<RendererCL<T>*>(m_Renderer.get())))
rendererCL->SetOutputTexture(gl->OutputTexID()); rendererCL->SetOutputTexture(gl->OutputTexID());
changed = true; changed = true;
@ -300,7 +300,7 @@ bool FractoriumEmberController<T>::Render()
eProcessAction action = CondenseAndClearProcessActions(); eProcessAction action = CondenseAndClearProcessActions();
if (m_Renderer->RendererType() == OPENCL_RENDERER) if (m_Renderer->RendererType() == OPENCL_RENDERER)
rendererCL = (RendererCL<T>*)m_Renderer.get(); rendererCL = dynamic_cast<RendererCL<T>*>(m_Renderer.get());
//Force temporal samples to always be 1. Perhaps change later when animation is implemented. //Force temporal samples to always be 1. Perhaps change later when animation is implemented.
m_Ember.m_TemporalSamples = 1; m_Ember.m_TemporalSamples = 1;
@ -378,8 +378,8 @@ bool FractoriumEmberController<T>::Render()
if (ProcessState() == ACCUM_DONE) if (ProcessState() == ACCUM_DONE)
{ {
EmberStats stats = m_Renderer->Stats(); EmberStats stats = m_Renderer->Stats();
QString iters = ToString(stats.m_Iters); QString iters = ToString<qulonglong>(stats.m_Iters);
QString scaledQuality = ToString((uint)m_Renderer->ScaledQuality()); QString scaledQuality = ToString(uint(m_Renderer->ScaledQuality()));
string renderTime = m_RenderElapsedTimer.Format(m_RenderElapsedTimer.Toc()); string renderTime = m_RenderElapsedTimer.Format(m_RenderElapsedTimer.Toc());
m_Fractorium->m_ProgressBar->setValue(100); m_Fractorium->m_ProgressBar->setValue(100);
@ -391,8 +391,8 @@ bool FractoriumEmberController<T>::Render()
} }
else else
{ {
double percent = (double)stats.m_Badvals / (double)stats.m_Iters; double percent = double(stats.m_Badvals) / double(stats.m_Iters);
QString badVals = ToString(stats.m_Badvals); QString badVals = ToString<qulonglong>(stats.m_Badvals);
QString badPercent = QLocale::system().toString(percent * 100, 'f', 2); QString badPercent = QLocale::system().toString(percent * 100, 'f', 2);
m_Fractorium->m_RenderStatusLabel->setText("Iters: " + iters + ". Scaled quality: " + scaledQuality + ". Bad values: " + badVals + " (" + badPercent + "%). Total time: " + QString::fromStdString(renderTime)); m_Fractorium->m_RenderStatusLabel->setText("Iters: " + iters + ". Scaled quality: " + scaledQuality + ". Bad values: " + badVals + " (" + badPercent + "%). Total time: " + QString::fromStdString(renderTime));
@ -609,13 +609,13 @@ bool Fractorium::CreateControllerFromOptions()
{ {
bool ok = true; bool ok = true;
size_t size = size_t elementSize =
#ifdef DO_DOUBLE #ifdef DO_DOUBLE
m_Settings->Double() ? sizeof(double) : m_Settings->Double() ? sizeof(double) :
#endif #endif
sizeof(float); sizeof(float);
if (!m_Controller.get() || (m_Controller->SizeOfT() != size)) if (!m_Controller.get() || (m_Controller->SizeOfT() != elementSize))
{ {
double hue = m_PaletteHueSpin->value(); double hue = m_PaletteHueSpin->value();
double sat = m_PaletteSaturationSpin->value(); double sat = m_PaletteSaturationSpin->value();
@ -703,3 +703,9 @@ void Fractorium::IdleTimer() { m_Controller->Render(); }
/// </summary> /// </summary>
/// <returns>True if the ember controller and GL controllers are both not NULL, else false.</returns> /// <returns>True if the ember controller and GL controllers are both not NULL, else false.</returns>
bool Fractorium::ControllersOk() { return m_Controller.get() && m_Controller->GLController(); } bool Fractorium::ControllersOk() { return m_Controller.get() && m_Controller->GLController(); }
template class FractoriumEmberController<float>;
#ifdef DO_DOUBLE
template class FractoriumEmberController<double>;
#endif

View File

@ -5,9 +5,9 @@
/// Constructor that passes the parent to the base and sets up reasonable defaults /// Constructor that passes the parent to the base and sets up reasonable defaults
/// if the settings file was not present or corrupted. /// if the settings file was not present or corrupted.
/// </summary> /// </summary>
/// <param name="parent">The parent widget</param> /// <param name="p">The parent widget</param>
FractoriumSettings::FractoriumSettings(QObject* parent) FractoriumSettings::FractoriumSettings(QObject* p)
: QSettings(QSettings::IniFormat, QSettings::UserScope, "Fractorium", "Fractorium", parent) : QSettings(QSettings::IniFormat, QSettings::UserScope, "Fractorium", "Fractorium", p)
{ {
EnsureDefaults(); EnsureDefaults();
} }
@ -39,7 +39,7 @@ void FractoriumSettings::EnsureDefaults()
XmlSupersample(2); XmlSupersample(2);
if (ThreadCount() == 0 || ThreadCount() > Timing::ProcessorCount()) if (ThreadCount() == 0 || ThreadCount() > Timing::ProcessorCount())
ThreadCount(max(1, Timing::ProcessorCount() - 1));//Default to one less to keep the UI responsive for first time users. ThreadCount(max(1u, Timing::ProcessorCount() - 1));//Default to one less to keep the UI responsive for first time users.
if (FinalThreadCount() == 0 || FinalThreadCount() > Timing::ProcessorCount()) if (FinalThreadCount() == 0 || FinalThreadCount() > Timing::ProcessorCount())
FinalThreadCount(Timing::ProcessorCount()); FinalThreadCount(Timing::ProcessorCount());

View File

@ -66,7 +66,7 @@ class FractoriumSettings : public QSettings
{ {
Q_OBJECT Q_OBJECT
public: public:
FractoriumSettings(QObject* parent); FractoriumSettings(QObject* p);
void EnsureDefaults(); void EnsureDefaults();
bool EarlyClip(); bool EarlyClip();

View File

@ -48,7 +48,7 @@ Xform<T>* FractoriumEmberController<T>::CurrentXform()
/// <param name="i">The index to set the current xform to</param> /// <param name="i">The index to set the current xform to</param>
void Fractorium::CurrentXform(uint i) void Fractorium::CurrentXform(uint i)
{ {
if (i < ui.CurrentXformCombo->count()) if (i < uint(ui.CurrentXformCombo->count()))
ui.CurrentXformCombo->setCurrentIndex(i); ui.CurrentXformCombo->setCurrentIndex(i);
} }
@ -305,7 +305,7 @@ void FractoriumEmberController<T>::SetNormalizedWeightText(Xform<T>* xform)
m_Ember.CalcNormalizedWeights(m_NormalizedWeights); m_Ember.CalcNormalizedWeights(m_NormalizedWeights);
if (index != -1 && index < m_NormalizedWeights.size()) if (index != -1 && index < m_NormalizedWeights.size())
m_Fractorium->m_XformWeightSpin->setSuffix(QString(" (") + QLocale::system().toString((double)m_NormalizedWeights[index], 'g', 3) + ")"); m_Fractorium->m_XformWeightSpin->setSuffix(QString(" (") + QLocale::system().toString(double(m_NormalizedWeights[index]), 'g', 3) + ")");
} }
} }
@ -332,7 +332,7 @@ void Fractorium::FillXforms()
combo->blockSignals(true); combo->blockSignals(true);
combo->clear(); combo->clear();
for (i = 0; i < m_Controller->XformCount(); i++) for (i = 0; i < int(m_Controller->XformCount()); i++)
{ {
combo->addItem(ToString(i + 1)); combo->addItem(ToString(i + 1));
combo->setItemIcon(i, m_XformComboIcons[i % XFORM_COLOR_COUNT]); combo->setItemIcon(i, m_XformComboIcons[i % XFORM_COLOR_COUNT]);
@ -350,3 +350,9 @@ void Fractorium::FillXforms()
OnSoloXformCheckBoxStateChanged(Qt::Unchecked); OnSoloXformCheckBoxStateChanged(Qt::Unchecked);
OnCurrentXformComboChanged(0);//Make sure the event gets called, because it won't if the zero index is already selected. OnCurrentXformComboChanged(0);//Make sure the event gets called, because it won't if the zero index is already selected.
} }
template class FractoriumEmberController<float>;
#ifdef DO_DOUBLE
template class FractoriumEmberController<double>;
#endif

View File

@ -509,4 +509,10 @@ void Fractorium::SetupAffineSpinner(QTableWidget* table, const QObject* receiver
bool Fractorium::DrawAllPre() { return ui.ShowPreAffineAllRadio->isChecked(); } bool Fractorium::DrawAllPre() { return ui.ShowPreAffineAllRadio->isChecked(); }
bool Fractorium::DrawAllPost() { return ui.ShowPostAffineAllRadio->isChecked(); } bool Fractorium::DrawAllPost() { return ui.ShowPostAffineAllRadio->isChecked(); }
bool Fractorium::LocalPivot() { return ui.LocalPivotRadio->isChecked(); } bool Fractorium::LocalPivot() { return ui.LocalPivotRadio->isChecked(); }
template class FractoriumEmberController<float>;
#ifdef DO_DOUBLE
template class FractoriumEmberController<double>;
#endif

View File

@ -68,7 +68,7 @@ void FractoriumEmberController<T>::XformScrollColorIndexChanged(int d)
{ {
UpdateCurrentXform([&] (Xform<T>* xform) UpdateCurrentXform([&] (Xform<T>* xform)
{ {
m_Fractorium->m_XformColorIndexSpin->setValue(d / (double)m_Fractorium->ui.XformColorScroll->maximum());//Will trigger an update. m_Fractorium->m_XformColorIndexSpin->setValue(d / double(m_Fractorium->ui.XformColorScroll->maximum()));//Will trigger an update.
}, false); }, false);
} }
@ -163,7 +163,7 @@ void FractoriumEmberController<T>::SetCurrentXformColorIndex(double d)
entry.g *= 255; entry.g *= 255;
entry.b *= 255; entry.b *= 255;
QRgb rgb = (uint)entry.r << 16 | (uint)entry.g << 8 | (uint)entry.b; QRgb rgb = uint(entry.r) << 16 | uint(entry.g) << 8 | uint(entry.b);
m_Fractorium->ui.XformColorIndexTable->item(0, 0)->setBackgroundColor(QColor::fromRgb(rgb)); m_Fractorium->ui.XformColorIndexTable->item(0, 0)->setBackgroundColor(QColor::fromRgb(rgb));
}, false); }, false);
} }
@ -202,3 +202,9 @@ void FractoriumEmberControllerBase::SetPaletteRefTable(QPixmap* pixmap)
m_Fractorium->m_PaletteRefItem->setData(Qt::DecorationRole, pixTemp.scaled(size, Qt::IgnoreAspectRatio, Qt::SmoothTransformation)); m_Fractorium->m_PaletteRefItem->setData(Qt::DecorationRole, pixTemp.scaled(size, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
} }
} }
template class FractoriumEmberController<float>;
#ifdef DO_DOUBLE
template class FractoriumEmberController<double>;
#endif

View File

@ -115,7 +115,7 @@ void FractoriumEmberController<T>::ClearVariationsTree()
for (uint j = 0; j < item->childCount(); j++)//Iterate through all of the children, which will be the params. for (uint j = 0; j < item->childCount(); j++)//Iterate through all of the children, which will be the params.
{ {
if (spinBox = dynamic_cast<VariationTreeDoubleSpinBox<T>*>(tree->itemWidget(item->child(j), 1)))//Cast the child widget to the VariationTreeDoubleSpinBox type. if ((spinBox = dynamic_cast<VariationTreeDoubleSpinBox<T>*>(tree->itemWidget(item->child(j), 1))))//Cast the child widget to the VariationTreeDoubleSpinBox type.
spinBox->SetValueStealth(0); spinBox->SetValueStealth(0);
} }
} }
@ -247,12 +247,12 @@ void FractoriumEmberController<T>::FillVariationTreeWithXform(Xform<T>* xform)
if (parVar) if (parVar)
{ {
if (param = parVar->GetParam(s.c_str()))//Retrieve pointer to the param. if ((param = parVar->GetParam(s.c_str())))//Retrieve pointer to the param.
childSpinBox->SetValueStealth(*param); childSpinBox->SetValueStealth(*param);
} }
else if (origParVar)//Parametric variation was not present in this xform, so set child values to defaults. else if (origParVar)//Parametric variation was not present in this xform, so set child values to defaults.
{ {
if (param = origParVar->GetParam(s.c_str())) if ((param = origParVar->GetParam(s.c_str())))
childSpinBox->SetValueStealth(*param); childSpinBox->SetValueStealth(*param);
else else
childSpinBox->SetValueStealth(0);//Will most likely never happen, but just to be safe. childSpinBox->SetValueStealth(0);//Will most likely never happen, but just to be safe.
@ -293,7 +293,7 @@ void Fractorium::OnVariationsFilterLineEditTextChanged(const QString& text)
tree->setUpdatesEnabled(false); tree->setUpdatesEnabled(false);
for (uint i = 0; i < tree->topLevelItemCount(); i++) for (uint i = 0; i < uint(tree->topLevelItemCount()); i++)
{ {
QTreeWidgetItem* item = tree->topLevelItem(i); QTreeWidgetItem* item = tree->topLevelItem(i);
QString varName = item->text(0); QString varName = item->text(0);
@ -314,3 +314,9 @@ void Fractorium::OnVariationsFilterClearButtonClicked(bool checked)
{ {
ui.VariationsFilterLineEdit->clear(); ui.VariationsFilterLineEdit->clear();
} }
template class FractoriumEmberController<float>;
#ifdef DO_DOUBLE
template class FractoriumEmberController<double>;
#endif

View File

@ -29,7 +29,7 @@ void FractoriumEmberController<T>::FillXaosWithCurrentXform()
if (m_Fractorium->ui.XaosToRadio->isChecked())//"To": Single xform, advance index. if (m_Fractorium->ui.XaosToRadio->isChecked())//"To": Single xform, advance index.
spinBox->SetValueStealth(currXform->Xaos(i)); spinBox->SetValueStealth(currXform->Xaos(i));
else//"From": Advance xforms, single index. else//"From": Advance xforms, single index.
if (currXform = m_Ember.GetXform(i)) if ((currXform = m_Ember.GetXform(i)))
spinBox->SetValueStealth(currXform->Xaos(m_Fractorium->ui.CurrentXformCombo->currentIndex())); spinBox->SetValueStealth(currXform->Xaos(m_Fractorium->ui.CurrentXformCombo->currentIndex()));
//Fill in name column. //Fill in name column.
@ -57,15 +57,15 @@ QString FractoriumEmberController<T>::MakeXaosNameString(uint i)
if (xform) if (xform)
{ {
int i = m_Ember.GetXformIndex(xform) + 1;//GUI is 1 indexed to avoid confusing the user. int indexPlus1 = m_Ember.GetXformIndex(xform) + 1;//GUI is 1 indexed to avoid confusing the user.
int curr = m_Fractorium->ui.CurrentXformCombo->currentIndex() + 1; int curr = m_Fractorium->ui.CurrentXformCombo->currentIndex() + 1;
if (i != -1) if (indexPlus1 != -1)
{ {
if (m_Fractorium->ui.XaosToRadio->isChecked()) if (m_Fractorium->ui.XaosToRadio->isChecked())
name = QString("From ") + ToString(curr) + QString(" To ") + ToString(i); name = QString("From ") + ToString(curr) + QString(" To ") + ToString(indexPlus1);
else else
name = QString("From ") + ToString(i) + QString(" To ") + ToString(curr); name = QString("From ") + ToString(indexPlus1) + QString(" To ") + ToString(curr);
//if (xform->m_Name != "") //if (xform->m_Name != "")
// name = name + " (" + QString::fromStdString(xform->m_Name) + ")"; // name = name + " (" + QString::fromStdString(xform->m_Name) + ")";
@ -103,7 +103,7 @@ void FractoriumEmberController<T>::XaosChanged(DoubleSpinBox* sender)
} }
else//"From": Advance xforms, single index. else//"From": Advance xforms, single index.
{ {
if (xform = m_Ember.GetXform(i))//Single = is intentional. if ((xform = m_Ember.GetXform(i)))//Single = is intentional.
xform->SetXaos(m_Fractorium->ui.CurrentXformCombo->currentIndex(), spinBox->value()); xform->SetXaos(m_Fractorium->ui.CurrentXformCombo->currentIndex(), spinBox->value());
} }
@ -137,10 +137,10 @@ void Fractorium::OnXaosFromToToggled(bool checked)
void Fractorium::FillXaosTable() void Fractorium::FillXaosTable()
{ {
int spinHeight = 20; int spinHeight = 20;
QWidget* w; QWidget* w = nullptr;
ui.XaosTable->setRowCount(m_Controller->XformCount());//This will grow or shrink the number of rows and call the destructor for previous DoubleSpinBoxes. ui.XaosTable->setRowCount(m_Controller->XformCount());//This will grow or shrink the number of rows and call the destructor for previous DoubleSpinBoxes.
for (int i = 0; i < m_Controller->XformCount(); i++) for (int i = 0; i < int(m_Controller->XformCount()); i++)
{ {
DoubleSpinBox* spinBox = new DoubleSpinBox(ui.XaosTable, spinHeight, 0.1); DoubleSpinBox* spinBox = new DoubleSpinBox(ui.XaosTable, spinHeight, 0.1);
QTableWidgetItem* xformNameItem = new QTableWidgetItem(m_Controller->MakeXaosNameString(i)); QTableWidgetItem* xformNameItem = new QTableWidgetItem(m_Controller->MakeXaosNameString(i));
@ -199,14 +199,14 @@ void FractoriumEmberController<T>::RandomXaos()
{ {
for (size_t i = 0; i < m_Ember.XformCount(); i++) for (size_t i = 0; i < m_Ember.XformCount(); i++)
{ {
if (Xform<T>* xform = m_Ember.GetXform(i)) if (Xform<T>* localXform = m_Ember.GetXform(i))
{ {
for (size_t j = 0; j < m_Ember.XformCount(); j++) for (size_t j = 0; j < m_Ember.XformCount(); j++)
{ {
if (m_Rand.RandBit()) if (m_Rand.RandBit())
xform->SetXaos(j, (T)m_Rand.RandBit()); localXform->SetXaos(j, T(m_Rand.RandBit()));
else else
xform->SetXaos(j, m_Rand.Frand<T>(0, 3)); localXform->SetXaos(j, m_Rand.Frand<T>(0, 3));
} }
} }
} }
@ -216,4 +216,10 @@ void FractoriumEmberController<T>::RandomXaos()
FillXaosWithCurrentXform(); FillXaosWithCurrentXform();
} }
void Fractorium::OnRandomXaosButtonClicked(bool checked) { m_Controller->RandomXaos(); } void Fractorium::OnRandomXaosButtonClicked(bool checked) { m_Controller->RandomXaos(); }
template class FractoriumEmberController<float>;
#ifdef DO_DOUBLE
template class FractoriumEmberController<double>;
#endif

View File

@ -72,7 +72,7 @@ T GLEmberController<T>::CalcScale()
{ {
//Can't operate using world coords here because every time scale changes, the world bounds change. //Can't operate using world coords here because every time scale changes, the world bounds change.
//So must instead calculate distance traveled based on window coords, which do not change outside of resize events. //So must instead calculate distance traveled based on window coords, which do not change outside of resize events.
v2T windowCenter((T)m_GL->width() / T(2), (T)m_GL->height() / T(2)); v2T windowCenter(T(m_GL->width()) / T(2), T(m_GL->height()) / T(2));
v2T windowMousePosDistanceFromCenter(m_MousePos.x - windowCenter.x, m_MousePos.y - windowCenter.y); v2T windowMousePosDistanceFromCenter(m_MousePos.x - windowCenter.x, m_MousePos.y - windowCenter.y);
v2T windowMouseDownDistanceFromCenter(m_MouseDownPos.x - windowCenter.x, m_MouseDownPos.y - windowCenter.y); v2T windowMouseDownDistanceFromCenter(m_MouseDownPos.x - windowCenter.x, m_MouseDownPos.y - windowCenter.y);
@ -130,7 +130,7 @@ typename v3T GLEmberController<T>::SnapToNormalizedAngle(v3T& vec, uint division
for (uint i = 0; i < divisions; i++) for (uint i = 0; i < divisions; i++)
{ {
theta = 2.0 * M_PI * (T)i / (T)divisions; theta = 2.0 * M_PI * T(i) / T(divisions);
c.x = cos(theta); c.x = cos(theta);
c.y = sin(theta); c.y = sin(theta);
rsq = glm::distance(vec, c); rsq = glm::distance(vec, c);
@ -251,4 +251,10 @@ void GLEmberController<T>::QueryMatrices(bool print)
qDebug() << "Projection[" << i << "] = " << glm::value_ptr(m_Projection)[i] << endl; qDebug() << "Projection[" << i << "] = " << glm::value_ptr(m_Projection)[i] << endl;
} }
} }
} }
template class GLEmberController<float>;
#ifdef DO_DOUBLE
template class GLEmberController<double>;
#endif

View File

@ -54,8 +54,8 @@ public:
virtual void DrawImage() { } virtual void DrawImage() { }
virtual void DrawAffines(bool pre, bool post) { } virtual void DrawAffines(bool pre, bool post) { }
virtual void ClearWindow() { } virtual void ClearWindow() { }
virtual bool KeyPress(QKeyEvent* e); virtual bool KeyPress_(QKeyEvent* e);
virtual bool KeyRelease(QKeyEvent* e); virtual bool KeyRelease_(QKeyEvent* e);
virtual void MousePress(QMouseEvent* e) { } virtual void MousePress(QMouseEvent* e) { }
virtual void MouseRelease(QMouseEvent* e) { } virtual void MouseRelease(QMouseEvent* e) { }
virtual void MouseMove(QMouseEvent* e) { } virtual void MouseMove(QMouseEvent* e) { }
@ -139,8 +139,3 @@ private:
T GridStep; T GridStep;
}; };
template class GLEmberController<float>;
#ifdef DO_DOUBLE
template class GLEmberController<double>;
#endif

View File

@ -8,9 +8,9 @@
/// Constructor which passes parent widget to the base and initializes OpenGL profile. /// Constructor which passes parent widget to the base and initializes OpenGL profile.
/// This will need to change in the future to implement all drawing as shader programs. /// This will need to change in the future to implement all drawing as shader programs.
/// </summary> /// </summary>
/// <param name="parent">The parent widget</param> /// <param name="p">The parent widget</param>
GLWidget::GLWidget(QWidget* parent) GLWidget::GLWidget(QWidget* p)
: QGLWidget(QGLFormat(QGL::SampleBuffers), parent) : QGLWidget(QGLFormat(QGL::SampleBuffers), p)
{ {
QGLFormat qglFormat; QGLFormat qglFormat;
@ -59,7 +59,7 @@ void GLWidget::DrawQuad()
glBindTexture(GL_TEXTURE_2D, m_OutputTexID);//The texture to draw to. glBindTexture(GL_TEXTURE_2D, m_OutputTexID);//The texture to draw to.
//Only draw if the dimensions match exactly. //Only draw if the dimensions match exactly.
if (m_TexWidth == width() && m_TexHeight == height() && ((m_TexWidth * m_TexHeight * 4) == finalImage->size())) if (m_TexWidth == width() && m_TexHeight == height() && ((m_TexWidth * m_TexHeight * 4) == GLint(finalImage->size())))
{ {
glMatrixMode(GL_PROJECTION); glMatrixMode(GL_PROJECTION);
glPushMatrix(); glPushMatrix();
@ -363,7 +363,7 @@ void GLEmberController<T>::DrawAffines(bool pre, bool post)
/// Set drag modifiers based on key press. /// Set drag modifiers based on key press.
/// </summary> /// </summary>
/// <param name="e">The event</param> /// <param name="e">The event</param>
bool GLEmberControllerBase::KeyPress(QKeyEvent* e) bool GLEmberControllerBase::KeyPress_(QKeyEvent* e)
{ {
#ifdef OLDDRAG #ifdef OLDDRAG
if (e->key() == Qt::Key_Shift) if (e->key() == Qt::Key_Shift)
@ -388,12 +388,12 @@ bool GLEmberControllerBase::KeyPress(QKeyEvent* e)
} }
/// <summary> /// <summary>
/// Call controller KeyPress(). /// Call controller KeyPress_().
/// </summary> /// </summary>
/// <param name="e">The event</param> /// <param name="e">The event</param>
void GLWidget::keyPressEvent(QKeyEvent* e) void GLWidget::keyPressEvent(QKeyEvent* e)
{ {
if (!GLController() || !GLController()->KeyPress(e)) if (!GLController() || !GLController()->KeyPress_(e))
QGLWidget::keyPressEvent(e); QGLWidget::keyPressEvent(e);
update(); update();
@ -403,7 +403,7 @@ void GLWidget::keyPressEvent(QKeyEvent* e)
/// Set drag modifiers based on key release. /// Set drag modifiers based on key release.
/// </summary> /// </summary>
/// <param name="e">The event</param> /// <param name="e">The event</param>
bool GLEmberControllerBase::KeyRelease(QKeyEvent* e) bool GLEmberControllerBase::KeyRelease_(QKeyEvent* e)
{ {
#ifdef OLDDRAG #ifdef OLDDRAG
if (e->key() == Qt::Key_Shift) if (e->key() == Qt::Key_Shift)
@ -428,12 +428,12 @@ bool GLEmberControllerBase::KeyRelease(QKeyEvent* e)
} }
/// <summary> /// <summary>
/// Call controller KeyRelease(). /// Call controller KeyRelease_().
/// </summary> /// </summary>
/// <param name="e">The event</param> /// <param name="e">The event</param>
void GLWidget::keyReleaseEvent(QKeyEvent* e) void GLWidget::keyReleaseEvent(QKeyEvent* e)
{ {
if (!GLController() || !GLController()->KeyRelease(e)) if (!GLController() || !GLController()->KeyRelease_(e))
QGLWidget::keyReleaseEvent(e); QGLWidget::keyReleaseEvent(e);
update(); update();
@ -598,7 +598,7 @@ void GLEmberController<T>::MouseMove(QMouseEvent* e)
m_MousePos = mouse; m_MousePos = mouse;
m_MouseWorldPos = WindowToWorld(mouseFlipped, false); m_MouseWorldPos = WindowToWorld(mouseFlipped, false);
v3T mouseDelta = m_MouseWorldPos - m_MouseDownWorldPos;//Determine how far the mouse has moved in world cartesian coordinates. //v3T mouseDelta = m_MouseWorldPos - m_MouseDownWorldPos;//Determine how far the mouse has moved in world cartesian coordinates.
//Update status bar on main window, regardless of whether anything is being dragged. //Update status bar on main window, regardless of whether anything is being dragged.
if (m_Fractorium->m_Controller->RenderTimerRunning()) if (m_Fractorium->m_Controller->RenderTimerRunning())
@ -752,8 +752,8 @@ void GLWidget::SetDimensions(int w, int h)
bool GLWidget::Allocate(bool force) bool GLWidget::Allocate(bool force)
{ {
bool alloc = false; bool alloc = false;
bool resize = force || m_TexWidth != width() || m_TexHeight != height(); bool doResize = force || m_TexWidth != width() || m_TexHeight != height();
bool doIt = resize || m_OutputTexID == 0; bool doIt = doResize || m_OutputTexID == 0;
if (doIt) if (doIt)
{ {
@ -762,7 +762,7 @@ bool GLWidget::Allocate(bool force)
glEnable(GL_TEXTURE_2D); glEnable(GL_TEXTURE_2D);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
if (resize) if (doResize)
{ {
glBindTexture(GL_TEXTURE_2D, m_OutputTexID); glBindTexture(GL_TEXTURE_2D, m_OutputTexID);
Deallocate(); Deallocate();
@ -814,7 +814,7 @@ void GLWidget::SetViewport()
{ {
if (m_Init && (m_ViewWidth != m_TexWidth || m_ViewHeight != m_TexHeight)) if (m_Init && (m_ViewWidth != m_TexWidth || m_ViewHeight != m_TexHeight))
{ {
glViewport(0, 0, (GLint)m_TexWidth, (GLint)m_TexHeight); glViewport(0, 0, GLint(m_TexWidth), GLint(m_TexHeight));
m_ViewWidth = m_TexWidth; m_ViewWidth = m_TexWidth;
m_ViewHeight = m_TexHeight; m_ViewHeight = m_TexHeight;
} }
@ -863,16 +863,16 @@ void GLWidget::DrawGrid()
{ {
glColor4f(0.5f, 0.5f, 0.5f, 0.5f); glColor4f(0.5f, 0.5f, 0.5f, 0.5f);
for (float x = xLow; x <= xHigh; x += GridStep) for (float fx = xLow; fx <= xHigh; fx += GridStep)
{ {
glVertex2f(x, yLow); glVertex2f(fx, yLow);
glVertex2f(x, yHigh); glVertex2f(fx, yHigh);
} }
for (float y = yLow; y < yHigh; y += GridStep) for (float fy = yLow; fy < yHigh; fy += GridStep)
{ {
glVertex2f(xLow, y); glVertex2f(xLow, fy);
glVertex2f(xHigh, y); glVertex2f(xHigh, fy);
} }
} }
@ -880,16 +880,16 @@ void GLWidget::DrawGrid()
{ {
glColor4f(0.5f, 0.5f, 0.5f, 1.0f); glColor4f(0.5f, 0.5f, 0.5f, 1.0f);
for (float x = xLow; x <= xHigh; x += 1.0f) for (float fx = xLow; fx <= xHigh; fx += 1.0f)
{ {
glVertex2f(x, yLow); glVertex2f(fx, yLow);
glVertex2f(x, yHigh); glVertex2f(fx, yHigh);
} }
for (float y = yLow; y < yHigh; y += 1.0f) for (float fy = yLow; fy < yHigh; fy += 1.0f)
{ {
glVertex2f(xLow, y); glVertex2f(xLow, fy);
glVertex2f(xHigh, y); glVertex2f(xHigh, fy);
} }
} }
@ -1023,14 +1023,14 @@ void GLWidget::DrawAffineHelper(int index, bool selected, bool pre, bool final,
{ {
for (int i = 1; i <= 64; i++)//The circle. for (int i = 1; i <= 64; i++)//The circle.
{ {
float theta = (float)M_PI * 2.0f * (float)(i % 64) / 64.0f; float theta = float(M_PI) * 2.0f * float(i % 64) / 64.0f;
float x = (float)cos(theta); float fx = float(cos(theta));
float y = (float)sin(theta); float fy = float(sin(theta));
glVertex2f(px, py); glVertex2f(px, py);
glVertex2f(x, y); glVertex2f(fx, fy);
px = x; px = fx;
py = y; py = fy;
} }
} }
@ -1445,3 +1445,9 @@ GLEmberControllerBase* GLWidget::GLController()
return NULL; return NULL;
} }
template class GLEmberController<float>;
#ifdef DO_DOUBLE
template class GLEmberController<double>;
#endif

View File

@ -7,6 +7,9 @@
/// </summary> /// </summary>
class Fractorium;//Forward declaration since Fractorium uses this widget. class Fractorium;//Forward declaration since Fractorium uses this widget.
class GLEmberControllerBase;
template<typename T> class GLEmberController;
template<typename T> class FractoriumEmberController;
static const float GridStep = 1.0f / 8.0f; static const float GridStep = 1.0f / 8.0f;
@ -31,13 +34,16 @@ class GLWidget : public QGLWidget, protected QOpenGLFunctions_2_0//QOpenGLFuncti
friend Fractorium; friend Fractorium;
friend FractoriumEmberController<float>; friend FractoriumEmberController<float>;
friend FractoriumEmberController<double>;
friend GLEmberControllerBase; friend GLEmberControllerBase;
friend GLEmberController<float>; friend GLEmberController<float>;
#ifdef DO_DOUBLE
friend GLEmberController<double>; friend GLEmberController<double>;
friend FractoriumEmberController<double>;
#endif
public: public:
GLWidget(QWidget* parent); GLWidget(QWidget* p);
~GLWidget(); ~GLWidget();
void DrawQuad(); void DrawQuad();
void SetMainWindow(Fractorium* f); void SetMainWindow(Fractorium* f);

View File

@ -24,8 +24,13 @@ int main(int argc, char *argv[])
//Required for large allocs, else GPU memory usage will be severely limited to small sizes. //Required for large allocs, else GPU memory usage will be severely limited to small sizes.
//This must be done in the application and not in the EmberCL DLL. //This must be done in the application and not in the EmberCL DLL.
#ifdef WIN32
_putenv_s("GPU_MAX_ALLOC_PERCENT", "100"); _putenv_s("GPU_MAX_ALLOC_PERCENT", "100");
#else
putenv(const_cast<char*>("GPU_MAX_ALLOC_PERCENT=100"));
#endif
Fractorium w; Fractorium w;
w.show(); w.show();
return a.exec(); return a.exec();
} }

View File

@ -6,10 +6,10 @@
/// Constructor that takes a pointer to the settings object and the parent widget. /// Constructor that takes a pointer to the settings object and the parent widget.
/// </summary> /// </summary>
/// <param name="settings">A pointer to the settings object to use</param> /// <param name="settings">A pointer to the settings object to use</param>
/// <param name="parent">The parent widget. Default: NULL.</param> /// <param name="p">The parent widget. Default: NULL.</param>
/// <param name="f">The window flags. Default: 0.</param> /// <param name="f">The window flags. Default: 0.</param>
FractoriumOptionsDialog::FractoriumOptionsDialog(FractoriumSettings* settings, QWidget* parent, Qt::WindowFlags f) FractoriumOptionsDialog::FractoriumOptionsDialog(FractoriumSettings* settings, QWidget* p, Qt::WindowFlags f)
: QDialog(parent, f) : QDialog(p, f)
{ {
int row = 0, spinHeight = 20; int row = 0, spinHeight = 20;
uint i; uint i;
@ -203,4 +203,4 @@ void FractoriumOptionsDialog::reject()
m_NickEdit->setText(m_Settings->Nick()); m_NickEdit->setText(m_Settings->Nick());
QDialog::reject(); QDialog::reject();
} }

View File

@ -24,7 +24,7 @@ class FractoriumOptionsDialog : public QDialog
friend Fractorium; friend Fractorium;
public: public:
FractoriumOptionsDialog(FractoriumSettings* settings, QWidget* parent = 0, Qt::WindowFlags f = 0); FractoriumOptionsDialog(FractoriumSettings* settings, QWidget* p = 0, Qt::WindowFlags f = 0);
public slots: public slots:
void OnOpenCLCheckBoxStateChanged(int state); void OnOpenCLCheckBoxStateChanged(int state);

View File

@ -7,11 +7,11 @@
/// and change its value using the mouse wheel without explicitly having to click /// and change its value using the mouse wheel without explicitly having to click
/// inside of it. /// inside of it.
/// </summary> /// </summary>
/// <param name="parent">The parent widget. Default: NULL.</param> /// <param name="p">The parent widget. Default: NULL.</param>
/// <param name="height">The height of the spin box. Default: 16.</param> /// <param name="h">The height of the spin box. Default: 16.</param>
/// <param name="step">The step used to increment/decrement the spin box when using the mouse wheel. Default: 1.</param> /// <param name="step">The step used to increment/decrement the spin box when using the mouse wheel. Default: 1.</param>
SpinBox::SpinBox(QWidget* parent, int height, int step) SpinBox::SpinBox(QWidget* p, int h, int step)
: QSpinBox(parent) : QSpinBox(p)
{ {
m_Select = false; m_Select = false;
m_DoubleClick = false; m_DoubleClick = false;
@ -23,8 +23,8 @@ SpinBox::SpinBox(QWidget* parent, int height, int step)
setFrame(false); setFrame(false);
setButtonSymbols(QAbstractSpinBox::NoButtons); setButtonSymbols(QAbstractSpinBox::NoButtons);
setFocusPolicy(Qt::StrongFocus); setFocusPolicy(Qt::StrongFocus);
setMinimumHeight(height);//setGeometry() has no effect, so set both of these instead. setMinimumHeight(h);//setGeometry() has no effect, so set both of these instead.
setMaximumHeight(height); setMaximumHeight(h);
lineEdit()->installEventFilter(this); lineEdit()->installEventFilter(this);
lineEdit()->setAlignment(Qt::AlignLeft | Qt::AlignVCenter); lineEdit()->setAlignment(Qt::AlignLeft | Qt::AlignVCenter);
connect(this, SIGNAL(valueChanged(int)), this, SLOT(onSpinBoxValueChanged(int)), Qt::QueuedConnection); connect(this, SIGNAL(valueChanged(int)), this, SLOT(onSpinBoxValueChanged(int)), Qt::QueuedConnection);
@ -141,9 +141,9 @@ bool SpinBox::eventFilter(QObject* o, QEvent* e)
{ {
//Take special action for shift to reduce the scroll amount. Control already //Take special action for shift to reduce the scroll amount. Control already
//increases it automatically. //increases it automatically.
if (QWheelEvent* wheelEvent = dynamic_cast<QWheelEvent*>(e)) if (QWheelEvent* wev = dynamic_cast<QWheelEvent*>(e))
{ {
Qt::KeyboardModifiers mod = wheelEvent->modifiers(); Qt::KeyboardModifiers mod = wev->modifiers();
if (mod.testFlag(Qt::ShiftModifier)) if (mod.testFlag(Qt::ShiftModifier))
setSingleStep(m_SmallStep); setSingleStep(m_SmallStep);

View File

@ -16,7 +16,7 @@ class SpinBox : public QSpinBox
Q_OBJECT Q_OBJECT
public: public:
explicit SpinBox(QWidget* parent = 0, int height = 16, int step = 1); explicit SpinBox(QWidget* p = 0, int height = 16, int step = 1);
virtual ~SpinBox() { } virtual ~SpinBox() { }
void SetValueStealth(int d); void SetValueStealth(int d);
void DoubleClick(bool b); void DoubleClick(bool b);

View File

@ -15,13 +15,13 @@ class StealthComboBox : public QComboBox
Q_OBJECT Q_OBJECT
public: public:
explicit StealthComboBox(QWidget* parent = 0) : QComboBox(parent) { } explicit StealthComboBox(QWidget* p = 0) : QComboBox(p) { }
/// <summary> /// <summary>
/// Set the current index of the combo box without triggering signals. /// Set the current index of the combo box without triggering signals.
/// </summary> /// </summary>
/// <param name="index">The current index to set</param> /// <param name="index">The current index to set</param>
void StealthComboBox::SetCurrentIndexStealth(int index) void SetCurrentIndexStealth(int index)
{ {
blockSignals(true); blockSignals(true);
setCurrentIndex(index); setCurrentIndex(index);

View File

@ -30,9 +30,9 @@ public:
/// Constructor that passes the parent to the base and installs /// Constructor that passes the parent to the base and installs
/// the event filter. /// the event filter.
/// </summary> /// </summary>
/// <param name="parent">The parent widget</param> /// <param name="p">The parent widget</param>
explicit TableWidget(QWidget* parent = 0) explicit TableWidget(QWidget* p = 0)
: QTableWidget(parent) : QTableWidget(p)
{ {
viewport()->installEventFilter(this); viewport()->installEventFilter(this);
} }
@ -54,4 +54,4 @@ protected:
return QTableWidget::eventFilter(obj, e); return QTableWidget::eventFilter(obj, e);
} }
}; };

View File

@ -26,14 +26,14 @@ public:
/// <param name="w1">The width of the first button</param> /// <param name="w1">The width of the first button</param>
/// <param name="w2">The width of the second button</param> /// <param name="w2">The width of the second button</param>
/// <param name="h">The height of both buttons</param> /// <param name="h">The height of both buttons</param>
/// <param name="parent">The parent widget</param> /// <param name="p">The parent widget</param>
TwoButtonComboWidget(const QString& caption1, const QString& caption2, QStringList comboStrings, int w1, int w2, int h, QWidget* parent) TwoButtonComboWidget(const QString& caption1, const QString& caption2, QStringList comboStrings, int w1, int w2, int h, QWidget* p)
: QWidget(parent) : QWidget(p)
{ {
QHBoxLayout* layout = new QHBoxLayout(this); QHBoxLayout* l = new QHBoxLayout(this);
m_Button1 = new QPushButton(caption1, parent); m_Button1 = new QPushButton(caption1, p);
m_Button2 = new QPushButton(caption2, parent); m_Button2 = new QPushButton(caption2, p);
m_Combo = new QComboBox(parent); m_Combo = new QComboBox(p);
m_Combo->addItems(comboStrings); m_Combo->addItems(comboStrings);
@ -56,14 +56,14 @@ public:
m_Combo->setMinimumHeight(h - 3); m_Combo->setMinimumHeight(h - 3);
m_Combo->setMaximumHeight(h - 3); m_Combo->setMaximumHeight(h - 3);
layout->addWidget(m_Combo); l->addWidget(m_Combo);
layout->addWidget(m_Button1); l->addWidget(m_Button1);
layout->addWidget(m_Button2); l->addWidget(m_Button2);
layout->setAlignment(Qt::AlignLeft); l->setAlignment(Qt::AlignLeft);
layout->setMargin(0); l->setMargin(0);
layout->setSpacing(2); l->setSpacing(2);
setLayout(layout); setLayout(l);
} }
QPushButton* m_Button1; QPushButton* m_Button1;
@ -89,12 +89,12 @@ public:
/// <param name="buttonCaption">The caption of the button</param> /// <param name="buttonCaption">The caption of the button</param>
/// <param name="w">The width of the button</param> /// <param name="w">The width of the button</param>
/// <param name="h">The height of the button</param> /// <param name="h">The height of the button</param>
/// <param name="parent">The parent widget</param> /// <param name="p">The parent widget</param>
SpinnerButtonWidget(DoubleSpinBox* spinBox, QString buttonCaption, int w, int h, QWidget* parent) SpinnerButtonWidget(DoubleSpinBox* spinBox, QString buttonCaption, int w, int h, QWidget* p)
: QWidget(parent) : QWidget(p)
{ {
QHBoxLayout* layout = new QHBoxLayout(this); QHBoxLayout* l = new QHBoxLayout(this);
m_Button = new QPushButton(buttonCaption, parent); m_Button = new QPushButton(buttonCaption, p);
m_SpinBox = spinBox; m_SpinBox = spinBox;
if (w != -1) if (w != -1)
@ -106,13 +106,13 @@ public:
m_Button->setMinimumHeight(h); m_Button->setMinimumHeight(h);
m_Button->setMaximumHeight(h); m_Button->setMaximumHeight(h);
layout->addWidget(spinBox); l->addWidget(spinBox);
layout->addWidget(m_Button); l->addWidget(m_Button);
layout->setAlignment(Qt::AlignLeft | Qt::AlignVCenter); l->setAlignment(Qt::AlignLeft | Qt::AlignVCenter);
layout->setMargin(0); l->setMargin(0);
layout->setSpacing(0); l->setSpacing(0);
setLayout(layout); setLayout(l);
} }
DoubleSpinBox* m_SpinBox; DoubleSpinBox* m_SpinBox;

View File

@ -1,2 +1,2 @@
#include "FractoriumPch.h" #include "FractoriumPch.h"
#include "TwoButtonWidget.h" #include "TwoButtonComboWidget.h"

View File

@ -22,9 +22,9 @@ public:
/// and passes it to the base. /// and passes it to the base.
/// </summary> /// </summary>
/// <param name="id">The ID of the variation this widget will represent</param> /// <param name="id">The ID of the variation this widget will represent</param>
/// <param name="parent">The parent widget</param> /// <param name="p">The parent widget</param>
VariationTreeWidgetItem(eVariationId id, QTreeWidget* parent = 0) VariationTreeWidgetItem(eVariationId id, QTreeWidget* p = 0)
: QTreeWidgetItem(parent) : QTreeWidgetItem(p)
{ {
m_Id = id; m_Id = id;
} }
@ -35,9 +35,9 @@ public:
/// This is used for making sub items for parametric variation parameters. /// This is used for making sub items for parametric variation parameters.
/// </summary> /// </summary>
/// <param name="id">The ID of the variation this widget will represent</param> /// <param name="id">The ID of the variation this widget will represent</param>
/// <param name="parent">The parent widget</param> /// <param name="p">The parent widget</param>
VariationTreeWidgetItem(eVariationId id, QTreeWidgetItem* parent = 0) VariationTreeWidgetItem(eVariationId id, QTreeWidgetItem* p = 0)
: QTreeWidgetItem(parent) : QTreeWidgetItem(p)
{ {
m_Id = id; m_Id = id;
} }
@ -61,11 +61,11 @@ private:
QWidget* itemWidget1 = treeWidget()->itemWidget(const_cast<VariationTreeWidgetItem<T>*>(this), 1);//Get the widget for the second column. QWidget* itemWidget1 = treeWidget()->itemWidget(const_cast<VariationTreeWidgetItem<T>*>(this), 1);//Get the widget for the second column.
if (spinBox1 = dynamic_cast<VariationTreeDoubleSpinBox<T>*>(itemWidget1))//Cast the widget to the VariationTreeDoubleSpinBox type. if ((spinBox1 = dynamic_cast<VariationTreeDoubleSpinBox<T>*>(itemWidget1)))//Cast the widget to the VariationTreeDoubleSpinBox type.
{ {
QWidget* itemWidget2 = treeWidget()->itemWidget(const_cast<QTreeWidgetItem*>(&other), 1);//Get the widget for the second column of the widget item passed in. QWidget* itemWidget2 = treeWidget()->itemWidget(const_cast<QTreeWidgetItem*>(&other), 1);//Get the widget for the second column of the widget item passed in.
if (spinBox2 = dynamic_cast<VariationTreeDoubleSpinBox<T>*>(itemWidget2))//Cast the widget to the VariationTreeDoubleSpinBox type. if ((spinBox2 = dynamic_cast<VariationTreeDoubleSpinBox<T>*>(itemWidget2)))//Cast the widget to the VariationTreeDoubleSpinBox type.
{ {
if (spinBox1->IsParam() || spinBox2->IsParam())//Do not sort params, their order will always remain the same. if (spinBox1->IsParam() || spinBox2->IsParam())//Do not sort params, their order will always remain the same.
return false; return false;
@ -93,4 +93,4 @@ private:
} }
eVariationId m_Id; eVariationId m_Id;
}; };