/****************************************************************************
**
** Copyright (C) 2017 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 hellovulkanwindow
    \meta installpath vulkan
    \title Hello Vulkan Window Example
    \ingroup examples-vulkan
    \brief Shows the basics of using QVulkanWindow.

    The \e{Hello Vulkan Window Example} shows the basics of using QVulkanWindow
    in order to display rendering with the Vulkan graphics API on systems that
    support this.

    \image hellovulkanwindow.png

    In this example there will be no actual rendering: it simply begins and
    ends a render pass, which results in clearing the buffers to a fixed value.
    The color buffer clear value changes on every frame.

    \section1 Startup

    Each Qt application using Vulkan will have to have a \c{Vulkan instance}
    which encapsulates application-level state and initializes a Vulkan library.

    A QVulkanWindow must always be associated with a QVulkanInstance and hence
    the example performs instance creation before the window. The
    QVulkanInstance object must also outlive the window.

    \snippet hellovulkanwindow/main.cpp 0

    The example enables validation layers, when supported. When the requested
    layers are not present, the request will be ignored. Additional layers and
    extensions can be enabled in a similar manner.

    \snippet hellovulkanwindow/main.cpp 1

    Once the instance is ready, it is time to create a window. Note that \c w
    lives on the stack and is declared after \c inst.

    \section1 The QVulkanWindow Subclass

    To add custom functionality to a QVulkanWindow, subclassing is used. This
    follows the existing patterns from QOpenGLWindow and QOpenGLWidget.
    However, QVulkanWindow utilizes a separate QVulkanWindowRenderer object.
    This resembles QQuickFramebufferObject, and allows better separation of the
    functions that are supposed to be reimplemented.

    \snippet hellovulkanwindow/hellovulkanwindow.h 0

    The QVulkanWindow subclass reimplements the factory function
    QVulkanWindow::createRenderer(). This simply returns a new instance of the
    QVulkanWindowRenderer subclass. In order to be able to access various
    Vulkan resources via the window object, a pointer to the window is passed
    and stored via the constructor.

    \snippet hellovulkanwindow/hellovulkanwindow.cpp 0

    Graphics resource creation and destruction is typically done in one of the
    init - resource functions.

    \snippet hellovulkanwindow/hellovulkanwindow.cpp 1

    \section1 The Actual Rendering

    QVulkanWindow subclasses queue their draw calls in their reimplementation
    of QVulkanWindowRenderer::startNextFrame(). Once done, they are required to
    call back QVulkanWindow::frameReady(). The example has no asynchronous
    command generation, so the frameReady() call is made directly from
    startNextFrame().

    \snippet hellovulkanwindow/hellovulkanwindow.cpp 2

    To get continuous updates, the example simply invokes
    QWindow::requestUpdate() in order to schedule a repaint.

    \include examples-run.qdocinc
*/
