/****************************************************************************
**
** Copyright (C) 2019 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the 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 The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/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: https://www.gnu.org/licenses/fdl-1.3.html.
** $QT_END_LICENSE$
**
****************************************************************************/

/*!
    \example customshaders
    \ingroup quick3d-examples
    \title Qt Quick 3D - Custom Shaders Example
    \brief Demonstrates the use of custom vertex and fragment shaders.

    This example demonstrates using a material with completely custom vertex
    and fragment shader code.

    \image customshaders-example.jpg

    This example is the counterpart to the \l{Qt Quick 3D - Custom Materials
    Example}{custommaterials} example, which demonstrates the other group of
    custom materials: \c shaded materials where the shader code snippet
    augments a PrincipledMaterial, rather than replacing it.

    \section1 Implementing a custom material

    In this example, a mesh is deformed by the vertex shader according to a
    sine function. The end result is controlled by two sliders corresponding to
    the time and amplitude values of the sine function.

    The fragment shader is used to color the mesh according to the position
    values of the vertices. There are two fragment shaders included: one with
    and without texturing. The textured version samples a texture that is
    source from either an image file, or from a live Qt Quick layer.

    The material does not participate in the default lighting or shadowing
    system, and therefore has its \l{CustomMaterial::shadingMode}{shadingMode}
    property set to \c CustomMaterial.Unshaded.

    See \l CustomMaterial for a detailed description of custom material
    capabilities.

    \snippet customshaders/ExampleMaterial.qml implementation

    \section1 Using a custom material

    A custom material using custom shaders is used the same way as any other
    material. The uniforms in the shader can be easily updated through QML
    property bindings.

    \snippet customshaders/main.qml use
*/
