Spec-Zone.ru › Qt 5.14

Класс QVulkanWindow

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

Заголовок: #include <QVulkanWindow>
qmake: QT += gui
С версии: Qt 5.10
Наследует: QWindow

Этот класс был представлен в Qt 5.10.

  • Список всех членов, включая унаследованные

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

enum Flag { PersistentResources }
flags Flags

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

QVulkanWindow(QWindow *parent = nullptr)
virtual ~QVulkanWindow()
int availablePhysicalDevices()
QMatrix4x4 clipCorrectionMatrix()
int colorFormat() const
int concurrentFrameCount() const
virtual 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 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

Статические открытые члены

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

Многократная выборка

Хотя по умолчанию отключён, многократная выборка (antialiasing) полностью поддерживается 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 не предоставляет слои устройства, так как эта функциональность устарела с версии 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. Рендереры должны учитывать это, например, при предоставлении значений очистки.

Примечание: Приложениям не требуется использовать этот framebuffer, если они предоставляют свой собственный 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 и depth-stencil изображения переходят от 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().

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

QVulkanWindow::Flags QVulkanWindow::flags() const

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

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

void QVulkanWindow::frameReady()

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

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

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

QImage QVulkanWindow::grab()

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

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

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

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

Примечание: В настоящее время эта функция требует, чтобы swap chain поддерживал использование в качестве источника передачи (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, включая swap chain.

Примечание: Инициализация происходит в первом событии 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)

Устанавливает список расширений устройства 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::setSampleCount(int sampleCount)

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

Если значение сэмплов больше 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.

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

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

QSize QVulkanWindow::swapChainImageSize() const

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

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

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

VkImageView QVulkanWindow::swapChainImageView(int idx) const

Возвращает указанное представление изображения swap chain.

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

Spec-Zone.ru

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