Documentation - Changelog

VSXu 0.6.1 (May 19 2017)

  Bug fix / Patch release

  ' menu text too small in sequencer
  ' not possible to close master channel item / segfault

VSXu 0.6.0 (April 30 2017)

Feature wise, VSXu 0.6.0 might just look like a patch release (0.5.1 was broken on many graphics drivers).
But it's a lot more than that.

This release has been long in the making, mainly due to the fact that we've been releasing and continuing work on
our action platformer game - "Luna Sky".

As with all previous projects, VSXu is a big part of Luna Sky as well, supplying low level graphics routines.
The game engine and game logic is a separate project.

A lot of the work on "Luna Sky" has spilled over on the VSXu project.

Worth noting is:
- a complete refactoring and restructuring of the VSXu project codebase
- totally rewritten bitmap / texture backend including caching and support for DDS / DXTx formats
- new compressed package format - VSXz which is faster in many ways

Visuals for VSXu Player can now be released either as a "pack" (a VSXz file with multiple visuals in it), and as standalone
.vsx files - one visualization per file.

The two formats have their advantages and disadvantages:
- if you have, say 3 "states" that use the same assets (texture files, obj / mesh files) - before you had to create 3
 individual .vsx files, each including a copy of the asset files needed.
- VSXz files solve this by enabling multiple "states" to share the same files.
While you can create VSXz packs (contact us if you wish to), the most likely use case is you creating standalone .vsx files.
Mainly because there is no easy way to create a pack from Artiste (and there won't be).

As mentioned, the texture backend is totally new. This means improvements in RAM consumption and loading speed.
How does this affect visuals creators then?

While you can still use JPG and PNG images, those formats are STRONGLY discouraged.
Instead, you should use the .dds format with either DXT1 or DXT5 compression.

We recommend ImageMagick for converting. In a terminal, just go:

$ convert image.png

It's that simple.

So why this new format?

Before, the way a texture image was loaded was this (for a 4k/UHD 3840x2160 image):
1. Load PNG compressed data;
2. Decompress PNG into RAM (using 32MB of RAM)
3. Flip the image vertically on CPU (using another 32MB of RAM).
4. Send this data to the OpenGL Drivers
5. OpenGL drivers compress data into DXT1 or DXT5 using up another 8MB RAM
6. OpenGL drivers write the texture to VRAM

Now the process is shorter:
1. Load DDS image into RAM (using 8MB ram)
2. OpenGL drivers write the pre-compressed texture data directly to VRAM

Worth noting is that DDS (like JPEG) is a destructible compression algorithm, so only use it as a final pass.

Some of your old projects are going to break in 0.6.0. If you want help porting them, let us know.

+ VSXu now builds and debugs on Windows with Microsoft's compiler together with QtCreator.
+ color depth buffer now has multisample support

VSXu Player:
+ better window handling, see all flags with --help
+ borderless window
+ borderless fullscreen window on a specific display
+ saving of FX levels per visual now works on Windows as well as Linux; format is JSON.
  Old files will not be converted into the new format, sorry about that.

New modules:
+ mesh;particles;mesh_rays_uniform
+ keyboard input module ( reads when fullscreen)
+ gamepad input module
+ OpenGL vendor module, shows information about graphics drivers
+ light disable
+ blocker module with custom limit
+ string dummy

VSXu Artiste:
+ support for dumping contents of a sequencer to disk
+ shaders can be saved from a GLSL module (right-click it for an option menu)
+ some parameters now show more information when hovering over them, mainly texture, bitmap and mesh
+ copy & paste in sequence editor
' crash related to empty edit boxes
' modules positions were not saved properly
' memory leak in parameter abstraction layer

VSXu 0.5.1 (December 2014)

Bug fix release.

VSXu 0.5.0 (September 2014)

+ The whole project now can be compiled into static libs for embedding into 3rd party projects
+ VSX Widget is now a separate project (serving both Artiste & Profiler) improved cohesion to make reusability

VSXu Player

VSXu Engine / Engine Graphics:
+ New command: set_time_speed - set the time factor in the engine. Default = 1.0
+ Cloning of text values now works (for copying shader strings etc. between modules)
+ Work has begun to give better critical error messages
+ VBO now supports 2d vectors for highly optimized line drawing
+ vsxf supports multi-threaded decompression of .vsx files
+ Textures are now loaded in a deferred fashion (optimization with multi-threaded loading)
+ Internal math data carriers (vector, quat etc.) now support double as well as float (C++ templates)
+ vsx_time now uses clock_monotonic rather than gettimeofday on Linux
' Some commands do better range checking / data validation
' States saved with user-defined shader preset would not load for other users. Such modules are now always saved
  as the normal glsl_loader.

VSXu Artiste:
+ Updated GPL license to v 3.0
+ Sequencer / animation editor:
  + Holding Ctrl while manipulating bezier handle now mirrors to next opposing handle
  + Changing interpolation type to "bezier" now tries to mimic previous interpolation type thus making it
    easier to convert existing tweens to the bezier type
' Fixed bug where scrolling in the search box of the module list crashed the program
+ Cloning values (Ctrl + Alt + Lbutton-Drag) now does not invoke interpolation on the server
+ Mouse Cursor hidden when Fullwindow (not performance mode)
+ New command line parameter -ff to start the preview window in fullscreen mode

VSXu Server:
' Fixed a bug where the effect would flicker

+ OBJ2VXM improved
+ VSXu Profiler - a coding tool to profile anything. Includes easy to use interface for programmers
  and viewer for the saved data files. Includes stack-based recording and value plotting.
+ VSXz can now create .vsx archives from file names supplied as parameters

New modules:
+ Bitmap / Texture generator: concentric_circles
+ Mesh Mirror -  mirrors a mesh around one or more axes
+ Texture Dummy
+ Colored Line - color-space oscilloscope (color changing instead of position)
+ Float array memory buffer - updates the array with one value per frame
+ Get camera orientation from modelview matrix - useful to create parallel rendering pipeline
+ Frustum matrix - for frustum manipulations
+ High resolution screenshot module using frustum operations (can not be used with camera)
+ float_clamp
+ Whole new module class with parameter-based modules: Selectors
  These act as multiplexers letting you pass through one of the inputs. Can be used for building
+ ROBJ loader - our own OBJ format for embedding 2 uv maps in one OBJ file (for lightmaps)

Improved Modules:
+ Akai APC20 APC40 module now supports knobs
+ All modules' code has been looked over and improved to comply with current coding standard and to prepare
  for documentation generator "Librarian"
+ OBJ Importer now has option to centralize the mesh data around [0, 0, 0]
' Float array pick had an range check error causing segfault
+ Render Face Id module has maximum_id parameter to limit rendering
+ render_particlesystem_ext now stores original particle creation position in available in the
  vertex shader
+ render_particlesystem_ext now stores total particle lifetime in gl_Color.w available in the vertex shader
+ Cal3D module now adds vertex id in gl_Color.a component for use in vertex shaders
' sequencer oscillator behaved in a bad way

VSXu 0.4.1 (Development)

+ VSXu now supports NVIDIA's OpenGL "threaded optimizations". To enable, run vsxu like this:
+ OpenGL debug callback implemented (and getting rid of glGetError() )

VSXu 0.4.0 (May 2013) - VSXu 10 years!

+ audio backend was unified - the choice fell on RtAudio
  This means we can do away with FMOD on windows release and maintain that module as an external project
  apart from the VSXu project (will simplify things).
+ time looping in main sequencer
' various uninitialized memory fixes

VSXu Engine:
+ much improved embedding API
  vsx_engine.h got split into vsx_engine.h and vsx_engine_abs.h to make it easier for implementors to use
  the class vsx_engine in vsx_engine.h (hide away some internal stuff)
+ engine_helper class to quickly help you embed vsxu engine into your own OpenGL application
+ License change: is now LGPL
+ internal support for passing keyboard & mouse events to modules
+ modules now see argc and argv (through argvector class)
+ new refactored vsx_module_list system

VSXu Artiste:
+ now using GLFW on all platforms
+ more informative numbers seen in the status row in full screen mode

New modules:
+ new FBO texture buffers - pure color and color + depth
+ buffer_clear module clears these buffers
+ experimental web cam / OpenCL module
+ experimental video tracker module
+ axis-angle to quaternion
+ quaternion to axis-angle

Improved modules:
+ particlesystems has new variable: origin-pos (vector)
  useful to track distance travelled
+ mesh renderer improved to always use VBOs (huge performance gain)
+ cal3d supports post-rotate/post-translate
' cal3d renderer now uses proper thread signaling (thanks to PetriW)
' texgen modules now properly join threads (memory leak)

VSXu 0.3.1 (May 2012)

The goal of this release was to better handle GPUs that couldn't run certain visuals
and the internals to make VSXu more stable.

' bugs on intel GPUs fixed
' when FBO not supported handled much better (intel cards)

VSXu Player:
+ preloading of all visuals

VSXu Artiste:
+ macro background transparence now selectable with alt + mouse wheel
+ new main server menu layout
     (April 2012)

In general about this release: Since 0.3.0 will be around for a long time most likely, we have tried to fix as many bugs as possible and make it stable on as many systems as possible.

General (features affecting both engine / artiste and possibly player)

+ Not all visuals are shipped with VSXu Player. The main reason is to keep the
  default install (in terms of visuals) to a low disk space footprint.
+ Windows installer now installs into directories including the patch number.
    C:\Program Files\Vovoid VSXu\
  instead of
    C:\Program Files\Vovoid VSXu 0.3.0\
  This means that you don't have to uninstall a previous version when a new
  comes out. Makes debugging and error reporting much easier as we now have plenty
  of versions out there.
+ Many Windows users have reported crashes and non-functioning VSXu on Intel's
  GPU's / drivers without FBO support.

  This should now be handled better, especially with VSXu Player. The result
  is that some visuals can't run because of the need for render-to-texture.
  We recommend everyone with these problems to switch to GNU/Linux - it has been
  working better with the open source drivers. However
  this is not entirely conclusive, so see for yourself. You should get some
  warnings in the console if FBO is non-functioning.
+ Debug states (tests) are now part of every installation. Some of these show
  how certain modules work, so do look them over - you might find something
+ For GNU/Linux version, we now use ~/.local/share/vsxu INSTEAD of ~/.vsxu
  Since you might want to look this over (and your backup scripts!) we think
  you should do the migration yourself, thus we didn't add an automatic script
  to copy the old files into this new location. The reason for this move is to
  better comply with standards.
+ For GNU/Linux version, we now create a symbolic link in your home directory -
  "vsxu" which points to ~/.local/share/vsxu for your convenience.
+ Unpredictable rand() function from glibc has been replaced with mersienne
  twister, making for better, coherent random values. Especially good for
  the modules relying on random values such as mesh_random_vertices and the
  perlin noise bitmap generator.

New features in VSXu Player:

+ Better --help text. Run vsxu_player from CLI and see for yourself!
+ VSXu Player now supports pre-loading of all visuals. Useful for stage shows
  when you have many heavy-to-load projects that you need to fade between.
+ VSXu Player now uses glfw on windows. This should solve a few strange bugs
  that have popped up lately - "screen resolution not supported", some keys not
  behaving as they should.

New features in Artiste:

+ Some collision detection bugs related to the new shiny bezier connectors have
  been rectified.
+ Macros now display "grid lines" instead of a massively large white blob
  when selected. Easier on the eyes and more compatible with the performance
+ Macros' transparency (black background) can be changed with
  Alt + Mouse Wheel; Default alpha value is 0.5.

New modules:

+ mesh;modifiers;deformers;mesh_vortex
  Works on vertices only, pushes or pulls vertices to/from the center

Improved modules:

+ mesh_translate_wraparound now also takes min values into account

0.3.0 (December 2011)

General (features affecting both engine / artiste and possibly player)

+ merged everything developed and learnt from 0.2.1 into 0.3.0
+ a lot of work fixing memory leaks. mesh infrastructure totally rewritten
+ vsxu server - a standalone engine controllable via telnet and artiste. this features is in its 
  infancy but still useful
+ initial support for OpenGL ES 2.0 (we're ignoring 1.x as it's dying anyway)
+ new connectors - shiny coloured beziers instead of straight lines
+ a lot of work went into the cmake build scripts, making it easier to integrate/package/cross-compile

0.2.1 (never released, made for the Luna demo, incorporated into 0.3.0)

General (features affecting both engine / artiste and possibly player)

+ param updates (engine) now taking actual change into account. will prevent mesh generators from running
+ waveform viewing in sequencer
+ cloth band simulation
' uninitialized memory issues fixed
+ ocean tunnel now running in thread
+ cal3d module now has threading option (watch your cpu's people!)
' sequencer had several memory initialization issues leading to random corrupted movement

0.2.0 (End of August 2010)

(items marked “valgrind” were fixed thanks to this wonderful tool)

General (features affecting both engine / artiste and possibly player)

+ cleaned up some module names
+ heavily optimized mesh processing
+ heavily optimized particlesystem processing
+ using point sprites in the particle renderer really works now through help of GLSL. 
  you can also edit the GLSL shaders for the particle renderer for some really cool effects!
+ particlesystems now support rotation for particles rendered with the mesh renderer! the "particlesystem 
  from mesh" generator can apply random values to the rotation
+ sound sample viewer in the sequencer, click the timeline to see it when you have a stream player loaded 
  with an mp3
+ user data separation on linux/windows to support Windows 7 and linux - the concept is read-only binaries 
  in /usr/bin/* and  user data in ~/.vsxu/0.2.0/data   (On Windows it's C:\Users\[user]\vsxu\0.2.0\data)
+ screenshot function now saves JPG's in data directory
' screenshot function now saves images "the right way" (not flipped up-side-down)
' memory leak in vsx_texture fixed
' crash when empty animation pool and creating a module, bug in the undo function
' right click knob: close all controllers = crash, this was due to a much larger problem in the gui engine,
  fixed (valgrind)
' right click on any widget didn't always show the menu on the first click (had to click twice) (valgrind)

New modules:

+ mesh_ribbon - pretty simple module that renders a ribbon between two 3D points
+ float_interpolate - simple linear interpolation of a float value (useful sometimes)
+ float4_interpolate - simple linear interpolation of a float4 value (useful sometimes)
+ face_id renderer with a box limiting the rendering in 3 dimensions
+ gravity_ribbon_mesh - use a mesh as source for the ribbons
+ mesh_dummy - if you want to import a mesh into a macro instead of getting one line per module using
  the mesh inside the macro
+ mesh_quat_rotate_around_vertex - pick a vertex by id in a mesh and rotate the mesh around that
    can be used for character rotations pretty nicely - simply pick the shoe if you want to rotate
    the character when dancing etc
+ mesh_scale: for completeness     
+ mesh generators: super_banana - generates a tube-lofted mesh from many sequences enabling you to form
  many many different shapes. x/y/z distribution sequencer also, so that you can put the details where
  you want them!
+ math;acos
+ quaternion_dummy - a dummy like float_dummy

Improved modules:

+ cal3d importer now generates tangent space tangents
+ caled importer now feeds bone rotation and position as outputs, useful for attaching other objects and
  effects to characters
+ gravity_ribbon* modules can now "reset pos" - which means they'll start 
  over from the point they're currently in
' glsl loader had a bug in the attribute parser
' glsl loader wouldn't run if called twice
' dot product module was not doing what it should
' fixed a bug in the grid mesh vertex normal calculator
' mesh_to_float3_arrays crashes when you create it (valgrind)
' modules making use of a shader would not always detect successful linking due to a malformed parameter 
  to a GL status function (valgrind)

0.1.18 (090901) [First NON-BETA release!]

General (features affecting both engine / artiste and possibly player)

+ vsxu artiste for mac OS X
' sequence parameter controller (editor) had a critical bug when loading a saved parameter value, FIXED
+ new default skin preview - "vsxu luna" (will be updated in following version)

VSXu Player

' a slight flickering in between visuals have been fixed
+ slightly improved faders, added some sine-interpolation here and there

VSXu Artiste

' moving modules into a macro now retains their individual positions
' macro sizing down when creating an alias is now fixed
' macro cloning now works correctly
' sequence parameter editor: you can now only open one sequence editor for a sequence parameter
' sequence parameter editor:
' "macro error when you import a saved macro - click on an item within it and the position goes haywire"
  this was due to the assigning of modules to a macro resizing it didn't tell the enging of the new size
' "screen module" position when loading a state is now working as it should, previously the screen was 
  never moved into correct position
' color chooser didn't correctly retrieve the value from the engine, now fixed
+ clone value: ctrl+alt; drag to clone a value to another module. very useful!
+ most controllers can now be closed by left-doubleclicking them
+ easier to open complex types, also single-click to open enum data type menus and sequencer parameters
+ alt+doubleclick a parameter to add/edit sequence
+ ctrl+doubleclick to add parameter to the current sequence pool
+ Performance Mode - view what you're doing with the modules on top, get to it: Ctrl+F (fullscreen) 
  then Alt+F to toggle performance mode

VSXu Engine

+ improved internal message processor performance due to a few nasty coding errors 
  (allocating / deallocating memory per command, very bad)

New modules:

+ mesh, modifiers, deformers, mesh_normal_randistort
   This one distorts the vertex normals by a factor. 0 is no distortion. then you can distort as 
   much as you like upwards, but the normal vector is normalized so unless you're only messing 
   with one axis it's pretty pointless to go over 1.0...  This is a screenshot of how it can look, 
   the reflections (via normal-based texture coord generation) and lighting change quite a bit!
   Works to distort imported meshes in realtime if it's not too many vertices..
   For instance - hook it to the beat or something via a 3floattofloat3 module...

+ sequencer module - takes a sequence and float as inputs so you can animate and 
  have the animation controlled by say, sound...

Improved modules:

' cameras now properly calculate aspect ratio in artiste
' obj loader had issues with parsing the face data if there was only normals or texture coordinates
' gravity line strip particles had a vicious memory bug that crashed everything on windows.
+ blob bitmap/tex now supports color and alpha option

0.1.17 (BETA 7) (2008-12-08)


+ GNU/Linux support! Some of the underlying code needed to be rewritten, helps 
  Windows platform improvement also on sound analysis and some other engine / gui optimizations. 
  Also a number of memory corruption bugs were found in this process which should make VSXu a 
  lot more stable on both platforms.

VSXu Artiste:

' When moving multiple modules, only the first selected was moved. This is fixed now.
' float3_to_3float had a bug in that only the first value would be copied, This is fixed
+ New module chooser - "Module List". Should be easier to use for some, and good to have in any case.
  This can also be used to quick-search for a module.
+ You can't get enough eye-candy...! Module creation and deletion is now smooth like intended from 
  the beginning.
+ Modules and macros are now scaled down to fit the number of parameters they have, this makes it 
  easier to identify  each module, and also to save space.
+ Pad input for float3 parameters now works! You can set start/stop values for x and y also. Try it 
  with camera position for instance, or you can use 2 float3_to_3float to separate camera xz and y 
  movement.... Quite useful for exploring values.

New modules:

Bitmaps & Textures

New great features include basic texture generation (bitmap branch) with some generators and filters.
Still with these simple tools you can generate a lot of textures! Some of these were included in the 
previous version, but were very buggy.
Also the annoying procedure when loading a JPEG as a texture is now simplified with a dedicated jpeg_tex_load
  + bitmaps -> filters -> *
  + bitmaps -> generators -> plasma
  + bitmaps -> generators -> subplasma
  + texture -> loaders -> jpeg_tex_load


+ maths -> arithmetics -> quaternion -> quat_mult
+ maths -> arithmetics -> quaternion -> quat_slerp

Mesh generation tools

+ mesh -> solid -> mesh_solid_supershape
+ mesh -> modifiers -> deformers -> mesh_vertex_move
+ mesh -> modifiers -> transforms -> mesh_rotate_quat
+ mesh -> modifiers -> helpers -> mesh_compute_tangents

Particle Systems

+ particlesystems -> modifiers -> particle_fluid_deformer

Improved modules:

            + renderers -> particlesystems -> simple
              New feature is sequence-controlled color and alpha! This can be used to make cool fire effects or stuff that changes color
              over the lifetime of a particle for some very nice effects. VSXu's particlesystems are now on par with costly commercial
            + 3float to float3 now initials to 0.0, 0.0, 0.0;  This was very stupid before! Especially since this is often used for translations!
            + GLSL module now supports uniforms in the vertex shader plus attributes.
            + mesh to float3_array - this is useful to feed tangent space to GLSL from mesh. Beware though! If the mesh doesn't have a tangent space defined VSXu might crash! (this is a bit ugly I know but it's a very specific advanced feature)

0.1.16 (BETA 6) [multimonitor transitions for the masses] (2007-06-16)

VSXu Player:

+ you can now choose which monitor to render to, start the player like this> vsxu_player -main 2
  renders to the monitor with id "2"
+ to find out which id's are available on your system, run vsxu_player -enum
+ vsxu player now supports transitions between visuals in the player
  these transitions can be created in vsxu artiste by anyone!
  The way this works is it gives you 2 textures which contain the 2 visuals you need to blend
  together, also you have a value going from 0.0 to 1.0 which is the time.

VSXu Artiste:

+ support for separating gui and rendering on different monitors
+ for instanse, starting vsxu artiste like this> vsxu_artiste -main 0 -out 2
  renders to the monitor with id "2"
+ to find out which id's are available on your system, run vsxu_artiste -enum
' left-clicking & right-clicking on an anchor caused crash
+ new helpful builtin templates that you can use to start different kinds of projects,
    check the system right-click menu!
+ you can place notes on the desktop, helpful for describing your project to others or keeping a changelog
  of the state you're working on
+ scripting language now works as it should, parameter filter scripts and component scripts
  + to access it, right-click a float parameter and choose 'add/edit vsxl filter' or right-click a module and do the same
  + parameter filters run in the same engine so you can share global variables between them
  + component scripts have their own engine
+ the browser has been tuned allowing more space in crowded lists
' sequence parameter editing now fixed, see examples;particles;size_alpha_control for a howto
' vsxl component filter now reported correctly, saving & loading as it should

New modules:

+ render_mesh_dots - renders mesh vertices as dots with color and variable size
+ limiters;float_limiter - limits a float value
+ interpolators;float - value interpolation like in the knobs
+ 4 floats to quaternion conversion module
+ sphere mesh generator

Modified modules:

+ avi player now supports external float param as time - you can play an avi forwards and backwards seamlessly with
  an oscillator for instance :)
+ mesh_rays can now limit fan size
+ obj loader loading time reduced by 70%
' metaballs generator had a memory deallocation bug when destroying it
' memory leak in particles from mesh

0.1.15 (BETA 5) (2007-02-02)


' memory corruption fixed in vsxu artiste
' screen area/coordinate corruption issues fixed (coordinates got smashed when taskbar was on top...)
' GUI not clickable issue solved on latest nvidia drivers
' gravity lines module speed/optimization
' GLSL bug fix for latest nvidia drivers

0.1.14 (BETA 4) (2007-01-28)


+ dual-monitor support in win32 (editor on one screen, output on the other) [PAID VERSION ONLY]
+ new platform layer, GLUT has been replaced with in-house code
+ editor now supports mouswheel zooming
+ even more size-optimized executables
+ it's now impossible to connect to parameters that are bad to connect to like particle count and metaballs grid resolution
  these re-allocate memory.
+ Frame Buffer Objects now used for offscreen rendering where available, automatic fallback to pbuffers and on ATI cards which are
  This is used in the render_surface_single and blur module for instance.
  It's implemented in the texture class should you need to use offscreen rendering in your modules.
  Also, the old double-buffered module is gone.
+ get value optimized.. not run as often - this was a command mayhem
+ engine makes a log file for module loading instead of dumping it in the console (VSXU DEVELOPER)
' installer bug: vsxu.conf gets overwritten by the installer, that should not happen by default!!
' sometimes the sliders would lock at 0, turned out to be uninitialized obsolete variable 
' simple_with_texture now correctly initializes the z-component of the texcoords
' state save now remembers name of state (very annoying)
' semicolon in save edit box didn't accept ;   - it does now
' Ctrl+D disabled ctrl+right-click on connections
' texture preview window no window, broken
' when re-loading a state, you would get double instances of every module/connection due to not clearing first
' no longer possible to connect to a parameter that has a sequence
' fullscreen/window switching does not work that well in the player
' 'project->clear state' doesn't restore screen0 when having loaded a product 

Modified modules:

+ several renamed modules for easier understanding of what they do, especially the so commonly used
  examples-simple which are now called basic;colored_rectangle and textured_rectangle.
  Old names are still accessible for backwards-compatibility.
+ file chooser module now has the editor as default controller, caused some annoyances before
+ render_surface_single 
   - can toggle support for feedback saving vmem in all cases when you don't need feedbacks :)
   - clear color added (try it with various alpha in feedback loops, very neat)
+ kaleidoscope renderer got hemisphere parameter so it's not always flat.. now you can make your own
  crazy kaleidoscopic dome!
' object loader, jpeg/png loader and text_s now check the file suffix to avoid crashes
' object loader texture coordinate bug fixed (maali's car exposed this bug, yay!)
' many bugs fixed, cal3d loader crash, memory leaks in texture_buffer etc.
' text_s wouldn't display the text until you had edited the textmass, fixed

New modules:

+ res_to_str converter module, converts resource to string (for printing etc.)
+ depth_buffer - merging depth_test and depth_mask into one module

Obsolete modules:

++ Obsolete modules are now moved into a special DLL which is not needed if you don't need backwards compatibility with
   previous versions of vsxu.
- depth_test
- depth_mask

0.1.13 (BETA 3) (2006-04-23)

!Special thanks to wreg for finding such many bugs and coming up with great ideas

+ basic undo (Ctrl+Z) function, works bad on big projects however so is possible to turn off
+ left-click on desktop to pan around
+ luna help texts updated for controllers, now mentions the close-all keyboard shortcut
+ tool to help you identify non-loaded modules, this is needed when making a demo/sequenced production
  to music, music doesn't start until the engine senses that all modules are loaded.
  modules will flash red with the message "not loaded" if you select this from the menu, again
  it will remove this if they have been loaded in the meantime and you check this from the menu once more.
' bug fixed in the browser when adding module and hitting esc would leave the name dialog floating in space
' box-selection of multiple modules (ctrl+drag) had a bug when the server was moved
' preview window resize bug and behaviour fixed
' screen gamma not set back in the stop() method of the engine, which left windows with a deformed gamma
' rotation axis "jitterbug" eliminated
' luna now gets out of the way when dragging a connection

0.1.12(BETA 2) (2006-04-22)

+ to close all open anchor trees, hit Ctrl+D on the keyboard
+ single-click on controller without changing the value now closes controllers
' selection position bug fixed

0.1.11(BETA 1) (2006-04-17)

VSXu editor:

+ right-click mouse and drag up/down on server zooms in/out
+ to close all open controllers either press Ctr+C or choose it from any controller context menu
' memory leak fixed when deleting a branch of widgets

Modified modules:

+ stream play now includes parameter to turn on spectrum analyzer (as it consumes CPU it's turned off by default)
  beware though that fmod's FFT update is slow!

Bugs Resolved:

' small but annoying bug when having controllers open, moving a module would make it jump away a bit
' browser left-drag + right click now cancels drop
' luna right click doesn't work
' luna pager was non-functional and invisible
' png font loading in the font renderer = crash, moved the png font into the skin instead

0.1.10 (BETA 1) (2006-04-15)

General/New concepts:

+ new datatype "quaternion" for interpolating rotations
  this is implemented with realtime interpolation in the engine and support for quaternions in the sequencer 
+ support for sending strings between modules, next version will feature the beginnings of a string library of modules
+ new interpolation type for float values - bezier curves 
+ vsx own packaging/compression format intended for distribution of visuals and demos - "VSXF" (vsxf.dll):
  - LZMA-based (packs better than RAR in many cases, but not all)
  - Filesystem abstracted away in the modules making it totally transparent for the module developer,
    the module developer goes   engine->filesystem->f_open("filename.txt","r"); rather than just fopen();
    and then the engine handles wether the file resides on disk (in the resources dir) or in the package.
  - default behaviour is to look in the package (if such exist) then look in the resources dir
+ project has been split as follows:
  vsxu_artiste.exe     - 200kb - The state editor artistical tool
  vsxu_dev.exe         - 200kb - Artiste with windows console window and a lot of debug commands for module devs
  vsxu_player.exe      - 51kb  - The visual player (loads everything in _visuals/)
  vsxu_demo.exe        - 15kb  - Demo player (loads _prods/demo.vsx)
  vsxu_engine.dll      - 178kb - the engine, without any OpenGL code and only system modules
  vsxu_demo_engine.dll - 79kb  - size-optimized engine for demo player (without stuff artiste needs, and no VSXL)
  vsxg.dll             - 74kb  - JPEG/PNG loading library, used by player, artiste and several modules
  vsxf.dll             - 51kb  - Packaging/Compression library, used by engine and all the modules that handle files
  - Advantages of this new architecture is smaller module size (since many modules can share the same basic functions 
    in the VSX Ultra environment along with the engine, player and artiste. This also includes future DLL's like
    media player plugins for winamp and windows media player etc.

Bugs Resolved:

' when saving a macro that lies within a macro, the parent was saved instead
' setting a string parameter of a macro crashes vsxu, also wasn't saved with macro (thanks to vjshow)
' state->clear doesn't reset the screen position
' in stream loader, no file browser in menu nor double-clicking (thanks to ogge)
' accumulators broken, reset parameter access violation? (thanks to vjshow)
' editor, when first clicking the bottom box and then typing something - vsxu crashes (thanks to ogge)
' jpeg loader bug - thread deadlock error fixed
' bitm2tex loading bug fixed
' GLSL loader redeclaring of parameters fixed
' blob bitmap/texture generator only used 1/4 of the available bitmap size thus wasting 3/4 fillrate
' depth buffer clearing problem fixed (this was very annoying)
' api_internal, file recursive get module didn't make a clean exit so leaked some memory
' sequence marker (green square) is now shown on the anchors when loading a demo/project with sequences
' memory corruption in channel memory management when redeclaring in-params
' when redeclaring - sequences weren't kept for parameters that remained
' blur module didn't use LINEAR texture interpolation so it looked blocky
' buffer code upgraded, now uses newer libraries

VSXu editor:

+ totally re-written coordinate system handling, has made it possible to reduce binary size of artiste dramatically
+ all edit controllers updated with new codebase, including the knobs, and sliders' value edit field thus eliminating
  a few instances of different editors. Now only one editor is used for both single- and multi-line text editing.
  This also made the binary a lot smaller.
+ improved sphere controller, quaternion-based rather than matrix-based 
+ connection error 1 message altered (already something connected on 1-pipe in-port) (suggested by ion)
+ pressing esc in the module browser now either cancels or exits the browser
+ macros that are open can not be moved, only resized (alt+left-drag), this to prevent accidental movement when moving modules
+ help text in the module browser when dropping module
+ hovering over a module in the browser displays info about what it does from the DLL (written by module author)
+ when a parameter (anchor) is sequenced, the menu is changed to reflect this so that you won't try
  to control it when it's in fact not possible.
+ luna assistant size is now saved, if you don't want her up - she'll stay minimized
+ new data type 'resource', replacing all strings for handling filenames. this is so the package manager can add needed
  files to the package

New modules:

+ new quaternion-based rotation module (gl_rotate_quat) that can modify all matrices, moduleview, projection and texture.
+ blur texture filter for use with glow etc.
+ particle system gravity module (try to play with this and wind and mesh-generated particle systems for some fun)
+ particle system floor module, supports bouncing particles, losing force for each bounce among other things
+ mesh renderer that interconnects vertices with AAlines or from each vertex to the center
+ file_chooser module that is used to iterate over the files in a dir - can be used to
  dynamically load images from files.. (if you hook it to the png loader for instance)
+ cube mapping module that takes 6 bitmaps and delivers a cubemap texture that integrates fully with the rest
  of the rendering pipeline, cool to combine with GLSL cubemap lookups :)
+ texture coordinate generation (opengl) which is useful to make realtime reflections, projections of textures onto
  geometry and other cool effects
+ texture2bitmap - use with caution as this is very slow! Downloads a texture to the primary RAM for processing
+ particle system from bitmap - can be used to generate some cool effects, for instance - using a bitmap as generation
  grid for a particle system together with gravity

Modified modules:

+ all modules that handle file reading (including fmod and the text module) now use vsxf
+ camera modules now don't reset the proj matrix which means you can premultiply the projection matrix with the normal matrix
+ blob module can now generate stars with [0..n] arms and supports attenuation and a cannabis (flower) mode
+ text drawing module much improved, now can do texture-based fonts also (poly fonts are slow!)
+ skybox raytracer module now delivers 6 bitmaps that can be used to make a cubemap
+ GLSL module now features a default OpenGL behaviour, makes it much easier to develop shaders having
  this kind of starting point. A lot of times you only want to change a tiny piece of how OGL behaves,
  now this is easier. Mad props to for releasing shaderGen from which the shader code is snatched :)
+ jpg/png loaders scream when wrong file format/missing file loaded
+ metaballs module can now set grid size (not apropriate for changing in realtime however)

Module API Changes:

+ prepare() and unprepare() were removed, not needed
+ module factory in the engine could not delete properly before, now deletion is handled by the DLL's themselves thus 
  typecasting properly when deleting, this caused a major memory leak
+ the output() method in the modules gained a new parameter - param, so you can see which param
  is the result of the output call. Needed for multi-purpouse modules that can do both rendering
  and texture generation for instance.. otherwise it'd render on call to texture which would be SLOW!
+ now possible to re-declare output parameters, done the same way as input parameters by setting
  a boolean and then getting callback from the engine

0.1.04 ALPHA (2005-07-03)


+ idle CPU usage reduced dramatically by sleeping between frames, this can be configured
+ internal module counter added so that modules that do heavy processing
  can use this in some scenarios to save cycles - it's incremented by the engine
  when a param is updated with a new value and then the module can set it to 0

Bugs resolved:

' when dropping a module on a closed macro it engulfs it so you can't select the macro
' threading problems with png and jpeg loaders fixed
' jpeg loader memory leak fixed (this was really bad, leaking 7Mb each starlight aurora load)
' setting default value in a parameter encapsulated in a param group caused segfault
' engine sequencer calculated the no interpolation values horribly wrong
' double-click problem with context (first clicking on one widget than on another)

VSXu editor:

+ new shiny hinting system when making connections, thanks to vjshow for this idea!
+ completely overhauled text editor, now with limited syntax highlighting for GLSL and VSXL use
+ popup menus improved
+ connecting over a macro border now works correctly by creating missing aliases
+ settings are now saved in vsxu.conf
+ possible to control smoothness and speed of movement in the GUI, or turn off smoothness
+ possible to cap framerate, useful if you want vsxu to consume less CPU
+ when having a module selected and right-clicking another and choosing "delete" would delete both.
  now it selects a module on right-click as well which solves this problem.
+ module chooser: resources put in a separate browser for clarity and easier integration with other widgets
+ resource chooser: support for jpeg images to view in preview window added
+ module chooser: colors alpha lowered so not occluding (shining) more than the text
+ module chooser: fixed length added to handle many items in the same level
+ the screen module's position is now saved when saving a state
+ when making a double-connection, check for this in the UI, not all the way down in the engine
+ renaming components and macros now works (hopefully) plus some minor adjustments
' builtin text editor window resizing now works properly
' when saving VSXL in a state and loading it didn't display the red square denoting VSXL presence
' when loading the main font in the resource browser the texture was unloaded rendering all characters as white blocks.

New modules:

+ basic .OBJ mesh loader (tailored for loading blender obj files, 3 vertices per face)
+ backface culling module
+ texture parameters module to set repeat|clamp|clamp_to_edge|clamp_to_border|mirrored_repeat,
  and anisotropic filtering
+ triangle wave added to oscillator
+ new names of modules, maths;parameters has been shortened to just maths;
  so for instance maths;parameters;oscillators;oscillator is now
  maths;oscillators;oscillator. If you macro/state won't load, just open it in a text editor and replace
  "maths;parameters;" with "maths;"
+ maths:
  sin, cos, vector(float3) x float, abs, 
  boolean operations with float values: and, nand, or, nor, xor, not
    (for smooth integration with the rest of vsxu, floats are rounded so -0.5 to 0.5 is 0 and the rest is 1)
  float -> float3
  float4 * float
  float3 and float4 accumulators
  average from float array range
+ GLSL shader module that permits realtime deployment/development of shaders, uniform (parameters from GLSL)
  are instantly exported into the VSXu environment making it possible to control shaders as part of existing

Modified modules:

+ blend_mode module updated with blend color and extension blend modes such as CONSTANT_COLOR_EXT
  which is useful to color whole objects
' font size was messed up when going fullscreen using truetype font rendering module

0.1.03 ALPHA (2005-05-12)

Bugs resolved:

' right-click outside chooser edit dialog makes program crash
' memory leak in png loader fixed
' process not ending if you close the windows window pressing [X] in the top-right corner

0.1.02 ALPHA (2005-05-11)


+ starlight aurora state
+ module code: dll size optimization - no need to initialize values anymore, all (int/float/float3/float4/render) are set to 0
  if you don't set a value in your code. Prevents crashing due to this and makes module code more readable in addition 
  to smaller.

VSXu editor:

+ parameter name display redone displays the value of a param
+ when adding from the module browser a unique name is automatically generated
+ various new pieces of documentation (thanks silvein for good pointers)

New modules:

+ JPEG loading module (only generates a bitmap so far, use the bitmap2texture module)
+ 4 floats conversion to float4 conversion module
+ ring mesh generator
+ experimental realtime bitmap processing test module: add_noise (try it with the blob bitmap generator and make
  your CPU work all it can)

Modified modules:

+ blendmode module now resets blending to previous blendmode after it's rendering chain has been run.
+ texture coordinates of the simple_with_texture module was wrong and had to be shifted up-side-down, might require
  parameter adjustments (mainly angle)
+ various improvements in many modules (small bugs)

Bugs resolved:

' anchor mouse-hovering bug selected component: fixed
' pressing ESC problem resolved (exited when it shouldn't)
' opening sequencer made the program crash, now fixed

0.1.01 ALPHA (2005-05-06)

+ mouse-hover on anchors when dragging connection
+ mouse-hover over complex should open it

0.1.00 ALPHA (2005-05-05)

+ vsxu player (vsx reborn)
+ window resizing overhauled, works perfectly now
+ right-click menu added to complex parameters
+ facing camera BUG FIX and addition to swt module <3
+ view information on component/macro in component chooser
+ another large overhaul of the parameter handling, now handles memory management better and no parameter leaks.
+ time module (system)
+ sound analyzing module (vsx)
+ remove `this´ from every parameter creation call
+ mathematical modules
  + add, sub, mul, div, pow
  + round, floor, ceil  <-- all float outputs
+ state load
+ luna helper
  + component help texts
+ state clear
+ deletion of modules didn't free up parameters' memory, this is now fixed
+ add empty macro from server menu
+ replaced std::string and eliminated stl from the modules to reduce them in size by 90%, vsxu reduced in size with 10%
  + created vsx_string
  + some major optimizations done on the way, added const and by reference where useful
+ fixed that luna is now on top when vsxu starts
+ make example modules WITH EXTENSIVE DOCUMENTATION!
  + create and test output components [DONE]
  + renderer [DONE]
  + using texture [DONE]
  + generating texture (by using a thread for the heavy processing) [DONE]
  + loading png from disk [DONE]
  + writing text with vsx_font (FTGL etc.) [DONE]
  + opengl blendmode [DONE]
  + openGL camera (float3 in) [DONE]
  + spline interpolation (3d) (from starlight aurora) [DONE]
  + spectrum (waveform) renderer using the float_array type [DONE]
+ make controllers obey min/max restrictions
+ optimize component types in the widget engine with constants, "vsx_widget_component" becomes #define VSX_WIDGET_COMPONENT 6 etc.<
+ float_array datatype
+ mesh class
  + vertices
  + vertex color
  + face normals
  + selected vertexes
  + triangles
  + methods
+ fixed the window dragging area so it's easier to resize windows (per petriw's request)
+ float3 input: color hsv/rgb -> rgb (no conversions from hsv/rgb in the engine kthx)
+ system updated, for maximum abstraction away from GLUT api, also needed to do artiste and the viewer.
+ connections and aliases sent when asking for components present on server (on connect or on startup), TOTAL overhaul. works better now.
+ gamma correction on the screen module
+ oldschool tracker (sequencer) that can change floats, float3 and similar values for programming/automation
  + right-click-add-channel
  + should work like a controller - a sub-window of the server, but basically should bring up a whole tracker.
  + linear time (no pages in the tracker)
  + visually vertical
  + time handling overhauled, local time in components rather than global engine time.
+ fix the real fullscreen support for the client
+ macro dump now saves ints and vsxlp
+ various improvements on the module chooser. it had bad support for many files in a single node
+ object inspector
  + auto resizing (smooth)
+ bug in the feedback loop framework fixed ()
+ image loading in thread for the image viewer
+ no-interpolation for certain 2d_windows DONE
+ file browser for the param type string, starting in the _resources/ dir 
  + "small component" implementation
  + colored boxes in the module chooser
  + interpolation fixes
  + view textures supported in the object inspector
    + object inspector resizes smoothly
      + linear interpolation in the window class
+ pressing 'home' in the module chooser translates to the origin of the tree.
+ aliasing fixed when alias with name already exists, both for single aliases and when assigning components
+ flickering error when moving components in/out of macros is now fixed
+ fix vectors so that we use iterators instead of [ref] -- general coding error - for performance
+ create a DLL interface and sample DLL for a module 
  + look over and test all the types of parameters.
  + output modules  + scripting language
  + param filter [DONE]
  + component filter [DONE]
  + interface to params [DONE]
+ particle systems
+ multiple modules in one DLL
+ scripting language
  + built-in simple editor
+ settings file (vsxu commandlist?)
+ skin support - skin chooser (by allowing multiple directories for textures)
+ massive internal parameter/connection overhaul both in client and server (5 weeks of work)
+ fix the preview so it uses glviewport rather than copy-to-texture LAMEASS CODING
+ macro drop position when moving components into the macro should be used
+ bugs related to dropping already connected components onto a macro involving the param spec resolved
  + param_spec is now stored in vsx_param_abs as std::string spec, no engine component alias lists should hold
    specs nor in the component.
+ fix macros-in-macros when saving
+ aliases when created are not checked for uniqueness in the engine, so multiple aliases can share the same name
+ error reporting from the engine to the gui via message boxes
+ space in the GUI moves the camera to the position of the a_focus component
+ save macro size
+ nice message box (general GUI stuff)
+ interpolation for parameters serverside
+ load macros from disk
  + check if all modules can be created - parse for "create_component" calls
+ anchor needs "reset to default value" menu command and implementation in the server
  + requires special dealings with the parameter class, should it keep the default value internally?
+ save macros to disk
+ names of anchors now highlited
+ linear interpolation of the component chooser (jaw extra special ultra deluxe)
+ create macros
  + move components into macro via drag'n'drop
+ change p[""] into real variables for speed everywhere.
+ pbuffer code overhauled for performance. also single/double-buffered texture surfaces were added :p
+ png support for the texture class (YAY)
+ select multiple components
+ changing the order of connections
+ float inputs
  + edit box
  + fix the feeling of the knob/slider and horiz/vert adjustments/fine adjustments
  + get start value from server message
  + knob
  + slider with AMP and OFS is to replace the original slider
    + the label of the second knob of the mixer bar is recieving mouse input and changes the value of the control
+ float3 inputs
  + sliders
  + Cor's special-rotating-sphere 3d pizza supreme special input (?)
+ parameters component type can't have sliders in the icon, it's prone to human misunderstanding
+ create components
  + module browser
    + organize modules
+ need to add support for component positioning and size (all components, size is only for the macro special case)
+ delete components & macros
+ object inspector
  + rename components
+ connectors to in-ports in the 4th quadrant are now fading out to show that they're behind a component
+ multiple outputs of components in the production engine
+ channels can carry any type of parameter as defined by the module
+ a texture if used by many other components doesn't call its dependencies more than once per frame
+ TCP: third implementation, had to remove all STL from the tcp thread
+ TCP: second implementation, some problems with the threads
+ TCP: first implementation done, doesn't actually interfer with the rendering yet
  To test the tcp functions, telnet to the computer where vsxu is running (localhost maybe?) on port 578
  in putty, select "raw" instead of telnet, this is not a full telnet implementation.
  command list:
  shutdown  + to turn off vsxu
  quit, bye + to close the client connection properly
+ to test the binary mode that we can use for different other commands (such as sound data and whatnot)
  type "bin", hit enter and then type in the command string to be treated as a binary command "set 10202 texture data"
  in the future maybe.. 
  then it asks for the number of bytes that will be inserted... type that in and hit enter..
  then you can add as much crap as you like.. when enough data (spanning multiple packets if needed)
  has arrived it exits binary mode. Check the server console all the time, it tells you what it's doing.

  Worth to know is also that you can disable some of the commands for the client which are really intended
  for humans running telnet against the server. These help commands and the prompt should be turned off
  when running with a real client program.
+ server right-click menu, connect
  + popup tree menus
  + search for running servers
+ create the popup menu widget
  + command = id, owner takes care of command as owner issued it 
    + make the system console
    + requires keyboard support for the widget system
      + create edit box widget
+ go over the code that uses integer/floating point to string conversions and fix the code to use the new functions s2f,s2i,i2s,f2s    
+ when modules are deleted, they're not cleaned up. esp. bad with surfaces who occupy a lot of RAM
' infinite loop when dropping component where one with same name exists + some position errors fixed
' fix memory leak when going fullscreen, only very small !! about 4k
' screen component channel was broken due to not initializing the module's pointer in the params correctly
' param disconnections needs to deal with macros' in-ports
' the overlay topmost windows aren't always topmost
' problem with menus not catching focus
' connector distance is acting "funny" - not always receiving focus
  <jaw> i fixed this by forcing the user to hit CTRL before being able to click the connections. They 
  were always in the way anyway, covering anchors and components.
' problem with selection in non-debug mode fixed
' select multiple also selected the menu due to error in the server mouse up method
' connections in macros not working due to error in param_connect_volatile
' component renaming fixed when moving from within a macro to a deeper macro.
' when ctrl+alt-clicking and dragging a componen while it's parent macro is selected (white border) it goes crazy and stuff
' click area problem in the module chooser fixed
' fix the y-scale in the hyperbolic component browser, it's off by some 30% or something
' enter when cursor beyond the end of the line in the editor caused vsxu to crash :(
' when setting a name of a component it's not complaining if it gets ' ' or ' for instance. only allow a-zA-z0-9_
' double-deletion error when deleting from right-click menu
' when setting default value the knobs didn't get the new value. this was due to error in vsx_param. 
' right-click moved the windows (annoying when a window has a popup like the preview window)
' when controller visible on an alias it's not deleted when the alias is unaliased
' sequence wasn't deleted when component was deleted. 
' time for the vsxl filter wasn't from the component but from the engine. 
' collision detection on the connectors was a bit weird/broken. fixed now!
' window (viewer/object inspector) gets below other windows sometimes
' object inspector resizing fixed
' mouse testing failed because vsx_engine destroyed the depth buffer (preview mode)
' misc errors in vsx_command fixed