Класс 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 |
Типы
| перечисление | Format { GLSL, SPIRV } |
| перечисление | ТипШейдера { Вершина, Фрагмент, УправлениеТиснением, ВычислениеТиснения, Геометрия, Вычисление } |
| перечисление | Статус { Неготов, Готов, Ошибка } |
Свойства
|
|
Открытые функции
| QByteArray | computeShaderCode() const |
| Qt3DRender::QShaderProgram::Format | format() const |
| QByteArray | кодФрагментногоТени() const |
| QByteArray | кодГеометрическогоТени() const |
| QString | журнал() const |
| void | setFormat(Qt3DRender::QShaderProgram::Format format) |
| void | установитьКодТени(Qt3DRender::QShaderProgram::ShaderType type, const QByteArray &shaderCode) |
| QByteArray | кодТени(Qt3DRender::QShaderProgram::ShaderType type) const |
| Qt3DRender::QShaderProgram::Status | статус() 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 | 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 | |||
|---|---|---|---|---|---|
| Матрица модели | modelMatrix | uniform mat4 modelMatrix; | |||
| Матрица вида | viewMatrix | uniform mat4 viewMatrix; | |||
| Матрица проекции | projectionMatrix | uniform mat4 projectionMatrix; | |||
| Матрица модели-вида | modelView | uniform mat4 modelView; | |||
| Матрица вида-проекции | viewProjectionMatrix | uniform mat4 viewProjectionMatrix; | |||
| Матрица модели-вида-проекции | modelViewProjection mvp | uniform mat4 modelViewProjection; uniform mat4 mvp; | |||
| Обратная матрица модели | inverseModelMatrix | uniform mat4 inverseModelMatrix; | |||
| Обратная матрица вида | inverseViewMatrix | uniform mat4 inverseViewMatrix; | |||
| Обратная матрица проекции | inverseProjectionMatrix | uniform mat4 inverseProjectionMatrix; | |||
| Обратная матрица модели-вида | inverseModelView | uniform mat4 inverseModelView; | |||
| Обратная матрица вида-проекции | inverseViewProjectionMatrix | uniform mat4 inverseViewProjectionMatrix; | |||
| Обратная матрица модели-вида-проекции | inverseModelViewProjection | uniform mat4 inverseModelViewProjection; | |||
| Нормальная матрица модели | modelNormalMatrix | uniform mat3 modelNormalMatrix; | |||
| Нормальная матрица модели-вида | modelViewNormal | uniform mat3 modelViewNormal; | |||
| Матрица области просмотра | viewportMatrix | uniform mat4 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; | |||
| Палета скиннинга | skinningPalette[0] | const int maxJoints = 100; uniform mat4 skinningPalette[maxJoints]; | |||
Поддержка RHI
При написании кода GLSL 450 для использования с бэкендом RHI Qt 3D, стандартные униформы будут предоставляться в виде 2 объектов uniform buffer.
Место связывания для них устанавливается на 0 для униформ RenderView и 1 для униформ Command.
#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 используйте связывание, начинающееся с 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;
} Изменений при передаче значений униформам не требуется.
В примере выше, установка 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));
} Документация по типу членов
[since 5.15] перечисление QShaderProgram::Format
Это перечисление определяет формат используемого кода шейдера.
| Постоянная | Значение | Описание |
|---|---|---|
Qt3DRender::QShaderProgram::GLSL |
0 |
OpenGL |
Qt3DRender::QShaderProgram::SPIRV |
1 |
Vulkan, OpenGL 5 |
Этот перечисление был введён или изменён в Qt 5.15.
enum QShaderProgram::ShaderType
Это перечисление определяет тип используемого шейдера.
| Постоянная | Значение | Описание |
|---|---|---|
Qt3DRender::QShaderProgram::Vertex |
0 |
Шейдер вершин |
Qt3DRender::QShaderProgram::Fragment |
1 |
Шейдер фрагментов |
Qt3DRender::QShaderProgram::TessellationControl |
2 |
Шейдер управления разбивкой |
Qt3DRender::QShaderProgram::TessellationEvaluation |
3 |
Шейдер вычисления разбивки |
Qt3DRender::QShaderProgram::Geometry |
4 |
Шейдер геометрии |
Qt3DRender::QShaderProgram::Compute |
5 |
Шейдер вычислений |
enum 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 | 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 Статус
Содержит статус текущей программы шейдеров.
Функции доступа:
| 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
Возвращает состояние текущей программы шейдеров.
Примечание: Функция-получатель для свойства status.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.1/qt3drender-qshaderprogram.html