This directory contains the Qt3D project for Qt5:
   * Qt3D QML bindings and
   * Qt3D C++ APIs


Building Qt3D
==================

Qt5 is a rapidly changing bleeding edge environment.  This branch is our initial
support for it and thus is also rapidly changing and bleeding edge.

This branch is experimental, and unsupported.  This information is provided for
advanced use only.

No guarantees about API stability or even if this works at all are supplied, use
at your own risk.

First fetch the Qt5 source tree and Qt3D master branch:

    cd ~/depot
    git clone ssh://codereview.qt-project.org:29418/qt/qt5.git
    cd qt5
    ./init-repository --codereview-username <username> \
        --module-subset=qtbase,qtsvg,qtdeclarative,qttools,qtxmlpatterns,qtdoc,qlalr,qtrepotools,qtqa,qtlocation,qt3d
    git submodule foreach "git fetch gerrit && git reset --hard gerrit/master"
    cd qt3d
    scp -p -P 29418 codereview.qt-project.org:hooks/commit-msg .git/hooks/
    git fetch gerrit
    git checkout --track -b master gerrit/master

If you are reading this file then somehow you probably already got this far anyway.

Now build Qt5, which will also build Qt3D as a module:

    cd ~/build
    mkdir qt5
    cd qt5
    ~/depot/qt5/configure -developer-build -opensource -confirm-license -no-webkit -no-phonon -nomake tests \
        -nomake examples -declarative -opengl -svg && make -j 4


What's in Qt3D
==================

Directory structure:

src/threed/
    This is the main library of the Qt3D project, containing abstractions
    for cross-platform GL, shaders, lighting models, and so on.
src/plugins/
    Scene format loading plugins.
src/imports/
    QML import plugins.
util/
    Various utilities that are useful when working with Qt3D.
examples/
    Some examples of using Qt3D QML bindings and Qt3D C++ API.
demos/
    Some more complex demos of using Qt3D QML bindings and Qt3D C++ API.
tests/auto/qml3d/
    Unit tests for the QML bindings.
tests/auto/threed/
    Unit tests for the C++ API
doc/
    Documentation.
devices/symbian/
    Symbian deployment file


Documentation
=============

The documentation can be generated with "make docs".  It will be placed
into "doc/html" in the build directory.


Packages
========

This section is only for those developing Qt3D.  Read on to discover how
the building of packages works.  This section is also important if you want to
change how the structure of the Qt3D pro files work.

To build Qt3D, run:

    qmake && make

The .pro files will cause the toolchain to place the libraries, QML files and
meshes of Qt3D directly into place, as part of the compile process.  The files
go into the bin/ directory, and the executables can be run directly from there.
If you are doing a developer build, plugins will be installed in such a way
that Qt will find them.

After building the tree the install step is invoked using the INSTALL_ROOT environment
export to cause the installation rules to place all the files into a sandboxed
install tree, ready for packaging:

    INSTALL_ROOT=tmp make install


Examples
========

Some examples require assimp library to parse the content. Go to http://assimp.sourceforge.net/
and build and install the assimp library. Then configure Qt3D to include assimp and
run qmake && make.
