Spec-Zone.ru › Qt 5.12

Класс QVulkanWindow

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

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

Открытые типы

Перечисление Флаг { PersistentResources }
Флаги Флаги

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

QVulkanWindow(QWindow *parent = nullptr)
виртуальный ~QVulkanWindow()
int доступныеФизическиеУстройства()
QMatrix4x4 матрицаКоррекцииОбрезки()
int форматЦвета() const
int количествоКонкурентныхКадров() const
виртуальный QVulkanWindowRenderer * создатьРендерер()
int текущийБуферКоманд() const
int текущийКадр() const
int текущийФреймбуфер() const
int текущийИндексИзображенияЦепочкиОбмена() const
int подразумеваемыйРендерпас() const
int форматГлубиныИШаблона() const
VkImage изображениеГлубиныИШаблона() const
VkImageView представлениеИзображенияГлубиныИШаблона() const
int устройство() const
uint32_t индексЛокальнойПамятиУстройства() const
QVulkanWindow::Флаги флаги() const
void кадрГотов()
QImage получитьСнимок()
int пулКомандГрафики() const
int очередьГрафики() const
uint32_t индексВидимойПамятиХоста() const
bool действителен() const
VkImage изображениеМСААЦвета(int idx) const
VkImageView представлениеИзображенияМСААЦвета(int idx) const
int физическоеУстройство() const
const int * свойстваФизическогоУстройства() const
int битыФлаговСэмплов() const
void установитьРасширенияУстройства(const QByteArrayList &extensions)
void установитьФлаги(QVulkanWindow::Флаги flags)
void установитьИндексФизическогоУстройства(int idx)
void установитьПредпочитаемыеФорматыЦвета(const int &formats)
void установитьКоличествоСэмплов(int sampleCount)
QVulkanInfoVector<QVulkanExtension> поддерживаемыеРасширенияУстройства()
QVector<int> поддерживаемыеСэмпловыеСчеты()
bool поддерживаетПолучениеСнимка() const
VkImage изображениеЦепочкиОбмена(int idx) const
int количествоИзображенийЦепочкиОбмена() const
QSize размерИзображенияЦепочкиОбмена() const
VkImageView представлениеИзображенияЦепочкиОбмена(int idx) const
  • 82 открытых функции унаследованные от QWindow
  • 31 открытых функции унаследованные от QObject
  • 6 открытых функции унаследованные от QSurface

Сигналы

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

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

const int MAX_CONCURRENT_FRAME_COUNT
const QMetaObject staticMetaObject
  • 1 статический публичный член унаследован от QWindow
  • 9 статических публичных членов унаследовано от QObject

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

  • 16 свойств унаследовано от QWindow
  • 1 свойство унаследовано от QObject
  • 24 публичных слота унаследовано от QWindow
  • 1 публичный слот унаследован от QObject
  • 18 защищённых функций унаследовано от QWindow
  • 9 защищённых функций унаследовано от QObject

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

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

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(...);
          ...
          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. Дополнительные буферы цвета и разрешение в не-многократные буферы цепочки обмена обрабатываются автоматически.

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

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

Считывание изображений

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

Поддержка sRGB

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

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

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

Примечание: Следует учитывать платформенные различия. На настольных платформах обычно достаточно установки Vulkan SDK. Однако, например, Android требует развертывания дополнительных общих библиотек вместе с приложением и также диктует другой список имён слоев проверки. Более подробную информацию см. на страницах разработки Vulkan для Android по адресу https://developer.android.com/ndk/guides/graphics/validation-layer.html.

Примечание: 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 направлен вверх, и могут установить minDepth и maxDepth вьюпорта соответственно в 0 и 1 без дополнительных корректировок позиций Z вершин. Геометрия из приложений OpenGL может использоваться без изменений, предполагая состояние растрирования, соответствующее настройкам обрезки и видимой грани OpenGL.

int QVulkanWindow::colorFormat() const

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

Примечание: Вызов этой функции допустим только с момента вызова 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

Возвращает активный командный буфер для текущего изображения очереди обмена. Реализации 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 вместо использования 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

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

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

QVulkanWindow::Flags QVulkanWindow::flags() const

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

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

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

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

void QVulkanWindow::frameReady()

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

Примечание: Эта функция должна вызываться только из потока GUI/основного потока, где вызываются функции 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/qt-5.12/qvulkanwindow.html

Spec-Zone.ru

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