/****************************************************************************
**
** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the Qt3D documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Digia.  For licensing terms and
** conditions see http://qt.digia.com/licensing.  For further information
** use the contact form at http://qt.digia.com/contact-us.
**
** GNU Free Documentation License Usage
** Alternatively, this file may be used under the terms of the GNU Free
** Documentation License version 1.3 as published by the Free Software
** Foundation and appearing in the file included in the packaging of
** this file.  Please review the following information to ensure
** the GNU Free Documentation License version 1.3 requirements
** will be met: http://www.gnu.org/copyleft/fdl.html.
** $QT_END_LICENSE$
**
****************************************************************************/

/*!
    \title Writing a scene format plug-in for Qt 3D
    \keyword Scene Format Plugin
    \example sceneformats/obj

    \section1 Plugin architecture for scene formats to be deprecated.

    In the original design for \l{Qt 3D} we considered loading of different
    file formats to be analagous to loading different image formats, and
    thus it was written following the pattern of the libpng, and libtiff
    format that exists in QtBase.  This meant scanning the plugins
    directory for a sceneformat loader plugin that supported the given
    file type, and if one was found loading that and then reading the file.

    However this is a poor match for the actual job and slows down the
    loading of assets as the loader has to resolve a plugin before it can
    actually start loading the asset.

    With the support provided by Asset Importer a wide array of scene
    formats is supported, and it makes most sense for new formats that
    are not currently supported to be added and upstreamed to Asset
    Importer.

    Another consideration for the deprecation process is that our
    QML bindings depend on a structured scene format.  Scene-nodes,
    materials and effects must be included in the scene using a set and
    known schema.  With the original plug-in API the idea was that plugins
    would be free to do any kind of rendering or representation and thus
    this schema is not able to be supported.  This means that plugins
    would be created that could not be rendered or would be buggy and
    inconsistent in QML.

    With upcoming support for animations this problem becomes even more
    pressing since animations formats in asset files must also be exposed
    to our QML bindings.

    The QGLAbstractScene class will stay, possibly with some modifications
    but the plug-in apparatus will be dismantled and thus loading of
    assets via a plugin architecture will removed in favour of a direct
    loading functionality, probably kept in a seperate library linked
    at compile time.  This should mean smaller code, faster loading and
    better support for animations and future functionality.

    The bezier plugin will be retained and we will look at contributing
    it to Asset Importer if the format is general enough.

    Since deprecation of the sceneformat plugin API is a considerable change
    to our API's we will not do it lightly.  So far however we have had no
    contributions to the sceneformats and no-one has asked about it, or used
    it, despite this tutorial existing.  At present it will be marked
    \b deprecated and in our next release cycle it will be removed
    altogether.

    In the meantime, this tutorial is out of date and misleading and has been
    removed.  Until it can be re-written, please refer to the source code of
    the Asset Importer Plugin Example in src/plugins/sceneformats/assimp.

    \l{Qt 3D Tutorials and Examples}{Return to the main Tutorials page}.
*/
