Класс 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 |
Типы public
| Перечисление | Access { Только чтение, Только запись, Чтение/запись } |
| Перечисление | ImageFormat { Нет формата, Автоматически, R8_UNorm, RG8_UNorm, RGBA8_UNorm, …, RGB10A2U } |
Свойства
Public Функции
| Qt3DRender::QShaderImage::Access | access() const |
| Qt3DRender::QShaderImage::ImageFormat | format() const |
| int | layer() const |
| bool | layered() const |
| int | mipLevel() const |
| Qt3DRender::QAbstractTexture * | texture() const |
Public слоты
| 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 Тип | OpenGL Тип перечисления | Тип текстуры |
|---|---|---|
| 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 Тип | OpenGL Тип перечисления | Тип текстуры |
|---|---|---|
| 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 Тип | OpenGL Тип перечисления | Тип текстуры |
|---|---|---|
| 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); Документация по типу члена
перечисление QShaderImage::Access
| Константа | Значение | Описание |
|---|---|---|
Qt3DRender::QShaderImage::ReadOnly |
0 |
Изображение будет только читаться в шейдерах |
Qt3DRender::QShaderImage::WriteOnly |
1 |
Изображение будет только записываться в шейдерах |
Qt3DRender::QShaderImage::ReadWrite |
2 |
Изображение будет только читаться и записываться в шейдерах |
перечисление 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 или если тип текстуры ссылки несовместим со слоями.
Примечание: Когда связанная текстура имеет тип кубовой карты или массива кубовых карт и layered установлено в 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
Содержит уровень mipLevel из связанной текстуры, который следует использовать для 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.2/qt3drender-qshaderimage.html