DOM backward compatibility

From COLLADA Public Wiki
Jump to navigation Jump to search

This page lists changes to the COLLADA DOM API.

Purpose

Sometimes the DOM API changes in a way that prevents client applications from working properly when they upgrade to the latest DOM version. Although the DOM maintainers minimize API breakage as much as possible, sometimes it's necessary.

This page records changes that require clients to modify their code to work with a newer version of the DOM.

Note: The revision numbers given here refer to the COLLADA DOM Subversion repository on SourceForge.

Core API changes

This section tracks changes made to the core API.

Revision 168, 12 September 2007

This revision renames:

  • daeElement::ref to daeElement::refElem
  • daeElement::release to daeElement::releaseElem

In general, you shouldn't call those functions directly anyway, but if you do, you'll need to update your code to use the new names.

Revision 186, 30 September 2007

The daeAtomicType::memoryToString function now takes a std::ostringstream to write the string to instead of a char* buffer.

Revision 353, 21 December 2007

  • daeElement::resolveAll becomes DAE::resolveAll.
  • Many objects (daeURI, daeMetaElement, daeAtomicTypes, dom*) now require a DAE object to be constructed properly. For the most part, developers shouldn't need to change their code, although if you create daeURI objects in your own programs, you'll have to change code like this
daeURI uri("http://www.example.com");

to this

daeURI uri(dae, "http://www.example.com");

or, if you have a daeElement* from the same document, this

daeURI uri(*element, "http://www.example.com");
  • daeInterface.h is gone. Instead, #include <dae.h>.
  • daeSafeCast has been moved from daeElement.h to dae.h.
  • The integration templates are gone. New methods setUserData/getUserData, working with void* pointers, have been added.

Revision 373, 9 January 2008

Removed DAE::resolveAll. Developers should remove any resolveAll calls from their code. You no longer need to call daeURI::resolve, daeIDRef::resolve, or DAE::resolveAll. When you want to get at an element, just call getElement and the resolve will happen automatically if necessary.

Revision 477, 15 March 2008

The daeURI class no longer has the getFilepath, getFile, or getExtension methods. They've been replaced by pathDir, pathFile, and pathExt.

Revision unknown, lost in time

domFx_surface_init_from_common_Array& initFromArray = surface->getInit_from_array();

must now be called as

domFx_surface_init_from_common_Array& initFromArray = surface->getFx_surface_init_common()->getInit_from_array();

Revision 518, 519 16 April 2008

Removed daeURI::setElement, daeURI::resolveURI, daeIDRef::setElement, and daeIDRef::getState. These were mostly useless. If you were using these to accomplish something and need a workaround, ask in the forums.

Revision 552, 5 May 2008

Removed the addExternalReference, removeExternalReference, getReferencedDocuments, and resolveExternals methods from daeDocument. The DOM no longer does explicit tracking of external references. You can use the daeURI::isExternalReference method to tell if a given uri references an external document.

Build setup changes

This section tracks changes made to the build files. These changes likely won't require you to modify C++ source code that uses the DOM, but may require you to modify project files that link the DOM into your application.

Revision 110, 11 June 2007, and 115, 19 June 2007

This revision consolidates libraries to make things simpler for client applications. stdErrPlugin, libxmlPlugin, and STLDatabase have been merged into dae.vcproj. In your project settings, remove any references to those libraries.

The equivalent changes were made for the Linux makefiles in revision 115 on 19 June 2007.

Revision 131, 18 July 2007, and 133

This revision removed iconv from the DOM build on Windows. Revision 133 includes a libxml build for Windows that doesn't need iconv.

In the past, we expected developers to download their own version of libxml for Windows, typically the one from Igor Zlatkovic. That libxml requires iconv, so if you update to the latest DOM, you may get link errors about missing iconv. The solution is to use the new libxml Windows build provided in the external-libs section of the SourceForge svn repository. See building third party libraries for the COLLADA DOM for more details on how this library was created (useful for DOM maintainers).

Revision 134, 19 July 2007, and 147 on 20 July 2007

Updated the Visual Studio 2003 and 2005 files so the DOM can be built with both versions side by side. The build output location has changed, so:

  • If you update directly on top of the old DOM (for example, by doing an svn update), delete the lib/bin/tmp directories so you don't accidentally link against old libraries. If you forget to do this, you'll get a link error.
  • Change your project files to look for the DOM in the new output location.

A similar set of changes was made to the Linux build setup in revision 147 on 20 July 2007. As on the Windows side, delete the lib/bin/tmp directories if you're updating from svn.

Revision 298, 15 November 2007

PCRE is now a dependency of the DOM. If you're using the DOM as a static lib, you'll need to update your build to link against PCRE. See the DOM guide: Setting up page for more info.

I/O plug-in changes

This section tracks changes made to the I/O plug-in system. If you don't use custom I/O plug-ins then these changes won't affect your application.

Revision 77, 7 May 2007

In revision 77, changes in the atomic type and meta attribute systems require changes in I/O plug-ins. Responsibility for handling whitespace when reading a document has been moved from the I/O plug-in to the atomic types. This should simplify I/O plug-ins. See the changes made to daeLIBXMLPlugin.cpp in revision 77 for more details.

External links