@c -*-texinfo-*-
@node Release Notes 2_0, Release Notes 1_4_1, Release Notes, Release Notes
@appendixsec Release Notes from 1.4 to 2.0
@cindex Release Notes

This section documents the major changes between versions 1.4 and 2.0 of
Crystal Space.

Version 2.0 is a major release, covering more than three years of continuous
effort. As such, not all changes are documented. Below details the major
changes since the last release. This will continue to be updated as time
progresses.

This list will not be as complete as wished, but due to timescale between
this and the last release, it makes it difficult to document all changes.

@strong{New features/enhancements:}

@itemize @bullet

@item
Added new demonstration applications: @file{csbias}, @file{csisland}.

@item
Added new tutorial applications: @file{avatartest}, @file{shadertut}.

@item
Added new tool applications: @file{hairtest}, @file{shagnetron}, @file{cslodgen},
@file{cslodview}, @file{csmocapviewer}, @file{csterrainedtest}.

@item
Added new test applications: @file{imptest}, @file{transparentwindow},
@file{csceguiconftest}, @file{threadtest}, @file{jobtest}, @file{smoketest},
@file{deferreddemo}, @file{waterdemo2}.

@item
The @file{startme} application has been almost completely re-written for a nicer
an a more usable User Interface.

@item
Many improvements have been added to the following applications and plugins:
@file{viewmesh}, @file{walktest}, @file{genmeshify}, @file{bugplug}.

@item
Added several generic tool classes that can be used in application development:
@code{CS::Utility::iCameraManager}, @code{CS::Utility::iHUDManager},
@code{CS::Utility::DemoApplication}, @code{CS::Debug::iVisualDebugger},
@code{CS::Material::MaterialBuilder}.

@item
New level and data added. Please look within the @file{data} directory.

@item
Threading support has been extended and improved.

@item
Added a threaded loader for the parallel loading of the data.

@item
Added support for custom camera projection matrices.

@item
A new @code{iRenderManager} interface has been added, abstracting the rendering
method used to display the scenes.

@item
A new post-effects system has been added, see @code{iRenderManagerPostEffects}
and related classes.

@item
The render managers, the lighting and shader systems have all received many fixes
and improvements.

@item
The shaders have been split in the directories @file{data/shader} for the global
@cite{weaved} shaders, @file{data/shader-snippet} for the snippets to be weaved in
the shader weaver, and @file{data/shader-old} for the previous shaders.

@item
Many new shaders have been added, such as the @samp{sky} shader implementing the
Perez luminance model, the @samp{clouds} shader implementing a Perlin noise, and
the @samp{fake_sss} implementing a fake sub-surface scattering. See in
@file{data/shader} for the other additions.

@item
A new @samp{deferred} render manager has been added, implementing deferred shading.

@item
The @file{lighter2} application has been extended with a radiosity system with
support for caustics, allowing far more realistic pre-lighting.

@item
A new culler has been added, @samp{occluvis}, doing hardware occlusion visibility
culling.

@item
A new imposter system has been added. See the @file{imptest} application.

@item
A new @ref{Progressive Level of Detail, progressive Level of Detail} system has
been added.

@item
Added support for Pixel Buffer Objects.

@item
Added support for static mesh and static mesh factory instancing.

@item
Many fixes and improvements have been made to the mesh generator.

@item
Many fixes and improvements have been made to @samp{terrain2} and its multi-splatting
functionalities.

@item
Added support for modifiable terrains, along with the start of a terrain editor (see
@file{csterrainedtest}).

@item
Implemented most of the missing functionalities in the @file{Bullet} physics
plugin. Augmented this plugin with many new functionalities such as soft bodies,
kinematic objects, terrains, and hit beam tests.

@item
Added some tools for the creation and animation of soft bodies (see
@code{CS::Animation::iSoftBodyAnimationControl} and
@code{CS::Physics::Bullet::SoftBodyHelper}).

@item
Added a plugin for the visual debugging of a physical simulation (see
@code{CS::Debug::iDynamicSystemDebugger}).

@item
Many additions and fixes to the @ref{MeshObject Animesh, Animesh mesh}. Many
additions are about optimizations of the morphing and display processes.

@item
Added support for animated decals on Animesh meshes.

@item
Added a structure to hold the physical description of an Animesh (see
@code{iBodySkeleton} and other classes).

@item
Added many new animation blending nodes: @samp{Ragdoll}, @samp{LookAt},
@samp{IKPhysical}, @samp{IKCCD}, @samp{Speed}, @samp{Debug}, @samp{Retarget}.

@item
Fixes and improvements of the @samp{FSM} and @samp{Animation} animation
blending nodes.

@item
Added some default template classes for the creation of new animation nodes (see
the header file @file{cstool/animnodetmpl.h}).

@item
Added a @sc{BVH} motion capture parser for the Animesh, along with a motion capture
viewer and a Point Light Display System (see @file{csmocapviewer}).

@item
Added some tools for the creation and merging of Animesh meshes
(see @code{CS::Mesh::AnimatedMeshTools}).

@item
Added the parsing of animation blending nodes to the @file{skeleton2} loader.

@item
Added a new @samp{Fur} mesh, for the animation and display of hairs and fur.

@item
Added a new @samp{Water} mesh, for the display of oceans and seas.

@item
Added a plugin for the @ref{Assimp importer, Assimp library}, allowing to load
genmeshes and animeshes into Crystal Space from a wide range of different file
format.

@item
Added a new @ref{Blender, Blender 2.6x export script}.

@item
Improved the @ref{3DSMax, 3DSMax export script}.

@item
Added a new 3DSMax exporter plugin, see in the @file{/CSExporters/CrystalMax}
Subversion repository.

@item
Added a new terrain exporter plugin for the @url{http://www.pnp-terraincreator.com/,
PnP TerrainCreator} editor, see in the @file{/CSExporters/CrystalPnP} Subversion
repository.

@item
The @sc{cegui} plugin has received many improvements and additions.

@item
A new generic application configuration tool has been added. See the classes
@samp{iConfigListener} and @samp{iConfigNotifier}, and the @file{csceguiconftest}
application.

@item
The @samp{wxWidgets} canvas and @file{wxtest} application have been improved.

@item
The @url{http://libnoise.sourceforge.net/, libnoise} library has been integrated.
See the @code{CS::Math::Noise} namespace.

@item
Added a Secure Hash Algorithm implementation (SHA-256). See the @code{SHA256} class.

@item
Added a HTTP implementation (see the @code{iHTTPConnection} class and related).

@item
Added many namespaces in the Crystal Space SDK. Future new classes should always
be put in some @sc{cs} namespace.

@item
There has been many additions, fixes and other work performed on the configure
system.

@item
Extended support and usage of unit testing with @sc{cs}.

@item
There have been many fixes and updates for platform support, especially for the
ARM platform.

@item
There has been many updates and fixes to the documentation.

@item
Made memory blocks dump more useful in @code{ptmalloc}.

@item
Added copy constructors to @code{csRefCount}/@code{FastRefCount}
that properly set the refcount to 1.

@item
Made generic render step provide inverse object to world TF as a SV.

@item
Extended @code{csFIFO} with a @code{Top ()} method that peeks into the fifo
without removing anything.

@item
Added [no]compact option to @file{optimisedata}, to put all data into
one file (or split into many).

@end itemize

@strong{API changes:}

@itemize @bullet

@item
Added @code{csBitArray::IsBitSetTolerant ()} (does not assert for out
of bound indices).

@item
Removed @code{CS_CONST_METHOD} and @code{CS_PURE_METHOD}. Pure and
const specifiers have very strong semantics that almost never is warranted,
and to avoid problems and bugs caused by them remove them totally.

@item
Addition new @code{SimpleStaticLighter} class. This is a convenience class
that calculates simple static vertex lighting (similar to what lighter2 would
do) for individual meshes. This is useful for statically lighting dynamically
created geometry or for updating vertex lighting on an object that has moved.

@item
Added @code{PeekNext ()} methods to @code{csRedBlackTreeMap} iterators.

@item
Renamed @code{csFinite ()} to @code{CS::IsFinite ()}.

@item
Renamed @code{csNaN ()} to @code{CS::IsNaN ()}.

@item
Deprecated @code{csNormal ()}.

@item
Added @code{iCameraListener} and deprecated @code{iCameraSectorListener}.
@end itemize

@strong{Removals:}

@itemize @bullet

@item
Completed removal of software renderer.

@item
Completed removal of old event system.

@item
Completed removal of @samp{thing} mesh plugin. However, you can now convert your
previous @samp{thing} meshes using @file{genmeshify}.

@item
Completed removal of old sound system.

@item
Completed removal of deprecated world attributes from tree.

@item
Large cleanup of lighting code which has resulted in removal of both
interfaces and other methods. A result was a complete rework of lighting
code.

@item
Removed the following canvas: @samp{sdl}, @samp{caca}, @samp{xextshm},
@samp{ddraw}, @samp{softx}, @samp{memory}.

@item
Removal of @file{instmesh} and @file{bezier} meshes as they are
not that useful and instmesh isn't working that well either.

@item
Removed @code{iImageIO::SetDithering ()}.

@item
Removed deprecated @code{csProcessorCapability}.

@item
Removed the @file{simpvs} application.

@end itemize

@strong{Fixes that apply to tickets in Trac:}

@itemize @bullet

@item
Changed @code{XMLshader} to expand all templates before retaining nodes
for later parsing. Should help with #486.
@end itemize

@strong{Other changes:}

@itemize @bullet

@item
Switched by default to the @file{Bullet} library instead of @sc{ode} for the
physical simulation. The @sc{ode} plugin will not get further support anymore,
and will be removed in some future.

@item
The logic of the Animesh's animation blending nodes has been changed, and the
nodes work now in bind space instead of bone space.

@item
@file{perl} and @file{java} plugins are now disabled by default.

@item
When building an application with ``statically linked plugins'' (usually by
utilizing the @samp{LinkStaticPlugins} Jam rule) @sc{scf}'s automatic scanning
for plugins was ``magically'' inhibited. This behaviour has been abandoned;
now, by default plugin scanning is always performed independently of whether
statically linked plugins are used or not. Plugin scanning can be inhibited by
calling @code{scfInitialize} manually (see the API documentation for details
how).

@item
parallaxAtt moved to @samp{shader-old}.

@item
Added a check to the legacy renderbuffer so that it removes the
@code{CS_BUFFER_COLOR} user renderbuffer if colors are not set.

@item
Changed to unshadowed render manager as default.

@item
Disabled high @sc{dpi} scaling on Windows Vista.

@item
Un-inline most @code{csPathsList} methods to avoid cross-module memory
allocs/frees.

@item
Add a 'used @sc{sv}' traverser that gives the set of used @sc{sv}s (instead
of individual @sc{sv} names).

@item
Optimisation @file{lighter2} by not doing transparency-computation of shadowrays
if path is fully unoccluded or fully occluded.

@item
Support for (properly hardware-accelerated) clip planes.

@item
Packaging scripts have been moved from the scripts directory into a sub packaging
directory.

@item
Use @code{glXChooseFBConfig} instead of @code{glXChooseVisual}.

@item
Avoid crashes when encountering a corrupt @sc{png} images.

@item
Extensive removal of dead and old code.

@end itemize
