Тип QML ShaderImage
Предоставляет доступ к изображениям для программ шейдеров. Подробнее...
| Оператор импорта: | import Qt3D.Render 2.1 |
| С момента: | Qt 5.14 |
| Создаёт: | QShaderImage |
Свойства
Подробное описание
Для того, чтобы содержимое текстур было доступно для операций чтения и записи в шейдере, они должны быть представлены как ShaderImage. Текстуры могут состоять из нескольких уровней mip, слоёв и граней. Кроме того, объявление ShaderImage позволяет указать, какой уровень, слой или грань содержимого текстуры мы хотим получить доступ.
ShaderImage должен быть присвоен в качестве значения параметра и ссылаться на допустимую Qt3D.Render.AbstractTexture для корректной работы.
Если ссылаемая текстура является одномерным массивом, двумерным массивом, трёхмерной, кубовой картой, массивом кубовых карт или двумерной текстурой с многократным выбором образцов, то можно привязать либо весь уровень текстуры, либо отдельный слой или грань уровня текстуры. Это можно контролировать с помощью свойства layered.
Поддержка ShaderImage поддерживается только с OpenGL 4 и частично с OpenGL ES 3.1 и 3.2.
OpenGL 4 поддерживает следующие типы изображений:
| GLSL Тип | Перечисление типа OpenGL | Тип текстуры |
|---|---|---|
| image1D | GL_IMAGE_1D | Texture1D |
| image2D | GL_IMAGE_2D | Texture2D |
| image3D | GL_IMAGE_3D | Texture3D |
| image2DRect | GL_IMAGE_2D_RECT | TextureRectangle |
| imageCube | GL_IMAGE_CUBE | TextureCubeMap |
| imageBuffer | GL_IMAGE_BUFFER | TextureBuffer |
| image1DArray | GL_IMAGE_1D_ARRAY | Texture1DArray |
| image2DArray | GL_IMAGE_2D_ARRAY | Texture2DArray |
| imageCubeArray | GL_IMAGE_CUBE_MAP_ARRAY | TextureCubeMapArray |
| image2DMS | GL_IMAGE_2D_MULTISAMPLE | Texture2DMultisample |
| image2DMSArray | GL_IMAGE_2D_MULTISAMPLE_ARRAY | Texture2DMultisampleArray |
| iimage1D | GL_INT_IMAGE_1D | Texture1D |
| iimage2D | GL_INT_IMAGE_2D | Texture2D |
| iimage3D | GL_INT_IMAGE_3D | Texture3D |
| iimage2DRect | GL_INT_IMAGE_2D_RECT | TextureRectangle |
| iimageCube | GL_INT_IMAGE_CUBE | TextureCubeMap |
| iimageBuffer | GL_INT_IMAGE_BUFFER | TextureBuffer |
| iimage1DArray | GL_INT_IMAGE_1D_ARRAY | Texture1DArray |
| iimage2DArray | GL_INT_IMAGE_2D_ARRAY | Texture2DArray |
| iimageCubeArray | GL_INT_IMAGE_CUBE_MAP_ARRAY | TextureCubeMapArray |
| iimage2DMS | GL_INT_IMAGE_2D_MULTISAMPLE | Texture2DMultisample |
| iimage2DMSArray | GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY | Texture2DMultisampleArray |
| uimage1D | GL_UNSIGNED_INT_IMAGE_1D | Texture1D |
| uimage2D | GL_UNSIGNED_INT_IMAGE_2D | Texture2D |
| uimage3D | GL_UNSIGNED_INT_IMAGE_3D | Texture3D |
| uimage2DRect | GL_UNSIGNED_INT_IMAGE_2D_RECT | TextureRectangle |
| uimageCube | GL_UNSIGNED_INT_IMAGE_CUBE | TextureCubeMap |
| uimageBuffer | GL_UNSIGNED_INT_IMAGE_BUFFER | TextureBuffer |
| uimage1DArray | GL_UNSIGNED_INT_IMAGE_1D_ARRAY | Texture1DArray |
| uimage2DArray | GL_UNSIGNED_INT_IMAGE_2D_ARRAY | Texture2DArray |
| uimageCubeArray | GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY | TextureCubeMapArray |
| uimage2DMS | GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE | Texture2DMultisample |
| uimage2DMSArray | GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY | Texture2DMultisampleArray |
OpenGL ES 3.1 поддерживает следующие типы изображений:
| GLSL Тип | Перечисление типа OpenGL | Тип текстуры |
|---|---|---|
| image2D | GL_IMAGE_2D | Texture2D |
| image3D | GL_IMAGE_3D | Texture3D |
| imageCube | GL_IMAGE_CUBE | TextureCubeMap |
| image2DArray | GL_IMAGE_2D_ARRAY | Texture2DArray |
| iimage2D | GL_INT_IMAGE_2D | Texture2D |
| iimage3D | GL_INT_IMAGE_3D | Texture3D |
| iimageCube | GL_INT_IMAGE_CUBE | TextureCubeMap |
| iimage2DArray | GL_INT_IMAGE_2D_ARRAY | Texture2DArray |
| uimage2D | GL_UNSIGNED_INT_IMAGE_2D | Texture2D |
| uimage3D | GL_UNSIGNED_INT_IMAGE_3D | Texture3D |
| uimageCube | GL_UNSIGNED_INT_IMAGE_CUBE | TextureCubeMap |
| uimage2DArray | GL_UNSIGNED_INT_IMAGE_2D_ARRAY | Texture2DArray |
OpenGL ES 3.2 поддерживает все типы изображений OpenGL ES 3.1, а также следующие:
| GLSL Тип | Перечисление типа OpenGL | Тип текстуры |
|---|---|---|
| imageBuffer | GL_IMAGE_BUFFER | TextureBuffer |
| imageCubeArray | GL_IMAGE_CUBE_MAP_ARRAY | TextureCubeMapArray |
| iimageBuffer | GL_IMAGE_BUFFER | TextureBuffer |
| iimageCubeArray | GL_INT_IMAGE_CUBE_MAP_ARRAY | TextureCubeMapArray |
| uimageBuffer | GL_UNSIGNED_INT_IMAGE_BUFFER | TextureBuffer |
| uimageCubeArray | GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY | TextureCubeMapArray |
Ожидаемое использование:
import Qt3D.Render 2.14
Entity {
...
Texture2D {
id: tex2D
...
}
Material {
parameters: Parameter {
name: "imageUniformName"
value: ShaderImage {
texture: tex2D
}
}
...
}
...
} Документация свойств
access : перечисление
Указывает тип доступа, который мы хотим разрешить для наших экземпляров шейдеров к изображению. Если шейдер пытается записать или прочитать изображение с несовместимым доступом, поведение неопределено.
| Постоянная | Описание |
|---|---|
ShaderImage.ReadOnly |
Только чтение. |
ShaderImage.WriteOnly |
Только запись. |
ShaderImage.ReadWrite |
Чтение и запись. |
Значение по умолчанию — ShaderImage.ReadWrite.
format : перечисление
Указывает формат изображения, что очень важно при хранении значений в ShaderImage из шейдера.
Формат не обязательно должен совпадать с форматом текстуры, к которой он относится. Однако он должен быть совместим (совпадать по размеру, но не обязательно по типу). Например, текстура формата R32F (размер 32 бита, класс 1x32) может использоваться с изображением формата RGBA8I (размер 32 бита, класс 4x8). Таблица 8.27 спецификаций OpenGL показывает размер и класс для всех поддерживаемых форматов изображений.
По умолчанию Qt3D попытается установить формат изображения, соответствующий формату связанной текстуры.
Значение по умолчанию — ShaderImage.Automatic.
layer : целое
Указывает, какой слой из связанной текстуры следует использовать для ShaderImage. Это свойство ничего не делает, если layered установлено в значение true или если тип текстуры-ссылки несовместим со слоями.
Примечание: Когда связанная текстура является текстурой типа куб или массивом текстур куб и ĺayered установлено в значение false, грань и слой извлекаются следующим образом:
cubeMapLayer = layer / 6 cubeMapFace = layer - (cubeMapLayer * 6)
Значение по умолчанию — 0.
layered : логическое
*
Если установлено в значение true, если связанная текстура является одномерным, двумерным, трехмерным, массивом текстур куб, массивом текстур куб или двумерным многократным массивом текстур, весь уровень будет привязан для всех слоев. Если установлено в значение false, будет привязана только единственная плоскость, определённая свойством layer.
Значение по умолчанию — false.
mipLevel : целое
Указывает, какой mipLevel из связанной текстуры следует использовать для ShaderImage.
Значение по умолчанию — 0.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.1/qml-qt3d-render-shaderimage.html