-
Notifications
You must be signed in to change notification settings - Fork 59
GSoC 2020
- Author: @kanurag94 - Anurag Aggarwal
- GSoC 2020 Landing page: GSoC 2020 ideas for XaoS
Along with the great mentorship of @kovzol - Zoltán Kovács, I added multiple functionalities to XaoS and fixed some existing crashes. The project went beyond the proposed changes and we successfully released two new subversion of XaoS during this time.
Release 4.1 and 4.2 list these changes as:
-
Palette editor, save/load palettes, storing user palettes in the .xpf file. PR #194 #195 #196
-
The option
User formulas
maintains a history of recently used formulas. PR #202 -
Fractal info in the Help menu. PR #198
-
Batch rendering. PR #184
-
Enabled panning in rotate mode. PR #189
-
Unified Open and Open Image option. Save Image option moved to
Save as
. PR #191 -
Added option to show Cartesian coordinate grid. PR #171
-
Custom palette helps visualizing palette before applying changes through slider selectable values now. PR #168
-
PNGs exported using
Save Image
option can be imported back and users can continue zooming on it. PR #166 #180
-
Fixed crash on recording XaoS animations. PR #156
-
Fixed crash on rendering using command line. PR #159
-
Only error messages are shown on incorrect commands. PR #160
-
Other small bug fixes (Memory Leaks, Segmentation Faults).
-
One Screen View for XaoSJs - see commit
-
Touch Zoom Support for XaoSJs - see commit
Some parts of the project did not see completion because of complication but good attempts were made.
Note: Support for arbitrary precision was a part of my GSoC proposal. Other issues were picked out of curiosity and enthusiasm for XaoS ;-)
-
XaoS does not support very deep zooms because of 80 bit floating point arithmetic. Use of MPFR Library with Perturbation theory was to be investigated in implementing arbitrary precision for very deep zooms. Further decisions were to be taken by bench-marking different method and using the fastest one. XaoS globally uses a
number_t
variable for switching betweenfloat128
andLONG_DOUBLE
data type. Unfortunately there is no easy way to do switch between these data types at runtime. Thus in theLONG_DOUBLE
compiled version we are restricted to 10^16 zoom and 10^32 forfloat128
compiled version.float128
version is naturally slower so we can not keep the real time zooming capabilities by making it default for early zoom levels. After 10^32 we need to support much greater zooms but clearly use of arbitrary precision would be even slower. Thus we should be able to dynamically switch betweenLONG_DOUBLE
(up to 10^16),float128
(up to 10^32) and use arbitrary precision beyond that. -
-
Templatizing XaoS: @kovzol gave the clever idea to convert
number_t
from a macro definition to a struct. This struct can maintain two or more types of data structure and we can use a global variable to switch between them. However this was slow. More information at issue #24 comment, repository that implements this - https://github.com/kanurag94/XaoS/tree/templatize-xaos -
Converting
fractal_context
to a class, and templatizing the data type: @jblang suggested that we should convertfractal_context
to a class and the functions operating onfractal_context
should be made member function. Then we can initiate objects of different data types from outermost function and use a wrapper function to decide which instance gets called. However we have over ~600 instances offractal_context
objects. I could not find a way to wrap them easily in a function. More information on issue #24 comment, repository that implements this - https://github.com/kanurag94/XaoS/tree/float128
-
-
Qt for web assembly can compile a web version of XaoS. Currently the infinite loop inside XaoS leads to crash when web compiled version of XaoS is launched.
-
- @kovzol and I have started working on web compilation.
-
XaoS needs a restart everytime language has to be changed.
-
- Dynamically switching languages is currently out of scope without redoing menus with Qt quick. However this is not possible on Ubuntu 18.04 which has LTS up to 2023. This means we might break something while making this work. So take a break... :-)
-
XaoS produces
bestprice assertion failed error
while rendering large files. -
- Fix Overflow: @trathborne and I suspected overflow of currently used
int
data type forbestprice
. I tried to convert manyint
involved in calculation tolong
in hope overflow does not occur. But writing software is not easy... :-(
- Fix Overflow: @trathborne and I suspected overflow of currently used
I am grateful to my mentor Zoltán Kovács for his guidance. His sound knowledge has been a constant source of motivation for me. I would also like to thank GNU Community for the project. Google Summer of Code has been a very insightful experience for me and I am taking away much from it. I am motivated to keep contributing to the project.