Класс QOpenGLShaderProgram
Класс QOpenGLShaderProgram позволяет подключать и использовать программы OpenGL шейдеров. Подробнее...
| Заголовок: | #include <QOpenGLShaderProgram> |
| CMake: | find_package(Qt6 COMPONENTS OpenGL REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::OpenGL) |
| qmake: | QT += opengl |
| С момента: | Qt 5.0 |
| Наследует: | QObject |
Открытые функции
| QOpenGLShaderProgram(QObject *parent = nullptr) | |
| virtual | ~QOpenGLShaderProgram() |
| bool | addCacheableShaderFromSourceCode(QOpenGLShader::ShaderType type, const char *source) |
| bool | addCacheableShaderFromSourceCode(QOpenGLShader::ShaderType type, const QByteArray &source) |
| bool | addCacheableShaderFromSourceCode(QOpenGLShader::ShaderType type, const QString &source) |
| bool | addCacheableShaderFromSourceFile(QOpenGLShader::ShaderType type, const QString &fileName) |
| bool | addShader(QOpenGLShader *shader) |
| bool | addShaderFromSourceCode(QOpenGLShader::ShaderType type, const char *source) |
| bool | addShaderFromSourceCode(QOpenGLShader::ShaderType type, const QByteArray &source) |
| bool | addShaderFromSourceCode(QOpenGLShader::ShaderType type, const QString &source) |
| bool | addShaderFromSourceFile(QOpenGLShader::ShaderType type, const QString &fileName) |
| int | attributeLocation(const char *name) const |
| int | attributeLocation(const QByteArray &name) const |
| int | attributeLocation(const QString &name) const |
| bool | bind() |
| void | bindAttributeLocation(const char *name, int location) |
| void | bindAttributeLocation(const QByteArray &name, int location) |
| void | bindAttributeLocation(const QString &name, int location) |
| bool | create() |
| QList<float> | defaultInnerTessellationLevels() const |
| QList<float> | defaultOuterTessellationLevels() const |
| void | disableAttributeArray(int location) |
| void | disableAttributeArray(const char *name) |
| void | enableAttributeArray(int location) |
| void | enableAttributeArray(const char *name) |
| bool | isLinked() const |
| virtual bool | link() |
| QString | лог() const |
| int | maxGeometryOutputVertices() const |
| int | patchVertexCount() const |
| GLuint | programId() const |
| void | release() |
| void | removeAllShaders() |
| void | removeShader(QOpenGLShader *shader) |
| void | setAttributeArray(int location, const GLfloat *values, int tupleSize, int stride = 0) |
| void | setAttributeArray(int location, const QVector2D *values, int stride = 0) |
| void | setAttributeArray(int location, const QVector3D *values, int stride = 0) |
| void | setAttributeArray(int location, const QVector4D *values, int stride = 0) |
| void | setAttributeArray(int location, GLenum type, const void *values, int tupleSize, int stride = 0) |
| void | setAttributeArray(const char *name, const GLfloat *values, int tupleSize, int stride = 0) |
| void | setAttributeArray(const char *name, const QVector2D *values, int stride = 0) |
| void | setAttributeArray(const char *name, const QVector3D *values, int stride = 0) |
| void | setAttributeArray(const char *name, const QVector4D *values, int stride = 0) |
| void | setAttributeArray(const char *name, GLenum type, const void *values, int tupleSize, int stride = 0) |
| void | setAttributeBuffer(int location, GLenum type, int offset, int tupleSize, int stride = 0) |
| void | setAttributeBuffer(const char *name, GLenum type, int offset, int tupleSize, int stride = 0) |
| void | setAttributeValue(int location, GLfloat value) |
| void | setAttributeValue(int location, GLfloat x, GLfloat y) |
| void | setAttributeValue(int location, GLfloat x, GLfloat y, GLfloat z) |
| void | setAttributeValue(int location, GLfloat x, GLfloat y, GLfloat z, GLfloat w) |
| void | setAttributeValue(int location, const QVector2D &value) |
| void | setAttributeValue(int location, const QVector3D &value) |
| void | setAttributeValue(int location, const QVector4D &value) |
| void | setAttributeValue(int location, const QColor &value) |
| void | setAttributeValue(int location, const GLfloat *values, int columns, int rows) |
| void | setAttributeValue(const char *name, GLfloat value) |
| void | setAttributeValue(const char *name, GLfloat x, GLfloat y) |
| void | setAttributeValue(const char *name, GLfloat x, GLfloat y, GLfloat z) |
| void | setAttributeValue(const char *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w) |
| void | setAttributeValue(const char *name, const QVector2D &value) |
| void | setAttributeValue(const char *name, const QVector3D &value) |
| void | setAttributeValue(const char *name, const QVector4D &value) |
| void | setAttributeValue(const char *name, const QColor &value) |
| void | setAttributeValue(const char *name, const GLfloat *values, int columns, int rows) |
| void | setDefaultInnerTessellationLevels(const QList<float> &levels) |
| void | setDefaultOuterTessellationLevels(const QList<float> &levels) |
| void | setPatchVertexCount(int count) |
| void | setUniformValue(int location, GLfloat value) |
| void | setUniformValue(int location, GLint value) |
| void | setUniformValue(const char *name, const QColor &color) |
| void | setUniformValue(const char *name, const QPoint &point) |
| void | setUniformValue(const char *name, const QPointF &point) |
| void | setUniformValue(const char *name, const QSize &size) |
| void | setUniformValue(const char *name, const QSizeF &size) |
| void | setUniformValue(const char *name, const QMatrix2x2 &value) |
| void | setUniformValue(const char *name, const QMatrix2x3 &value) |
| void | setUniformValue(const char *name, const QMatrix2x4 &value) |
| void | setUniformValue(const char *name, const QMatrix3x2 &value) |
| void | setUniformValue(const char *name, const QMatrix3x3 &value) |
| void | setUniformValue(const char *name, const QMatrix3x4 &value) |
| void | setUniformValue(const char *name, const QMatrix4x2 &value) |
| void | setUniformValue(const char *name, const QMatrix4x3 &value) |
| void | setUniformValue(const char *name, const QMatrix4x4 &value) |
| void | setUniformValue(const char *name, const GLfloat [2][2] value = 2) |
| void | setUniformValue(const char *name, const GLfloat [3][3] value = 3) |
| void | setUniformValue(const char *name, const GLfloat [4][4] value = 4) |
| void | setUniformValue(const char *name, const QTransform &value) |
| void | setUniformValue(int location, GLuint value) |
| void | setUniformValue(int location, GLfloat x, GLfloat y) |
| void | setUniformValue(int location, GLfloat x, GLfloat y, GLfloat z) |
| void | setUniformValue(int location, GLfloat x, GLfloat y, GLfloat z, GLfloat w) |
| void | setUniformValue(int location, const QVector2D &value) |
| void | setUniformValue(int location, const QVector3D &value) |
| void | setUniformValue(int location, const QVector4D &value) |
| void | setUniformValue(int location, const QColor &color) |
| void | setUniformValue(int location, const QPoint &point) |
| void | setUniformValue(int location, const QPointF &point) |
| void | setUniformValue(int location, const QSize &size) |
| void | setUniformValue(int location, const QSizeF &size) |
| void | setUniformValue(int location, const QMatrix2x2 &value) |
| void | setUniformValue(int location, const QMatrix2x3 &value) |
| void | setUniformValue(int location, const QMatrix2x4 &value) |
| void | setUniformValue(int location, const QMatrix3x2 &value) |
| void | setUniformValue(int location, const QMatrix3x3 &value) |
| void | setUniformValue(int location, const QMatrix3x4 &value) |
| void | setUniformValue(int location, const QMatrix4x2 &value) |
| void | setUniformValue(int location, const QMatrix4x3 &value) |
| void | setUniformValue(int location, const QMatrix4x4 &value) |
| void | setUniformValue(int location, const GLfloat [2][2] value = 2) |
| void | setUniformValue(int location, const GLfloat [3][3] value = 3) |
| void | setUniformValue(int location, const GLfloat [4][4] value = 4) |
| void | setUniformValue(int location, const QTransform &value) |
| void | setUniformValue(const char *name, GLfloat value) |
| void | setUniformValue(const char *name, GLint value) |
| void | setUniformValue(const char *name, GLuint value) |
| void | setUniformValue(const char *name, GLfloat x, GLfloat y) |
| void | setUniformValue(const char *name, GLfloat x, GLfloat y, GLfloat z) |
| void | setUniformValue(const char *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w) |
| void | setUniformValue(const char *name, const QVector2D &value) |
| void | setUniformValue(const char *name, const QVector3D &value) |
| void | setUniformValue(const char *name, const QVector4D &value) |
| void | setUniformValueArray(int location, const GLfloat *values, int count, int tupleSize) |
| void | setUniformValueArray(int location, const GLint *values, int count) |
| void | setUniformValueArray(int location, const GLuint *values, int count) |
| void | setUniformValueArray(int location, const QVector2D *values, int count) |
| void | setUniformValueArray(int location, const QVector3D *values, int count) |
| void | setUniformValueArray(int location, const QVector4D *values, int count) |
| void | setUniformValueArray(int location, const QMatrix2x2 *values, int count) |
| void | setUniformValueArray(int location, const QMatrix2x3 *values, int count) |
| void | setUniformValueArray(int location, const QMatrix2x4 *values, int count) |
| void | setUniformValueArray(int location, const QMatrix3x2 *values, int count) |
| void | setUniformValueArray(int location, const QMatrix3x3 *values, int count) |
| void | setUniformValueArray(int location, const QMatrix3x4 *values, int count) |
| void | setUniformValueArray(int location, const QMatrix4x2 *values, int count) |
| void | setUniformValueArray(int location, const QMatrix4x3 *values, int count) |
| void | setUniformValueArray(int location, const QMatrix4x4 *values, int count) |
| void | setUniformValueArray(const char *name, const GLfloat *values, int count, int tupleSize) |
| void | setUniformValueArray(const char *name, const GLint *values, int count) |
| void | setUniformValueArray(const char *name, const GLuint *values, int count) |
| void | setUniformValueArray(const char *name, const QVector2D *values, int count) |
| void | setUniformValueArray(const char *name, const QVector3D *values, int count) |
| void | setUniformValueArray(const char *name, const QVector4D *values, int count) |
| void | setUniformValueArray(const char *name, const QMatrix2x2 *values, int count) |
| void | setUniformValueArray(const char *name, const QMatrix2x3 *values, int count) |
| void | setUniformValueArray(const char *name, const QMatrix2x4 *values, int count) |
| void | setUniformValueArray(const char *name, const QMatrix3x2 *values, int count) |
| void | setUniformValueArray(const char *name, const QMatrix3x3 *values, int count) |
| void | setUniformValueArray(const char *name, const QMatrix3x4 *values, int count) |
| void | setUniformValueArray(const char *name, const QMatrix4x2 *values, int count) |
| void | setUniformValueArray(const char *name, const QMatrix4x3 *values, int count) |
| void | setUniformValueArray(const char *name, const QMatrix4x4 *values, int count) |
| QList<QOpenGLShader *> | shaders() const |
| int | uniformLocation(const char *name) const |
| int | uniformLocation(const QByteArray &name) const |
| int | uniformLocation(const QString &name) const |
Статические публичные члены
| bool | hasOpenGLShaderPrograms(QOpenGLContext *context = nullptr) |
Подробное описание
Введение
Этот класс поддерживает программы шейдеров, написанные на языке OpenGL Shading Language (GLSL) и на языке OpenGL/ES Shading Language (GLSL/ES).
QOpenGLShader и QOpenGLShaderProgram скрывают от программиста детали компиляции и компоновки вершинных и фрагментных шейдеров.
Следующий пример создаёт программу вершинного шейдера, используя предоставленный исходный код code. После компиляции и компоновки программа шейдера активируется в текущем QOpenGLContext вызовом QOpenGLShaderProgram::bind():
QOpenGLShader shader(QOpenGLShader::Vertex); shader.compileSourceCode(code); QOpenGLShaderProgram program(context); program.addShader(&shader); program.link(); program.bind();
Написание переносимых шейдеров
Программы шейдеров могут быть трудно повторно использовать в разных реализациях OpenGL из-за различных уровней поддержки стандартных атрибутов вершин и переменных униформы. В частности, GLSL/ES не имеет всех стандартных переменных, которые присутствуют в OpenGL настольных систем: gl_Vertex, gl_Normal, gl_Color, и так далее. OpenGL настольных систем не имеет квалификаторов переменных highp, mediump, и lowp.
Класс QOpenGLShaderProgram упрощает процесс написания переносимых шейдеров, добавляя в начало всех программ шейдеров следующие строки на настольных системах OpenGL:
#define highp #define mediump #define lowp
Это позволяет запускать большинство программ шейдеров GLSL/ES на настольных системах. Программист должен ограничиться только функциями, присутствующими в GLSL/ES, и избегать стандартных имён переменных, которые работают только на настольных системах.
Простой пример шейдера
program.addShaderFromSourceCode(QOpenGLShader::Vertex,
"attribute highp vec4 vertex;\n"
"uniform highp mat4 matrix;\n"
"void main(void)\n"
"{\n"
" gl_Position = matrix * vertex;\n"
"}");
program.addShaderFromSourceCode(QOpenGLShader::Fragment,
"uniform mediump vec4 color;\n"
"void main(void)\n"
"{\n"
" gl_FragColor = color;\n"
"}");
program.link();
program.bind();
int vertexLocation = program.attributeLocation("vertex");
int matrixLocation = program.uniformLocation("matrix");
int colorLocation = program.uniformLocation("color"); При активной вышеуказанной программе шейдера, мы можем нарисовать зелёный треугольник следующим образом:
static GLfloat const triangleVertices[] = {
60.0f, 10.0f, 0.0f,
110.0f, 110.0f, 0.0f,
10.0f, 110.0f, 0.0f
};
QColor color(0, 255, 0, 255);
QMatrix4x4 pmvMatrix;
pmvMatrix.ortho(rect());
program.enableAttributeArray(vertexLocation);
program.setAttributeArray(vertexLocation, triangleVertices, 3);
program.setUniformValue(matrixLocation, pmvMatrix);
program.setUniformValue(colorLocation, color);
glDrawArrays(GL_TRIANGLES, 0, 3);
program.disableAttributeArray(vertexLocation); Бинарные шейдеры и программы
Бинарные шейдеры могут быть указаны с помощью glShaderBinary() на возвращаемом значении из QOpenGLShader::shaderId(). Экземпляр QOpenGLShader, содержащий бинарный файл, может затем быть добавлен в программу шейдера с помощью addShader() и связан в обычном порядке с помощью link().
Бинарные программы могут быть указаны с помощью glProgramBinaryOES() на возвращаемом значении из programId(). Затем приложение должно вызвать link(), которое заметит, что программа уже была указана и связана, что позволяет выполнять другие операции с программой шейдера. Идентификатор программы шейдера может быть явно создан с помощью функции create().
Кэширование бинарных файлов программ
Начиная с Qt 5.9, поддержка кэширования бинарных файлов программ на диске встроена. Для включения этого, используйте addCacheableShaderFromSourceCode() и addCacheableShaderFromSourceFile(). При использовании контекста OpenGL ES 3.x или поддержки GL_ARB_get_program_binary, это прозрачно кэширует бинарные файлы программ в QStandardPaths::GenericCacheLocation или QStandardPaths::CacheLocation. Когда поддержка недоступна, вызов вариантов функций с кэшированием эквивалентен обычным.
Примечание: Некоторые драйверы не имеют доступных бинарных форматов, даже если они рекламируют расширение или предлагают OpenGL ES 3.0. В этом случае поддержка бинарных файлов программ будет отключена.
См. также QOpenGLShader.
Документация по функциям-членам
QOpenGLShaderProgram::QOpenGLShaderProgram(QObject *parent = nullptr)
Создаёт новую программу шейдеров и прикрепляет её к parent. Программа будет недоступна, пока не будет вызвано addShader().
Программа шейдера будет ассоциирована с текущим QOpenGLContext.
См. также addShader().
[virtual] QOpenGLShaderProgram::~QOpenGLShaderProgram()
Удаляет эту программу шейдеров.
[since 5.9] bool QOpenGLShaderProgram::addCacheableShaderFromSourceCode(QOpenGLShader::ShaderType type, const char *source)
Регистрирует шейдер указанного типа type и исходного кода source в этой программе. В отличие от addShaderFromSourceCode(), эта функция не выполняет компиляцию. Компиляция откладывается до link(), и может вообще не произойти, потому что link() потенциально может использовать бинарный файл программы из кэша шейдеров Qt на диске. Это обычно приводит к значительному увеличению производительности.
Возвращает true, если шейдер был зарегистрирован или, в случае без кэша, успешно скомпилирован; false, если произошла ошибка. Сообщения об ошибках компиляции могут быть получены через log().
Когда кэш диска отключён, например, с помощью Qt::AA_DisableShaderDiskCache, или контекст OpenGL не поддерживает бинарные файлы контекста, вызов этой функции эквивалентен addShaderFromSourceCode().
Эта функция была введена в Qt 5.9.
См. также addShaderFromSourceCode() и addCacheableShaderFromSourceFile().
[since 5.9] bool QOpenGLShaderProgram::addCacheableShaderFromSourceCode(QOpenGLShader::ShaderType type, const QByteArray &source)
Это перегруженная функция.
Регистрирует шейдер указанного типа type и исходного кода source в этой программе. В отличие от addShaderFromSourceCode(), эта функция не выполняет компиляцию. Компиляция откладывается до link(), и может вообще не произойти, потому что link() потенциально может использовать бинарный файл программы из кэша шейдеров Qt на диске. Это обычно приводит к значительному увеличению производительности.
Возвращает true, если шейдер был зарегистрирован или, в случае без кэша, успешно скомпилирован; false, если произошла ошибка. Сообщения об ошибках компиляции могут быть получены через log().
Когда кэш диска отключён, например, с помощью Qt::AA_DisableShaderDiskCache, или контекст OpenGL не поддерживает бинарные файлы контекста, вызов этой функции эквивалентен addShaderFromSourceCode().
Эта функция была введена в Qt 5.9.
См. также addShaderFromSourceCode() и addCacheableShaderFromSourceFile().
[since 5.9] bool QOpenGLShaderProgram::addCacheableShaderFromSourceCode(QOpenGLShader::ShaderType type, const QString &source)
Это перегруженный метод.
Регистрирует шейдер указанного типа type и исходного кода source в этой программе. В отличие от addShaderFromSourceCode(), эта функция не выполняет компиляцию. Компиляция откладывается до link(), и может вообще не произойти, поскольку link() потенциально может использовать двоичный файл программы из кэша шейдеров Qt. Это обычно приводит к значительному увеличению производительности.
Если кэш на диске отключен, например, с помощью Qt::AA_DisableShaderDiskCache, или контекст OpenGL не поддерживает двоичные файлы контекста, вызов этой функции эквивалентен вызову addShaderFromSourceCode().
Эта функция была добавлена в Qt 5.9.
См. также addShaderFromSourceCode() и addCacheableShaderFromSourceFile().
[since 5.9] bool QOpenGLShaderProgram::addCacheableShaderFromSourceFile(QOpenGLShader::ShaderType type, const QString &fileName)
Регистрирует шейдер указанного типа type и файла fileName в этой программе. В отличие от addShaderFromSourceFile(), эта функция не выполняет компиляцию. Компиляция откладывается до link(), и может вообще не произойти, поскольку link() потенциально может использовать двоичный файл программы из кэша шейдеров Qt. Это обычно приводит к значительному увеличению производительности.
Возвращает true, если файл был успешно прочитан, false — если файл не удалось открыть или произошла ошибка при обычной, не кэшируемой, компиляции шейдера. Сообщения об ошибках компиляции можно получить через log().
Если кэш на диске отключен, например, с помощью Qt::AA_DisableShaderDiskCache, или контекст OpenGL не поддерживает двоичные файлы контекста, вызов этой функции эквивалентен вызову addShaderFromSourceFile().
Эта функция была добавлена в Qt 5.9.
См. также addShaderFromSourceFile() и addCacheableShaderFromSourceCode().
bool QOpenGLShaderProgram::addShader(QOpenGLShader *shader)
Добавляет скомпилированный shader в эту программу шейдеров. Возвращает true если шейдер был добавлен, в противном случае — false.
Владение объектом shader остается у вызывающей стороны. Он не будет удален при удалении экземпляра QOpenGLShaderProgram. Это позволяет вызывающей стороне добавить один и тот же шейдер в несколько программ шейдеров.
См. также addShaderFromSourceCode(), addShaderFromSourceFile(), removeShader(), link() и removeAllShaders().
bool QOpenGLShaderProgram::addShaderFromSourceCode(QOpenGLShader::ShaderType type, const char *source)
Компилирует source как шейдер указанного типа type и добавляет его в эту программу шейдеров. Возвращает true если компиляция прошла успешно, в противном случае — false. Сообщения об ошибках и предупреждениях компиляции доступны через log().
Эта функция предназначена как быстрый способ добавления вершинных и фрагментных шейдеров в программу шейдеров без предварительного создания экземпляра QOpenGLShader.
См. также addShader(), addShaderFromSourceFile(), removeShader(), link(), log() и removeAllShaders().
bool QOpenGLShaderProgram::addShaderFromSourceCode(QOpenGLShader::ShaderType type, const QByteArray &source)
Это перегруженный метод.
Компилирует source как шейдер указанного типа type и добавляет его в эту программу шейдеров. Возвращает true если компиляция прошла успешно, в противном случае — false. Сообщения об ошибках и предупреждениях компиляции доступны через log().
Эта функция предназначена как быстрый способ добавления вершинных и фрагментных шейдеров в программу шейдеров без предварительного создания экземпляра QOpenGLShader.
См. также addShader(), addShaderFromSourceFile(), removeShader(), link(), log() и removeAllShaders().
bool QOpenGLShaderProgram::addShaderFromSourceCode(QOpenGLShader::ShaderType type, const QString &source)
Это перегруженный метод.
Компилирует source как шейдер указанного типа type и добавляет его в эту программу шейдеров. Возвращает true если компиляция прошла успешно, в противном случае — false. Сообщения об ошибках и предупреждениях компиляции доступны через log().
Эта функция предназначена как быстрый способ добавления вершинных и фрагментных шейдеров в программу шейдеров без предварительного создания экземпляра QOpenGLShader.
См. также addShader(), addShaderFromSourceFile(), removeShader(), link(), log() и removeAllShaders().
bool QOpenGLShaderProgram::addShaderFromSourceFile(QOpenGLShader::ShaderType type, const QString &fileName)
Компилирует содержимое файла fileName как шейдер указанного типа type и добавляет его в эту программу шейдеров. Возвращает true если компиляция прошла успешно, в противном случае — false. Сообщения об ошибках и предупреждениях компиляции доступны через log().
Эта функция предназначена как быстрый способ добавления вершинных и фрагментных шейдеров в программу шейдеров без предварительного создания экземпляра QOpenGLShader.
См. также addShader() и addShaderFromSourceCode().
int QOpenGLShaderProgram::attributeLocation(const char *name) const
Возвращает позицию атрибута name в списке параметров этой программы шейдеров. Возвращает -1, если name не является допустимым атрибутом для этой программы шейдеров.
См. также uniformLocation() и bindAttributeLocation().
int QOpenGLShaderProgram::attributeLocation(const QByteArray &name) const
Это перегруженный метод.
Возвращает позицию атрибута name в списке параметров этой программы шейдеров. Возвращает -1, если name не является допустимым атрибутом для этой программы шейдеров.
См. также uniformLocation() и bindAttributeLocation().
int QOpenGLShaderProgram::attributeLocation(const QString &name) const
Это перегруженный метод.
Возвращает позицию атрибута name в списке параметров этой программы шейдеров. Возвращает -1, если name не является допустимым атрибутом для этой программы шейдеров.
См. также uniformLocation() и bindAttributeLocation().
bool QOpenGLShaderProgram::bind()
Привязывает эту программу шейдеров к активному QOpenGLContext и делает её текущей программой шейдеров. Любая ранее привязанная программа шейдеров высвобождается. Это эквивалентно вызову glUseProgram() для programId(). Возвращает true если программа была успешно привязана; в противном случае — false. Если программа шейдеров ещё не была связана или её нужно пересвязать, эта функция вызовет link().
void QOpenGLShaderProgram::bindAttributeLocation(const char *name, int location)
Связывает атрибут name с указанным location. Эту функцию можно вызвать до или после того, как программа была связана. Любые атрибуты, которые не были явно связаны при связывании программы, будут автоматически назначены местам.
Если эта функция вызывается после того, как программа была связана, для того, чтобы изменение вступило в силу, потребуется пересвязать программу.
См. также attributeLocation().
void QOpenGLShaderProgram::bindAttributeLocation(const QByteArray &name, int location)
Это перегруженная функция.
Связывает атрибут name с указанным location. Эту функцию можно вызвать до или после того, как программа была связана. Любые атрибуты, которые не были явно связаны при связывании программы, будут автоматически назначены местам.
Если эта функция вызывается после того, как программа была связана, для того, чтобы изменение вступило в силу, потребуется пересвязать программу.
См. также attributeLocation().
void QOpenGLShaderProgram::bindAttributeLocation(const QString &name, int location)
Это перегруженная функция.
Связывает атрибут name с указанным location. Эту функцию можно вызвать до или после того, как программа была связана. Любые атрибуты, которые не были явно связаны при связывании программы, будут автоматически назначены местам.
Если эта функция вызывается после того, как программа была связана, для того, чтобы изменение вступило в силу, потребуется пересвязать программу.
См. также attributeLocation().
[since 5.3] bool QOpenGLShaderProgram::create()
Запрашивает немедленное создание идентификатора программы шейдеров. Возвращает true при успехе; false в противном случае.
Эта функция полезна в основном при объединении QOpenGLShaderProgram с другими функциями OpenGL, которые работают непосредственно с идентификатором программы шейдеров, например, с GL_OES_get_program_binary.
Когда программа шейдеров используется в обычном режиме, её идентификатор создаётся по мере необходимости.
Эта функция была добавлена в Qt 5.3.
См. также programId().
QList<float> QOpenGLShaderProgram::defaultInnerTessellationLevels() const
Возвращает значения по умолчанию для внутренних уровней разбиения, которые будут использоваться генератором примитивов разбиения в случае, если шейдер управления разбиением не выводит их. Для получения более подробной информации о шейдерах разбиения OpenGL см. OpenGL Tessellation Shaders.
Возвращает QList чисел с плавающей точкой, описывающих внутренние уровни разбиения. Вектор всегда будет содержать два элемента, но не все из них имеют смысл для каждого режима разбиения.
Примечание: Возвращает значение глобального состояния OpenGL. Оно не специфично для данного экземпляра QOpenGLShaderProgram.
Примечание: Эта функция поддерживается только с OpenGL >= 4.0 и не вернёт корректные значения с OpenGL ES 3.2.
См. также setDefaultInnerTessellationLevels() и defaultOuterTessellationLevels().
QList<float> QOpenGLShaderProgram::defaultOuterTessellationLevels() const
Возвращает значения по умолчанию для внешних уровней разбиения, которые будут использоваться генератором примитивов разбиения в случае, если шейдер управления разбиением не выводит их. Для получения более подробной информации о шейдерах разбиения OpenGL см. OpenGL Tessellation Shaders.
Возвращает QList чисел с плавающей точкой, описывающих внешние уровни разбиения. Вектор всегда будет содержать четыре элемента, но не все из них имеют смысл для каждого режима разбиения.
Примечание: Возвращает значение глобального состояния OpenGL. Оно не специфично для данного экземпляра QOpenGLShaderProgram.
Примечание: Эта функция поддерживается только с OpenGL >= 4.0 и не вернёт корректные значения с OpenGL ES 3.2.
См. также setDefaultOuterTessellationLevels() и defaultInnerTessellationLevels().
void QOpenGLShaderProgram::disableAttributeArray(int location)
Отключает массив вершин по location в этой программе шейдеров, который был включён предыдущим вызовом enableAttributeArray().
См. также enableAttributeArray(), setAttributeArray(), setAttributeValue() и setUniformValue().
void QOpenGLShaderProgram::disableAttributeArray(const char *name)
Это перегруженная функция.
Отключает массив вершин с именем name в этой программе шейдеров, который был включён предыдущим вызовом enableAttributeArray().
См. также enableAttributeArray(), setAttributeArray(), setAttributeValue() и setUniformValue().
void QOpenGLShaderProgram::enableAttributeArray(int location)
Включает массив вершин по location в этой программе шейдеров, чтобы значение, установленное функцией setAttributeArray() для location, использовалось программой шейдеров.
См. также disableAttributeArray(), setAttributeArray(), setAttributeValue() и setUniformValue().
void QOpenGLShaderProgram::enableAttributeArray(const char *name)
Это перегруженная функция.
Включает массив вершин с именем name в этой программе шейдеров, чтобы значение, установленное функцией setAttributeArray() для name, использовалось программой шейдеров.
См. также disableAttributeArray(), setAttributeArray(), setAttributeValue() и setUniformValue().
[static] bool QOpenGLShaderProgram::hasOpenGLShaderPrograms(QOpenGLContext *context = nullptr)
Возвращает true, если программы шейдеров, написанные на языке OpenGL Shading Language (GLSL), поддерживаются в этой системе; в противном случае — false.
context используется для определения расширений GLSL. Если context равен nullptr, используется QOpenGLContext::currentContext().
bool QOpenGLShaderProgram::isLinked() const
Возвращает true, если эта программа шейдеров была связана; в противном случае — false.
См. также link().
[virtual] bool QOpenGLShaderProgram::link()
Связывает шейдеры, добавленные в эту программу с помощью addShader(). Возвращает true, если связывание прошло успешно, или false в противном случае. Если связывание завершилось ошибкой, сообщения об ошибках можно получить с помощью log().
Подклассы могут переопределить эту функцию, чтобы инициализировать атрибуты и переменные uniform для использования в определённых программах шейдеров.
Если программа шейдеров уже была связана, повторный вызов этой функции заставит её пересвязаться.
Если шейдеры были добавлены в эту программу с помощью addCacheableShaderFromSourceCode() или addCacheableShaderFromSourceFile(), и доступен кэшированный двоичный файл, реальная компиляция и связывание пропускаются. Вместо этого link() инициализирует программу с помощью двоичного блока с помощью glProgramBinary(). Если нет кэшированной версии программы или она была сгенерирована с другой версией драйвера, шейдеры будут скомпилированы из исходного кода, и программа будет связана в обычном режиме. Это позволяет беспрепятственно обновлять графические драйверы, не беспокоясь о потенциально несовместимых двоичных форматах.
См. также addShader() и log().
QString QOpenGLShaderProgram::log() const
Возвращает ошибки и предупреждения, возникшие во время последнего вызова link() или addShader() с явно указанным исходным кодом.
См. также link().
int QOpenGLShaderProgram::maxGeometryOutputVertices() const
Возвращает максимальное количество вершин, которое геометрия шейдер может вывести.
int QOpenGLShaderProgram::patchVertexCount() const
Возвращает количество вершин на патч, которое будет использоваться при отрисовке.
END_OF_DOCUMENT_MARKERПримечание: Это возвращает глобальное значение состояния OpenGL. Оно не специфично для экземпляра QOpenGLShaderProgram.
См. также setPatchVertexCount().
GLuint QOpenGLShaderProgram::programId() const
Возвращает идентификатор OpenGL, связанный с этой программой шейдеров.
См. также QOpenGLShader::shaderId().
void QOpenGLShaderProgram::release()
Освобождает активную программу шейдеров из текущего QOpenGLContext. Это эквивалентно вызову glUseProgram(0).
См. также bind().
void QOpenGLShaderProgram::removeAllShaders()
Удаляет все шейдеры, которые были добавлены к этой программе ранее. Объекты QOpenGLShader для шейдеров не будут удалены, если они были созданы внешне. Объекты QOpenGLShader, созданные внутри QOpenGLShaderProgram, будут удалены.
См. также addShader() и removeShader().
void QOpenGLShaderProgram::removeShader(QOpenGLShader *shader)
Удаляет shader из этой программы шейдеров. Объект не удаляется.
Программа шейдеров должна быть валидной в текущем QOpenGLContext.
См. также addShader(), link(), и removeAllShaders().
void QOpenGLShaderProgram::setAttributeArray(int location, const GLfloat *values, int tupleSize, int stride = 0)
Устанавливает массив вершинных values для атрибута в позиции location в этой программе шейдеров. tupleSize указывает количество компонентов на вершину (1, 2, 3 или 4), а stride — количество байтов между вершинами. Значение stride по умолчанию, равное нулю, означает, что вершины плотно упакованы в values.
Массив станет активным, когда для location будет вызван enableAttributeArray(). В противном случае будет использовано значение, указанное с помощью setAttributeValue() для location.
См. также setAttributeValue(), setUniformValue(), enableAttributeArray() и disableAttributeArray().
void QOpenGLShaderProgram::setAttributeArray(int location, const QVector2D *values, int stride = 0)
Устанавливает массив вершинных значений values (2D) для атрибута в позиции location в этой программе шейдеров. Stride указывает количество байтов между вершинами. Значение stride по умолчанию, равное нулю, означает, что вершины плотно упакованы в values.
Массив станет активным, когда для location будет вызван enableAttributeArray(). В противном случае будет использовано значение, указанное с помощью setAttributeValue() для location.
См. также setAttributeValue(), setUniformValue(), enableAttributeArray() и disableAttributeArray().
void QOpenGLShaderProgram::setAttributeArray(int location, const QVector3D *values, int stride = 0)
Устанавливает массив вершинных значений values (3D) для атрибута в позиции location в этой программе шейдеров. Stride указывает количество байтов между вершинами. Значение stride по умолчанию, равное нулю, означает, что вершины плотно упакованы в values.
Массив станет активным, когда для location будет вызван enableAttributeArray(). В противном случае будет использовано значение, указанное с помощью setAttributeValue() для location.
См. также setAttributeValue(), setUniformValue(), enableAttributeArray() и disableAttributeArray().
void QOpenGLShaderProgram::setAttributeArray(int location, const QVector4D *values, int stride = 0)
Устанавливает массив вершинных значений values (4D) для атрибута в позиции location в этой программе шейдеров. Stride указывает количество байтов между вершинами. Значение stride по умолчанию, равное нулю, означает, что вершины плотно упакованы в values.
Массив станет активным, когда для location будет вызван enableAttributeArray(). В противном случае будет использовано значение, указанное с помощью setAttributeValue() для location.
См. также setAttributeValue(), setUniformValue(), enableAttributeArray() и disableAttributeArray().
void QOpenGLShaderProgram::setAttributeArray(int location, GLenum type, const void *values, int tupleSize, int stride = 0)
Устанавливает массив вершинных values для атрибута в позиции location в этой программе шейдеров. Stride указывает количество байтов между вершинами. Значение stride по умолчанию, равное нулю, означает, что вершины плотно упакованы в values.
Type указывает тип элементов в массиве values, обычно GL_FLOAT, GL_UNSIGNED_BYTE, и т. д. TupleSize указывает количество компонентов на вершину: 1, 2, 3 или 4.
Массив станет активным, когда для location будет вызван enableAttributeArray(). В противном случае будет использовано значение, указанное с помощью setAttributeValue() для location.
Функция setAttributeBuffer() может быть использована для установки массива атрибутов в смещении буфера вершин.
Примечание: Нормализация будет включена. Если этого не требуется, вызовите glVertexAttribPointer напрямую через QOpenGLFunctions.
См. также setAttributeValue(), setUniformValue(), enableAttributeArray(), disableAttributeArray() и setAttributeBuffer().
void QOpenGLShaderProgram::setAttributeArray(const char *name, const GLfloat *values, int tupleSize, int stride = 0)
Это перегруженная функция.
Устанавливает массив вершинных values для атрибута с именем name в этой программе шейдеров. TupleSize указывает количество компонентов на вершину (1, 2, 3 или 4), а stride — количество байтов между вершинами. Значение stride по умолчанию, равное нулю, означает, что вершины плотно упакованы в values.
Массив станет активным, когда для name будет вызван enableAttributeArray(). В противном случае будет использовано значение, указанное с помощью setAttributeValue() для name.
См. также setAttributeValue(), setUniformValue(), enableAttributeArray() и disableAttributeArray().
void QOpenGLShaderProgram::setAttributeArray(const char *name, const QVector2D *values, int stride = 0)
Это перегруженная функция.
Устанавливает массив вершинных значений values (2D) для атрибута с именем name в этой программе шейдеров. Stride указывает количество байтов между вершинами. Значение stride по умолчанию, равное нулю, означает, что вершины плотно упакованы в values.
Массив станет активным, когда для name будет вызван enableAttributeArray(). В противном случае будет использовано значение, указанное с помощью setAttributeValue() для name.
См. также setAttributeValue(), setUniformValue(), enableAttributeArray() и disableAttributeArray().
END_OF_DOCUMENT_MARKERvoid QOpenGLShaderProgram::setAttributeArray(const char *name, const QVector3D *values, int stride = 0)
Это перегруженный метод.
Устанавливает массив 3D-вершинных значений на атрибут с именем name в этой программе шейдеров. stride указывает количество байтов между вершинами. Значение stride по умолчанию, равное нулю, означает, что вершины плотно упакованы в values.
Массив станет активным, когда для name будет вызван метод enableAttributeArray(). В противном случае будет использовано значение, заданное с помощью setAttributeValue() для name.
См. также setAttributeValue(), setUniformValue(), enableAttributeArray() и disableAttributeArray().
void QOpenGLShaderProgram::setAttributeArray(const char *name, const QVector4D *values, int stride = 0)
Это перегруженный метод.
Устанавливает массив 4D-вершинных значений на атрибут с именем name в этой программе шейдеров. stride указывает количество байтов между вершинами. Значение stride по умолчанию, равное нулю, означает, что вершины плотно упакованы в values.
Массив станет активным, когда для name будет вызван метод enableAttributeArray(). В противном случае будет использовано значение, заданное с помощью setAttributeValue() для name.
См. также setAttributeValue(), setUniformValue(), enableAttributeArray() и disableAttributeArray().
void QOpenGLShaderProgram::setAttributeArray(const char *name, GLenum type, const void *values, int tupleSize, int stride = 0)
Это перегруженный метод.
Устанавливает массив вершинных значений на атрибут с именем name в этой программе шейдеров. stride указывает количество байтов между вершинами. Значение stride по умолчанию, равное нулю, означает, что вершины плотно упакованы в values.
type указывает тип элементов в массиве values, обычно GL_FLOAT, GL_UNSIGNED_BYTE, и т. д. tupleSize указывает количество компонент на вершину: 1, 2, 3 или 4.
Массив станет активным, когда для name будет вызван метод enableAttributeArray(). В противном случае будет использовано значение, заданное с помощью setAttributeValue() для name.
Функция setAttributeBuffer() может быть использована для установки массива атрибутов на смещение внутри буфера вершин.
См. также setAttributeValue(), setUniformValue(), enableAttributeArray(), disableAttributeArray() и setAttributeBuffer().
void QOpenGLShaderProgram::setAttributeBuffer(int location, GLenum type, int offset, int tupleSize, int stride = 0)
Устанавливает массив вершинных значений для атрибута в позиции location в этой программе шейдеров, начиная со смещения offset в текущем буфере вершин. stride указывает количество байтов между вершинами. Значение stride по умолчанию, равное нулю, означает, что вершины плотно упакованы в массив значений.
type указывает тип элементов в массиве вершинных значений, обычно GL_FLOAT, GL_UNSIGNED_BYTE, и т. д. tupleSize указывает количество компонент на вершину: 1, 2, 3 или 4.
Массив станет активным, когда для location будет вызван метод enableAttributeArray(). В противном случае будет использовано значение, заданное с помощью setAttributeValue() для location.
Примечание: Нормализация будет включена. Если это нежелательно, вызовите glVertexAttribPointer напрямую через QOpenGLFunctions.
См. также setAttributeArray().
void QOpenGLShaderProgram::setAttributeBuffer(const char *name, GLenum type, int offset, int tupleSize, int stride = 0)
Это перегруженный метод.
Устанавливает массив вершинных значений для атрибута с именем name в этой программе шейдеров, начиная со смещения offset в текущем буфере вершин. stride указывает количество байтов между вершинами. Значение stride по умолчанию, равное нулю, означает, что вершины плотно упакованы в массив значений.
type указывает тип элементов в массиве вершинных значений, обычно GL_FLOAT, GL_UNSIGNED_BYTE, и т. д. tupleSize указывает количество компонент на вершину: 1, 2, 3 или 4.
Массив станет активным, когда для name будет вызван метод enableAttributeArray(). В противном случае будет использовано значение, заданное с помощью setAttributeValue() для name.
См. также setAttributeArray().
void QOpenGLShaderProgram::setAttributeValue(int location, GLfloat value)
Устанавливает атрибут в позиции location в текущем контексте на значение value.
См. также setUniformValue().
void QOpenGLShaderProgram::setAttributeValue(int location, GLfloat x, GLfloat y)
Устанавливает атрибут в позиции location в текущем контексте на 2D-вектор (x, y).
См. также setUniformValue().
void QOpenGLShaderProgram::setAttributeValue(int location, GLfloat x, GLfloat y, GLfloat z)
Устанавливает атрибут в позиции location в текущем контексте на 3D-вектор (x, y, z).
См. также setUniformValue().
void QOpenGLShaderProgram::setAttributeValue(int location, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
Устанавливает атрибут в позиции location в текущем контексте на 4D-вектор (x, y, z, w).
См. также setUniformValue().
void QOpenGLShaderProgram::setAttributeValue(int location, const QVector2D &value)
Устанавливает атрибут в позиции location в текущем контексте на value.
См. также setUniformValue().
void QOpenGLShaderProgram::setAttributeValue(int location, const QVector3D &value)
Устанавливает атрибут в позиции location в текущем контексте на value.
См. также setUniformValue().
void QOpenGLShaderProgram::setAttributeValue(int location, const QVector4D &value)
Устанавливает атрибут в позиции location в текущем контексте на value.
См. также setUniformValue().
void QOpenGLShaderProgram::setAttributeValue(int location, const QColor &value)
Устанавливает атрибут в позиции location в текущем контексте на value.
См. также setUniformValue().
void QOpenGLShaderProgram::setAttributeValue(int location, const GLfloat *values, int columns, int rows)
Устанавливает атрибут в позиции location в текущем контексте на содержимое values, которое содержит columns элементов, каждый из которых состоит из rows элементов. Значение rows должно быть 1, 2, 3 или 4. Эта функция обычно используется для установки матричных значений и вектор-столбцов.
См. также setUniformValue().
void QOpenGLShaderProgram::setAttributeValue(const char *name, GLfloat value)
Это перегруженный метод.
Устанавливает значение атрибута с именем name в текущем контексте на value.
См. также setUniformValue().
void QOpenGLShaderProgram::setAttributeValue(const char *name, GLfloat x, GLfloat y)
Это перегруженный метод.
Устанавливает значение атрибута с именем name в текущем контексте на 2D вектор (x, y).
См. также setUniformValue().
void QOpenGLShaderProgram::setAttributeValue(const char *name, GLfloat x, GLfloat y, GLfloat z)
Это перегруженный метод.
Устанавливает значение атрибута с именем name в текущем контексте на 3D вектор (x, y, z).
См. также setUniformValue().
void QOpenGLShaderProgram::setAttributeValue(const char *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
Это перегруженный метод.
Устанавливает значение атрибута с именем name в текущем контексте на 4D вектор (x, y, z, w).
См. также setUniformValue().
void QOpenGLShaderProgram::setAttributeValue(const char *name, const QVector2D &value)
Это перегруженный метод.
Устанавливает значение атрибута с именем name в текущем контексте на value.
См. также setUniformValue().
void QOpenGLShaderProgram::setAttributeValue(const char *name, const QVector3D &value)
Это перегруженный метод.
Устанавливает значение атрибута с именем name в текущем контексте на value.
См. также setUniformValue().
void QOpenGLShaderProgram::setAttributeValue(const char *name, const QVector4D &value)
Это перегруженный метод.
Устанавливает значение атрибута с именем name в текущем контексте на value.
См. также setUniformValue().
void QOpenGLShaderProgram::setAttributeValue(const char *name, const QColor &value)
Это перегруженный метод.
Устанавливает значение атрибута с именем name в текущем контексте на value.
См. также setUniformValue().
void QOpenGLShaderProgram::setAttributeValue(const char *name, const GLfloat *values, int columns, int rows)
Это перегруженный метод.
Устанавливает значение атрибута с именем name в текущем контексте на содержимое values, которое содержит columns элементов, каждый из которых состоит из rows элементов. Значение rows должно быть 1, 2, 3 или 4. Эта функция обычно используется для установки значений матриц и столбцов векторов.
См. также setUniformValue().
void QOpenGLShaderProgram::setDefaultInnerTessellationLevels(const QList<float> &levels)
Устанавливает значения по умолчанию для внешних уровней детализации, которые будут использоваться генератором примитивов детализации в том случае, если шейдер управления детализацией не выведет их в levels. Более подробную информацию об OpenGL и шейдерах детализации см. на странице OpenGL Tessellation Shaders.
Аргумент levels должен быть QList, состоящим из 2 чисел с плавающей точкой. Не все значения имеют смысл для всех режимов детализации. Если вы укажете вектор с менее чем 2 элементами, оставшиеся элементы будут иметь значение по умолчанию 1.
Примечание: Это изменяет глобальное состояние OpenGL и не относится к этому экземпляру QOpenGLShaderProgram. Вы должны вызвать эту функцию в своей функции отрисовки, когда это необходимо, так как QOpenGLShaderProgram не выполняет это за вас. Эта функция — просто функция удобства.
Примечание: Эта функция доступна только с OpenGL >= 4.0 и не поддерживается с OpenGL ES 3.2.
См. также defaultInnerTessellationLevels() и setDefaultOuterTessellationLevels().
void QOpenGLShaderProgram::setDefaultOuterTessellationLevels(const QList<float> &levels)
Устанавливает значения по умолчанию для внешних уровней детализации, которые будут использоваться генератором примитивов детализации в том случае, если шейдер управления детализацией не выведет их в levels. Более подробную информацию об OpenGL и шейдерах детализации см. на странице OpenGL Tessellation Shaders.
Аргумент levels должен быть QList, состоящим из 4 чисел с плавающей точкой. Не все значения имеют смысл для всех режимов детализации. Если вы укажете вектор с менее чем 4 элементами, оставшиеся элементы будут иметь значение по умолчанию 1.
Примечание: Это изменяет глобальное состояние OpenGL и не относится к этому экземпляру QOpenGLShaderProgram. Вы должны вызвать эту функцию в своей функции отрисовки, когда это необходимо, так как QOpenGLShaderProgram не выполняет это за вас. Эта функция — просто функция удобства.
Примечание: Эта функция доступна только с OpenGL >= 4.0 и не поддерживается с OpenGL ES 3.2.
См. также defaultOuterTessellationLevels() и setDefaultInnerTessellationLevels().
void QOpenGLShaderProgram::setPatchVertexCount(int count)
Используйте эту функцию, чтобы указать OpenGL количество вершин в патче на count. Патч — это пользовательский примитив OpenGL, интерпретация которого полностью определяется шейдерами стадии детализации. Поэтому вызов этой функции имеет смысл только при использовании QOpenGLShaderProgram, содержащего шейдеры стадии детализации. При использовании детализации OpenGL, единственный примитив, который можно отрисовать с помощью glDraw*() функций, это GL_PATCHES.
Это эквивалентно вызову glPatchParameteri(GL_PATCH_VERTICES, count).
Примечание: Это изменяет глобальное состояние OpenGL и не относится к этому экземпляру QOpenGLShaderProgram. Вы должны вызвать эту функцию в своей функции отрисовки, когда это необходимо, так как QOpenGLShaderProgram не выполняет это за вас. Эта функция — просто функция удобства.
См. также patchVertexCount().
void QOpenGLShaderProgram::setUniformValue(int location, GLfloat value)
Устанавливает значение униформной переменной в позиции location в текущем контексте на value.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(int location, GLint value)
Устанавливает значение униформной переменной в позиции location в текущем контексте на value.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(const char *name, const QColor &color)
Это перегруженный метод.
Устанавливает значение униформной переменной с именем name в текущем контексте на значения красного, зеленого, синего и альфа-каналов цвета color.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(const char *name, const QPoint &point)
Это перегруженный метод.
Устанавливает значение униформной переменной, связанной с name в текущем контексте, на координаты x и y точки point.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(const char *name, const QPointF &point)
Это перегруженный метод.
Устанавливает значение униформной переменной, связанной с name в текущем контексте, на координаты x и y точки point.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(const char *name, const QSize &size)
Это перегруженный метод.
Устанавливает значение униформ-переменной, связанной с name в текущем контексте, равное ширине и высоте заданного size.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(const char *name, const QSizeF &size)
Это перегруженный метод.
Устанавливает значение униформ-переменной, связанной с name в текущем контексте, равное ширине и высоте заданного size.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(const char *name, const QMatrix2x2 &value)
Это перегруженный метод.
Устанавливает значение униформ-переменной с именем name в текущем контексте на 2x2 матрицу value.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(const char *name, const QMatrix2x3 &value)
Это перегруженный метод.
Устанавливает значение униформ-переменной с именем name в текущем контексте на 2x3 матрицу value.
Примечание: Этот метод не поддерживает неквадратные матрицы, такие как mat2x3, которые есть в современных версиях OpenGL. Вместо этого он обрабатывает униформ как массив vec3.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(const char *name, const QMatrix2x4 &value)
Это перегруженный метод.
Устанавливает значение униформ-переменной с именем name в текущем контексте на 2x4 матрицу value.
Примечание: Этот метод не поддерживает неквадратные матрицы, такие как mat2x4, которые есть в современных версиях OpenGL. Вместо этого он обрабатывает униформ как массив vec4.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(const char *name, const QMatrix3x2 &value)
Это перегруженный метод.
Устанавливает значение униформ-переменной с именем name в текущем контексте на 3x2 матрицу value.
Примечание: Этот метод не поддерживает неквадратные матрицы, такие как mat3x2, которые есть в современных версиях OpenGL. Вместо этого он обрабатывает униформ как массив vec2.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(const char *name, const QMatrix3x3 &value)
Это перегруженный метод.
Устанавливает значение униформ-переменной с именем name в текущем контексте на 3x3 матрицу value.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(const char *name, const QMatrix3x4 &value)
Это перегруженный метод.
Устанавливает значение униформ-переменной с именем name в текущем контексте на 3x4 матрицу value.
Примечание: Этот метод не поддерживает неквадратные матрицы, такие как mat3x4, которые есть в современных версиях OpenGL. Вместо этого он обрабатывает униформ как массив vec4.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(const char *name, const QMatrix4x2 &value)
Это перегруженный метод.
Устанавливает значение униформ-переменной с именем name в текущем контексте на 4x2 матрицу value.
Примечание: Этот метод не поддерживает неквадратные матрицы, такие как mat4x2, которые есть в современных версиях OpenGL. Вместо этого он обрабатывает униформ как массив vec2.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(const char *name, const QMatrix4x3 &value)
Это перегруженный метод.
Устанавливает значение униформ-переменной с именем name в текущем контексте на 4x3 матрицу value.
Примечание: Этот метод не поддерживает неквадратные матрицы, такие как mat4x3, которые есть в современных версиях OpenGL. Вместо этого он обрабатывает униформ как массив vec3.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(const char *name, const QMatrix4x4 &value)
Это перегруженный метод.
Устанавливает значение униформ-переменной с именем name в текущем контексте на 4x4 матрицу value.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(const char *name, const GLfloat [2][2] value = 2)
Это перегруженный метод.
Устанавливает значение униформ-переменной с именем name в текущем контексте на 2x2 матрицу value. Элементы матрицы должны быть указаны в порядке следования столбцов.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(const char *name, const GLfloat [3][3] value = 3)
Это перегруженный метод.
Устанавливает значение униформ-переменной с именем name в текущем контексте на 3x3 матрицу value. Элементы матрицы должны быть указаны в порядке следования столбцов.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(const char *name, const GLfloat [4][4] value = 4)
Это перегруженный метод.
Устанавливает значение униформ-переменной с именем name в текущем контексте на 4x4 матрицу value. Элементы матрицы должны быть указаны в порядке следования столбцов.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(const char *name, const QTransform &value)
Это перегруженный метод.
Устанавливает значение униформ-переменной с именем name в текущем контексте на 3x3 матрицу преобразования value, заданную как значение QTransform.
Чтобы установить значение QTransform как 4x4 матрицу в шейдере, используйте setUniformValue(name, QMatrix4x4(value)).
void QOpenGLShaderProgram::setUniformValue(int location, GLuint value)
Устанавливает значение униформ-переменной по location в текущем контексте на value. Этот метод следует использовать при установке значений саплеров.
Примечание: Этот метод не поддерживает тип unsigned int в современных версиях OpenGL и поэтому обрабатывает value как GLint и вызывает glUniform1i.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(int location, GLfloat x, GLfloat y)
Устанавливает значение униформ-переменной по location в текущем контексте на 2D вектор (x, y).
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(int location, GLfloat x, GLfloat y, GLfloat z)
Устанавливает значение униформ-переменной по location в текущем контексте на 3D вектор (x, y, z).
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(int location, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
Устанавливает значение униформ-переменной по location в текущем контексте на 4D вектор (x, y, z, w).
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(int location, const QVector2D &value)
Устанавливает переменную униформы по адресу location в текущем контексте на значение value.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(int location, const QVector3D &value)
Устанавливает переменную униформы по адресу location в текущем контексте на значение value.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(int location, const QVector4D &value)
Устанавливает переменную униформы по адресу location в текущем контексте на значение value.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(int location, const QColor &color)
Устанавливает переменную униформы по адресу location в текущем контексте на значения красного, зеленого, синего и альфа-компонентов цвета color.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(int location, const QPoint &point)
Устанавливает переменную униформы по адресу location в текущем контексте на значения координат x и y точки point.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(int location, const QPointF &point)
Устанавливает переменную униформы по адресу location в текущем контексте на значения координат x и y точки point.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(int location, const QSize &size)
Устанавливает переменную униформы по адресу location в текущем контексте на значения ширины и высоты размера size.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(int location, const QSizeF &size)
Устанавливает переменную униформы по адресу location в текущем контексте на значения ширины и высоты размера size.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(int location, const QMatrix2x2 &value)
Устанавливает переменную униформы по адресу location в текущем контексте на матрицу 2x2 value.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(int location, const QMatrix2x3 &value)
Устанавливает переменную униформы по адресу location в текущем контексте на матрицу 2x3 value.
Примечание: Эта функция не учитывает поддержку неквадратных матриц, таких как типы GLSL, например mat2x3, которые присутствуют в современных версиях OpenGL. Вместо этого она обрабатывает униформу как массив vec3.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(int location, const QMatrix2x4 &value)
Устанавливает переменную униформы по адресу location в текущем контексте на матрицу 2x4 value.
Примечание: Эта функция не учитывает поддержку неквадратных матриц, таких как типы GLSL, например mat2x4, которые присутствуют в современных версиях OpenGL. Вместо этого она обрабатывает униформу как массив vec4.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(int location, const QMatrix3x2 &value)
Устанавливает переменную униформы по адресу location в текущем контексте на матрицу 3x2 value.
Примечание: Эта функция не учитывает поддержку неквадратных матриц, таких как типы GLSL, например mat3x2, которые присутствуют в современных версиях OpenGL. Вместо этого она обрабатывает униформу как массив vec2.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(int location, const QMatrix3x3 &value)
Устанавливает переменную униформы по адресу location в текущем контексте на матрицу 3x3 value.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(int location, const QMatrix3x4 &value)
Устанавливает переменную униформы по адресу location в текущем контексте на матрицу 3x4 value.
Примечание: Эта функция не учитывает поддержку неквадратных матриц, таких как типы GLSL, например mat3x4, которые присутствуют в современных версиях OpenGL. Вместо этого она обрабатывает униформу как массив vec4.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(int location, const QMatrix4x2 &value)
Устанавливает переменную униформы по адресу location в текущем контексте на матрицу 4x2 value.
Примечание: Эта функция не учитывает поддержку неквадратных матриц, таких как типы GLSL, например mat4x2, которые присутствуют в современных версиях OpenGL. Вместо этого она обрабатывает униформу как массив vec2.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(int location, const QMatrix4x3 &value)
Устанавливает переменную униформы по адресу location в текущем контексте на матрицу 4x3 value.
Примечание: Эта функция не учитывает поддержку неквадратных матриц, таких как типы GLSL, например mat4x3, которые присутствуют в современных версиях OpenGL. Вместо этого она обрабатывает униформу как массив vec3.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(int location, const QMatrix4x4 &value)
Устанавливает переменную униформы по адресу location в текущем контексте на матрицу 4x4 value.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(int location, const GLfloat [2][2] value = 2)
Это перегруженный метод.
Устанавливает переменную униформы по адресу location в текущем контексте на матрицу 2x2 value. Элементы матрицы должны быть указаны в столбце-главном порядке.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(int location, const GLfloat [3][3] value = 3)
Это перегруженный метод.
Устанавливает переменную униформы по адресу location в текущем контексте на матрицу 3x3 value. Элементы матрицы должны быть указаны в столбце-главном порядке.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(int location, const GLfloat [4][4] value = 4)
Это перегруженный метод.
Устанавливает переменную униформы по адресу location в текущем контексте на матрицу 4x4 value. Элементы матрицы должны быть указаны в столбце-главном порядке.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(int location, const QTransform &value)
Устанавливает унифицированную переменную в позиции location в текущем контексте на матрицу преобразования 3x3 value, заданную как значение QTransform.
Чтобы установить значение QTransform как матрицу 4x4 в шейдере, используйте setUniformValue(location, QMatrix4x4(value)).
void QOpenGLShaderProgram::setUniformValue(const char *name, GLfloat value)
Это перегруженный метод.
Устанавливает унифицированную переменную с именем name в текущем контексте на значение value.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(const char *name, GLint value)
Это перегруженный метод.
Устанавливает унифицированную переменную с именем name в текущем контексте на значение value.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(const char *name, GLuint value)
Это перегруженный метод.
Устанавливает унифицированную переменную с именем name в текущем контексте на значение value. Этот метод следует использовать при установке значений сапплеров.
Примечание: Этот метод не учитывает поддержку unsigned int в современных версиях OpenGL и поэтому обрабатывает value как GLint, вызывая glUniform1i.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(const char *name, GLfloat x, GLfloat y)
Это перегруженный метод.
Устанавливает унифицированную переменную с именем name в текущем контексте на 2D вектор (x, y).
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(const char *name, GLfloat x, GLfloat y, GLfloat z)
Это перегруженный метод.
Устанавливает унифицированную переменную с именем name в текущем контексте на 3D вектор (x, y, z).
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(const char *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
Это перегруженный метод.
Устанавливает унифицированную переменную с именем name в текущем контексте на 4D вектор (x, y, z, w).
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(const char *name, const QVector2D &value)
Это перегруженный метод.
Устанавливает унифицированную переменную с именем name в текущем контексте на значение value.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(const char *name, const QVector3D &value)
Это перегруженный метод.
Устанавливает унифицированную переменную с именем name в текущем контексте на значение value.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(const char *name, const QVector4D &value)
Это перегруженный метод.
Устанавливает унифицированную переменную с именем name в текущем контексте на значение value.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValueArray(int location, const GLfloat *values, int count, int tupleSize)
Устанавливает массив унифицированных переменных по адресу location в текущем контексте на count элементов из values. Каждый элемент имеет tupleSize компонент. tupleSize должен быть 1, 2, 3 или 4.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValueArray(int location, const GLint *values, int count)
Устанавливает массив унифицированных переменных по адресу location в текущем контексте на count элементов из values.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValueArray(int location, const GLuint *values, int count)
Устанавливает массив унифицированных переменных по адресу location в текущем контексте на count элементов из values. Эта перегрузка должна использоваться при установке массива значений сапплеров.
Примечание: Этот метод не учитывает поддержку unsigned int в современных версиях OpenGL и поэтому обрабатывает values как GLint, вызывая glUniform1iv.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValueArray(int location, const QVector2D *values, int count)
Устанавливает массив унифицированных переменных по адресу location в текущем контексте на count 2D-векторных элементов из values.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValueArray(int location, const QVector3D *values, int count)
Устанавливает массив унифицированных переменных по адресу location в текущем контексте на count 3D-векторных элементов из values.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValueArray(int location, const QVector4D *values, int count)
Устанавливает массив унифицированных переменных по адресу location в текущем контексте на count 4D-векторных элементов из values.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValueArray(int location, const QMatrix2x2 *values, int count)
Устанавливает массив унифицированных переменных по адресу location в текущем контексте на count элементов матриц 2x2 из values.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValueArray(int location, const QMatrix2x3 *values, int count)
Устанавливает массив унифицированных переменных по адресу location в текущем контексте на count элементов матриц 2x3 из values.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValueArray(int location, const QMatrix2x4 *values, int count)
Устанавливает массив унифицированных переменных по адресу location в текущем контексте на count элементов матриц 2x4 из values.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValueArray(int location, const QMatrix3x2 *values, int count)
Устанавливает массив унифицированных переменных по адресу location в текущем контексте на count элементов матриц 3x2 из values.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValueArray(int location, const QMatrix3x3 *values, int count)
Устанавливает массив унифицированных переменных по адресу location в текущем контексте на count элементов матриц 3x3 из values.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValueArray(int location, const QMatrix3x4 *values, int count)
Устанавливает массив однородных переменных по адресу location в текущем контексте на count элементов 3x4 матриц из values.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValueArray(int location, const QMatrix4x2 *values, int count)
Устанавливает массив однородных переменных по адресу location в текущем контексте на count элементов 4x2 матриц из values.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValueArray(int location, const QMatrix4x3 *values, int count)
Устанавливает массив однородных переменных по адресу location в текущем контексте на count элементов 4x3 матриц из values.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValueArray(int location, const QMatrix4x4 *values, int count)
Устанавливает массив однородных переменных по адресу location в текущем контексте на count элементов 4x4 матриц из values.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValueArray(const char *name, const GLfloat *values, int count, int tupleSize)
Это перегруженная функция.
Устанавливает массив однородных переменных с именем name в текущем контексте на count элементов из values. Каждый элемент содержит tupleSize компонентов. tupleSize должен быть 1, 2, 3 или 4.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValueArray(const char *name, const GLint *values, int count)
Это перегруженная функция.
Устанавливает массив однородных переменных с именем name в текущем контексте на count элементов из values.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValueArray(const char *name, const GLuint *values, int count)
Это перегруженная функция.
Устанавливает массив однородных переменных с именем name в текущем контексте на count элементов из values. Этот перегруз должен использоваться при установке массива значений самплеров.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValueArray(const char *name, const QVector2D *values, int count)
Это перегруженная функция.
Устанавливает массив однородных переменных с именем name в текущем контексте на count элементов 2D векторов из values.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValueArray(const char *name, const QVector3D *values, int count)
Это перегруженная функция.
Устанавливает массив однородных переменных с именем name в текущем контексте на count элементов 3D векторов из values.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValueArray(const char *name, const QVector4D *values, int count)
Это перегруженная функция.
Устанавливает массив однородных переменных с именем name в текущем контексте на count элементов 4D векторов из values.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValueArray(const char *name, const QMatrix2x2 *values, int count)
Это перегруженная функция.
Устанавливает массив однородных переменных с именем name в текущем контексте на count элементов 2x2 матриц из values.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValueArray(const char *name, const QMatrix2x3 *values, int count)
Это перегруженная функция.
Устанавливает массив однородных переменных с именем name в текущем контексте на count элементов 2x3 матриц из values.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValueArray(const char *name, const QMatrix2x4 *values, int count)
Это перегруженная функция.
Устанавливает массив однородных переменных с именем name в текущем контексте на count элементов 2x4 матриц из values.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValueArray(const char *name, const QMatrix3x2 *values, int count)
Это перегруженная функция.
Устанавливает массив однородных переменных с именем name в текущем контексте на count элементов 3x2 матриц из values.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValueArray(const char *name, const QMatrix3x3 *values, int count)
Это перегруженная функция.
Устанавливает массив однородных переменных с именем name в текущем контексте на count элементов 3x3 матриц из values.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValueArray(const char *name, const QMatrix3x4 *values, int count)
Это перегруженная функция.
Устанавливает массив однородных переменных с именем name в текущем контексте на count элементов 3x4 матриц из values.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValueArray(const char *name, const QMatrix4x2 *values, int count)
Это перегруженная функция.
Устанавливает массив однородных переменных с именем name в текущем контексте на count элементов 4x2 матриц из values.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValueArray(const char *name, const QMatrix4x3 *values, int count)
Это перегруженная функция.
Устанавливает массив однородных переменных с именем name в текущем контексте на count элементов 4x3 матриц из values.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValueArray(const char *name, const QMatrix4x4 *values, int count)
Это перегруженная функция.
Устанавливает массив однородных переменных с именем name в текущем контексте на count элементов 4x4 матриц из values.
См. также setAttributeValue().
QList<QOpenGLShader *> QOpenGLShaderProgram::shaders() const
Возвращает список всех шейдеров, добавленных в эту программу шейдеров с помощью addShader().
См. также addShader() и removeShader().
int QOpenGLShaderProgram::uniformLocation(const char *name) const
Возвращает местоположение переменной униформы name в списке параметров программы шейдера. Возвращает -1, если name не является допустимой переменной униформы для этой программы шейдера.
См. также attributeLocation().
int QOpenGLShaderProgram::uniformLocation(const QByteArray &name) const
Это перегруженный метод.
Возвращает местоположение переменной униформы name в списке параметров программы шейдера. Возвращает -1, если name не является допустимой переменной униформы для этой программы шейдера.
См. также attributeLocation().
int QOpenGLShaderProgram::uniformLocation(const QString &name) const
Это перегруженный метод.
Возвращает местоположение переменной униформы name в списке параметров программы шейдера. Возвращает -1, если name не является допустимой переменной униформы для этой программы шейдера.
См. также attributeLocation().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qopenglshaderprogram.html