Spec-Zone.ru › Qt 6.1

Класс 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 }

Свойства

  • access : Access
  • format : ImageFormat
  • layer : int
  • layered : bool
  • mipLevel : int

Публичные функции

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API