QShaderImage Class
class Qt3DRender::QShaderImage셰이더 프로그램에 대한 이미지 액세스를 제공합니다. 더 보기...
헤더: | #include <QShaderImage> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS 3drender) target_link_libraries(mytarget PRIVATE Qt6::3drender) |
qmake: | QT += 3drender |
QML에서: | ShaderImage |
상속합니다: | Qt3DCore::QNode |
상태: | 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차원 다중 샘플 배열 텍스처인 경우 전체 텍스처 레벨 또는 텍스처 레벨의 단일 레이어 또는 면을 바인딩할 수 있습니다. 이는 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_멀티샘플_어레이 | 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_멀티샘플 | QTexture2DMultisample |
iimage2DMSArray | GL_INT_IMAGE_2D_멀티샘플_어레이 | 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_멀티샘플_어레이 | 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 유형 열거형 | 텍스처 유형 |
---|---|---|
이미지 버퍼 | 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) 포맷의 이미지와 함께 사용할 수 있습니다. OpenGL 사양의 표 8.27에는 지원되는 모든 이미지 포맷의 크기와 클래스가 나와 있습니다.
기본적으로 Qt3D는 참조된 텍스처의 이미지 포맷과 일치하도록 이미지 포맷을 설정하려고 시도합니다.
기본값은 QShaderImage::Automatic 입니다.
함수 액세스:
Qt3DRender::QShaderImage::ImageFormat | format() const |
void | setFormat(Qt3DRender::QShaderImage::ImageFormat format) |
알림 신호:
void | formatChanged(Qt3DRender::QShaderImage::ImageFormat format) |
layer : int
참조된 텍스처 중 QShaderImage 에 사용할 레이어를 보유합니다. layered 이 참으로 설정되어 있거나 참조 텍스처의 유형이 레이어와 호환되지 않는 경우 이 속성은 아무 작업도 수행하지 않습니다.
참고: 참조 텍스처가 큐브 맵 또는 큐브 맵 배열 유형이고 ĺ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) |
노티파이 신호:
void | mipLevelChanged(int mipLevel) |
© 2025 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.