Spec-Zone.ru › Qt 6.1

Класс 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 }
перечисление ТипШейдера { Вершина, Фрагмент, УправлениеТиснением, ВычислениеТиснения, Геометрия, Вычисление }
перечисление Статус { Неготов, Готов, Ошибка }

Свойства

  • computeShaderCode : QByteArray
  • формат : Format
  • кодФрагментногоШейдера : QByteArray
  • кодГеометрическогоШейдера : QByteArray
  • лог : const QString
  • статус : const Статус
  • кодШейдераУправленияТиснением : QByteArray
  • кодШейдераВычисленияТиснения : QByteArray
  • кодШейдераВершин : QByteArray

Открытые функции

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

Spec-Zone.ru

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