Тип QML ShaderImage
Обеспечивает доступ к изображениям для программ шейдеров. Подробнее...
| Оператор импорта: | import Qt3D.Render |
| С: | 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 или если тип ссылки на текстуру несовместим со слоями.
Примечание: Если связанная текстура представляет собой куб или массив кубов, а layered установлен в значение 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.2/qml-qt3d-render-shaderimage.html