Spec-Zone.ru › Qt 6.0

Класс QVulkanWindow

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

Заголовок: #include <QVulkanWindow>
CMake: find_package(Qt6 COMPONENTS Gui REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmake: QT += gui
С момента: Qt 5.10
Наследуется от: QWindow
  • Список всех членов, включая унаследованные

Типы

Перечисление Флаг { PersistentResources }
Флаги Флаги
МодификаторQueueCreateInfo

Открытые функции

QVulkanWindow(QWindow *parent = nullptr)
Виртуальный ~QVulkanWindow()
QList<VkPhysicalDeviceProperties> доступныеФизическиеУстройства()
QMatrix4x4 матрицаКоррекцииОбрезки()
VkFormat форматЦвета() const
int количествоКонкурентныхКадров() const
Виртуальный QVulkanWindowRenderer * создатьРендерер()
VkCommandBuffer текущийБуферКоманд() const
int текущийКадр() const
VkFramebuffer текущийФреймБуфер() const
int текущийИндексИзображенияЦепочкиОбмена() const
VkRenderPass стандартныйРендерПасс() const
VkFormat форматГлубиныИШтампа() const
VkImage изображениеГлубиныИШтампа() const
VkImageView представлениеИзображенияГлубиныИШтампа() const
VkDevice устройство() const
uint32_t индексЛокальнойПамятиУстройства() const
QVulkanWindow::Флаги флаги() const
void кадрГотов()
QImage снятьСкриншот()
VkCommandPool пулКомандГрафики() const
VkQueue очередьГрафики() const
uint32_t индексСемействаОчередейГрафики() const
uint32_t индексВидимойВХостеПамяти() const
bool действительно() const
VkImage изображениеМСААЦвета(int idx) const
VkImageView представлениеИзображенияМСААЦвета(int idx) const
VkPhysicalDevice физическоеУстройство() const
const VkPhysicalDeviceProperties * свойстваФизическогоУстройства() const
VkSampleCountFlagBits флагиСэмплов() const
void установитьРасширенияУстройства(const QByteArrayList &extensions)
void установитьФлаги(QVulkanWindow::Флаги flags)
void установитьИндексФизическогоУстройства(int idx)
void установитьПредпочтительныеФорматыЦвета(const QList<VkFormat> &formats)
void установитьМодификаторQueueCreateInfo(const QVulkanWindow::МодификаторQueueCreateInfo &modifier)
void установитьКоличествоСэмплов(int sampleCount)
QVulkanInfoVector<QVulkanExtension> поддерживаемыеРасширенияУстройства()
QList<int> поддерживаемыеКоличествоСэмплов()
bool поддерживаетСнимок() const
VkImage изображениеЦепочкиОбмена(int idx) const
int количествоИзображенийЦепочкиОбмена() const
QSize размерИзображенияЦепочкиОбмена() const
VkImageView представлениеИзображенияЦепочкиОбмена(int idx) const

Сигналы

void frameGrabbed(const QImage &image)

Статические публичные члены

const int MAX_CONCURRENT_FRAME_COUNT

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

QVulkanWindow — это совместимый с Vulkan QWindow, управляющий устройством Vulkan, графическим очереди, пулом команд и буфером, изображением глубины-шаблона и двойным буферизованной FIFO цепочкой обмена, обеспечивая корректное поведение при событиях, таких как изменение размера, особых ситуациях, например, отсутствии очереди устройства, поддерживающей как графику, так и представление, сценариях потери устройства и дополнительной функциональности, такой как чтение рендерного содержимого. По концепции это аналог 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(commandBuffer, renderPassBegin, contents);
        // ...
        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 она направлена вверх. Во-вторых, стандартная матрица проекции OpenGL предполагает значения плоскостей ближнего и дальнего плана от -1 до 1, в то время как Vulkan предпочитает 0 и 1.

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

Мультисэмплирование

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

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

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

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

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

Поддержка sRGB

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

Слои проверки

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

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

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

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

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

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

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

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

Тип Flags является псевдонимом для QFlags<Flag>. Он хранит объединение по оператору OR значений Flag.

QVulkanWindow::QueueCreateInfoModifier

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

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

Примечание: При запросе дополнительных графических очередей Qt всегда запрашивает графическую очередь. Вам нужно будет найти соответствующую запись в queueCreateInfo и изменить её, чтобы получить дополнительную очередь.

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

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

QVulkanWindow::QVulkanWindow(QWindow *parent = nullptr)

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

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

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

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

[virtual] QVulkanWindow::~QVulkanWindow()

Деструктор.

QList<VkPhysicalDeviceProperties> QVulkanWindow::availablePhysicalDevices()

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

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

QMatrix4x4 QVulkanWindow::clipCorrectionMatrix()

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

Умножая матрицу проекции на эту матрицу, приложения могут продолжать считать, что ось Y направлена вверх, и могут установить minDepth и maxDepth в представлении равными 0 и 1 соответственно, не выполняя никаких дополнительных исправлений позиций Z вершин. Геометрия из приложений OpenGL может быть использована как есть, предполагая состояние растризации, соответствующее настройкам обрезки и передней грани OpenGL.

VkFormat QVulkanWindow::colorFormat() const

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

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

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

int QVulkanWindow::concurrentFrameCount() const

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

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

    class Renderer {
        void startNextFrame();
        // ...

        VkDescriptorBufferInfo m_uniformBufInfo[QVulkanWindow::MAX_CONCURRENT_FRAME_COUNT];
        QVulkanWindow *m_window = nullptr;
    };

    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, поэтому никакого рендеринга, кроме очистки буферов, не выполняется.

Окно принимает во владение возвращённый объект рендерера.

VkCommandBuffer QVulkanWindow::currentCommandBuffer() const

Возвращает активный буфер команд для текущего изображения цепочки обмена. Ожидается, что реализации 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 {
        void startNextFrame();
        // ...

        VkDescriptorBufferInfo m_uniformBufInfo[QVulkanWindow::MAX_CONCURRENT_FRAME_COUNT];
        QVulkanWindow *m_window = nullptr;
    };

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

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

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

VkFramebuffer QVulkanWindow::currentFramebuffer() const

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

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

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

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

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

int QVulkanWindow::currentSwapChainImageIndex() const

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

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

VkRenderPass QVulkanWindow::defaultRenderPass() const

Возвращает типичный проход рендеринга с одним подпроходом.

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

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

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

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

VkFormat QVulkanWindow::depthStencilFormat() const

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

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

VkImage QVulkanWindow::depthStencilImage() const

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

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

VkImageView QVulkanWindow::depthStencilImageView() const

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

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

VkDevice QVulkanWindow::device() const

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

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

uint32_t QVulkanWindow::deviceLocalMemoryIndex() const

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

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

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

QVulkanWindow::Flags QVulkanWindow::flags() const

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

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

void QVulkanWindow::frameReady()

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

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

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

QImage QVulkanWindow::grab()

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

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

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

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

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

VkCommandPool QVulkanWindow::graphicsCommandPool() const

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

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

VkQueue QVulkanWindow::graphicsQueue() const

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

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

[since 5.15] uint32_t QVulkanWindow::graphicsQueueFamilyIndex() const

Возвращает индекс семейства активной очереди обработки графики.

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

Функция была добавлена в Qt 5.15.

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().

VkPhysicalDevice QVulkanWindow::physicalDevice() const

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

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

const VkPhysicalDeviceProperties *QVulkanWindow::physicalDeviceProperties() const

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

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

VkSampleCountFlagBits QVulkanWindow::sampleCountFlagBits() const

Возвращает текущее значение количества выборок в виде VkSampleCountFlagBits.

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

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

void QVulkanWindow::setDeviceExtensions(const QByteArrayList &extensions)

Устанавливает список расширений устройства extensions для включения.

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

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

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

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

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

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

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

void QVulkanWindow::setPhysicalDeviceIndex(int idx)

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

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

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

void QVulkanWindow::setPreferredColorFormats(const QList<VkFormat> &formats)

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

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

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

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

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

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

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

[since 5.15] void QVulkanWindow::setQueueCreateInfoModifier(const QVulkanWindow::QueueCreateInfoModifier &modifier)

Устанавливает функцию модификации информации о создании очереди modifier.

Функция была добавлена в Qt 5.15.

См. также QueueCreateInfoModifier.

void QVulkanWindow::setSampleCount(int sampleCount)

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

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

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

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

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

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

QVulkanInfoVector<QVulkanExtension> QVulkanWindow::supportedDeviceExtensions()

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

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

QList<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

Возвращает указанную картинку из цепочки обмена.

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

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

int QVulkanWindow::swapChainImageCount() const

Возвращает количество картинок в цепочке обмена.

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

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

QSize QVulkanWindow::swapChainImageSize() const

Возвращает размер картинки цепочки обмена.

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

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

VkImageView QVulkanWindow::swapChainImageView(int idx) const

Возвращает указанный вид картинки цепочки обмена.

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/qt-6.0/qvulkanwindow.html

Spec-Zone.ru

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