[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

## C.4 Release Notes from 0.94 to 0.96

This section documents the major changes between versions 0.94 and 0.96 of of Crystal Space.

### Reference Counting Utilities

The new template class `csRef<>` automates reference count manipulation, thus freeing programmers from the task of manipulating reference counts manually. When assigned, `csRef<>` increments the reference count of the target object by invoking the object's `IncRef()` method. When the `csRef<>` is destroyed, or when it is re-assigned, it decrements the object's reference count via `DecRef()`. This frees clients from having to invoke `IncRef()` and `DecRef()` manually, thus helping to alleviate a potential source of resource leaks. The companion template `csPtr<>` has also been added as a micro-optimization for certain cases when it is desirable to avoid reference count manipulation during assignment. See the smart pointer HOWTO for additional information, Correctly Using Smart Pointers. Also see the API documentation for `csRef<>` and `csPtr<>`.

The Crystal Space API has been largely updated to return `csRef<>` and `csPtr<>` from functions which transfer ownership of an object to the caller of the function. Client code which used to assign results of such function calls to a normal pointer and invoke `IncRef()` on that pointer should now instead simply assign the result to a `csRef<>`, and allow the reference count to be managed automatically. See the smart pointer HOWTO for complete details. See section Correctly Using Smart Pointers.

### iPolygonMesh changes

The header for ``iPolygonMesh'` has moved from ``include/ivaria'` to ``include/igeom'`.

### iMeshObject changes

The following functions have been removed:

- `iMeshObject::GetShapeNumber()`
- `iMeshObject::GetObjectBoundingBox()`
- `iMeshObject::GetRadius()`

Instead there is now a new routine called `iMeshObject::GetObjectModel()` which will return an instance of ``iObjectModel'`. The functions can be called from that instance.

A similar change has taken place in the ``iVisibilityObject'` interface.

### XML

The map format has changed to XML. Use the ``cs2xml'` tool to convert old maps like this (with a real path to a zip file):

      cs2xml data/oldlevel.zip

or (with a VFS path):

      cs2xml /this/mydata/sprite1

### csGetObject and csGetCommand

The old parser is gone. We switched to XML.

### Fast SCF Interfaces

The following macros have been removed:

- `SCF_QUERY_INTERFACE_FAST`
- `CS_GET_CHILD_OBJECT_FAST`
- `CS_GET_NAMED_CHILD_OBJECT_FAST`
- `CS_GET_FIRST_NAMED_CHILD_OBJECT_FAST`
- `SCF_DECLARE_FAST_INTERFACE`

Fast interfaces are now default. Just use the normal query versions instead of the ones above.

### Internal SCF Changes

For interfaces the ``scfGetID_Interfacename'` and the ``VERSION_Interfacename'` have been renamed to ``Interfacename_scfGetID'` and ``Interfacename_VERSION'` for making namespaces working nicely with them.

### Make Targets

Some targets for the ``make'` facility (all applications, some plugins) have changed. In general, the name of a target is now the same as the name of the resulting binary (without suffix). For example, ``walktest'` is now built with ``make -k walktest'` instead of ``make -k walk'`. However, the composite target names have not been changed. To build ``walktest'` and all required plugins, one still invokes ``make -k walkall'`.

### Sound Loader Changes

The `iLoader::LoadSound()` that returns an `iSoundWrapper` now returns a pointer that has a reference count of one more compared to before.

### iTextureManager Changes

The following methods have moved:

- `iTextureManager::FindRGB()` => `iGraphics2D::FindRGB()`

The following methods were eliminated:

- `iTextureManager::SetPalette()`
- `iTextureManager::ResetPalette()`
- `iTextureManager::ReserveColor()`

### Procedural Textures

The procedural texture system has been rewritten. See the documentation for `iGraphics3D::SetRenderTarget()` for details.

### Hardmove Change

The interpretation of the matrix used in the ``hardmove'` tag for mesh factories (``meshfact'`) has been inverted so it is more logical and also corresponds with the wah ``hardmove'` is interpreted for mesh objects (``meshobj'`).

### Octree Removal

The old octree culler is now completely gone. Instead you should use Dynavis now. If you still have an old level that uses this culler then you can try to convert it using the ``levtool'` utility but this is only a temporary measure. It is a lot better to design the level with Dynavis in mind. To convert an old level do this:

      levtool -dynavis old_level.zip

Note that the statements ``culler'` and ``vistree'` are no longer supported in world files. The loader will give an error if it finds them.

### Typed Vectors

All the macro versions of the growing arrays and vectors have been removed and replaced with corresponding templated arrays (see section Utility Library (`csUtil`)). For example, the following macros and all derivatives have been removed:

- `CS_DECLARE_TYPED_VECTOR`
- `CS_DECLARE_OBJECT_VECTOR`
- `CS_DECLARE_GROWING_ARRAY`

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ]

This document was generated using texi2html 1.76.