Класс QVulkanWindow
Класс QVulkanWindow — это удобный подкласс QWindow для выполнения рендеринга Vulkan. Подробнее...
| Заголовок: | #include <QVulkanWindow> |
| qmake: | QT += gui |
| С момента: | Qt 5.10 |
| Наследует: | QWindow |
Открытые типы
| Перечисление | Флаг { PersistentResources } |
| Флаги | Флаги |
Открытые функции
- 82 открытых функции унаследованные от QWindow
- 31 открытых функции унаследованные от QObject
- 6 открытых функции унаследованные от QSurface
Сигналы
| void | frameGrabbed(const QImage &image) |
Статические публичные члены
| 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