QShaderProgram Class

class Qt3DRender::QShaderProgram

셰이더 프로그램을 캡슐화합니다. 더 보기...

Header: #include <QShaderProgram>
CMake: find_package(Qt6 REQUIRED COMPONENTS 3drender)
target_link_libraries(mytarget PRIVATE Qt6::3drender)
qmake: QT += 3drender
QML에서: ShaderProgram
상속합니다: Qt3DCore::QNode
상태: Deprecated

공용 유형

enum Format { GLSL, SPIRV }
enum ShaderType { Vertex, Fragment, TessellationControl, TessellationEvaluation, Geometry, Compute }
enum Status { NotReady, Ready, Error }

속성

공용 기능

QByteArray computeShaderCode() const
Qt3DRender::QShaderProgram::Format format() const
QByteArray fragmentShaderCode() const
QByteArray geometryShaderCode() const
QString log() const
void setFormat(Qt3DRender::QShaderProgram::Format format)
void setShaderCode(Qt3DRender::QShaderProgram::ShaderType type, const QByteArray &shaderCode)
QByteArray shaderCode(Qt3DRender::QShaderProgram::ShaderType type) const
Qt3DRender::QShaderProgram::Status status() const
QByteArray tessellationControlShaderCode() const
QByteArray tessellationEvaluationShaderCode() const
QByteArray vertexShaderCode() const

공용 슬롯

void setComputeShaderCode(const QByteArray &computeShaderCode)
void setFragmentShaderCode(const QByteArray &fragmentShaderCode)
void setGeometryShaderCode(const QByteArray &geometryShaderCode)
void setTessellationControlShaderCode(const QByteArray &tessellationControlShaderCode)
void setTessellationEvaluationShaderCode(const QByteArray &tessellationEvaluationShaderCode)
void setVertexShaderCode(const QByteArray &vertexShaderCode)

신호

void computeShaderCodeChanged(const QByteArray &computeShaderCode)
void formatChanged(Qt3DRender::QShaderProgram::Format format)
void fragmentShaderCodeChanged(const QByteArray &fragmentShaderCode)
void geometryShaderCodeChanged(const QByteArray &geometryShaderCode)
void logChanged(const QString &log)
void statusChanged(Qt3DRender::QShaderProgram::Status status)
void tessellationControlShaderCodeChanged(const QByteArray &tessellationControlShaderCode)
void tessellationEvaluationShaderCodeChanged(const QByteArray &tessellationEvaluationShaderCode)
void vertexShaderCodeChanged(const QByteArray &vertexShaderCode)

정적 공용 멤버

QByteArray loadSource(const QUrl &sourceUrl)

상세 설명

셰이더 프로그램은 버텍스 셰이더와 프래그먼트 셰이더 등 여러 가지 셰이더로 구성됩니다.

Qt3D는 셰이더 검사 단계에서 기본 유니폼 세트를 발견하면 자동으로 채웁니다.

기본 유니폼연관된 Qt3D 파라미터 이름GLSL 선언
모델 매트릭스모델매트릭스균일한 mat4 모델 매트릭스;
뷰매트릭스viewMatrix균일한 mat4 viewMatrix;
ProjectionMatrixprojectionMatrix균일한 mat4 projectionMatrix;
모델 뷰 매트릭스modelView균일한 mat4 modelView;
뷰 프로젝션 매트릭스뷰 프로젝션 매트릭스균일한 mat4 viewProjectionMatrix;
모델뷰 프로젝션 매트릭스modelViewProjection
mvp
균일 mat4 modelViewProjection;
균일 mat4 mvp;
역 모델 행렬inverseModelMatrix균일 mat4 inverseModelMatrix;
InverseViewMatrixinverseViewMatrix균일한 mat4 inverseViewMatrix;
InverseProjectionMatrixinverseProjectionMatrix균일한 mat4 inverseProjectionMatrix;
InverseModelViewMatrixinverseModelView균일 mat4 inverseModelView;
InverseViewProjectionMatrixinverseViewProjectionMatrix균일 mat4 inverseViewProjectionMatrix;
InverseModelViewProjectionMatrixinverseModelViewProjection균일 mat4 inverseModelViewProjection;
모델 노멀 행렬모델 노멀 행렬균일 mat3 modelNormalMatrix;
모델 뷰 노멀 행렬modelViewNormal균일한 mat3 modelViewNormal;
뷰포트 매트릭스뷰포트 매트릭스균일한 mat4 뷰포트 매트릭스
역 뷰포트 매트릭스역뷰포트 매트릭스균일한 mat4 역뷰포트 매트릭스;
종횡비
(표면 너비/표면 높이)
aspectRatio균일 플로트 종횡비;
노출노출균일한 플로트 노출;
감마감마균일한 플로트 감마;
시간
(나노초 단위)
시간균일한 플로트 시간;
EyePositioneyePosition균일한 vec3 눈 위치;
스키닝 팔레트skinningPalette[0]const int maxJoints = 100;
uniform mat4 skinningPalette[maxJoints];

RHI 지원

Qt 3D 의 RHI 백엔드에서 사용할 GLSL 450 셰이더 코드를 작성할 때 기본 유니폼은 2개의 유니폼 버퍼 오브젝트로 제공됩니다.

이 유니폼의 바인딩 위치는 RenderView 유니폼의 경우 바인딩 0으로, Command 유니폼의 경우 바인딩 1로 설정됩니다.

#version 450 core

layout(location = 0) in vec3 vertexPosition;

layout(std140, binding = 0) uniform qt3d_render_view_uniforms {
  mat4 viewMatrix;
  mat4 projectionMatrix;
  mat4 uncorrectedProjectionMatrix;
  mat4 clipCorrectionMatrix;
  mat4 viewProjectionMatrix;
  mat4 inverseViewMatrix;
  mat4 inverseProjectionMatrix;
  mat4 inverseViewProjectionMatrix;
  mat4 viewportMatrix;
  mat4 inverseViewportMatrix;
  vec4 textureTransformMatrix;
  vec3 eyePosition;
  float aspectRatio;
  float gamma;
  float exposure;
  float time;
  float yUpInNDC;
  float yUpInFBO;
};

layout(std140, binding = 1) uniform qt3d_command_uniforms {
  mat4 modelMatrix;
  mat4 inverseModelMatrix;
  mat4 modelViewMatrix;
  mat3 modelNormalMatrix;
  mat4 inverseModelViewMatrix;
  mat4 modelViewProjection;
  mat4 inverseModelViewProjectionMatrix;
};

void main()
{
    gl_Position = (projectionMatrix * viewMatrix * modelMatrix * vertexPosition);
}

사용자 정의 유니폼 버퍼 오브젝트의 경우 바인딩을 2에서 시작하거나 자동을 사용하여 Qt 3D 에서 자동으로 바인딩을 수행하도록 합니다. 여러 셰이더 단계 간에 일관성을 유지해야 합니다.

#version 450 core

layout(std140, binding = auto) uniform my_uniforms {
  vec4 myColor;
};

layout(location=0) out vec4 fragColor;

void main()
{
    fragColor = myColor;
}

유니폼에 값을 공급할 때는 변경 사항이 없습니다.

위의 예제에서는 myColor를 설정하면 됩니다:

QParameter *parameter = new QParameter();
parameter->setName("myColor");
parameter->setValue(QVariant::fromValue(QColor(Qt::blue)));

텍스처는 여전히 독립형 유니폼으로 정의해야 합니다.

#version 450 core

layout(binding=0) uniform sampler2D source;

layout(location=0) out vec4 fragColor;

void main()
{
    fragColor = texture(source, vec2(0.5, 0.5));
}

멤버 유형 문서

enum QShaderProgram::Format

이 열거형은 사용된 셰이더 코드의 형식을 식별합니다.

Constant설명
Qt3DRender::QShaderProgram::GLSL0OpenGL
Qt3DRender::QShaderProgram::SPIRV1벌칸, OpenGL 5

enum QShaderProgram::ShaderType

이 열거형은 사용된 셰이더 유형을 식별합니다.

Constant설명
Qt3DRender::QShaderProgram::Vertex0버텍스 셰이더
Qt3DRender::QShaderProgram::Fragment1프래그먼트 셰이더
Qt3DRender::QShaderProgram::TessellationControl2테셀레이션 제어 셰이더
Qt3DRender::QShaderProgram::TessellationEvaluation3테셀레이션 평가 셰이더
Qt3DRender::QShaderProgram::Geometry4지오메트리 셰이더
Qt3DRender::QShaderProgram::Compute5계산 셰이더

enum QShaderProgram::Status

이 열거형은 사용된 셰이더의 상태를 식별합니다.

Constant설명
Qt3DRender::QShaderProgram::NotReady0셰이더가 아직 컴파일 및 링크되지 않았습니다.
Qt3DRender::QShaderProgram::Ready1셰이더가 성공적으로 컴파일되었습니다.
Qt3DRender::QShaderProgram::Error2셰이더를 컴파일하는 도중 오류가 발생했습니다.

프로퍼티 문서

computeShaderCode : QByteArray

이 셰이더 프로그램에서 사용하는 계산 셰이더 코드를 보유합니다.

함수에 액세스합니다:

QByteArray computeShaderCode() const
void setComputeShaderCode(const QByteArray &computeShaderCode)

알림 신호:

void computeShaderCodeChanged(const QByteArray &computeShaderCode)

format : Format

ShaderProgram 에 제공된 코드의 형식을 유지합니다. 기본값은 ShaderProgram.GLSL입니다.

액세스 함수입니다:

Qt3DRender::QShaderProgram::Format format() const
void setFormat(Qt3DRender::QShaderProgram::Format format)

알림 신호:

void formatChanged(Qt3DRender::QShaderProgram::Format format)

fragmentShaderCode : QByteArray

이 셰이더 프로그램에서 사용하는 조각 셰이더 코드를 보유합니다.

함수에 액세스합니다:

QByteArray fragmentShaderCode() const
void setFragmentShaderCode(const QByteArray &fragmentShaderCode)

알림 신호:

void fragmentShaderCodeChanged(const QByteArray &fragmentShaderCode)

geometryShaderCode : QByteArray

이 셰이더 프로그램에서 사용하는 지오메트리 셰이더 코드를 보유합니다.

함수에 액세스합니다:

QByteArray geometryShaderCode() const
void setGeometryShaderCode(const QByteArray &geometryShaderCode)

알림 신호:

void geometryShaderCodeChanged(const QByteArray &geometryShaderCode)

[read-only] log : const QString

현재 셰이더 프로그램의 로그를 보관합니다. 셰이더 프로그램의 컴파일 오류를 진단하는 데 유용합니다.

액세스 함수:

QString log() const

알림 신호:

void logChanged(const QString &log)

[read-only] status : const Status

현재 셰이더 프로그램의 상태를 유지합니다.

기능에 액세스합니다:

Qt3DRender::QShaderProgram::Status status() const

알림 신호:

void statusChanged(Qt3DRender::QShaderProgram::Status status)

tessellationControlShaderCode : QByteArray

이 셰이더 프로그램에서 사용하는 테셀레이션 제어 셰이더 코드를 보유합니다.

함수에 액세스합니다:

QByteArray tessellationControlShaderCode() const
void setTessellationControlShaderCode(const QByteArray &tessellationControlShaderCode)

알림 신호:

void tessellationControlShaderCodeChanged(const QByteArray &tessellationControlShaderCode)

tessellationEvaluationShaderCode : QByteArray

이 셰이더 프로그램에서 사용하는 테셀레이션 평가 셰이더 코드를 보유합니다.

함수에 액세스합니다:

QByteArray tessellationEvaluationShaderCode() const
void setTessellationEvaluationShaderCode(const QByteArray &tessellationEvaluationShaderCode)

알림 신호:

void tessellationEvaluationShaderCodeChanged(const QByteArray &tessellationEvaluationShaderCode)

vertexShaderCode : QByteArray

이 셰이더 프로그램에서 사용하는 버텍스 셰이더 코드를 보유합니다.

함수에 액세스합니다:

QByteArray vertexShaderCode() const
void setVertexShaderCode(const QByteArray &vertexShaderCode)

알림 신호:

void vertexShaderCodeChanged(const QByteArray &vertexShaderCode)

멤버 함수 문서

[static invokable] QByteArray QShaderProgram::loadSource(const QUrl &sourceUrl)

sourceUrl 에서 로드한 셰이더 코드를 반환합니다.

참고: 이 함수는 메타 오브젝트 시스템과 QML을 통해 호출할 수 있습니다. Q_INVOKABLE 을 참조하십시오.

void QShaderProgram::setShaderCode(Qt3DRender::QShaderProgram::ShaderType type, const QByteArray &shaderCode)

셰이더의 type 에 대한 셰이더 코드를 shaderCode 로 설정합니다.

shaderCode()도 참조하세요 .

QByteArray QShaderProgram::shaderCode(Qt3DRender::QShaderProgram::ShaderType type) const

type 에 대한 셰이더 코드를 반환합니다.

setShaderCode()도 참조하세요 .

Qt3DRender::QShaderProgram::Status QShaderProgram::status() const

현재 셰이더 프로그램의 상태를 반환합니다.

참고: 프로퍼티 상태에 대한 게터 함수입니다.

© 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.