Класс 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.0/qt3drender-qshaderimage.html