Define for Transformations on Path only, also fixed segfault due to GraphicsBuffer The "invalidated" is used to recycle memory in the GraphicsBuffer, but that can only be done if there is actually enough memory. This was causing a segfault if the document was initially empty and had things added to it. Can now remove the hack in main.cpp where documents started with a {0,0,0,0} RECT in them. We can now (ab)use the Path for transformations. The idea was that Arbitrary precision stuff might be faster if we only care about the bounds of the paths. Unfortunately the way Real was used everywhere will make it a bit difficult to actually use this. We need Beziers and their bounds to be stored with floats, but the Path bounds to be stored with GMPrat or some other arbitrary type. It probably won't help that much, but evaluating those Beziers with GMPrat really slows down the CPU renderer. It's also a giant hack because I still use BezierRenderer for GPU rendering but I now use PathRenderer for CPU rendering of Beziers. Le sigh. We can now store Bezier bounds relative to Path bounds and apply transformations only to the Path bounds.
Allow for negative Paranoid Numbers Specifically, when constructed off a string I wasn't checking for a leading '-' sign. That's kind of important. Also 'e' notations will probably have to be included at some point. I am really bad at this...
Add #define to transform Object bounds on the fly View model: Object bounds are fixed, transforming view transforms the View bounds, Object bounds transformed to coordinates in View bounds before rendering. Mutable Objects model (?) : Object bounds are transformed by operations, no transformation to View bounds necessary The equivelant view bounds are still printed for comparison, but it is effectively (0,0,1,1) First approach requires one transformation when altering view and then a *lot* during rendering Second approach requires a lot of transformations when altering view and then <not as many> during rendering Second approach also means we don't need a dedicated CPU renderer. Coordinates within bounds can be expressed as floats. ALSO - Added cat and panda test images - Fixed segfault due to empty paths in cat.svg ... by not including empty paths... - ipdf will now run if the window can't be created so I can run it on the bus without X - Not much you can actually do without X though... - ParanoidNumbers got considerably more #defines for debugging and trying to make them less generally shit - Fixed some bugs in PN not revealed by realops tester - There are still bugs in PN that aren't revealed by anything - Despite it basically being exactly equivelant to doubles at the moment :S - Having bugs in basic mathematics operations is actually really really really hard to fix - Want to fix all the bugs so I can make PN faster - They are slow, they spend about 30% of their time doing std::vector stuff - And that's when the std::vector is *empty* ALSO - The new approach to rendering means that the loss of precision is nowhere near as bad - This means we need to make new tests to demonstrate that there is in fact still a point to using arbitrary precision - Because floats are actually quite amazingly good if you aren't a moron about how you apply operations. - Really panicking now ALSO - I'm sure I did something else but I forgot what it was.
Commit before breaking everything Trying to make ParanoidNumber less shit. Spends a lot of time in std::vector
Make it work on Cabellera (again) I keep forgetting I shouldn't use C++11 features THEY ARE JUST SO CONVENIENT! :( Clownfish has C++11 but the open source AMD drivers don't like geometry shaders and sulix threatened me with dire consequences of installing fglrx... Also fix the symlinks in svg-tests
Now with GNU MultiPrecision (GMP) integers gmpint.h is (in theory) mostly inline and shouldn't add much overhead and was simpler than trying to understand the C++ "binding". The Str() function is kind of terrible but that can't be helped. Also fixed bug in realops tester (even the testers have bugs...) And removed asm tester because the asm function is gone. The bezier testers now don't compile, I don't think we need them anymore.
Arbint subtraction/addition deal with borrow/carry correctly, maybe Eventually they will be right. This still doesn't fix the wierd bezier bug or the growing digits really fast (exponential?). I suspect the former is related to pow(Rational<Arbint>, Rational<Arbint>) and the latter probably makes sense if you do the theory (considering how fast Rational<int64_t> overflowed).
More debugging, harder realops test
Arbint now does sign in division correctly The tester still sometimes picks up a fith Rational<Arbint> /= operation though.
More testing particularly of negatives
Improved "realops" tester And there are signs of serious problems in Arbint too!
Real that uses Fast2Sum for addition I have a feeling this isn't going to improve things at all.