QShaderImage Class
class Qt3DRender::QShaderImageシェーダープログラムへのイメージアクセスを提供します。詳細...
Header: | #include <QShaderImage> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS 3drender) target_link_libraries(mytarget PRIVATE Qt6::3drender) |
qmake: | QT += 3drender |
In QML: | ShaderImage |
Inherits: | Qt3DCore::QNode |
Status: | Deprecated |
パブリックタイプ
enum | Access { ReadOnly, WriteOnly, ReadWrite } |
enum | ImageFormat { NoFormat, Automatic, R8_UNorm, RG8_UNorm, RGBA8_UNorm, …, RGB10A2U } |
プロパティ
パブリック関数
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として公開する必要があります。テクスチャは複数のミップレベル、レイヤー、フェースで構成できます。さらに、QShaderImageを宣言することで、テクスチャ・コンテンツのどのレベル、レイヤー、面にアクセスしたいかを指定できます。
QShaderImage が正しく動作するには、QParameter'の値として割り当てられ、有効なQt3DRender::QAbstractTexture を参照する必要があります。
参照されるテクスチャが 1 次元配列、2 次元配列、3 次元、キューブマップ、キューブマップ配列、または 2 次元マルチサンプル配列テクスチャの場合、テクスチャレベル全体、またはテクスチャレベルの 1 つのレイヤーまたは面のいずれかをバインドできます。これは、layered プロパティで制御できます。
QShaderImageのサポートはOpenGL 4でのみサポートされており、OpenGL ES 3.1と3.2では部分的にサポートされています。
OpenGL 4 では、以下のイメージ・タイプがサポートされています:
GLSLタイプ | OpenGLタイプ列挙型 | テクスチャ・タイプ |
---|---|---|
image1D | GL_IMAGE_1D | QTexture1D |
画像2D | GL_IMAGE_2D | QTexture2D |
画像3D | GL_IMAGE_3D | QTexture3D |
イメージ2Dレクト | GL_IMAGE_2DRECT | QTextureRectangle |
イメージキューブ | GL_IMAGE_CUBE | QTextureCubeMap |
イメージバッファ | gl_image_buffer。 | QTextureBuffer |
image1DArray | gl_image_1d_array。 | QTexture1DArray |
イメージ2Dアレイ | gl_image_2d_array。 | QTexture2DArray |
イメージキューブマップ配列 | gl_image_cube_map_array。 | QTextureCubeMapArray |
画像2DMS | 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 |
画像キューブ | gl_int_image_cube | QTextureCubeMap |
iimageバッファ | 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タイプ列挙型 | テクスチャタイプ |
---|---|---|
イメージ2D | GL_IMAGE_2D | QTexture2D |
画像3D | GL_IMAGE_3D | QTexture3D |
イメージキューブ | GL_IMAGE_CUBE | QTextureCubeMap |
画像2D配列 | GL_IMAGE_2DA_ARRAY | QTexture2DArray |
iimage2D | gl_int_image_2d | QTexture2D |
iimage3D | gl_int_image_3d。 | QTexture3D |
立方体 | 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タイプ列挙型 | テクスチャ・タイプ |
---|---|---|
イメージバッファ | gl_image_buffer | QTextureBuffer |
イメージキューブマップ配列 | gl_image_cube_map_array | QTextureCubeMapArray |
iimageバッファ | 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
これは、シェーダからImageに値を格納するときに本質的に重要です。
このフォーマットは、参照されるテクスチャのフォーマットと同じである必要はありません。ただし、互換性がなければなりません(サイズは一致しますが、クラスタイプは必ずしも一致しません)。たとえば、フォーマット R32F(サイズ 32 ビット、クラス 1x32)のテクスチャは、フォーマット RGBA8I(サイズ 32 ビット、クラス 4x8)のイメージで使用できます。OpenGL仕様の表8.27に、サポートされているすべてのイメージフォーマットのサイズとクラスが示されています。
デフォルトでは、Qt3Dは参照されるテクスチャのフォーマットと一致するように、イメージフォーマットを設定しようとします。
デフォルト値はQShaderImage::Automatic です。
アクセス関数
Qt3DRender::QShaderImage::ImageFormat | format() const |
void | setFormat(Qt3DRender::QShaderImage::ImageFormat format) |
Notifier シグナル:
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 に設定すると、参照されるテクスチャが 1 次元配列、2 次元配列、3 次元、キューブマップ、キューブマップ配列、または 2 次元マルチサンプル配列テクスチャの場合、すべてのレイヤに対してレベル全体がバインドされます。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) |
Notifier シグナル:参照されるテクスチャのうち、どの mipLevel を使用するかを保持します:
void | mipLevelChanged(int mipLevel) |
本書に含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。