Spec-Zone.ru › Qt 5.15

Класс QVulkanWindow

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

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

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

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

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

enum Flag { PersistentResources }
flags Flags
typedef QueueCreateInfoModifier

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

QVulkanWindow(QWindow *parent = nullptr)
virtual ~QVulkanWindow()
QVector<VkPhysicalDeviceProperties> availablePhysicalDevices()
QMatrix4x4 clipCorrectionMatrix()
VkFormat colorFormat() const
int concurrentFrameCount() const
virtual QVulkanWindowRenderer * createRenderer()
VkCommandBuffer currentCommandBuffer() const
int currentFrame() const
VkFramebuffer currentFramebuffer() const
int currentSwapChainImageIndex() const
VkRenderPass defaultRenderPass() const
VkFormat depthStencilFormat() const
VkImage depthStencilImage() const
VkImageView depthStencilImageView() const
VkDevice device() const
uint32_t deviceLocalMemoryIndex() const
QVulkanWindow::Flags flags() const
void frameReady()
QImage grab()
VkCommandPool graphicsCommandPool() const
VkQueue graphicsQueue() const
uint32_t graphicsQueueFamilyIndex() const
uint32_t hostVisibleMemoryIndex() const
bool isValid() const
VkImage msaaColorImage(int idx) const
VkImageView msaaColorImageView(int idx) const
VkPhysicalDevice physicalDevice() const
const VkPhysicalDeviceProperties * physicalDeviceProperties() const
VkSampleCountFlagBits sampleCountFlagBits() const
void setDeviceExtensions(const QByteArrayList &extensions)
void setFlags(QVulkanWindow::Flags flags)
void setPhysicalDeviceIndex(int idx)
void setPreferredColorFormats(const QVector<VkFormat> &formats)
void setQueueCreateInfoModifier(const QVulkanWindow::QueueCreateInfoModifier &modifier)
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().

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

Несмотря на то, что отключено по умолчанию, сэмплирование с антиалиасингом полностью поддерживается 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::QueueCreateInfoModifier

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

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

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

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

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

QVulkanWindow::QVulkanWindow(QWindow *parent = nullptr)

Конструирует новый QVulkanWindow с заданным parent.

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

[virtual] QVulkanWindow::~QVulkanWindow()

Деструктор.

QVector<VkPhysicalDeviceProperties> QVulkanWindow::availablePhysicalDevices()

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

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

QMatrix4x4 QVulkanWindow::clipCorrectionMatrix()

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

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

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

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

VkCommandBuffer QVulkanWindow::currentCommandBuffer() const

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

VkFramebuffer QVulkanWindow::currentFramebuffer() const

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

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

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

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

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

int QVulkanWindow::currentSwapChainImageIndex() const

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

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

VkRenderPass QVulkanWindow::defaultRenderPass() const

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

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

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

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

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

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

QImage QVulkanWindow::grab()

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

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

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

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

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

VkCommandPool QVulkanWindow::graphicsCommandPool() const

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

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

VkQueue QVulkanWindow::graphicsQueue() const

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

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

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, включая цепочку обмена.

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

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

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

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

Чтобы запросить фактический формат после инициализации, вызовите colorFormat().

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

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

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

void QVulkanWindow::setQueueCreateInfoModifier(const QVulkanWindow::QueueCreateInfoModifier &modifier)

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

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

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

void QVulkanWindow::setSampleCount(int sampleCount)

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

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

Чтобы изучить список поддерживаемых количеств выборок, вызовите 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, если цепочка обмена поддерживает использование в качестве источника передачи, что означает, что 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

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

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

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

VkImageView QVulkanWindow::swapChainImageView(int idx) const

Возвращает указанный вид изображения swapchain.

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

Spec-Zone.ru

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