Класс 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 | кодШейдераВычисления() 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 &кодШейдераВычисления) |
| void | установитьКодФрагментногоШейдера(const QByteArray &кодФрагментногоШейдера) |
| void | установитьКодГеометрическогоШейдера(const QByteArray &кодГеометрическогоШейдера) |
| void | установитьКодШейдераУправленияТрассировкой(const QByteArray &кодШейдераУправленияТрассировкой) |
| void | установитьКодШейдераОценкиТрассировки(const QByteArray &кодШейдераОценкиТрассировки) |
| void | установитьКодВершинногоШейдера(const QByteArray &кодВершинногоШейдера) |
Сигналы
| void | изменилсяКодШейдераВычисления(const QByteArray &кодШейдераВычисления) |
| void | изменилсяФормат(Qt3DRender::QShaderProgram::Формат формат) |
| void | изменилсяКодФрагментногоШейдера(const QByteArray &кодФрагментногоШейдера) |
| void | изменилсяКодГеометрическогоШейдера(const QByteArray &кодГеометрическогоШейдера) |
| void | изменилсяЖурнал(const QString &журнал) |
| void | изменилсяСтатус(Qt3DRender::QShaderProgram::Статус статус) |
| void | изменилсяКодШейдераУправленияТрассировкой(const QByteArray &кодШейдераУправленияТрассировкой) |
| void | изменилсяКодШейдераОценкиТрассировки(const QByteArray &кодШейдераОценкиТрассировки) |
| void | изменилсяКодВершинногоШейдера(const QByteArray &кодВершинногоШейдера) |
Статические публичные члены
| QByteArray | загрузитьИсточник(const QUrl &адресИсточника) |
Подробное описание
Программа шейдеров состоит из нескольких различных шейдеров, таких как вершинный и фрагментный шейдеры.
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 object.
Место привязки для них устанавливается на привязки 0 для RenderView uniforms и 1 для Command uniforms.
#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;
} Изменений при подаче значений в униформы нет.
Для приведенного выше примера, установка 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::Формат
Это перечисление определяет формат используемого кода шейдера.
| Константа | Значение | Описание |
|---|---|---|
Qt3DRender::QShaderProgram::GLSL |
0 |
OpenGL |
Qt3DRender::QShaderProgram::SPIRV |
1 |
Vulkan, OpenGL 5 |
Это перечисление было введено или изменено в Qt 5.15.
перечисление QShaderProgram::Тип шейдера
Это перечисление определяет тип используемого шейдера.
| Константа | Значение | Описание |
|---|---|---|
Qt3DRender::QShaderProgram::Vertex |
0 |
Вершинный шейдер |
Qt3DRender::QShaderProgram::Fragment |
1 |
Фрагментный шейдер |
Qt3DRender::QShaderProgram::TessellationControl |
2 |
Контрольный шейдер разбиения |
Qt3DRender::QShaderProgram::TessellationEvaluation |
3 |
Шейдер оценки разбиения |
Qt3DRender::QShaderProgram::Geometry |
4 |
Геометрический шейдер |
Qt3DRender::QShaderProgram::Compute |
5 |
Вычислительный шейдер |
перечисление QShaderProgram::Состояние
Это перечисление определяет состояние используемого шейдера.
| Константа | Значение | Описание |
|---|---|---|
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 : 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 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
Возвращает состояние текущей программы шейдеров.
Примечание: Функция-геттер для свойства status.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qt3drender-qshaderprogram.html