Класс 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. Когда поддержка недоступна, вызов функций с "cacheable" эквивалентен обычным функциям.
Примечание: Некоторые драйверы не имеют доступных бинарных форматов, даже если они рекламируют расширение или предлагают 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().
Подклассы могут переопределять эту функцию для инициализации атрибутов и переменных униформ для использования в конкретных программах шейдеров.
Если программа шейдеров уже была связана, повторный вызов этой функции принудительно пересвяжет её.
Если шейдеры были добавлены в эту программу через addCacheableShaderFromSourceCode() или addCacheableShaderFromSourceFile(), поддерживаются бинарные файлы программ, и на диске доступен кэшированный бинарный файл, фактическая компиляция и связывание пропускаются. Вместо этого link() инициализирует программу с помощью двоичного объекта через glProgramBinary(). Если нет кэшированной версии программы или она была сгенерирована с другой версией драйвера, шейдеры будут скомпилированы из исходного кода и программа будет связана обычным способом. Это позволяет беспрепятственно обновлять графические драйверы, не беспокоясь о потенциально несовместимых двоичных форматах.
См. также addShader() и log().
QString QOpenGLShaderProgram::log() const
Возвращает ошибки и предупреждения, произошедшие во время последнего вызова link() или addShader() с явно указанным исходным кодом.
См. также link().
int QOpenGLShaderProgram::maxGeometryOutputVertices() const
Возвращает аппаратное ограничение на количество вершин, которые может вывести шейдер геометрии.
int QOpenGLShaderProgram::patchVertexCount() const
Возвращает количество вершин на патч, которые должны использоваться при отрисовке.
Примечание: Возвращает глобальное значение состояния OpenGL. Оно не специфично для данного экземпляра QOpenGLShaderProgram instance.
END_OF_DOCUMENT_MARKERСм. также 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.
Массив станет активным при вызове enableAttributeArray() для location. В противном случае будет использовано значение, заданное с помощью setAttributeValue() для location.
См. также setAttributeValue(), setUniformValue(), enableAttributeArray() и disableAttributeArray().
void QOpenGLShaderProgram::setAttributeArray(int location, const QVector2D *values, int stride = 0)
Устанавливает массив вершинных значений values размером 2D на атрибут в location в этой программе шейдеров. Stride указывает количество байтов между вершинами. Значение stride по умолчанию, равное нулю, указывает, что вершины плотно упакованы в values.
Массив станет активным при вызове enableAttributeArray() для location. В противном случае будет использовано значение, заданное с помощью setAttributeValue() для location.
См. также setAttributeValue(), setUniformValue(), enableAttributeArray() и disableAttributeArray().
void QOpenGLShaderProgram::setAttributeArray(int location, const QVector3D *values, int stride = 0)
Устанавливает массив вершинных значений values размером 3D на атрибут в location в этой программе шейдеров. Stride указывает количество байтов между вершинами. Значение stride по умолчанию, равное нулю, указывает, что вершины плотно упакованы в values.
Массив станет активным при вызове enableAttributeArray() для location. В противном случае будет использовано значение, заданное с помощью setAttributeValue() для location.
См. также setAttributeValue(), setUniformValue(), enableAttributeArray() и disableAttributeArray().
void QOpenGLShaderProgram::setAttributeArray(int location, const QVector4D *values, int stride = 0)
Устанавливает массив вершинных значений values размером 4D на атрибут в location в этой программе шейдеров. Stride указывает количество байтов между вершинами. Значение stride по умолчанию, равное нулю, указывает, что вершины плотно упакованы в values.
Массив станет активным при вызове enableAttributeArray() для location. В противном случае будет использовано значение, заданное с помощью 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.
Массив станет активным при вызове enableAttributeArray() для location. В противном случае будет использовано значение, заданное с помощью 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.
Массив станет активным при вызове enableAttributeArray() для name. В противном случае будет использовано значение, заданное с помощью setAttributeValue() для name.
См. также setAttributeValue(), setUniformValue(), enableAttributeArray() и disableAttributeArray().
void QOpenGLShaderProgram::setAttributeArray(const char *name, const QVector2D *values, int stride = 0)
Это перегруженная функция.
Устанавливает массив вершинных значений values размером 2D на атрибут с именем name в этой программе шейдеров. Stride указывает количество байтов между вершинами. Значение stride по умолчанию, равное нулю, указывает, что вершины плотно упакованы в values.
Массив станет активным при вызове enableAttributeArray() для name. В противном случае будет использовано значение, заданное с помощью setAttributeValue() для name.
См. также setAttributeValue(), setUniformValue(), enableAttributeArray() и disableAttributeArray().
void QOpenGLShaderProgram::setAttributeArray(const char *name, const QVector3D *values, int stride = 0)
Это перегруженная функция.
Устанавливает массив 3D-вершинных значений для атрибута с именем name в этой программе шейдеров. Шаг указывает количество байтов между вершинами. Значение шага по умолчанию, равное нулю, означает, что вершины плотно упакованы в значениях.
Массив станет активным, когда для name будет вызван метод enableAttributeArray(). В противном случае будет использовано значение, заданное с помощью setAttributeValue() для name.
См. также setAttributeValue(), setUniformValue(), enableAttributeArray() и disableAttributeArray().
void QOpenGLShaderProgram::setAttributeArray(const char *name, const QVector4D *values, int stride = 0)
Это перегруженный метод.
Устанавливает массив 4D-вершинных значений для атрибута с именем name в этой программе шейдеров. Шаг указывает количество байтов между вершинами. Значение шага по умолчанию, равное нулю, означает, что вершины плотно упакованы в значениях.
Массив станет активным, когда для 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 в этой программе шейдеров. Шаг указывает количество байтов между вершинами. Значение шага по умолчанию, равное нулю, означает, что вершины плотно упакованы в значениях.
Тип указывает тип элементов в массиве значений, обычно 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 в текущем связанном буфере вершин. Шаг указывает количество байтов между вершинами. Значение шага по умолчанию, равное нулю, означает, что вершины плотно упакованы в массиве значений.
Тип указывает тип элементов в массиве вершинных значений, обычно 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 в текущем связанном буфере вершин. Шаг указывает количество байтов между вершинами. Значение шага по умолчанию, равное нулю, означает, что вершины плотно упакованы в массиве значений.
Тип указывает тип элементов в массиве вершинных значений, обычно 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().
END_OF_DOCUMENT_MARKERvoid QOpenGLShaderProgram::setAttributeValue(const char *name, GLfloat x, GLfloat y)
Это перегруженный метод.
Устанавливает атрибут с именем name в текущем контексте на двумерный вектор (x, y).
См. также setUniformValue().
void QOpenGLShaderProgram::setAttributeValue(const char *name, GLfloat x, GLfloat y, GLfloat z)
Это перегруженный метод.
Устанавливает атрибут с именем name в текущем контексте на трехмерный вектор (x, y, z).
См. также setUniformValue().
void QOpenGLShaderProgram::setAttributeValue(const char *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
Это перегруженный метод.
Устанавливает атрибут с именем name в текущем контексте на четырехмерный вектор (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)
Используйте этот метод для указания количестве вершин в патче для 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.
Примечание: Этот метод не учитывает поддержку неквадратных матриц, то есть типов GLSL, таких как mat2x3, которые присутствуют в современных версиях OpenGL. Вместо этого он обрабатывает униформную переменную как массив vec3.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(const char *name, const QMatrix2x4 &value)
Это перегруженный метод.
Устанавливает униформную переменную с именем name в текущем контексте на 2x4 матрицу value.
Примечание: Этот метод не учитывает поддержку неквадратных матриц, то есть типов GLSL, таких как mat2x4, которые присутствуют в современных версиях OpenGL. Вместо этого он обрабатывает униформную переменную как массив vec4.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(const char *name, const QMatrix3x2 &value)
Это перегруженный метод.
Устанавливает униформную переменную с именем name в текущем контексте на 3x2 матрицу value.
Примечание: Этот метод не учитывает поддержку неквадратных матриц, то есть типов GLSL, таких как 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.
Примечание: Этот метод не учитывает поддержку неквадратных матриц, то есть типов GLSL, таких как mat3x4, которые присутствуют в современных версиях OpenGL. Вместо этого он обрабатывает униформную переменную как массив vec4.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(const char *name, const QMatrix4x2 &value)
Это перегруженный метод.
Устанавливает униформную переменную с именем name в текущем контексте на 4x2 матрицу value.
Примечание: Этот метод не учитывает поддержку неквадратных матриц, то есть типов GLSL, таких как mat4x2, которые присутствуют в современных версиях OpenGL. Вместо этого он обрабатывает униформную переменную как массив vec2.
См. также setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(const char *name, const QMatrix4x3 &value)
Это перегруженный метод.
Устанавливает униформную переменную с именем name в текущем контексте на 4x3 матрицу value.
Примечание: Этот метод не учитывает поддержку неквадратных матриц, то есть типов GLSL, таких как 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.0/qopenglshaderprogram.html