Класс QShaderImage
класс Qt3DRender::QShaderImageОбеспечивает доступ к изображениям для программ обработки шейдеров. Подробнее...
| Заголовок: | #include <QShaderImage> |
| CMake: | find_package(Qt6 COMPONENTS 3drender REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::3drender) |
| qmake: | QT += 3drender |
| С момента: | Qt 5.14 |
| Инициализируется: | ShaderImage |
| Наследует: | Qt3DCore::QNode |
Типы публичного доступа
| перечисление | Access { Только чтение, Только запись, Чтение/запись } |
| перечисление | ImageFormat { Нет формата, Автоматический, R8_UNorm, RG8_UNorm, RGBA8_UNorm, …, RGB10A2U } |
Свойства
Публичные функции
| Qt3DRender::QShaderImage::Access | access() const |
| Qt3DRender::QShaderImage::ImageFormat | format() const |
| int | layer() const |
| bool | layered() const |
| int | mipLevel() const |
| Qt3DRender::QAbstractTexture * | texture() const |
Открытые слоты
| void | setAccess(Qt3DRender::QShaderImage::Access access) |
| void | setFormat(Qt3DRender::QShaderImage::ImageFormat format) |
| void | setLayer(int layer) |
| void | setLayered(bool layered) |
| void | setMipLevel(int mipLevel) |
| void | setTexture(Qt3DRender::QAbstractTexture *texture) |
Сигналы
| void | accessChanged(Qt3DRender::QShaderImage::Access access) |
| void | formatChanged(Qt3DRender::QShaderImage::ImageFormat format) |
| void | layerChanged(int layer) |
| void | layeredChanged(bool layered) |
| void | mipLevelChanged(int mipLevel) |
| void | textureChanged(Qt3DRender::QAbstractTexture *texture) |
Подробное описание
Для обеспечения доступа к содержимому текстур для чтения и записи в шейдере, их необходимо экспонировать как QShaderImage. Текстуры могут состоять из нескольких уровней mip, слоев и граней. Кроме того, объявление QShaderImage позволяет указать, к какому уровню, слою или грани содержимого текстуры мы хотим получить доступ.
QShaderImage должен быть присвоен в качестве значения QParameter и ссылаться на допустимый Qt3DRender::QAbstractTexture для правильной работы.
Если ссылаемая текстура является одномерным массивом, двумерным массивом, трехмерной, кубовой картой, массивом кубовых карт или двумерной текстурой с многократным сэмплированием, можно привязать либо весь уровень текстуры, либо отдельный слой или грань уровня текстуры. Это можно контролировать с помощью свойства layered.
Поддержка QShaderImage поддерживается только с OpenGL 4 и частично с OpenGL ES 3.1 и 3.2.
OpenGL 4 поддерживает следующие типы изображений:
| GLSL Type | OpenGL Type Enum | Texture Type |
|---|---|---|
| image1D | GL_IMAGE_1D | QTexture1D |
| image2D | GL_IMAGE_2D | QTexture2D |
| image3D | GL_IMAGE_3D | QTexture3D |
| image2DRect | GL_IMAGE_2D_RECT | QTextureRectangle |
| imageCube | GL_IMAGE_CUBE | QTextureCubeMap |
| imageBuffer | GL_IMAGE_BUFFER | QTextureBuffer |
| image1DArray | GL_IMAGE_1D_ARRAY | QTexture1DArray |
| image2DArray | GL_IMAGE_2D_ARRAY | QTexture2DArray |
| imageCubeArray | GL_IMAGE_CUBE_MAP_ARRAY | QTextureCubeMapArray |
| image2DMS | GL_IMAGE_2D_MULTISAMPLE | QTexture2DMultisample |
| image2DMSArray | GL_IMAGE_2D_MULTISAMPLE_ARRAY | QTexture2DMultisampleArray |
| iimage1D | GL_INT_IMAGE_1D | QTexture1D |
| iimage2D | GL_INT_IMAGE_2D | QTexture2D |
| iimage3D | GL_INT_IMAGE_3D | QTexture3D |
| iimage2DRect | GL_INT_IMAGE_2D_RECT | QTextureRectangle |
| iimageCube | GL_INT_IMAGE_CUBE | QTextureCubeMap |
| iimageBuffer | GL_INT_IMAGE_BUFFER | QTextureBuffer |
| iimage1DArray | GL_INT_IMAGE_1D_ARRAY | QTexture1DArray |
| iimage2DArray | GL_INT_IMAGE_2D_ARRAY | QTexture2DArray |
| iimageCubeArray | GL_INT_IMAGE_CUBE_MAP_ARRAY | QTextureCubeMapArray |
| iimage2DMS | GL_INT_IMAGE_2D_MULTISAMPLE | QTexture2DMultisample |
| iimage2DMSArray | GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY | QTexture2DMultisampleArray |
| uimage1D | GL_UNSIGNED_INT_IMAGE_1D | QTexture1D |
| uimage2D | GL_UNSIGNED_INT_IMAGE_2D | QTexture2D |
| uimage3D | GL_UNSIGNED_INT_IMAGE_3D | QTexture3D |
| uimage2DRect | GL_UNSIGNED_INT_IMAGE_2D_RECT | QTextureRectangle |
| uimageCube | GL_UNSIGNED_INT_IMAGE_CUBE | QTextureCubeMap |
| uimageBuffer | GL_UNSIGNED_INT_IMAGE_BUFFER | QTextureBuffer |
| uimage1DArray | GL_UNSIGNED_INT_IMAGE_1D_ARRAY | QTexture1DArray |
| uimage2DArray | GL_UNSIGNED_INT_IMAGE_2D_ARRAY | QTexture2DArray |
| uimageCubeArray | GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY | QTextureCubeMapArray |
| uimage2DMS | GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE | QTexture2DMultisample |
| uimage2DMSArray | GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY | QTexture2DMultisampleArray |
OpenGL ES 3.1 поддерживает следующие типы изображений:
| GLSL Type | OpenGL Type Enum | Texture Type |
|---|---|---|
| image2D | GL_IMAGE_2D | QTexture2D |
| image3D | GL_IMAGE_3D | QTexture3D |
| imageCube | GL_IMAGE_CUBE | QTextureCubeMap |
| image2DArray | GL_IMAGE_2D_ARRAY | QTexture2DArray |
| iimage2D | GL_INT_IMAGE_2D | QTexture2D |
| iimage3D | GL_INT_IMAGE_3D | QTexture3D |
| iimageCube | GL_INT_IMAGE_CUBE | QTextureCubeMap |
| iimage2DArray | GL_INT_IMAGE_2D_ARRAY | QTexture2DArray |
| uimage2D | GL_UNSIGNED_INT_IMAGE_2D | QTexture2D |
| uimage3D | GL_UNSIGNED_INT_IMAGE_3D | QTexture3D |
| uimageCube | GL_UNSIGNED_INT_IMAGE_CUBE | QTextureCubeMap |
| uimage2DArray | GL_UNSIGNED_INT_IMAGE_2D_ARRAY | QTexture2DArray |
OpenGL ES 3.2 поддерживает все типы изображений OpenGL ES 3.1, а также следующие:
| GLSL Type | OpenGL Type Enum | Texture Type |
|---|---|---|
| imageBuffer | GL_IMAGE_BUFFER | QTextureBuffer |
| imageCubeArray | GL_IMAGE_CUBE_MAP_ARRAY | QTextureCubeMapArray |
| iimageBuffer | GL_IMAGE_BUFFER | QTextureBuffer |
| iimageCubeArray | GL_INT_IMAGE_CUBE_MAP_ARRAY | QTextureCubeMapArray |
| uimageBuffer | GL_UNSIGNED_INT_IMAGE_BUFFER | QTextureBuffer |
| uimageCubeArray | GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY | QTextureCubeMapArray |
Ожидаемое использование будет выглядеть так:
Qt3DRender::QTexture2D *tex2D = new Qt3DRender::QTexture2D();
...
Qt3DRender::QMaterial *material = new Qt3DRender::QMaterial();
...
Qt3DRender::QParameter *imageParameter = new Qt3DRender::QParameter();
Qt3DRender::QShaderImage *shaderImage = new Qt3DRender::QShaderImage();
shaderImage->setTexture(tex2D);
imageParameter->setName("imageUniformName");
imageParameter->setValue(QVariant::fromValue(shaderImage));
material->addParameter(imageParamenter); Документация по типам членов
enum QShaderImage::Access
| Константа | Значение | Описание |
|---|---|---|
Qt3DRender::QShaderImage::ReadOnly |
0 |
Изображение будет только читаться в шейдерах |
Qt3DRender::QShaderImage::WriteOnly |
1 |
Изображение будет только записываться в шейдерах |
Qt3DRender::QShaderImage::ReadWrite |
2 |
Изображение будет только читаться и записываться в шейдерах |
enum QShaderImage::ImageFormat
Этот список описывает все возможные форматы изображений
| Константа | Значение | Описание |
|---|---|---|
Qt3DRender::QShaderImage::NoFormat |
0 |
GL_NONE |
Qt3DRender::QShaderImage::Automatic |
1 |
Qt 3D попытается автоматически определить формат на основе ссылочной текстуры. |
Qt3DRender::QShaderImage::R8_UNorm |
0x8229 |
GL_R8 (тип GLSL r8, поддерживается OpenGL 4.2+) |
Qt3DRender::QShaderImage::RG8_UNorm |
0x822B |
GL_RG8 (тип GLSL rg8, поддерживается OpenGL 4.2+) |
Qt3DRender::QShaderImage::RGBA8_UNorm |
0x8058 |
GL_RGBA8 (тип GLSL rgba8, поддерживается OpenGL 4.2+, OpenGL ES 3.1+) |
Qt3DRender::QShaderImage::R16_UNorm |
0x822A |
GL_R16 (тип GLSL r16, поддерживается OpenGL 4.2+) |
Qt3DRender::QShaderImage::RG16_UNorm |
0x822C |
GL_RG16 (тип GLSL rg16, поддерживается OpenGL 4.2+) |
Qt3DRender::QShaderImage::RGBA16_UNorm |
0x805B |
GL_RGBA16 (тип GLSL rgba16, поддерживается OpenGL 4.2+) |
Qt3DRender::QShaderImage::R8_SNorm |
0x8F94 |
GL_R8_SNORM (тип GLSL r8_snorm, поддерживается OpenGL 4.2+) |
Qt3DRender::QShaderImage::RG8_SNorm |
0x8F95 |
GL_RG8_SNORM (тип GLSL rg8_snorm, поддерживается OpenGL 4.2+) |
Qt3DRender::QShaderImage::RGBA8_SNorm |
0x8F97 |
GL_RGBA8_SNORM (тип GLSL rgba8_snorm, поддерживается OpenGL 4.2+, OpenGL ES 3.1+) |
Qt3DRender::QShaderImage::R16_SNorm |
0x8F98 |
GL_R16_SNORM (тип GLSL r16_snorm, поддерживается OpenGL 4.2+) |
Qt3DRender::QShaderImage::RG16_SNorm |
0x8F99 |
GL_RG16_SNORM (тип GLSL rg16_snorm, поддерживается OpenGL 4.2+) |
Qt3DRender::QShaderImage::RGBA16_SNorm |
0x8F9B |
GL_RGBA16_SNORM (тип GLSL rgba16_snorm, поддерживается OpenGL 4.2+) |
Qt3DRender::QShaderImage::R8U |
0x8232 |
GL_R8UI (тип GLSL r8ui, поддерживается OpenGL 4.2+) |
Qt3DRender::QShaderImage::RG8U |
0x8238 |
GL_RG8UI (тип GLSL rg8ui, поддерживается OpenGL 4.2+) |
Qt3DRender::QShaderImage::RGBA8U |
0x8D7C |
GL_RGBA8UI (тип GLSL rgba8ui, поддерживается OpenGL 4.2+, OpenGL ES 3.1+) |
Qt3DRender::QShaderImage::R16U |
0x8234 |
GL_R16UI (тип GLSL r16ui, поддерживается OpenGL 4.2+) |
Qt3DRender::QShaderImage::RG16U |
0x823A |
GL_RG16UI (тип GLSL rg16ui, поддерживается OpenGL 4.2+) |
Qt3DRender::QShaderImage::RGBA16U |
0x8D76 |
GL_RGBA16UI (тип GLSL rgba16ui, поддерживается OpenGL 4.2+, OpenGL ES 3.1+) |
Qt3DRender::QShaderImage::R32U |
0x8236 |
GL_R32UI (тип GLSL r32ui, поддерживается OpenGL 4.2+, OpenGL ES 3.1) |
Qt3DRender::QShaderImage::RG32U |
0x823C |
GL_RG32UI (тип GLSL rg32ui, поддерживается OpenGL 4.2+) |
Qt3DRender::QShaderImage::RGBA32U |
0x8D70 |
GL_RGBA32UI (тип GLSL rgba32ui, поддерживается OpenGL 4.2+, OpenGL ES 3.1+) |
Qt3DRender::QShaderImage::R8I |
0x8231 |
GL_R8I (тип GLSL r8i, поддерживается OpenGL 4.2+) |
Qt3DRender::QShaderImage::RG8I |
0x8237 |
GL_RG8I (тип GLSL rg8i, поддерживается OpenGL 4.2+) |
Qt3DRender::QShaderImage::RGBA8I |
0x8D8E |
GL_RGBA8I (тип GLSL rgba8i, поддерживается OpenGL 4.2+, OpenGL ES 3.1+) |
Qt3DRender::QShaderImage::R16I |
0x8233 |
GL_R16I (тип GLSL r16i, поддерживается OpenGL 4.2+) |
Qt3DRender::QShaderImage::RG16I |
0x8239 |
GL_RG16I (тип GLSL rg16i, поддерживается OpenGL 4.2+) |
Qt3DRender::QShaderImage::RGBA16I |
0x8D88 |
GL_RGBA16I (тип GLSL rgba16i, поддерживается OpenGL 4.2+, OpenGL ES 3.1) |
Qt3DRender::QShaderImage::R32I |
0x8235 |
GL_R32I (тип GLSL r32i, поддерживается OpenGL 4.2+, OpenGL ES 3.1+) |
Qt3DRender::QShaderImage::RG32I |
0x823B |
GL_RG32I (тип GLSL rg32i, поддерживается OpenGL 4.2+) |
Qt3DRender::QShaderImage::RGBA32I |
0x8D82 |
GL_RGBA32I (тип GLSL rgba32i, поддерживается OpenGL 4.2+, OpenGL ES 3.1+) |
Qt3DRender::QShaderImage::R16F |
0x822D |
GL_R16F (тип GLSL r16f, поддерживается OpenGL 4.2+) |
Qt3DRender::QShaderImage::RG16F |
0x822F |
GL_RG16F (тип GLSL rg16f, поддерживается OpenGL 4.2+) |
Qt3DRender::QShaderImage::RGBA16F |
0x881A |
GL_RGBA16F (тип GLSL rgba16f, поддерживается OpenGL 4.2+, OpenGL ES 3.1+) |
Qt3DRender::QShaderImage::R32F |
0x822E |
GL_R32F (тип GLSL r32f, поддерживается OpenGL 4.2+, OpenGL ES 3.1+) |
Qt3DRender::QShaderImage::RG32F |
0x8230 |
GL_RG32F (тип GLSL rg32f, поддерживается OpenGL 4.2+) |
Qt3DRender::QShaderImage::RGBA32F |
0x8814 |
GL_RGBA32F (тип GLSL rgba32f, поддерживается OpenGL 4.2+, OpenGL ES 3.1+) |
Qt3DRender::QShaderImage::RG11B10F |
0x8C3A |
GL_R11F_G11F_B10F (тип GLSL r11f_g11f_b10f, поддерживается OpenGL 4.2+) |
Qt3DRender::QShaderImage::RGB10A2 |
0x8059 |
GL_RGB10_A2 (тип GLSL rgb10_a2, поддерживается OpenGL 4.2+) |
Qt3DRender::QShaderImage::RGB10A2U |
0x906F |
GL_RGB10_A2UI (тип GLSL rgb10_a2ui, поддерживается OpenGL 4.2+) |
Документация свойств
access : Access
Указывает тип доступа, который мы хотим разрешить экземплярам шейдеров к изображению. Если шейдер пытается записать или прочитать изображение с несовместимым доступом, поведение не определено.
Значение по умолчанию — QShaderImage::ReadWrite.
Функции доступа:
| Qt3DRender::QShaderImage::Access | access() const |
| void | setAccess(Qt3DRender::QShaderImage::Access access) |
Сигнал уведомления:
| void | accessChanged(Qt3DRender::QShaderImage::Access access) |
format : ImageFormat
Указывает формат изображения, что очень важно при хранении значений в изображении из шейдера.
Формат не обязательно должен совпадать с форматом текстуры, к которой он ссылается. Однако он должен быть совместим (соответствовать по размеру, но не обязательно по типу данных). Например, текстура с форматом R32F (размер 32 бита, класс 1x32) может использоваться с изображением с форматом RGBA8I (размер 32 бита, класс 4x8). Таблица 8.27 спецификаций OpenGL показывает размер и класс всех поддерживаемых форматов изображений.
По умолчанию Qt3D попытается установить формат изображения, соответствующий формату ссылающейся текстуры.
Значение по умолчанию — QShaderImage::Automatic.
Функции доступа:
| Qt3DRender::QShaderImage::ImageFormat | format() const |
| void | setFormat(Qt3DRender::QShaderImage::ImageFormat format) |
Сигнал уведомления:
| void | formatChanged(Qt3DRender::QShaderImage::ImageFormat format) |
layer : int
Указывает, какой слой из ссылающейся текстуры следует использовать для QShaderImage. Это свойство ничего не делает, если layered установлено в true или тип текстуры-источника несовместим со слоями.
Примечание: Когда ссылающаяся текстура является кубом или массивом кубов и ĺayered установлено в false, грань и слой извлекаются следующим образом:
cubeMapLayer = layer / 6 cubeMapFace = layer - (cubeMapLayer * 6)
Значение по умолчанию — 0.
Функции доступа:
| int | layer() const |
| void | setLayer(int layer) |
Сигнал уведомления:
| void | layerChanged(int layer) |
layered : bool
*
Если установлено в true, если ссылающаяся текстура является одномерным, двумерным, трехмерным, кубом, массивом кубов или двумерной многообразной текстурой, весь уровень будет привязан ко всем слоям. Если установлено в false, будет привязана только единичная, указанная свойством layer, слой.
Значение по умолчанию — false.
Функции доступа:
| bool | layered() const |
| void | setLayered(bool layered) |
Сигнал уведомления:
| void | layeredChanged(bool layered) |
mipLevel : int
Указывает, какой уровень mip из ссылающейся текстуры следует использовать для QShaderImage.
Значение по умолчанию — 0.
Функции доступа:
| int | mipLevel() const |
| void | setMipLevel(int mipLevel) |
Сигнал уведомления:
| void | mipLevelChanged(int mipLevel) |
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.1/qt3drender-qshaderimage.html