Класс QVulkanWindow
Класс QVulkanWindow — это удобное подклассирование класса QWindow для выполнения рендеринга Vulkan. Подробнее...
| Заголовок: | #include <QVulkanWindow> |
| qmake: | QT += gui |
| С момента: | Qt 5.10 |
| Наследует: | QWindow |
Типы public
| перечисление | Flag { PersistentResources } |
| флаги | Flags |
Функции public
| QVulkanWindow(QWindow *parent = nullptr) | |
| виртуальный | ~QVulkanWindow() |
| int | availablePhysicalDevices() |
| QMatrix4x4 | clipCorrectionMatrix() |
| int | colorFormat() const |
| int | concurrentFrameCount() const |
| виртуальный 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 | setPreferredColorFormats(const int &formats) |
| 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 |
- 82 функции public, унаследованные от QWindow
- 34 функции public, унаследованные от QObject
- 6 функций public, унаследованные от QSurface
Сигналы
| void | frameGrabbed(const QImage &image) |
Статические члены public
| const int | MAX_CONCURRENT_FRAME_COUNT |
- 1 статический член public, унаследованный от QWindow
- 10 статических членов public, унаследованных от QObject
Дополнительные унаследованные члены
- 16 свойств, унаследованных от QWindow
- 1 свойства, унаследованного от QObject
- 24 public слотов, унаследованных от QWindow
- 1 public слот, унаследованный от QObject
- 1 public переменной, унаследованной от QObject
- 18 защищенных функций, унаследованных от QWindow
- 9 защищенных функций, унаследованных от QObject
- 2 защищенных переменных, унаследованных от QObject
Подробное описание
Класс QVulkanWindow — это удобное подклассирование класса QWindow для выполнения рендеринга Vulkan.
QVulkanWindow — это поддерживающая Vulkan QWindow, которая управляет устройством Vulkan, графическим очереди, пулом команд и буфером, изображением глубины/шаблона и двойным буферизованным FIFO swapchain, обеспечивая корректное поведение при событиях, таких как изменение размера, особых ситуациях, таких как отсутствие очереди устройства, поддерживающей как графику, так и вывод на экран, сценариях потери устройства и дополнительной функциональности, такой как считывание рендерного содержимого. По сути, это аналог 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. Дополнительные цветовые буферы и разрешение в не-многовыборочные буферы swapchain полностью управляются автоматически.
Для запроса поддерживаемых значений выборок вызовите supportedSampleCounts(). Когда возвращаемый набор содержит 4, 8 и т. д., передача одного из этих значений в setSampleCount() запрашивает многовыборочное рендерирование.
Примечание: в отличие от QSurfaceFormat::setSamples(), список поддерживаемых значений выборок предоставляется приложениям заранее, и в setSampleCount() нет автоматического возврата к меньшим значениям выборок. Если запрошенное значение не поддерживается, отображается предупреждение, и многовыборочное сглаживание не используется.
Чтение изображений обратно
Когда supportsGrab() возвращает true, QVulkanWindow может выполнять чтение из цветового буфера в QImage. grab() — медленная и неэффективная операция, поэтому следует избегать частого использования. Тем не менее, она полезна, поскольку позволяет приложениям делать снимки экрана или инструментам и тестам обрабатывать и проверять вывод рендеринга графического процессора.
Поддержка sRGB
Хотя многие приложения могут работать с поведением по умолчанию QVulkanWindow в отношении форматов изображений swapchain, 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 в стиле OpenGL (то есть Y направлен вверх) и могут установить minDepth и maxDepth соответственно в 0 и 1, не внося дополнительных корректировок в значения Z вершин, при этом используя матрицы проекции, полученные из функций QMatrix4x4, таких как QMatrix4x4::perspective(), в неизменном виде.
Примечание: При использовании данных вершин в соответствии с правилами OpenGL по умолчанию (то есть, передняя грань имеет порядок против часовой стрелки), правильный порядок обхода при растрировании после применения этой матрицы — по часовой стрелке (VK_FRONT_FACE_CLOCKWISE).
int QVulkanWindow::colorFormat() const
Возвращает формат буфера цвета, используемый swapchain.
Примечание: Вызов этой функции допустим только с момента вызова 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
Возвращает активный буфер команд для текущей картинки swap chain. Ожидается, что реализации 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 вместо использования того, который возвращается из 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
Возвращает индекс типа локальной памяти устройства, подходящий для общего использования.
Примечание: Вызов этой функции допустим только с момента вызова QVulkanWindowRenderer::initResources() до QVulkanWindowRenderer::releaseResources().
QVulkanWindow::Flags QVulkanWindow::flags() const
Возвращает запрошенные флаги.
См. также setFlags().
[signal] void QVulkanWindow::frameGrabbed(const QImage &image)
Этот сигнал излучается, когда image готова.
void QVulkanWindow::frameReady()
Этот метод должен вызываться ровно один раз в ответ на каждый вызов реализации QVulkanWindowRenderer::startNextFrame(). В момент этого вызова главный буфер команд, доступный через currentCommandBuffer(), должен содержать все необходимые команды отрисовки, добавленные с момента этого вызова, так как эта функция вызовет отправку команд и добавление в очередь команды отображения.
Примечание: Этот метод должен вызываться только из потока графического интерфейса/главного потока, где вызываются функции 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/archives/qt-5.11/qvulkanwindow.html