Класс QOpenGLFramebufferObject
Класс QOpenGLFramebufferObject инкапсулирует объект буфера фреймов OpenGL. Подробнее...
| Заголовок: | #include <QOpenGLFramebufferObject> |
| qmake: | QT += gui |
| С момента: | Qt 5.0 |
Типы
| перечисление | Attachment { NoAttachment, CombinedDepthStencil, Depth } |
| перечисление | FramebufferRestorePolicy { DontRestoreFramebufferBinding, RestoreFramebufferBindingToDefault, RestoreFrameBufferBinding } |
Открытые функции
| QOpenGLFramebufferObject(const QSize &size, GLenum target = GL_TEXTURE_2D) | |
| QOpenGLFramebufferObject(int width, int height, GLenum target = GL_TEXTURE_2D) | |
| QOpenGLFramebufferObject(const QSize &size, Attachment attachment, GLenum target = GL_TEXTURE_2D, GLenum internalFormat = 0) | |
| QOpenGLFramebufferObject(int width, int height, Attachment attachment, GLenum target = GL_TEXTURE_2D, GLenum internalFormat = 0) | |
| QOpenGLFramebufferObject(const QSize &size, const QOpenGLFramebufferObjectFormat &format) | |
| QOpenGLFramebufferObject(int width, int height, const QOpenGLFramebufferObjectFormat &format) | |
| virtual | ~QOpenGLFramebufferObject() |
| void | addColorAttachment(const QSize &size, GLenum internalFormat = 0) |
| void | addColorAttachment(int width, int height, GLenum internalFormat = 0) |
| Attachment | attachment() const |
| bool | bind() |
| QOpenGLFramebufferObjectFormat | format() const |
| GLuint | handle() const |
| int | height() const |
| bool | isBound() const |
| bool | isValid() const |
| bool | release() |
| void | setAttachment(Attachment attachment) |
| QSize | size() const |
| QVector<QSize> | sizes() const |
| GLuint | takeTexture() |
| GLuint | takeTexture(int colorAttachmentIndex) |
| GLuint | texture() const |
| QVector<GLuint> | textures() const |
| QImage | toImage(bool flipped) const |
| QImage | toImage() const |
| QImage | toImage(bool flipped, int colorAttachmentIndex) const |
| int | width() const |
Статические публичные члены
| bool | bindDefault() |
| void | blitFramebuffer(QOpenGLFramebufferObject *target, const QRect &targetRect, QOpenGLFramebufferObject *source, const QRect &sourceRect, GLbitfield buffers, GLenum filter, int readColorAttachmentIndex, int drawColorAttachmentIndex, FramebufferRestorePolicy restorePolicy) |
| void | blitFramebuffer(QOpenGLFramebufferObject *target, const QRect &targetRect, QOpenGLFramebufferObject *source, const QRect &sourceRect, GLbitfield buffers, GLenum filter, int readColorAttachmentIndex, int drawColorAttachmentIndex) |
| void | blitFramebuffer(QOpenGLFramebufferObject *target, const QRect &targetRect, QOpenGLFramebufferObject *source, const QRect &sourceRect, GLbitfield buffers = GL_COLOR_BUFFER_BIT, GLenum filter = GL_NEAREST) |
| void | blitFramebuffer(QOpenGLFramebufferObject *target, QOpenGLFramebufferObject *source, GLbitfield buffers = GL_COLOR_BUFFER_BIT, GLenum filter = GL_NEAREST) |
| bool | hasOpenGLFramebufferBlit() |
| bool | hasOpenGLFramebufferObjects() |
Подробное описание
Класс QOpenGLFramebufferObject инкапсулирует объект OpenGL framebuffer.
Класс QOpenGLFramebufferObject инкапсулирует объект OpenGL framebuffer, определяемый расширением GL_EXT_framebuffer_object. Он предоставляет поверхность для отрисовки с помощью QPainter с помощью QOpenGLPaintDevice или отрисовки с помощью собственных вызовов OpenGL. Эта поверхность может быть связана и использована как обычная текстура в собственном коде отрисовки OpenGL. По умолчанию, класс QOpenGLFramebufferObject генерирует 2D текстуру OpenGL (используя целевое значение GL_TEXTURE_2D), которая используется в качестве внутренней цели отрисовки.
Важно иметь текущий контекст OpenGL при создании QOpenGLFramebufferObject, в противном случае инициализация завершится неудачей.
Создайте экземпляр QOpenGLFrameBufferObject с прикрепленным CombinedDepthStencil, если вы хотите, чтобы QPainter корректно отображал данные. Обратите внимание, что для антиалиасинга примитивов при рисовании с помощью QPainter необходимо создать QOpenGLFramebufferObject с несколькими образцами на пиксель. Для создания многообразного объекта framebuffer вы должны использовать один из конструкторов, принимающих параметр QOpenGLFramebufferObjectFormat, и установить свойство QOpenGLFramebufferObjectFormat::samples() на ненулевое значение.
Для объектов буфера фреймбуфера с несколькими образцами создаётся буфер рендеринга цвета, в противном случае создаётся текстура с указанным целевым параметром текстуры. Буфер рендеринга цвета или текстура будут иметь указанный внутренний формат и будут привязаны к прикреплению GL_COLOR_ATTACHMENT0 в объекте буфера фреймбуфера.
Также поддерживается несколько целей рендеринга, если реализация OpenGL это поддерживает. Здесь будет несколько текстур (или, в случае многократной выборки, буферов рендеринга), и каждая из них будет прикреплена к GL_COLOR_ATTACHMENT0, 1, 2, ...
Если вы хотите использовать объект буфера фреймбуфера с включённой многократной выборкой в качестве текстуры, вам сначала нужно скопировать данные из него в обычный объект буфера фреймбуфера, используя QOpenGLContext::blitFramebuffer().
Можно отрисовывать в QOpenGLFramebufferObject с помощью QPainter и QOpenGLPaintDevice в отдельном потоке.
Документация по типам членов
перечисление QOpenGLFramebufferObject::Attachment
Этот тип перечисления используется для настройки буферов глубины и трафарета, прикреплённых к объекту буфера фреймбуфера при его создании.
| Константа | Значение | Описание |
|---|---|---|
QOpenGLFramebufferObject::NoAttachment |
0 |
К объекту буфера фреймбуфера не добавляется никакого прикрепления. Обратите внимание, что тесты глубины и трафарета OpenGL не будут работать при отрисовке в объект буфера фреймбуфера без буферов глубины или трафарета. Это значение по умолчанию. |
QOpenGLFramebufferObject::CombinedDepthStencil |
1 |
Если присутствует расширение GL_EXT_packed_depth_stencil, прикрепляется объединённый буфер глубины и трафарета. Если расширение отсутствует, прикрепляется только буфер глубины. |
QOpenGLFramebufferObject::Depth |
2 |
К объекту буфера фреймбуфера прикрепляется буфер глубины. |
См. также attachment().
перечисление QOpenGLFramebufferObject::FramebufferRestorePolicy
Этот тип перечисления используется для настройки поведения, связанного с восстановлением привязок буфера фреймбуфера при вызове blitFramebuffer().
| Константа | Значение | Описание |
|---|---|---|
QOpenGLFramebufferObject::DontRestoreFramebufferBinding |
0 |
Предыдущая привязка буфера фреймбуфера не восстанавливается. Вызывающий код отвечает за отслеживание и установку привязки буфера фреймбуфера по мере необходимости. |
QOpenGLFramebufferObject::RestoreFramebufferBindingToDefault |
1 |
После операции blit привязывается буфер фреймбуфера по умолчанию. |
QOpenGLFramebufferObject::RestoreFrameBufferBinding |
2 |
Восстанавливается ранее привязанный буфер фреймбуфера. Это потенциально дорого, из-за необходимости запроса текущего привязанного буфера фреймбуфера. |
Это перечисление было введено или изменено в Qt 5.7.
См. также blitFramebuffer().
Документация по функциям-членам
QOpenGLFramebufferObject::QOpenGLFramebufferObject(const QSize &size, GLenum target = GL_TEXTURE_2D)
Конструирует объект буфера фреймбуфера OpenGL и привязывает 2D-текстуру OpenGL к буферу размером size. Текстура привязана к целевому параметру GL_COLOR_ATTACHMENT0 в объекте буфера фреймбуфера.
Параметр target используется для задания целевого параметра текстуры OpenGL. Целевой параметр по умолчанию GL_TEXTURE_2D. Имейте в виду, что текстуры GL_TEXTURE_2D должны иметь ширину и высоту, являющиеся степенью двойки (например, 256x512), если вы не используете OpenGL 2.0 или выше.
По умолчанию буферы глубины и трафарета не прикреплены. Это поведение можно изменить, используя перегруженные конструкторы.
Внутренний формат текстуры по умолчанию GL_RGBA8 для настольного OpenGL и GL_RGBA для OpenGL/ES.
Важно, чтобы при создании QOpenGLFramebufferObject был установлен текущий контекст OpenGL, иначе инициализация завершится неудачей.
См. также size(), texture() и attachment().
QOpenGLFramebufferObject::QOpenGLFramebufferObject(int width, int height, GLenum target = GL_TEXTURE_2D)
Это перегруженная функция.
Конструирует объект буфера фреймбуфера OpenGL и привязывает 2D-текстуру OpenGL к буферу с заданной шириной и высотой.
QOpenGLFramebufferObject::QOpenGLFramebufferObject(const QSize &size, Attachment attachment, GLenum target = GL_TEXTURE_2D, GLenum internalFormat = 0)
Это перегруженная функция.
Конструирует объект буфера фреймбуфера OpenGL и привязывает текстуру к буферу с заданным размером.
Параметр attachment описывает конфигурацию буфера глубины/трафарета, target — целевой параметр текстуры, а internalFormat — внутренний формат текстуры. Целевой параметр текстуры по умолчанию — GL_TEXTURE_2D, а внутренний формат по умолчанию — GL_RGBA8 для настольного OpenGL и GL_RGBA для OpenGL/ES.
См. также size(), texture() и attachment().
QOpenGLFramebufferObject::QOpenGLFramebufferObject(int width, int height, Attachment attachment, GLenum target = GL_TEXTURE_2D, GLenum internalFormat = 0)
Это перегруженная функция.
Конструирует объект буфера фреймбуфера OpenGL и привязывает текстуру к буферу с заданной шириной и высотой.
Параметр attachment описывает конфигурацию буфера глубины/трафарета, target — целевой параметр текстуры, а internalFormat — внутренний формат текстуры. Целевой параметр текстуры по умолчанию — GL_TEXTURE_2D, а внутренний формат по умолчанию — GL_RGBA8 для настольного OpenGL и GL_RGBA для OpenGL/ES.
См. также size(), texture() и attachment().
QOpenGLFramebufferObject::QOpenGLFramebufferObject(const QSize &size, const QOpenGLFramebufferObjectFormat &format)
Это перегруженная функция.
Конструирует объект буфера фреймбуфера OpenGL заданного размера size, основываясь на предоставленном формате format.
QOpenGLFramebufferObject::QOpenGLFramebufferObject(int width, int height, const QOpenGLFramebufferObjectFormat &format)
Это перегруженная функция.
Конструирует объект буфера фреймбуфера OpenGL заданной ширины и высоты, основываясь на предоставленном формате format.
[virtual] QOpenGLFramebufferObject::~QOpenGLFramebufferObject()
Удаляет объект буфера фреймбуфера и освобождает все выделенные ресурсы.
void QOpenGLFramebufferObject::addColorAttachment(const QSize &size, GLenum internalFormat = 0)
Создаёт и прикрепляет дополнительную текстуру или буфер рендеринга размером size.
Прикрепление всегда присутствует на GL_COLOR_ATTACHMENT0. Используйте эту функцию для настройки дополнительных прикреплений на GL_COLOR_ATTACHMENT1, GL_COLOR_ATTACHMENT2, ...
Если internalFormat не равно 0, оно задаёт внутренний формат текстуры или буфера рендеринга. В противном случае используется значение по умолчанию GL_RGBA или GL_RGBA8.
Примечание: Это функционально только при поддержке нескольких целей рендеринга реализацией OpenGL. Если это не так, функция не добавит дополнительных прикреплений цвета. Используйте QOpenGLFunctions::hasOpenGLFeature() с QOpenGLFunctions::MultipleRenderTargets во время выполнения для проверки поддержки MRT.
Примечание: Внутренний формат прикреплений цвета может отличаться, но могут существовать ограничения на поддерживаемые комбинации в зависимости от драйверов.
Примечание: Размер прикреплений цвета может отличаться, но рендеринг ограничен областью, которая подходит всем прикреплениям в соответствии со спецификацией OpenGL. Однако некоторые драйверы могут не полностью соответствовать этому.
Эта функция была введена в Qt 5.6.
void QOpenGLFramebufferObject::addColorAttachment(int width, int height, GLenum internalFormat = 0)
Это перегруженная функция.
Создаёт и прикрепляет дополнительную текстуру или буфер рендеринга заданной ширины и высоты.
Если internalFormat не равно 0, оно задаёт внутренний формат текстуры или буфера рендеринга. В противном случае используется значение по умолчанию GL_RGBA или GL_RGBA8.
Эта функция была введена в Qt 5.6.
Attachment QOpenGLFramebufferObject::attachment() const
Возвращает состояние буферов глубины и трафарета, присоединённых к этому объекту фреймбуфера.
См. также setAttachment().
bool QOpenGLFramebufferObject::bind()
Переключает отрисовку с системного буфера по умолчанию на этот объект фреймбуфера. Возвращает true при успехе, false в противном случае.
Примечание: Если был вызван takeTexture(), создаётся новая текстура и она ассоциируется с объектом фреймбуфера. Это потенциально затратно и изменяет состояние контекста (текущая привязанная текстура).
См. также release().
[static] bool QOpenGLFramebufferObject::bindDefault()
Переключает отрисовку обратно на системный буфер по умолчанию. Возвращает true при успехе, false в противном случае.
[static] void QOpenGLFramebufferObject::blitFramebuffer(QOpenGLFramebufferObject *target, const QRect &targetRect, QOpenGLFramebufferObject *source, const QRect &sourceRect, GLbitfield buffers, GLenum filter, int readColorAttachmentIndex, int drawColorAttachmentIndex, FramebufferRestorePolicy restorePolicy)
Копирует прямоугольник sourceRect из объекта фреймбуфера source в прямоугольник targetRect объекта фреймбуфера target.
Если source или target равны 0, используется буфер по умолчанию вместо объекта фреймбуфера в качестве источника или получателя соответственно.
Функция не будет выполняться, если hasOpenGLFramebufferBlit() возвращает false.
Параметр buffers должен быть маской, состоящей из комбинации GL_COLOR_BUFFER_BIT, GL_DEPTH_BUFFER_BIT, и GL_STENCIL_BUFFER_BIT. Любой тип буфера, отсутствующий как в источнике, так и в получателе, игнорируется.
Прямоугольники sourceRect и targetRect могут иметь разные размеры; в этом случае buffers не должен содержать GL_DEPTH_BUFFER_BIT или GL_STENCIL_BUFFER_BIT. Параметр filter должен быть установлен на GL_LINEAR или GL_NEAREST, и определяет, использовать ли линейную или ближайшую интерполяцию при масштабировании.
Если source равно target, выполняется копирование внутри одного буфера. Результаты неопределённы, если прямоугольники источника и получателя перекрываются и имеют разные размеры. Размеры также должны быть одинаковыми, если один из объектов фреймбуфера является многообразным.
Примечание: Тест обрезки (scissor test) ограничит область копирования, если он включён.
При использовании нескольких выходных изображений (render targets), readColorAttachmentIndex и drawColorAttachmentIndex указывают индекс цветного изображения (color attachment) в источниковом и целевом фреймбуферах соответственно.
Параметр restorePolicy определяет, восстанавливать ли буфер фреймбуфера, который был привязан до вызова этой функции, или устанавливать буфер по умолчанию перед возвратом, либо нести ответственность за отслеживание и установку привязанного фреймбуфера вызывающей стороне. Восстановление предыдущего фреймбуфера может быть относительно дорогостоящим из-за вызова glGetIntegerv, который на некоторых драйверах OpenGL может подразумевать остановку конвейера.
Функция была введена в Qt 5.7.
См. также hasOpenGLFramebufferBlit().
[static] void QOpenGLFramebufferObject::blitFramebuffer(QOpenGLFramebufferObject *target, const QRect &targetRect, QOpenGLFramebufferObject *source, const QRect &sourceRect, GLbitfield buffers, GLenum filter, int readColorAttachmentIndex, int drawColorAttachmentIndex)
Это перегруженная функция.
Удобная перегрузка для копирования между двумя объектами фреймбуфера и восстановления предыдущей привязки фреймбуфера. Эквивалентно вызову blitFramebuffer(target, targetRect, source, sourceRect, buffers, filter, readColorAttachmentIndex, drawColorAttachmentIndex, RestoreFrameBufferBinding).
[static] void QOpenGLFramebufferObject::blitFramebuffer(QOpenGLFramebufferObject *target, const QRect &targetRect, QOpenGLFramebufferObject *source, const QRect &sourceRect, GLbitfield buffers = GL_COLOR_BUFFER_BIT, GLenum filter = GL_NEAREST)
Это перегруженная функция.
* Удобная перегрузка для копирования между двумя объектами фреймбуфера.
[static] void QOpenGLFramebufferObject::blitFramebuffer(QOpenGLFramebufferObject *target, QOpenGLFramebufferObject *source, GLbitfield buffers = GL_COLOR_BUFFER_BIT, GLenum filter = GL_NEAREST)
Это перегруженная функция.
Удобная перегрузка для копирования между двумя объектами фреймбуфера.
QOpenGLFramebufferObjectFormat QOpenGLFramebufferObject::format() const
Возвращает формат этого объекта фреймбуфера.
GLuint QOpenGLFramebufferObject::handle() const
Возвращает дескриптор объекта фреймбуфера OpenGL для этого объекта фреймбуфера (возвращаемый функцией glGenFrameBuffersEXT()). Этот дескриптор может использоваться для прикрепления новых изображений или буферов к фреймбуферу. Пользователь отвечает за очистку и уничтожение этих объектов.
[static] bool QOpenGLFramebufferObject::hasOpenGLFramebufferBlit()
Возвращает true если расширение OpenGL GL_EXT_framebuffer_blit присутствует в этой системе; в противном случае возвращает false.
См. также blitFramebuffer().
[static] bool QOpenGLFramebufferObject::hasOpenGLFramebufferObjects()
Возвращает true если расширение OpenGL GL_EXT_framebuffer_object присутствует в этой системе; в противном случае возвращает false.
int QOpenGLFramebufferObject::height() const
Возвращает высоту прикреплённых к объекту фреймбуфера элементов фреймбуфера.
bool QOpenGLFramebufferObject::isBound() const
Возвращает true если объект фреймбуфера в настоящее время привязан к текущему контексту, в противном случае возвращает false.
bool QOpenGLFramebufferObject::isValid() const
Возвращает true если объект фреймбуфера является валидным.
Фреймбуфер может стать невалидным, если процесс инициализации завершился неудачно, пользователь присоединил невалидный буфер к объекту фреймбуфера, или указан размер текстуры не являющийся степенью двойки для ширины/высоты, если целевой тип текстуры GL_TEXTURE_2D. Ограничение на степень двойки не применяется, если версия OpenGL 2.0 или выше, или если расширение GL_ARB_texture_non_power_of_two присутствует.
Фреймбуфер также может стать невалидным, если QOpenGLContext, в котором был создан фреймбуфер, уничтожен, и нет других совместно используемых контекстов, которые могут принять владение фреймбуфером.
bool QOpenGLFramebufferObject::release()
Переключает отрисовку обратно на системный буфер по умолчанию. Возвращает true при успехе, false в противном случае.
См. также bind().
void QOpenGLFramebufferObject::setAttachment(Attachment attachment)
Устанавливает элементы прикрепления (attachments) объекта фреймбуфера на attachment.
Может использоваться для освобождения или повторного прикрепления элементов глубины и трафарета (depth и stencil), если необходимо.
Примечание: Эта функция изменяет текущую привязку фреймбуфера.
См. также attachment().
QSize QOpenGLFramebufferObject::size() const
Возвращает размер цветных и глубинных/трафаретных элементов, присоединённых к этому объекту фреймбуфера.
QVector<QSize> QOpenGLFramebufferObject::sizes() const
Возвращает размеры всех цветных элементов, присоединённых к этому объекту фреймбуфера.
Функция была введена в Qt 5.6.
GLuint QOpenGLFramebufferObject::takeTexture()
Возвращает идентификатор текстуры, присоединённой к этому объекту фреймбуфера. Владение текстурой передаётся вызывающей стороне.
END_OF_DOCUMENT_MARKERЕсли объект буфера кадра в настоящее время привязан, будет выполнено неявное release()(). При следующем вызове bind() будет создана новая текстура.
Если используется многообразный объект буфера кадра, то текстура отсутствует, и значение возвращаемое этой функцией будет недействительным. Аналогично, неполные объекты буфера кадра также вернут 0.
Эта функция была добавлена в Qt 5.3.
См. также texture(), bind() и release().
GLuint QOpenGLFramebufferObject::takeTexture(int colorAttachmentIndex)
Это перегруженная функция.
Возвращает идентификатор текстуры для текстуры, присоединённой к цветовому приложению с индексом colorAttachmentIndex этого объекта буфера кадра. Владение текстурой передаётся вызывающему коду.
Когда colorAttachmentIndex равно 0, поведение идентично варианту функции без параметров.
Если объект буфера кадра в настоящее время привязан, будет выполнено неявное release()(). При следующем вызове bind() будет создана новая текстура.
Если используется многообразный объект буфера кадра, то текстуры нет, и возвращаемое значение этой функции будет недействительным. Аналогично, неполные объекты буфера кадра также вернут 0.
Эта функция была добавлена в Qt 5.6.
GLuint QOpenGLFramebufferObject::texture() const
Возвращает идентификатор текстуры для текстуры, присоединённой в качестве целевого объекта рендеринга по умолчанию в этом объекте буфера кадра. Этот идентификатор текстуры можно привязать как обычную текстуру в собственном коде OpenGL.
Если используется многообразный объект буфера кадра, то возвращаемое значение будет недействительным.
Если прикреплено несколько текстур, возвращаемым значением будет ID первой из них.
См. также takeTexture() и textures().
QVector<GLuint> QOpenGLFramebufferObject::textures() const
Возвращает идентификаторы всех присоединённых текстур.
Если используется многообразный объект буфера кадра, возвращается пустой вектор.
Эта функция была добавлена в Qt 5.6.
См. также takeTexture() и texture().
QImage QOpenGLFramebufferObject::toImage(bool flipped) const
Возвращает содержимое этого объекта буфера кадра в виде QImage.
Если flipped равно true, изображение переворачивается с координат OpenGL на растровые координаты. При использовании вместе с QOpenGLPaintDevice, flipped должно быть противоположным значению QOpenGLPaintDevice::paintFlipped().
Возвращаемое изображение имеет формат преумноженного ARGB32 или RGB32. Последний используется только в случае, когда internalTextureFormat() установлено в GL_RGB. Начиная с Qt 5.2, функция будет использовать преумноженный RGBA8888 или RGBx8888 при чтении в (A)RGB32, если это не поддерживается, и это включает OpenGL ES. Начиная с Qt 5.4, возвращается изображение A2BGR30, если внутренний формат RGB10_A2.
Если рендеринг в буфере кадра не производился с учётом преумноженного альфа-канала, создайте оберточное QImage с не преумноженным форматом. Это необходимо перед выполнением операций, таких как QImage::save(), иначе данные изображения будут деумножены, даже если они не были преумножены изначально. Чтобы создать такой обёртку без копирования пиксельных данных, выполните следующее:
QImage fboImage(fbo.toImage()); QImage image(fboImage.constBits(), fboImage.width(), fboImage.height(), QImage::Format_ARGB32);
Для многообразных объектов буфера кадра выборки разрешаются с помощью расширения GL_EXT_framebuffer_blit. Если расширение недоступно, содержимое возвращаемого изображения не определено.
Для объектов буфера кадра с одним образцом содержимое извлекается через glReadPixels. Это потенциально дорогая и неэффективная операция. Поэтому рекомендуется использовать эту функцию как можно реже.
См. также QOpenGLPaintDevice::paintFlipped().
QImage QOpenGLFramebufferObject::toImage() const
Это перегруженная функция.
Возвращает содержимое этого объекта буфера кадра в виде QImage. Этот метод переворачивает изображение с координат OpenGL на растровые координаты.
QImage QOpenGLFramebufferObject::toImage(bool flipped, int colorAttachmentIndex) const
Это перегруженная функция.
Возвращает содержимое цветового приложения с индексом colorAttachmentIndex этого объекта буфера кадра в виде QImage. Этот метод переворачивает изображение с координат OpenGL на растровые координаты, когда flipped установлено в true.
Примечание: Эта перегрузка полностью функциональна только при поддержке нескольких целевых областей рендеринга реализацией OpenGL. Если это не так, будет настроен только один цветовой выход.
Эта функция была добавлена в Qt 5.6.
int QOpenGLFramebufferObject::width() const
Возвращает ширину прикреплений объекта буфера кадра.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.9/qopenglframebufferobject.html