Spec-Zone.ru › Qt

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

Свойства

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

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

Spec-Zone.ru

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