// Copyright (C) 2019 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only

/*!
    \example customshaders
    \ingroup quick3d-examples
    \title Qt Quick 3D - Custom Shaders Example
    \examplecategory {3D}
    \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
           {Rainbow-colored sphere with wave deformation and shader settings}

    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
*/
