このページでは

Qt3DRender::QShaderImage Class

class Qt3DRender::QShaderImage

シェーダープログラムから画像にアクセスできるようにします。詳細...

ヘッダー: #include <qshaderimage.h>
CMake: find_package(Qt6 REQUIRED COMPONENTS 3drender)
target_link_libraries(mytarget PRIVATE Qt6::3drender)
qmake: QT += 3drender
QML内: ShaderImage
継承元: Qt3DCore::QNode
ステータス: 非推奨

このクラスは非推奨です。新しいコードでの使用は強く推奨しません。

パブリック型

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次元マルチサンプル配列テクスチャである場合、テクスチャレベル全体、あるいはそのテクスチャレベル内の単一のレイヤーやフェイスをバインドすることが可能です。これはlayered プロパティで制御できます。

QShaderImage のサポートは、OpenGL 4 でのみ完全に対応しており、OpenGL ES 3.1 および 3.2 では部分的にのみ対応しています。

OpenGL 4 では、以下の画像タイプがサポートされています:

GLSL タイプOpenGL 型列挙型テクスチャタイプ
image1DGL_IMAGE_1DQTexture1D
image2DGL_IMAGE_2DQTexture2D
image3DGL_IMAGE_3DQTexture3D
image2DRectGL_IMAGE_2D_RECTQTextureRectangle
imageCubeGL_IMAGE_CUBEQTextureCubeMap
imageBufferGL_IMAGE_BUFFERQTextureBuffer
image1DArrayGL_IMAGE_1D_ARRAYQTexture1DArray
image2DArrayGL_IMAGE_2D_ARRAYimageCubeArrayQTexture2DArray
imageCubeArrayGL_IMAGE_CUBE_MAP_ARRAYQTextureCubeMapArray
image2DMSGL_IMAGE_2D_MULTISAMPLEQTexture2DMultisample
image2DMSArrayGL_IMAGE_2D_MULTISAMPLE_ARRAYimage1DMSQTexture2DMultisampleArray
iimage1DGL_INT_IMAGE_1DQTexture1D
iimage2DGL_INT_IMAGE_2DQTexture2D
iimage3DGL_INT_IMAGE_3DQTexture3D
iimage2DRectGL_INT_IMAGE_2D_RECTQTextureRectangle
iimageCubeGL_INT_IMAGE_CUBEQTextureCubeMap
iimageBufferGL_INT_IMAGE_BUFFERQTextureBuffer
iimage1DArrayGL_INT_IMAGE_1D_ARRAYQTexture1DArray
iimage2DArrayGL_INT_IMAGE_2D_ARRAYQTexture2DArray
iimageCubeArrayGL_INT_IMAGE_CUBE_MAP_ARRAYQTextureCubeMapArray
iimage2DMSGL_INT_IMAGE_2D_MULTISAMPLEQTexture2DMultisample
iimage2DMSArrayGL_INT_IMAGE_2D_MULTISAMPLE_ARRAYuimage1DMSQTexture2DMultisampleArray
uimage1DGL_UNSIGNED_INT_IMAGE_1DQTexture1D
uimage2DGL_UNSIGNED_INT_IMAGE_2DQTexture2D
uimage3DGL_UNSIGNED_INT_IMAGE_3DQTexture3D
uimage2DRectGL_UNSIGNED_INT_IMAGE_2D_RECTQTextureRectangle
uimageCubeGL_UNSIGNED_INT_IMAGE_CUBEQTextureCubeMap
uimageBufferGL_UNSIGNED_INT_IMAGE_BUFFERQTextureBuffer
uimage1DArrayGL_UNSIGNED_INT_IMAGE_1D_ARRAYQTexture1DArray
uimage2DArrayGL_UNSIGNED_INT_IMAGE_2D_ARRAYQTexture2DArray
uimageCubeArrayGL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAYQTextureCubeMapArray
uimage2DMSGL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLEQTexture2DMultisample
uimage2DMSArrayGL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAYQTexture2DMultisampleArray

OpenGL ES 3.1 は、以下の画像タイプをサポートしています:

GLSL 型OpenGL 型の列挙型テクスチャ・タイプ
image2DGL_IMAGE_2DQTexture2D
image3DGL_IMAGE_3DQTexture3D
imageCubeGL_IMAGE_CUBEQTextureCubeMap
image2DArrayGL_IMAGE_2D_ARRAYQTexture2DArray
iimage2DGL_INT_IMAGE_2DQTexture2D
iimage3DGL_INT_IMAGE_3DQTexture3D
iimageCubeGL_INT_IMAGE_CUBEQTextureCubeMap
iimage2DArrayGL_INT_IMAGE_2D_ARRAYQTexture2DArray
uimage2DGL_UNSIGNED_INT_IMAGE_2DQTexture2D
uimage3DGL_UNSIGNED_INT_IMAGE_3DQTexture3D
uimageCubeGL_UNSIGNED_INT_IMAGE_CUBEQTextureCubeMap
uimage2DArrayGL_UNSIGNED_INT_IMAGE_2D_ARRAYQTexture2DArray

OpenGL ES 3.2 は、OpenGL ES 3.1 のすべての画像タイプに加え、以下のタイプもサポートしています。

GLSL 型OpenGL 型列挙型テクスチャ型
imageBufferGL_IMAGE_BUFFERQTextureBuffer
imageCubeArrayGL_IMAGE_CUBE_MAP_ARRAYQTextureCubeMapArray
iimageBufferGL_IMAGE_BUFFERQTextureBuffer
iimageCubeArrayGL_INT_IMAGE_CUBE_MAP_ARRAYiimageBufferGL_IMAGE_BUFFERiimageCubeArrayQTextureCubeMapArray
uimageBufferGL_UNSIGNED_INT_IMAGE_BUFFERQTextureBuffer
uimageCubeArrayGL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAYQTextureCubeMapArray

想定される使用例は次のようになります:

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::ReadOnly0画像はシェーダー内でのみ読み込まれます
Qt3DRender::QShaderImage::WriteOnly1シェーダーからのみ画像への書き込みが行われる
Qt3DRender::QShaderImage::ReadWrite2シェーダーからのみ読み書きが行われる

enum QShaderImage::ImageFormat

このリストには、利用可能なすべての画像形式が記載されています

定数値説明
Qt3DRender::QShaderImage::NoFormat0GL_NONE
Qt3DRender::QShaderImage::Automatic1Qt 3D 参照されるテクスチャに基づいて、フォーマットを自動的に判別しようとします。
Qt3DRender::QShaderImage::R8_UNorm0x8229GL_R8 (GLSL 型 r8、OpenGL 4.2 以降でサポート)
Qt3DRender::QShaderImage::RG8_UNorm0x822BGL_RG8 (GLSL 型 rg8、OpenGL 4.2 以降でサポート)
Qt3DRender::QShaderImage::RGBA8_UNorm0x8058GL_RGBA8 (GLSL タイプ rgba8、OpenGL 4.2 以降、OpenGL ES 3.1 以降でサポート)
Qt3DRender::QShaderImage::R16_UNorm0x822AGL_R16 (GLSL 型 r16、OpenGL 4.2 以降でサポート)
Qt3DRender::QShaderImage::RG16_UNorm0x822CGL_RG16 (GLSL 型 rg16、OpenGL 4.2 以降でサポート)
Qt3DRender::QShaderImage::RGBA16_UNorm0x805BGL_RGBA16 (GLSL 型 rgba16、OpenGL 4.2 以降でサポート)
Qt3DRender::QShaderImage::R8_SNorm0x8F94GL_R8_SNORM (GLSL 型 r8_snorm、OpenGL 4.2 以降でサポート)
Qt3DRender::QShaderImage::RG8_SNorm0x8F95GL_RG8_SNORM (GLSL 型 rg8_snorm、OpenGL 4.2 以降でサポート)
Qt3DRender::QShaderImage::RGBA8_SNorm0x8F97GL_RGBA8_SNORM (GLSL 型 rgba8_snorm、OpenGL 4.2 以降、OpenGL ES 3.1 以降でサポート)
Qt3DRender::QShaderImage::R16_SNorm0x8F98GL_R16_SNORM (GLSL 型 r16_snorm、OpenGL 4.2 以降でサポート)
Qt3DRender::QShaderImage::RG16_SNorm0x8F99GL_RG16_SNORM (GLSL 型 rg16_snorm、OpenGL 4.2 以降でサポート)
Qt3DRender::QShaderImage::RGBA16_SNorm0x8F9BGL_RGBA16_SNORM (GLSL 型 rgba16_snorm、OpenGL 4.2 以降でサポート)
Qt3DRender::QShaderImage::R8U0x8232GL_R8UI (GLSL 型 r8ui、OpenGL 4.2 以降でサポート)
Qt3DRender::QShaderImage::RG8U0x8238GL_RG8UI (GLSL 型 rg8ui、OpenGL 4.2 以降でサポート)
Qt3DRender::QShaderImage::RGBA8U0x8D7CGL_RGBA8UI (GLSL 型 rgba8ui、OpenGL 4.2 以降、OpenGL ES 3.1 以降でサポート)
Qt3DRender::QShaderImage::R16U0x8234GL_R16UI (GLSL 型 r16ui、OpenGL 4.2 以降でサポート)
Qt3DRender::QShaderImage::RG16U0x823AGL_RG16UI (GLSL 型 rg16ui、OpenGL 4.2 以降でサポート)
Qt3DRender::QShaderImage::RGBA16U0x8D76GL_RGBA16UI (GLSL 型 rgba16ui、OpenGL 4.2 以降、OpenGL ES 3.1 以降でサポート)
Qt3DRender::QShaderImage::R32U0x8236GL_R32UI (GLSL 型 r32ui、OpenGL 4.2 以降、OpenGL ES 3.1 でサポート)
Qt3DRender::QShaderImage::RG32U0x823CGL_RG32UI (GLSL 型 rg32ui、OpenGL 4.2 以降でサポート)
Qt3DRender::QShaderImage::RGBA32U0x8D70GL_RGBA32UI (GLSL 型 rgba32ui、OpenGL 4.2 以降、OpenGL ES 3.1 以降でサポート)
Qt3DRender::QShaderImage::R8I0x8231GL_R8I (GLSL 型 r8i、OpenGL 4.2 以降でサポート)
Qt3DRender::QShaderImage::RG8I0x8237GL_RG8I (GLSL 型 rg8i、OpenGL 4.2 以降でサポート)
Qt3DRender::QShaderImage::RGBA8I0x8D8EGL_RGBA8I (GLSL 型 rgba8i、OpenGL 4.2 以降、OpenGL ES 3.1 以降でサポート)
Qt3DRender::QShaderImage::R16I0x8233GL_R16I (GLSL 型 r16i、OpenGL 4.2 以降でサポート)
Qt3DRender::QShaderImage::RG16I0x8239GL_RG16I (GLSL 型 rg16i、OpenGL 4.2 以降でサポート)
Qt3DRender::QShaderImage::RGBA16I0x8D88GL_RGBA16I (GLSL 型 rgba16i、OpenGL 4.2 以降、OpenGL ES 3.1 以降でサポート)
Qt3DRender::QShaderImage::R32I0x8235GL_R32I (GLSL 型 r32i、OpenGL 4.2 以降、OpenGL ES 3.1 以降でサポート)
Qt3DRender::QShaderImage::RG32I0x823BGL_RG32I (GLSL 型 rg32i、OpenGL 4.2 以降でサポート)
Qt3DRender::QShaderImage::RGBA32I0x8D82GL_RGBA32I (GLSL 型 rgba32i、OpenGL 4.2 以降、OpenGL ES 3.1 以降でサポート)
Qt3DRender::QShaderImage::R16F0x822DGL_R16F (GLSL 型 r16f、OpenGL 4.2 以降でサポート)
Qt3DRender::QShaderImage::RG16F0x822FGL_RG16F (GLSL 型 rg16f、OpenGL 4.2 以降でサポート)
Qt3DRender::QShaderImage::RGBA16F0x881AGL_RGBA16F (GLSL 型 rgba16f、OpenGL 4.2 以降、OpenGL ES 3.1 以降でサポート)
Qt3DRender::QShaderImage::R32F0x822EGL_R32F (GLSL 型 r32f、OpenGL 4.2 以降、OpenGL ES 3.1 以降でサポート)
Qt3DRender::QShaderImage::RG32F0x8230GL_RG32F (GLSL 型 rg32f、OpenGL 4.2 以降でサポート)
Qt3DRender::QShaderImage::RGBA32F0x8814GL_RGBA32F (GLSL 型 rgba32f、OpenGL 4.2 以降、OpenGL ES 3.1 以降でサポート)
Qt3DRender::QShaderImage::RG11B10F0x8C3AGL_R11F_G11F_B10F (GLSL タイプ r11f_g11f_b10f、OpenGL 4.2 以降でサポート)
Qt3DRender::QShaderImage::RGB10A20x8059GL_RGB10_A2 (GLSL 型 rgb10_a2、OpenGL 4.2 以降でサポート)
Qt3DRender::QShaderImage::RGB10A2U0x906FGL_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 には、サポートされているすべての Image フォーマットのサイズとクラスが示されています。

デフォルトでは、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に設定されている場合 、面(face)とレイヤーは以下の方法で取得されます:

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

QShaderImage に対して、参照先のテクスチャのうちどのmipLevelを使用すべきかを指定します。

デフォルト値は 0 です。

アクセス関数:

int mipLevel() const
void setMipLevel(int mipLevel)

Notifierシグナル:

void mipLevelChanged(int mipLevel)

texture : Qt3DRender::QAbstractTexture*

シェーダー画像で使用するテクスチャを保持します。

アクセス関数:

Qt3DRender::QAbstractTexture *texture() const
void setTexture(Qt3DRender::QAbstractTexture *texture)

通知シグナル:

void textureChanged(Qt3DRender::QAbstractTexture *texture)

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.