Spec-Zone.ru › Qt 5.6

Класс QOpenGLFramebufferObject

Класс QOpenGLFramebufferObject инкапсулирует объект буфера кадра OpenGL. Подробнее...

Заголовок: #include <QOpenGLFramebufferObject>
qmake: QT += gui
С момента: Qt 5.0
  • Список всех членов, включая наследуемые

Типы публичного доступа

Перечисление Attachment { НетПрикрепления, ОбъединённаяГлубинаИШаблоны, Глубина }

Публичные функции

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

Класс QOpenGLFramebufferObject инкапсулирует объект буфера кадра OpenGL, определённый расширением GL_EXT_framebuffer_object. Он предоставляет поверхность для отрисовки с помощью QPainter с помощью QOpenGLPaintDevice или для отрисовки с помощью собственных вызовов OpenGL. Эта поверхность может быть связана и использована как обычная текстура в вашем собственном коде рисования OpenGL. По умолчанию, класс QOpenGLFramebufferObject генерирует 2D OpenGL текстуру (используя целевой GL_TEXTURE_2D), которая используется как внутренняя целевая поверхность для отрисовки.

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

Создайте экземпляр QOpenGLFrameBufferObject с прикреплением CombinedDepthStencil, если вы хотите, чтобы QPainter правильно отображал содержимое. Обратите внимание, что для правильной антиалиасинга примитивов при отрисовке с помощью QPainter вам необходимо создать QOpenGLFramebufferObject с более чем одним образцом на пиксель. Для создания многообразного объекта буфера кадра используйте один из конструкторов, принимающих параметр QOpenGLFramebufferObjectFormat, и установите свойство QOpenGLFramebufferObjectFormat::samples() в ненулевое значение.

Для многообразных объектов буфера кадра создаётся буфер цвета, в противном случае создаётся текстура с указанным целевым параметром текстуры. Буфер цвета или текстура будут иметь указанный внутренний формат и будут привязаны к прикреплению GL_COLOR_ATTACHMENT0 в объекте буфера кадра.

Также поддерживается несколько целевых поверхностей, если реализация OpenGL это поддерживает. В этом случае будут присутствовать несколько текстур (или, в случае многообразности, буферов) и каждая из них будет прикреплена к GL_COLOR_ATTACHMENT0, 1, 2, ...

Если вы хотите использовать объект буфера кадра с включённой многообразностью как текстуру, сначала необходимо скопировать его в обычный объект буфера кадра с помощью QOpenGLContext::blitFramebuffer().

Возможна отрисовка в QOpenGLFramebufferObject с помощью QPainter и QOpenGLPaintDevice в отдельном потоке.

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

enum QOpenGLFramebufferObject::Attachment

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

Константа Значение Описание
QOpenGLFramebufferObject::NoAttachment 0 К объекту фреймбуфера не добавляется никакое прикрепление. Обратите внимание, что тесты OpenGL на глубину и трафарет не будут работать при отрисовке в объект фреймбуфера без буферов глубины или трафарета. Это значение по умолчанию.
QOpenGLFramebufferObject::CombinedDepthStencil 1 Если присутствует расширение GL_EXT_packed_depth_stencil, прикрепляется объединенный буфер глубины и трафарета. Если расширение отсутствует, прикрепляется только буфер глубины.
QOpenGLFramebufferObject::Depth 2 К объекту фреймбуфера прикреплен буфер глубины.

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

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

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.

Важно, чтобы текущий контекст OpenGL был установлен при создании QOpenGLFramebufferObject, в противном случае инициализация завершится ошибкой.

См. также size(), texture() и attachment().

QOpenGLFramebufferObject::QOpenGLFramebufferObject(int width, int height, GLenum target = GL_TEXTURE_2D)

Это перегруженная функция.

Создает объект фреймбуфера OpenGL и привязывает 2D текстуру OpenGL к буферу заданной ширины и высоты.

См. также size() и texture().

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 заданного размера на основе предоставленного формата.

QOpenGLFramebufferObject::QOpenGLFramebufferObject(int width, int height, const QOpenGLFramebufferObjectFormat &format)

Это перегруженная функция.

Создает объект фреймбуфера OpenGL заданной ширины и высоты на основе предоставленного формата.

[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)

Это перегруженная функция.

Создает и прикрепляет дополнительную текстуру или буфер рендеринга размером width и height.

Если 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 в противном случае.

См. также bind() и release().

[static] void QOpenGLFramebufferObject::blitFramebuffer(QOpenGLFramebufferObject *target, const QRect &targetRect, QOpenGLFramebufferObject *source, const QRect &sourceRect, GLbitfield buffers, GLenum filter, int readColorAttachmentIndex, int drawColorAttachmentIndex)

Копирует данные из прямоугольника sourceRect в объекте фреймбуфера source в прямоугольник targetRect в объекте фреймбуфера target.

Если source или target равно 0, будет использоваться буферный фрейм по умолчанию вместо объекта буфера фрейма соответственно в качестве источника или назначения.

Эта функция не будет иметь никакого эффекта, если hasOpenGLFramebufferBlit() возвращает true.

Параметр 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) будет ограничивать область копирования (blit), если он включен.

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

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

[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)

Устанавливает прикрепления объекта буфера фрейма в attachment.

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

Примечание: Эта функция изменяет текущую привязку буфера фрейма.

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

QSize QOpenGLFramebufferObject::size() const

Возвращает размер цветовых и глубинно-трафаретных прикреплений, прикрепленных к этому объекту буфера фрейма.

QVector<QSize> QOpenGLFramebufferObject::sizes() const

Возвращает размеры всех цветовых прикреплений, прикрепленных к этому объекту буфера фрейма.

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

GLuint QOpenGLFramebufferObject::takeTexture()

Возвращает идентификатор текстуры для текстуры, прикрепленной к этому объекту буфера фрейма. Владение текстурой передается вызывающей стороне.

Если объект буфера фрейма в настоящее время привязан, неявное 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().

Возвращаемое изображение имеет формат premultiplied ARGB32 или RGB32. Последний используется только когда internalTextureFormat() установлен на GL_RGB.

Если рендеринг в буфере фрейма не выполнялся с учетом умножения альфа-канала наперед, создайте оберточное QImage с не-premultiplied форматом. Это необходимо перед выполнением операций, таких как QImage::save(), так как в противном случае данные изображения будут раскомпонованы, даже если они не были предварительно умножены в самом начале. Чтобы создать такой оберточный объект QImage без копирования пиксельных данных, выполните следующие действия:

QImage fboImage(fbo.toImage());
QImage image(fboImage.constBits(), fboImage.width(), fboImage.height(), QImage::Format_ARGB32);

С Qt 5.2 функция будет использовать предварительно умноженный RGBA8888 или RGBx8888 при чтении, если (A)RGB32 не поддерживается. С версии 5.4 при внутреннем формате RGB10_A2 возвращается изображение A2BGR30.

Для многовыборочных буферов фреймов выборки выполняются с помощью расширения 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/archives/qt-5.6/qopenglframebufferobject.html

Spec-Zone.ru

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