이 페이지에서

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_ARRAYQTexture2DArray
imageCubeArrayGL_IMAGE_CUBE_MAP_ARRAYQTextureCubeMapArray
image2DMSGL_IMAGE_2D_MULTISAMPLEQTexture2DMultisample
image2DMSArrayGL_IMAGE_2D_MULTISAMPLE_ARRAYQTexture2DMultisampleArray
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_ARRAYQTexture2DMultisampleArray
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_ARRAYQTextureCubeMapArray
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로 설정되어 있거나 참조 텍스처의 유형이 레이어와 호환되지 않는 경우 아무런 동작을 하지 않습니다.

참고: 참조된 텍스처의 유형이 큐브 맵(cube map) 또는 큐브 맵 배열(cube map array)이고, ' ĺayered '가 false로 설정된경우 , 면(face)과 레이어(layer)는 다음과 같은 방식으로 가져옵니다:

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)

알림 신호:

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.