Spec-Zone.ru › Qt

Класс 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
  • формат : Формат
  • кодФрагментногоШейдера : QByteArray
  • кодГеометрическогоШейдера : QByteArray
  • журнал : const QString
  • статус : const Статус
  • кодШейдераУправленияТрассировкой : QByteArray
  • кодШейдераОценкиТрассировки : QByteArray
  • кодВершинногоШейдера : QByteArray

Публичные функции

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API