Fragmentarium 0.9 Released

I’ve released a new build of Fragmentarium, version 0.9 (“Sun Ra”).

Download at Github.
(As of now only Windows builds are available)

New features

  • New high resolution output dialog (with auto-naming and auto-backup of scripts and parameters)
  • Locking of parameters (makes rendering considerably faster in some cases by turning uniforms into constants)

Minor improvements

  • Mouse wheel now changes camera position, not FOV
  • Default raytracer improvements:
    • Removed ‘AntiAliasBlur’,’MaxRayStepDiv’, and ‘NormalDetail’ settings
    • Added reflection
    • Shadows (hard, and pseudo-soft shadows)
    • Added dithering (for banding removal) and very simple RNG functionality.
    • Added new ambient occlusion method (similar to Rrola/Subblue – sample along normal for proximity).
  • Added a simpler, but faster version of my raytracer. Just include “Fast-Raytracer.frag” instead of “DE-Raytracer.frag”
  • Added a port of Subblues Fractal Labs ( raytracer (GPL). Just include “Subblue-Raytracer.frag” instead of “DE-Raytracer.frag”
  • Added vertical scroll bars to user parameter groups.
  • Added ‘#define providesInit’, ‘#define providesColor’ (to provide custom coloring)
  • Added vec4 GUI slider type
  • Now disables uniforms which are not used in shader.
  • Compiler warnings are now shown in output, also if there is no errors.
  • Bugfix: resize of window now updates aspect ratio.
  • Bugfix: handling of specular exponent = 0
  • BugFix: fixed fps timer for >500ms renders
  • BugFix: Tile Render now works in manual mode.
  • BugFix: Using mouse and key movement at the same time, would result in distance between eye and target getting smaller and smaller.

New fragments

  • A whole collection of new fragments from Knighty!
  • Some of my own new fragments: GraphPlotter, KaliSet, BurningShip, Spudsville, Mandelbrot2D, Terrain.
  • 2DJulia.frag and Complex.frag to make 2D fractals easier.
  • New raytracers: Subblue-Raytracer.frag, Fast-Raytracer.frag
  • QuilezLib with I├▒igo Quilez’s collection of sphere tracing primitives
  • Ashima-Noise.frag, a library of Noise functions.


Some of the new utility libraries make fractals very easy to explore. For instance, 2D escape time fractals are very easy to explore now.

Here is an example:

#include "2DJulia.frag"
#include "Complex.frag"

// 'Ducks' fractal by Samuel Monnier
vec2 formula(vec2 z, vec2 c) {
    return cLog(vec2(z.x,abs(z.y)))+c;

which produces this:

Other examples:

Terrain example – example of the new noise library

Mandelbrot heightmap example – based on Knighty’s example

For more example of images generated with the new version, take a look at the Flickr Fragmentarium stream.

Notice for ATI users

Several fragments fail on ATI cards. This seems to be due to faulty GLSL driver optimizations. A workaround is to lock the ‘iterations’ variable (click the padlock next to it). Adding a bailout check inside the main DE loop (e.g. ‘if (length(z)>1000.0) break;’) also seems to do the job.

8 thoughts on “Fragmentarium 0.9 Released

  1. Ca you clarify were to but that ATI bug fix as on my Mac it looks like it’s causing Fragmentarium to crash on startup.

  2. Hi David, I tested on a Window 7 machine with an ATI card, but here the startup fragment (the Mandelbulb) worked. The ones that didn’t work, were several of the Kaleidoscopic IFS’s.

    Could I get you to try renaming the Mandelbulb.frag to something else (so that it is not loaded on startup), and then test if you can run any of the other fragments?

  3. Hi

    If I rename Mandlebulb.frag then run Fragmentarium I get the following results.

    If I run QuaternionJulia.frag – I get a crash
    If I run Mandlebulb.frag – I get a crash
    If I run Mandlebox.frag then the mandlebox renders.

    The 2D fragments render, as do Knighty’s, well the ones that compile (ATI compiler).

    The IFS fragments also crash.

    Interestingly sometimes, very, very occasionally, Mandelbulb and QuaternionJulia.frag do work, but never when they are the first fragment to run, only if I run them second or later. Its not consistent, for example the first time it happened I ran MandelBox first then the other two worked, the next time I tried I ran Mandelbox first, Mandelbulb and QJ failed.


  4. Him

    I’ve tried on or two and they work with the Fast-Raytracer.frag and Subblue-Raytracer.frag too.

  5. Interesting. Do you have any idea of whether the standard ray-tracer times out (because rendering takes too long?) or if it crashes because of a GLSL compiler error? Do you get any error messages? What happens, if you enable preview – does it still crash?

  6. Hi,

    I get crashes with preview, even 5x, given how quick it crashes with preview this high I’d guess that is isn’t a timeout.
    I don’t think OSX has a timeout, I’ve pretty sure I’ve had stuff running in Subblues fractal lab for well over a minute.

    I’m going to try compiling it with anolder version of Qt just incase it’s a Qt 4.8.0 problem.
    Crash Report below.

    Exception Type: EXC_BAD_ACCESS (SIGBUS)
    Exception Codes: KERN_PROTECTION_FAILURE at 0x0000000000000004
    Crashed Thread: 0 Dispatch queue:

    Thread 0 Crashed: Dispatch queue:
    0 …pple.ATIRadeonX1000GLDriver 0x16344537 gldModifyTexSubImage + 407511
    1 …pple.ATIRadeonX1000GLDriver 0x163bd7ab gldModifyTexSubImage + 903755
    2 …pple.ATIRadeonX1000GLDriver 0x1634752c gldModifyTexSubImage + 419788
    3 …pple.ATIRadeonX1000GLDriver 0x163476e9 gldModifyTexSubImage + 420233
    4 …pple.ATIRadeonX1000GLDriver 0x1634821e gldModifyTexSubImage + 423102
    5 …pple.ATIRadeonX1000GLDriver 0x1632c828 gldModifyTexSubImage + 309960
    6 …pple.ATIRadeonX1000GLDriver 0x162eb92d gldModifyTexSubImage + 43981
    7 …pple.ATIRadeonX1000GLDriver 0x16305deb gldModifyTexSubImage + 151691
    8 …pple.ATIRadeonX1000GLDriver 0x162e74ed gldModifyTexSubImage + 26509
    9 …pple.ATIRadeonX1000GLDriver 0x1630723f gldModifyTexSubImage + 156895
    10 …pple.ATIRadeonX1000GLDriver 0x1630748f gldModifyTexSubImage + 157487
    11 …pple.ATIRadeonX1000GLDriver 0x162c62be gldInitDispatch + 24366
    12 …pple.ATIRadeonX1000GLDriver 0x162b03c4 gldCreateProgram + 996
    13 …pple.ATIRadeonX1000GLDriver 0x162b094b gldCreatePipelineProgram + 1211
    14 …pple.ATIRadeonX1000GLDriver 0x162bfafa gldUpdateDispatch + 842
    15 GLEngine 0x161e2193 gleDoSelectiveDispatchNoErrorCore + 227
    16 GLEngine 0x161e747b gleCheckFramebufferStatus + 185
    17 libGL.dylib 0x9ab6e5ab glCheckFramebufferStatusEXT + 31
    18 QtOpenGL 0x00fa55b5 QGLFramebufferObjectPrivate::checkFramebufferStatus() const + 69
    19 QtOpenGL 0x00fa5a7c QGLFramebufferObject::bind() + 92
    20 …ompany.Fragmentarium-Source 0x0001515b Fragmentarium::GUI::DisplayWidget::drawToFrameBufferObject() + 139
    21 …ompany.Fragmentarium-Source 0x00015417 Fragmentarium::GUI::DisplayWidget::paintGL() + 87
    22 QtOpenGL 0x00f8dc4b QGLWidget::glDraw() + 107
    23 QtOpenGL 0x00f8c5cb QGLWidget::paintEvent(QPaintEvent*) + 43
    24 QtGui 0x001a1213 QWidget::event(QEvent*) + 2547
    25 QtOpenGL 0x00f8f561 QGLWidget::event(QEvent*) + 65
    26 QtGui 0x001467fc QApplicationPrivate::notify_helper(QObject*, QEvent*) + 188
    27 QtGui 0x0014d028 QApplication::notify(QObject*, QEvent*) + 248
    28 QtCore 0x00da5b7c QCoreApplication::notifyInternal(QObject*, QEvent*) + 108
    29 QtGui 0x00199b1a QWidgetPrivate::drawWidget(QPaintDevice*, QRegion const&, QPoint const&, int, QPainter*, QWidgetBackingStore*) + 1962
    30 QtGui 0x000e91b9 -[QCocoaView drawRect:] + 1385
    31 0x9531e61e -[NSView _drawRect:clip:] + 3510
    32 0x9531d2bc -[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:] + 1600
    33 0x9531d5f1 -[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:] + 2421
    34 0x9531d5f1 -[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:] + 2421
    35 0x9531b7db -[NSView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:] + 711
    36 0x9531c750 -[NSView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:] + 4668
    37 0x9531c750 -[NSView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:] + 4668
    38 0x9531b34f -[NSThemeFrame _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:] + 265
    39 0x95317c96 -[NSView _displayRectIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:] + 3309
    40 0x9527884b -[NSView displayIfNeeded] + 818
    41 0x95241b64 -[NSWindow displayIfNeeded] + 204
    42 0x9527307e _handleWindowNeedsDisplay + 696
    43 0x92968dd2 __CFRunLoopDoObservers + 1186
    44 0x92924ced __CFRunLoopRun + 557
    45 0x929243c4 CFRunLoopRunSpecific + 452
    46 0x929241f1 CFRunLoopRunInMode + 97
    47 0x909f9e04 RunCurrentEventLoopInMode + 392
    48 0x909f9af5 ReceiveNextEventCommon + 158
    49 0x909f9a3e BlockUntilNextEventMatchingListInMode + 81
    50 0x95249595 _DPSNextEvent + 847
    51 0x95248dd6 -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 156
    52 0x9520b1f3 -[NSApplication run] + 821
    53 QtGui 0x000fd88a QEventDispatcherMac::processEvents(QFlags) + 1786
    54 QtCore 0x00da4a31 QEventLoop::processEvents(QFlags) + 65
    55 QtCore 0x00da4e0a QEventLoop::exec(QFlags) + 314
    56 QtCore 0x00da7196 QCoreApplication::exec() + 182
    57 …ompany.Fragmentarium-Source 0x00004aa9 main + 585
    58 …ompany.Fragmentarium-Source 0x0000482a start + 54

Leave a Reply

Your email address will not be published. Required fields are marked *