Spec-Zone.ru › Qt 5.11

Класс QVulkanWindow

Класс QVulkanWindow — это удобное подклассирование класса QWindow для выполнения рендеринга Vulkan. Подробнее...

Заголовок: #include <QVulkanWindow>
qmake: QT += gui
С момента: Qt 5.10
Наследует: QWindow
  • Список всех членов, включая унаследованные

Типы public

перечисление Flag { PersistentResources }
флаги Flags

Функции public

QVulkanWindow(QWindow *parent = nullptr)
виртуальный ~QVulkanWindow()
int availablePhysicalDevices()
QMatrix4x4 clipCorrectionMatrix()
int colorFormat() const
int concurrentFrameCount() const
виртуальный QVulkanWindowRenderer * createRenderer()
int currentCommandBuffer() const
int currentFrame() const
int currentFramebuffer() const
int currentSwapChainImageIndex() const
int defaultRenderPass() const
int depthStencilFormat() const
VkImage depthStencilImage() const
VkImageView depthStencilImageView() const
int device() const
uint32_t deviceLocalMemoryIndex() const
QVulkanWindow::Flags flags() const
void frameReady()
QImage grab()
int graphicsCommandPool() const
int graphicsQueue() const
uint32_t hostVisibleMemoryIndex() const
bool isValid() const
VkImage msaaColorImage(int idx) const
VkImageView msaaColorImageView(int idx) const
int physicalDevice() const
const int * physicalDeviceProperties() const
int sampleCountFlagBits() const
void setDeviceExtensions(const QByteArrayList &extensions)
void setFlags(QVulkanWindow::Flags flags)
void setPhysicalDeviceIndex(int idx)
void setPreferredColorFormats(const int &formats)
void setSampleCount(int sampleCount)
QVulkanInfoVector<QVulkanExtension> supportedDeviceExtensions()
QVector<int> supportedSampleCounts()
bool supportsGrab() const
VkImage swapChainImage(int idx) const
int swapChainImageCount() const
QSize swapChainImageSize() const
VkImageView swapChainImageView(int idx) const
  • 82 функции public, унаследованные от QWindow
  • 34 функции public, унаследованные от QObject
  • 6 функций public, унаследованные от QSurface

Сигналы

void frameGrabbed(const QImage &image)
  • 18 сигналов, унаследованных от QWindow
  • 2 сигналов, унаследованных от QObject

Статические члены public

const int MAX_CONCURRENT_FRAME_COUNT
  • 1 статический член public, унаследованный от QWindow
  • 10 статических членов public, унаследованных от QObject

Дополнительные унаследованные члены

  • 16 свойств, унаследованных от QWindow
  • 1 свойства, унаследованного от QObject
  • 24 public слотов, унаследованных от QWindow
  • 1 public слот, унаследованный от QObject
  • 1 public переменной, унаследованной от QObject
  • 18 защищенных функций, унаследованных от QWindow
  • 9 защищенных функций, унаследованных от QObject
  • 2 защищенных переменных, унаследованных от QObject

Подробное описание

Класс QVulkanWindow — это удобное подклассирование класса QWindow для выполнения рендеринга Vulkan.

QVulkanWindow — это поддерживающая Vulkan QWindow, которая управляет устройством Vulkan, графическим очереди, пулом команд и буфером, изображением глубины/шаблона и двойным буферизованным FIFO swapchain, обеспечивая корректное поведение при событиях, таких как изменение размера, особых ситуациях, таких как отсутствие очереди устройства, поддерживающей как графику, так и вывод на экран, сценариях потери устройства и дополнительной функциональности, такой как считывание рендерного содержимого. По сути, это аналог QOpenGLWindow в мире Vulkan.

Примечание: QVulkanWindow не всегда исключает необходимость реализации полностью настраиваемого подкласса QWindow, поскольку в сложных случаях этого может оказаться недостаточно.

QVulkanWindow можно встроить в пользовательские интерфейсы на основе QWidget с помощью QWidget::createWindowContainer(). Однако этот подход имеет ряд ограничений. Сначала ознакомьтесь с документацией.

Типичное приложение, использующее QVulkanWindow, может выглядеть следующим образом:

class VulkanRenderer : public QVulkanWindowRenderer
{
public:
    VulkanRenderer(QVulkanWindow *w) : m_window(w) { }

    void initResources() override
    {
        m_devFuncs = m_window->vulkanInstance()->deviceFunctions(m_window->device());
        ...
    }
    void initSwapChainResources() override { ... }
    void releaseSwapChainResources() override { ... }
    void releaseResources() override { ... }

    void startNextFrame() override
    {
        VkCommandBuffer cmdBuf = m_window->currentCommandBuffer();
        ...
        m_devFuncs->vkCmdBeginRenderPass(...);
        ...
        m_window->frameReady();
    }

private:
    QVulkanWindow *m_window;
    QVulkanDeviceFunctions *m_devFuncs;
};

class VulkanWindow : public QVulkanWindow
{
public:
    QVulkanWindowRenderer *createRenderer() override {
        return new VulkanRenderer(this);
    }
};

int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);

    QVulkanInstance inst;
    // enable the standard validation layers, when available
    inst.setLayers(QByteArrayList() << "VK_LAYER_LUNARG_standard_validation");
    if (!inst.create())
        qFatal("Failed to create Vulkan instance: %d", inst.errorCode());

    VulkanWindow w;
    w.setVulkanInstance(&inst);
    w.showMaximized();

    return app.exec();
}

Как видно из примера, основные шаблоны использования QVulkanWindow таковы:

  • QVulkanInstance связывается через QWindow::setVulkanInstance(). Затем его можно получить через QWindow::vulkanInstance() отовсюду и на любой потоке.
  • Аналогично QVulkanInstance, расширения устройства можно запросить с помощью supportedDeviceExtensions() до фактической инициализации. Запрос на включение расширения выполняется с помощью setDeviceExtensions(). Такие вызовы должны быть выполнены до того, как окно станет видимым, то есть до вызова show() или аналогичных функций. Запросы на расширения, которые не поддерживаются, игнорируются.
  • Рендеринг реализован в подклассе QVulkanWindowRenderer, экземпляр которого создается в фабричной функции createRenderer().
  • Основной код Vulkan доступен через объект QVulkanFunctions, получаемый вызовом QVulkanInstance::functions(). Функции уровня устройства доступны после создания VkDevice вызовом QVulkanInstance::deviceFunctions().
  • Создание вызовов отрисовки для следующего кадра происходит в QVulkanWindowRenderer::startNextFrame(). Реализация должна добавлять команды в буфер команд, возвращаемый из currentCommandBuffer(). Возврат из функции не означает, что команды готовы к отправке. Вместо этого требуется явный вызов frameReady(). Это позволяет асинхронно генерировать команды, возможно, на нескольких потоках. Простые реализации просто вызывают frameReady() в конце своей QVulkanWindowRenderer::startNextFrame().
  • Базовые ресурсы Vulkan (физическое устройство, графическая очередь, пул команд, основной буфер команд окна, форматы изображений и т. д.) доступны в QVulkanWindow через функции-получатели небольшого размера. Некоторые из них предназначены только для удобства, и приложения всегда могут запросить, создать и управлять дополнительными ресурсами напрямую через API Vulkan.
  • Рендерер работает в основном потоке GUI, как и само окно. Этот поток затем ограничивается частотой обновления, аналогично поведению OpenGL с интервалом обновления 1. Однако реализация рендеринга свободна использовать несколько потоков по своему усмотрению. Доступ к функциям, таким как vulkanInstance(), currentCommandBuffer() и т. д., можно получить с любого потока. Отправка основного буфера команд, размещение запроса на вывод на экран и создание следующего кадра не начинаются до вызова frameReady() в основном потоке GUI.
  • При отображении окна содержимое обновляется автоматически. Дальнейшие обновления можно запросить, вызвав QWindow::requestUpdate(). Для непрерывного рендеринга вызовите requestUpdate() после frameReady().

Для отладки включите категорию логгирования qt.vulkan. Критические ошибки выводятся через qWarning() автоматически.

Различия в системах координат OpenGL и Vulkan

Следует обратить внимание на два существенных различия: Во-первых, в Vulkan ось Y в пространстве отсечения направлена вниз, в то время как OpenGL использует ось Y, направленную вверх. Во-вторых, стандартная матрица проекции OpenGL предполагает значения ближней и дальней плоскости -1 и 1, а Vulkan предпочитает 0 и 1.

Для помощи приложениям в миграции из кода на основе OpenGL без необходимости переворачивать координаты Y в данных вершин и для возможности использования функций QMatrix4x4, таких как QMatrix4x4::perspective(), при одновременном сохранении значений minDepth и maxDepth для видового порта Vulkan в 0 и 1, QVulkanWindow предоставляет матрицу коррекции, получаемую вызовом clipCorrectionMatrix().

Многовыборочное сглаживание

Многовыборочное сглаживание, хотя и отключено по умолчанию, полностью поддерживается QVulkanWindow. Дополнительные цветовые буферы и разрешение в не-многовыборочные буферы swapchain полностью управляются автоматически.

Для запроса поддерживаемых значений выборок вызовите supportedSampleCounts(). Когда возвращаемый набор содержит 4, 8 и т. д., передача одного из этих значений в setSampleCount() запрашивает многовыборочное рендерирование.

Примечание: в отличие от QSurfaceFormat::setSamples(), список поддерживаемых значений выборок предоставляется приложениям заранее, и в setSampleCount() нет автоматического возврата к меньшим значениям выборок. Если запрошенное значение не поддерживается, отображается предупреждение, и многовыборочное сглаживание не используется.

Чтение изображений обратно

Когда supportsGrab() возвращает true, QVulkanWindow может выполнять чтение из цветового буфера в QImage. grab() — медленная и неэффективная операция, поэтому следует избегать частого использования. Тем не менее, она полезна, поскольку позволяет приложениям делать снимки экрана или инструментам и тестам обрабатывать и проверять вывод рендеринга графического процессора.

Поддержка sRGB

Хотя многие приложения могут работать с поведением по умолчанию QVulkanWindow в отношении форматов изображений swapchain, setPreferredColorFormats() позволяет запрашивать предварительно определенный формат. Это особенно полезно при работе в цветовом пространстве sRGB. Передача формата, такого как VK_FORMAT_B8G8R8A8_SRGB, приводит к выбору формата sRGB, если он доступен.

Слои валидации

Во время разработки приложений очень полезно иметь включенные слои валидации Vulkan. Как показано в примере кода выше, вызов QVulkanInstance::setLayers() для QVulkanInstance до QVulkanInstance::create() включает валидацию, предполагая, что стек драйвера Vulkan в системе содержит необходимые слои.

Примечание: Учитывайте платформенные различия. На настольных платформах обычно достаточно установить Vulkan SDK. Однако, например, Android требует развертывания дополнительных общих библиотек вместе с приложением и также предписывает другой список имен слоев валидации. Дополнительную информацию см. на страницах разработки Vulkan для Android.

Примечание: QVulkanWindow не предоставляет слои устройств, поскольку эта функциональность была устаревшей с версии 1.0.13 API Vulkan.

См. также QVulkanInstance и QWindow.

Документация по типам членов

перечисление QVulkanWindow::Flagфлаги QVulkanWindow::Flags

Это перечисление описывает флаги, которые можно передать в setFlags().

Константа Значение Описание
QVulkanWindow::PersistentResources 0x01 Гарантирует, что графические ресурсы не будут освобождены, когда окно перестанет отображаться. По умолчанию все ресурсы освобождаются и повторно инициализируются при повторном отображении.

Тип Flags — это тип-синоним для QFlags<Flag>. Он хранит комбинацию значений Flag по оператору ИЛИ.

Документация по функциям-членам

QVulkanWindow::QVulkanWindow(QWindow *parent = nullptr)

Создает новый QVulkanWindow с заданным parent.

Тип поверхности устанавливается в QSurface::VulkanSurface.

[virtual] QVulkanWindow::~QVulkanWindow()

Деструктор.

int QVulkanWindow::availablePhysicalDevices()

Возвращает список свойств поддерживаемых физических устройств в системе.

Примечание: Эту функцию можно вызывать до отображения окна.

QMatrix4x4 QVulkanWindow::clipCorrectionMatrix()

Возвращает QMatrix4x4, которая может использоваться для исправления различий в системах координат OpenGL и Vulkan.

Умножая матрицу проекции на эту матрицу, приложения могут продолжать использовать координаты Y в стиле OpenGL (то есть Y направлен вверх) и могут установить minDepth и maxDepth соответственно в 0 и 1, не внося дополнительных корректировок в значения Z вершин, при этом используя матрицы проекции, полученные из функций QMatrix4x4, таких как QMatrix4x4::perspective(), в неизменном виде.

Примечание: При использовании данных вершин в соответствии с правилами OpenGL по умолчанию (то есть, передняя грань имеет порядок против часовой стрелки), правильный порядок обхода при растрировании после применения этой матрицы — по часовой стрелке (VK_FRONT_FACE_CLOCKWISE).

int QVulkanWindow::colorFormat() const

Возвращает формат буфера цвета, используемый swapchain.

Примечание: Вызов этой функции допустим только с момента вызова QVulkanWindowRenderer::initResources() до QVulkanWindowRenderer::releaseResources().

См. также setPreferredColorFormats().

int QVulkanWindow::concurrentFrameCount() const

Возвращает количество кадров, которые могут быть потенциально активны одновременно.

Примечание: Значение постоянно на протяжении всего жизненного цикла QVulkanWindow.

class Renderer {
    ...
    VkDescriptorBufferInfo m_uniformBufInfo[QVulkanWindow::MAX_CONCURRENT_FRAME_COUNT];
};

void Renderer::startNextFrame()
{
    const int count = m_window->concurrentFrameCount();
    for (int i = 0; i < count; ++i)
        m_uniformBufInfo[i] = ...
    ...
}

См. также currentFrame().

[virtual] QVulkanWindowRenderer *QVulkanWindow::createRenderer()

Возвращает новый экземпляр QVulkanWindowRenderer.

Этот виртуальный метод вызывается один раз за время существования окна, в какой-то момент после того, как оно станет видимым впервые.

Реализация по умолчанию возвращает null, и поэтому отрисовка не будет производиться, кроме очистки буферов.

Окно берет на себя владение возвращаемым объектом рендерера.

int QVulkanWindow::currentCommandBuffer() const

Возвращает активный буфер команд для текущей картинки swap chain. Ожидается, что реализации QVulkanWindowRenderer::startNextFrame() будут добавлять команды в этот буфер.

Примечание: Эта функция должна вызываться только внутри startNextFrame() и, в случае асинхронного создания команд, до вызова frameReady().

int QVulkanWindow::currentFrame() const

Возвращает текущий индекс кадра в диапазоне [0, concurrentFrameCount() - 1].

Реализации рендерера должны гарантировать, что данные униформ и другие динамические ресурсы существуют в нескольких копиях, чтобы предотвратить изменение данных, используемых ещё активными кадрами N - 1, N - 2, ..., N - concurrentFrameCount() + 1, кадром N.

Чтобы избежать зависимости от динамических размеров массивов, приложения могут использовать MAX_CONCURRENT_FRAME_COUNT при объявлении массивов. Это гарантированно будет всегда равно или больше значения, возвращаемого из concurrentFrameCount(). Такие массивы затем могут быть индексированы значением, возвращаемым из этой функции.

class Renderer {
    ...
    VkDescriptorBufferInfo m_uniformBufInfo[QVulkanWindow::MAX_CONCURRENT_FRAME_COUNT];
};

void Renderer::startNextFrame()
{
    VkDescriptorBufferInfo &uniformBufInfo(m_uniformBufInfo[m_window->currentFrame()]);
    ...
}

Примечание: Эта функция должна вызываться только внутри startNextFrame() и, в случае асинхронного создания команд, до вызова frameReady().

См. также concurrentFrameCount().

int QVulkanWindow::currentFramebuffer() const

Возвращает VkFramebuffer для текущей картинки swapchain, используя стандартный render pass.

Фреймбуфер имеет два прикрепления (цвет, глубинный-шаблон) при отсутствии мультисэмплирования и три (цвет разрешения, глубинный-шаблон, цвет мультисэмплирования) когда sampleCountFlagBits() больше, чем VK_SAMPLE_COUNT_1_BIT. Рендеры должны учитывать это, например, при предоставлении значений очистки.

Примечание: Приложениям не требуется использовать этот фреймбуфер, если они предоставляют свой собственный render pass вместо использования того, который возвращается из defaultRenderPass().

Примечание: Эта функция должна вызываться только внутри startNextFrame() и, в случае асинхронного создания команд, до вызова frameReady().

См. также defaultRenderPass().

int QVulkanWindow::currentSwapChainImageIndex() const

Возвращает текущий индекс изображения swap chain в диапазоне [0, swapChainImageCount() - 1].

Примечание: Эта функция должна вызываться только внутри startNextFrame() и, в случае асинхронного создания команд, до вызова frameReady().

int QVulkanWindow::defaultRenderPass() const

Возвращает типичный render pass с одним под-пассом.

Примечание: Приложениям не требуется использовать этот render pass. Однако они затем несут ответственность за обеспечение того, что текущие изображения swap chain и глубины-шаблона переходят из VK_IMAGE_LAYOUT_UNDEFINED в VK_IMAGE_LAYOUT_PRESENT_SRC_KHR и VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL либо через пользовательский render pass приложения, либо другими средствами.

Примечание: Чтение/запись шаблона не включены в этом render pass.

Примечание: Вызов этой функции допустим только с момента вызова QVulkanWindowRenderer::initResources() до QVulkanWindowRenderer::releaseResources().

См. также currentFramebuffer().

int QVulkanWindow::depthStencilFormat() const

Возвращает формат, используемый буфером(ами) глубины-шаблона.

Примечание: Вызов этой функции допустим только с момента вызова QVulkanWindowRenderer::initResources() до QVulkanWindowRenderer::releaseResources().

VkImage QVulkanWindow::depthStencilImage() const

Возвращает изображение глубины-шаблона.

Примечание: Вызов этой функции допустим только с момента вызова QVulkanWindowRenderer::initSwapChainResources() до QVulkanWindowRenderer::releaseSwapChainResources().

VkImageView QVulkanWindow::depthStencilImageView() const

Возвращает представление изображения глубины-шаблона.

Примечание: Вызов этой функции допустим только с момента вызова QVulkanWindowRenderer::initSwapChainResources() до QVulkanWindowRenderer::releaseSwapChainResources().

int QVulkanWindow::device() const

Возвращает активное логическое устройство.

Примечание: Вызов этой функции допустим только с момента вызова QVulkanWindowRenderer::initResources() до QVulkanWindowRenderer::releaseResources().

uint32_t QVulkanWindow::deviceLocalMemoryIndex() const

Возвращает индекс типа локальной памяти устройства, подходящий для общего использования.

Примечание: Вызов этой функции допустим только с момента вызова QVulkanWindowRenderer::initResources() до QVulkanWindowRenderer::releaseResources().

QVulkanWindow::Flags QVulkanWindow::flags() const

Возвращает запрошенные флаги.

См. также setFlags().

[signal] void QVulkanWindow::frameGrabbed(const QImage &image)

Этот сигнал излучается, когда image готова.

void QVulkanWindow::frameReady()

Этот метод должен вызываться ровно один раз в ответ на каждый вызов реализации QVulkanWindowRenderer::startNextFrame(). В момент этого вызова главный буфер команд, доступный через currentCommandBuffer(), должен содержать все необходимые команды отрисовки, добавленные с момента этого вызова, так как эта функция вызовет отправку команд и добавление в очередь команды отображения.

Примечание: Этот метод должен вызываться только из потока графического интерфейса/главного потока, где вызываются функции QVulkanWindowRenderer и где находится экземпляр QVulkanWindow.

См. также QVulkanWindowRenderer::startNextFrame().

QImage QVulkanWindow::grab()

Создаёт и отрисовывает следующий кадр без отображения его, затем выполняет блокирующее считывание содержимого изображения.

Возвращает изображение, если реализация startNextFrame() рендерера вызывает frameReady() напрямую. В противном случае возвращает неполное изображение, которое имеет правильный размер, но не содержимое пока. Содержимое будет доставлено через сигнал frameGrabbed() в последнем случае.

Примечание: Этот метод не должен вызываться, когда кадр находится в процессе обработки (то есть, frameReady() ещё не был вызван приложением).

Примечание: Этот метод потенциально дорогостоящий из-за дополнительного блокирующего считывания.

Примечание: В настоящее время этот метод требует, чтобы swapchain поддерживал использование в качестве источника передачи (VK_IMAGE_USAGE_TRANSFER_SRC_BIT), и в противном случае потерпит неудачу.

int QVulkanWindow::graphicsCommandPool() const

Возвращает активный пул команд графики.

Примечание: Вызов этой функции допустим только с момента вызова QVulkanWindowRenderer::initResources() до QVulkanWindowRenderer::releaseResources().

int QVulkanWindow::graphicsQueue() const

Возвращает активную очередь графики.

Примечание: Вызов этой функции допустим только с момента вызова QVulkanWindowRenderer::initResources() до вызова QVulkanWindowRenderer::releaseResources().

uint32_t QVulkanWindow::hostVisibleMemoryIndex() const

Возвращает индекс типа памяти, доступной для хоста, подходящий для общего использования.

Возвращаемый тип памяти будет доступен как для хоста, так и для кэширования, если это возможно.

Примечание: Вызов этой функции допустим только с момента вызова QVulkanWindowRenderer::initResources() до вызова QVulkanWindowRenderer::releaseResources().

bool QVulkanWindow::isValid() const

Возвращает true, если для этого окна успешно инициализированы все ресурсы Vulkan, включая swapchain.

Примечание: Инициализация происходит при первом событии expose после того, как окно становится видимым.

VkImage QVulkanWindow::msaaColorImage(int idx) const

Возвращает указанное изображение цвета с мультисэмплированием или VK_NULL_HANDLE если мультисэмплирование не используется.

idx должен находиться в диапазоне [0, swapChainImageCount() - 1].

Примечание: Вызов этой функции допустим только с момента вызова QVulkanWindowRenderer::initSwapChainResources() до вызова QVulkanWindowRenderer::releaseSwapChainResources().

VkImageView QVulkanWindow::msaaColorImageView(int idx) const

Возвращает указанный вид изображения цвета с мультисэмплированием или VK_NULL_HANDLE если мультисэмплирование не используется.

idx должен находиться в диапазоне [0, swapChainImageCount() - 1].

Примечание: Вызов этой функции допустим только с момента вызова QVulkanWindowRenderer::initSwapChainResources() до вызова QVulkanWindowRenderer::releaseSwapChainResources().

int QVulkanWindow::physicalDevice() const

Возвращает активное физическое устройство.

Примечание: Вызов этой функции допустим только с момента вызова QVulkanWindowRenderer::preInitResources() до вызова QVulkanWindowRenderer::releaseResources().

const int *QVulkanWindow::physicalDeviceProperties() const

Возвращает указатель на свойства активного физического устройства.

Примечание: Вызов этой функции допустим только с момента вызова QVulkanWindowRenderer::preInitResources() до вызова QVulkanWindowRenderer::releaseResources().

int QVulkanWindow::sampleCountFlagBits() const

Возвращает текущее значение количества сэмплов как VkSampleCountFlagBits значение.

При использовании целевого рендерингового таргета, поле rasterizationSamples в VkPipelineMultisampleStateCreateInfo должно быть установлено на это значение.

См. также setSampleCount() и supportedSampleCounts().

void QVulkanWindow::setDeviceExtensions(const QByteArrayList &extensions)

Устанавливает список расширений устройства, которые необходимо включить.

Неподдерживаемые расширения игнорируются.

Расширение swapchain всегда будет добавляться автоматически, нет необходимости включать его в этот список.

Примечание: Эта функция должна быть вызвана до того, как окно станет видимым, или, как минимум, в QVulkanWindowRenderer::preInitResources(), и не имеет эффекта, если вызвана позже.

void QVulkanWindow::setFlags(QVulkanWindow::Flags flags)

Настраивает поведение на основе предоставленных флагов.

Примечание: Эта функция должна быть вызвана до того, как окно станет видимым, или, как минимум, в QVulkanWindowRenderer::preInitResources(), и не имеет эффекта, если вызвана позже.

См. также flags().

void QVulkanWindow::setPhysicalDeviceIndex(int idx)

Запрашивает использование физического устройства с индексом idx. Индекс соответствует списку, возвращаемому из availablePhysicalDevices().

По умолчанию используется первое физическое устройство.

Примечание: Эта функция должна быть вызвана до того, как окно станет видимым, или, как минимум, в QVulkanWindowRenderer::preInitResources(), и не имеет эффекта, если вызвана позже.

void QVulkanWindow::setPreferredColorFormats(const int &formats)

Устанавливает предпочтительные форматы swapchain.

По умолчанию никакой предпочтительный формат приложения не установлен. В этом случае будет использован предпочтительный формат поверхности или, если его нет, VK_FORMAT_B8G8R8A8_UNORM.

Список в formats упорядочен. Если первый формат не поддерживается, будет рассмотрен второй и так далее. Если ни один формат в списке не поддерживается, поведение аналогично поведению по умолчанию.

Для запроса фактического формата после инициализации вызовите colorFormat().

Примечание: Эта функция должна быть вызвана до того, как окно станет видимым, или, как минимум, в QVulkanWindowRenderer::preInitResources(), и не имеет эффекта, если вызвана позже.

Примечание: Переопределение QVulkanWindowRenderer::preInitResources() позволяет динамически анализировать список поддерживаемых форматов, если это необходимо. Там поверхность доступна через QVulkanInstace::surfaceForWindow(), и эта функция по-прежнему может безопасно вызываться для воздействия на последующие стадии инициализации.

См. также colorFormat().

void QVulkanWindow::setSampleCount(int sampleCount)

Запрашивает мультисэмплинговое сглаживание с заданным sampleCount. Допустимые значения: 1, 2, 4, 8 и так далее до максимального значения, поддерживаемого физическим устройством.

Если значение sampleCount больше 1, QVulkanWindow создаст буфер цвета с мультисэмплированием вместо простого использования изображений swapchain. Рендеринг в буфере с мультисэмплированием будет разрешен в буферы без мультисэмплирования в конце каждого кадра.

Для проверки списка поддерживаемых значений количества сэмплов, вызовите supportedSampleCounts().

При настройке рендерингового пайплайна, вызовите sampleCountFlagBits() для запроса активного значения количества сэмплов как VkSampleCountFlagBits.

Примечание: Эта функция должна быть вызвана до того, как окно станет видимым, или, как минимум, в QVulkanWindowRenderer::preInitResources(), и не имеет эффекта, если вызвана позже.

См. также supportedSampleCounts() и sampleCountFlagBits().

QVulkanInfoVector<QVulkanExtension> QVulkanWindow::supportedDeviceExtensions()

Возвращает список расширений, поддерживаемых логическими устройствами, созданными из физического устройства, выбранного с помощью setPhysicalDeviceIndex().

Примечание: Эта функция может быть вызвана до того, как окно станет видимым.

QVector<int> QVulkanWindow::supportedSampleCounts()

Возвращает набор поддерживаемых значений количества сэмплов при использовании физического устройства, выбранного с помощью setPhysicalDeviceIndex(), в виде отсортированного вектора.

По умолчанию QVulkanWindow использует значение количества сэмплов 1. Вызовом setSampleCount() с другим значением (2, 4, 8, ...) из набора, возвращаемого этой функцией, можно запросить мультисэмплинговое сглаживание.

Примечание: Эта функция может быть вызвана до того, как окно станет видимым.

См. также setSampleCount().

bool QVulkanWindow::supportsGrab() const

Возвращает true, если swapchain поддерживает использование в качестве источника передачи, то есть grab() функционален.

Примечание: Вызов этой функции допустим только с момента вызова QVulkanWindowRenderer::initSwapChainResources() до вызова QVulkanWindowRenderer::releaseSwapChainResources().

VkImage QVulkanWindow::swapChainImage(int idx) const

Возвращает указанное изображение swap chain.

idx должен находиться в диапазоне [0, swapChainImageCount() - 1].

Примечание: Вызов этой функции допустим только с момента вызова QVulkanWindowRenderer::initSwapChainResources() до вызова QVulkanWindowRenderer::releaseSwapChainResources().

int QVulkanWindow::swapChainImageCount() const

Возвращает количество изображений в swap chain.

Примечание: Обращение к этому необходимо при предоставлении пользовательского render pass и framebuffer. Фреймбуфер специфичен для текущего изображения swapchain, и поэтому приложение должно предоставить несколько фреймбуферов.

Примечание: Вызов этой функции допустим только с момента вызова QVulkanWindowRenderer::initSwapChainResources() до QVulkanWindowRenderer::releaseSwapChainResources().

QSize QVulkanWindow::swapChainImageSize() const

Возвращает размер изображения swapchain.

Обычно соответствует размеру окна, но может отличаться в случае, если vkGetPhysicalDeviceSurfaceCapabilitiesKHR сообщает о фиксированном размере.

Примечание: Вызов этой функции допустим только с момента вызова QVulkanWindowRenderer::initSwapChainResources() до QVulkanWindowRenderer::releaseSwapChainResources().

VkImageView QVulkanWindow::swapChainImageView(int idx) const

Возвращает указанное изображение swap chain view.

idx должно быть в диапазоне [0, swapChainImageCount() - 1].

Примечание: Вызов этой функции допустим только с момента вызова QVulkanWindowRenderer::initSwapChainResources() до QVulkanWindowRenderer::releaseSwapChainResources().

Документация переменных-членов

const int QVulkanWindow::MAX_CONCURRENT_FRAME_COUNT

Эта переменная содержит константное значение, которое всегда равно или больше максимального значения concurrentFrameCount().

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.11/qvulkanwindow.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API