Класс QShaderProgram
класс Qt3DRender::QShaderProgramОборачивает программу шейдеров. Подробнее...
| Заголовок: | #include <QShaderProgram> |
| CMake: | find_package(Qt6 COMPONENTS 3drender REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::3drender) |
| qmake: | QT += 3drender |
| С момента: | Qt 5.5 |
| Инициализируется: | ShaderProgram |
| Наследует: | Qt3DCore::QNode |
Типы публичного доступа
| Перечисление | Формат { GLSL, SPIRV } |
| Перечисление | ТипШейдера { Вершинный, Фрагментный, УправлениеТиссацией, ОценкаТиссации, Геометрия, Вычисление } |
| Перечисление | Статус { НеГотово, Готово, Ошибка } |
Свойства
|
|
Открытые функции
| QByteArray | computeShaderCode() const |
| Qt3DRender::QShaderProgram::Формат | формат() const |
| QByteArray | кодФрагментногоШейдера() const |
| QByteArray | кодГеометрическогоШейдера() const |
| QString | лог() const |
| void | установитьФормат(Qt3DRender::QShaderProgram::Формат формат) |
| void | установитьКодШейдера(Qt3DRender::QShaderProgram::ТипШейдера тип, const QByteArray &кодШейдера) |
| QByteArray | кодШейдера(Qt3DRender::QShaderProgram::ТипШейдера тип) const |
| Qt3DRender::QShaderProgram::Статус | статус() const |
| QByteArray | кодШейдераУправленияТиссацией() const |
| QByteArray | кодШейдераОценкиТиссации() const |
| QByteArray | кодВершинногоШейдера() const |
Открытые слоты
| void | установитьКодВычислительногоШейдера(const QByteArray &computeShaderCode) |
| void | установитьКодФрагментногоШейдера(const QByteArray &fragmentShaderCode) |
| void | установитьКодГеометрическогоШейдера(const QByteArray &geometryShaderCode) |
| void | установитьКодШейдераУправленияТиссацией(const QByteArray &tessellationControlShaderCode) |
| void | установитьКодШейдераОценкиТиссации(const QByteArray &tessellationEvaluationShaderCode) |
| void | установитьКодВершинногоШейдера(const QByteArray &vertexShaderCode) |
Сигналы
| void | изменениеКодаВычислительногоШейдера(const QByteArray &computeShaderCode) |
| void | изменениеФормата(Qt3DRender::QShaderProgram::Формат формат) |
| void | изменениеКодаФрагментногоШейдера(const QByteArray &fragmentShaderCode) |
| void | изменениеКодаГеометрическогоШейдера(const QByteArray &geometryShaderCode) |
| void | изменениеЛога(const QString &log) |
| void | изменениеСтатуса(Qt3DRender::QShaderProgram::Статус статус) |
| void | изменениеКодаШейдераУправленияТиссацией(const QByteArray &tessellationControlShaderCode) |
| void | изменениеКодаШейдераОценкиТиссации(const QByteArray &tessellationEvaluationShaderCode) |
| void | изменениеКодаВершинногоШейдера(const QByteArray &vertexShaderCode) |
Статические открытые члены
| QByteArray | загрузитьИсходник(const QUrl &sourceUrl) |
Подробное описание
Программа шейдеров состоит из нескольких разных шейдеров, таких как вершинный и фрагментный.
Qt3D автоматически заполнит набор стандартных переменных, если они встретятся во время фазы интроспекции шейдера.
END_OF_DOCUMENT_MARKER| Умолчание Uniform | Соответствующее имя параметра Qt3D | Объявление GLSL | |||
|---|---|---|---|---|---|
| ModelMatrix | modelMatrix | uniform mat4 modelMatrix; | |||
| ViewMatrix | viewMatrix | uniform mat4 viewMatrix; | |||
| ProjectionMatrix | projectionMatrix | uniform mat4 projectionMatrix; | |||
| ModelViewMatrix | modelView | uniform mat4 modelView; | |||
| ViewProjectionMatrix | viewProjectionMatrix | uniform mat4 viewProjectionMatrix; | |||
| ModelViewProjectionMatrix | modelViewProjection mvp | uniform mat4 modelViewProjection; uniform mat4 mvp; | |||
| ОбратнаяModelMatrix | inverseModelMatrix | uniform mat4 inverseModelMatrix; | |||
| ОбратнаяViewMatrix | inverseViewMatrix | uniform mat4 inverseViewMatrix; | |||
| ОбратнаяProjectionMatrix | inverseProjectionMatrix | uniform mat4 inverseProjectionMatrix; | |||
| ОбратнаяModelViewMatrix | inverseModelView | uniform mat4 inverseModelView; | |||
| ОбратнаяViewProjectionMatrix | inverseViewProjectionMatrix | uniform mat4 inverseViewProjectionMatrix; | |||
| ОбратнаяModelViewProjectionMatrix | inverseModelViewProjection | uniform mat4 inverseModelViewProjection; | |||
| Матрица нормалей Model | modelNormalMatrix | uniform mat3 modelNormalMatrix; | |||
| Матрица нормалей ModelView | modelViewNormal | uniform mat3 modelViewNormal; | |||
| ViewportMatrix | viewportMatrix | uniform mat4 viewportMatrix; | |||
| ОбратнаяViewportMatrix | inverseViewportMatrix | uniform mat4 inverseViewportMatrix; | |||
| Соотношение сторон (ширина поверхности / высота поверхности) | aspectRatio | uniform float aspectRatio; | |||
| Экспозиция | exposure | uniform float exposure; | |||
| Гамма | gamma | uniform float gamma; | |||
| Время (в наносекундах) | time | uniform float time; | |||
| Положение глаза | eyePosition | uniform vec3 eyePosition; | |||
| Palette Skinning | skinningPalette[0] | const int maxJoints = 100; uniform mat4 skinningPalette[maxJoints]; | |||
Поддержка RHI
При написании кода GLSL 450 для использования с бэкендом RHI Qt 3D будут предоставлены стандартные uniform как 2 uniform buffer object.
Место привязки для этих значений установлено на привязки 0 для RenderView uniform и 1 для Command uniform.
#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);
} Для пользовательских uniform buffer object используйте привязки, начиная с 2, или auto, чтобы позволить Qt 3D автоматически рассчитать привязку. Убедитесь, что вы сохраняете согласованность между различными этапами шейдеров.
#version 450 core
layout(std140, binding = auto) uniform my_uniforms {
vec4 myColor;
};
layout(location=0) out vec4 fragColor;
void main()
{
fragColor = myColor;
} При передаче значений uniform никаких изменений не требуется.
Например, для установки myColor можно сделать так:
Документация по типам членов
[since 5.15] перечисление QShaderProgram::Format
Это перечисление определяет формат используемого кода шейдера.
| Константа | Значение | Описание |
|---|---|---|
Qt3DRender::QShaderProgram::GLSL |
0 |
OpenGL |
Qt3DRender::QShaderProgram::SPIRV |
1 |
Vulkan, OpenGL 5 |
Это перечисление было добавлено или изменено в Qt 5.15.
перечисление QShaderProgram::ShaderType
Это перечисление определяет тип используемого шейдера.
| Константа | Значение | Описание |
|---|---|---|
Qt3DRender::QShaderProgram::Vertex |
0 |
Вершинный шейдер |
Qt3DRender::QShaderProgram::Fragment |
1 |
Фрагментный шейдер |
Qt3DRender::QShaderProgram::TessellationControl |
2 |
Управляющий шейдер tessellation |
Qt3DRender::QShaderProgram::TessellationEvaluation |
3 |
Шейдер вычисления tessellation |
Qt3DRender::QShaderProgram::Geometry |
4 |
Геометрический шейдер |
Qt3DRender::QShaderProgram::Compute |
5 |
Шейдер вычислений |
перечисление QShaderProgram::Status
Это перечисление определяет состояние используемого шейдера.
| Константа | Значение | Описание |
|---|---|---|
Qt3DRender::QShaderProgram::NotReady |
0 |
Шейдер еще не был скомпилирован и связан |
Qt3DRender::QShaderProgram::Ready |
1 |
Шейдер был успешно скомпилирован |
Qt3DRender::QShaderProgram::Error |
2 |
При компиляции шейдера произошла ошибка |
Документация свойств
computeShaderCode : QByteArray
Содержит код шейдера вычислений, используемый этой программой шейдеров.
Функции доступа:
| QByteArray | computeShaderCode() const |
| void | setComputeShaderCode(const QByteArray &computeShaderCode) |
Сигнал уведомления:
| void | computeShaderCodeChanged(const QByteArray &computeShaderCode) |
[since 5.15] format : Формат
Содержит формат кода, предоставленного в ShaderProgram. По умолчанию — ShaderProgram.GLSL
Это свойство было добавлено в Qt 5.15.
Функции доступа:
| Qt3DRender::QShaderProgram::Формат | format() const |
| void | setFormat(Qt3DRender::QShaderProgram::Формат format) |
Сигнал уведомления:
| void | formatChanged(Qt3DRender::QShaderProgram::Формат 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] состояние : const Состояние
Содержит состояние текущей программы шейдеров.
Функции доступа:
| Qt3DRender::QShaderProgram::Состояние | состояние() const |
Сигнал уведомления:
| void | statusChanged(Qt3DRender::QShaderProgram::Состояние 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] QByteArray QShaderProgram::loadSource(const QUrl &sourceUrl)
Возвращает код шейдера, загруженный из sourceUrl.
Примечание: Эту функцию можно вызвать через систему метаобъектов и из QML. См. Q_INVOKABLE.
void QShaderProgram::setShaderCode(Тип шейдера Qt3DRender::QShaderProgram type, const QByteArray &shaderCode)
Устанавливает код шейдера для type шейдера в shaderCode.
См. также shaderCode().
QByteArray QShaderProgram::shaderCode(Тип шейдера Qt3DRender::QShaderProgram type) const
Возвращает код шейдера для type.
См. также setShaderCode().
Состояние Qt3DRender::QShaderProgram QShaderProgram::состояние() const
Возвращает состояние текущей программы шейдеров.
Примечание: Функция-член для свойства состояния.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.0/qt3drender-qshaderprogram.html