QOpenGLShaderProgram Class
La clase QOpenGLShaderProgram permite enlazar y utilizar programas de sombreado OpenGL. Más...
| Cabecera: | #include <QOpenGLShaderProgram> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS OpenGL)target_link_libraries(mytarget PRIVATE Qt6::OpenGL) |
| qmake: | QT += opengl |
| Hereda: | QObject |
- Lista de todos los miembros, incluyendo los heredados
- QOpenGLShaderProgram es parte de Renderizado en 3D.
Funciones Públicas
| QOpenGLShaderProgram(QObject *parent = nullptr) | |
| virtual | ~QOpenGLShaderProgram() |
| bool | addCacheableShaderFromSourceCode(QOpenGLShader::ShaderType tipo, const char *fuente) |
| bool | addCacheableShaderFromSourceCode(QOpenGLShader::ShaderType tipo, const QByteArray &fuente) |
| bool | addCacheableShaderFromSourceCode(QOpenGLShader::ShaderType tipo, const QString &fuente) |
| bool | addCacheableShaderFromSourceFile(QOpenGLShader::ShaderType tipo, const QString &fileName) |
| bool | addShader(QOpenGLShader *shader) |
| bool | addShaderFromSourceCode(QOpenGLShader::ShaderType tipo, const char *fuente) |
| bool | addShaderFromSourceCode(QOpenGLShader::ShaderType type, const QByteArray &source) |
| bool | addShaderFromSourceCode(QOpenGLShader::ShaderType tipo, const QString &fuente) |
| bool | addShaderFromSourceFile(QOpenGLShader::ShaderType tipo, const QString &fileName) |
| int | attributeLocation(const char *name) const |
| int | attributeLocation(const QByteArray &name) const |
| int | attributeLocation(const QString &nombre) const |
| bool | bind() |
| void | bindAttributeLocation(const char *nombre, int ubicación) |
| void | bindAttributeLocation(const QByteArray &nombre, int posición) |
| void | bindAttributeLocation(const QString &nombre, int posición) |
| bool | create() |
| QList<float> | defaultInnerTessellationLevels() const |
| QList<float> | defaultOuterTessellationLevels() const |
| void | disableAttributeArray(int ubicación) |
| void | disableAttributeArray(const char *nombre) |
| void | enableAttributeArray(int ubicación) |
| void | enableAttributeArray(const char *nombre) |
| bool | isLinked() const |
| bool virtual | link() |
| QString | log() const |
| int | maxGeometryOutputVertices() const |
| int | patchVertexCount() const |
| GLuint | programId() const |
| void | release() |
| void | removeAllShaders() |
| void | removeShader(QOpenGLShader *shader) |
| 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, const GLfloat *values, int tupleSize, int stride = 0) |
| void | setAttributeArray(int location, GLenum type, const void *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 *nombre, const QVector4D *valores, int stride = 0) |
| void | setAttributeArray(const char *name, const GLfloat *values, int tupleSize, 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, tipo GLenum, int offset, int tupleSize, int stride = 0) |
| void | setAttributeValue(int ubicación, GLfloat valor) |
| void | setAttributeValue(int location, const QColor &value) |
| 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, GLfloat x, GLfloat y) |
| void | setAttributeValue(int location, GLfloat x, GLfloat y, GLfloat z) |
| void | setAttributeValue(int posición, const GLfloat *valores, int columnas, int filas) |
| void | setAttributeValue(int posición, GLfloat x, GLfloat y, GLfloat z, GLfloat w) |
| void | setAttributeValue(const char *nombre, GLfloat valor) |
| void | setAttributeValue(const char *nombre, const QColor &valor) |
| void | setAttributeValue(const char *nombre, const QVector2D &valor) |
| void | setAttributeValue(const char *name, const QVector3D &value) |
| void | setAttributeValue(const char *nombre, const QVector4D &value) |
| void | setAttributeValue(const char *nombre, GLfloat x, GLfloat y) |
| void | setAttributeValue(const char *nombre, GLfloat x, GLfloat y, GLfloat z) |
| void | setAttributeValue(const char *nombre, const GLfloat *valores, int columnas, int filas) |
| void | setAttributeValue(const char *nombre, GLfloat x, GLfloat y, GLfloat z, GLfloat w) |
| void | setDefaultInnerTessellationLevels(const QList<float> &levels) |
| void | setDefaultOuterTessellationLevels(const QList<float> &levels) |
| void | setPatchVertexCount(int count) |
| void | setUniformValue(int ubicación, GLfloat valor) |
| void | setUniformValue(int posición, GLint valor) |
| void | setUniformValue(const char *nombre, const QMatrix3x4 &valor) |
| void | setUniformValue(const char *nombre, const QMatrix4x2 &valor) |
| void | setUniformValue(const char *nombre, const QMatrix4x3 &valor) |
| void | setUniformValue(const char *nombre, const QMatrix4x4 &valor) |
| void | setUniformValue(const char *name, const QPoint &point) |
| void | setUniformValue(const char *name, const QPointF &point) |
| void | setUniformValue(const char *nombre, const QSize &tamaño) |
| void | setUniformValue(const char *nombre, const QSizeF &tamaño) |
| void | setUniformValue(const char *nombre, const QTransform &valor) |
| void | setUniformValue(const char *name, const QVector2D &value) |
| void | setUniformValue(const char *name, const QVector3D &value) |
| void | setUniformValue(const char *nombre, const QVector4D &value) |
| void | setUniformValue(int location, const GLfloat[2][2] value) |
| void | setUniformValue(int location, const GLfloat[3][3] value) |
| void | setUniformValue(int lugar, const GLfloat[4][4] valor) |
| void | setUniformValue(const char *nombre, GLfloat x, GLfloat y) |
| void | setUniformValue(const char *nombre, GLfloat x, GLfloat y, GLfloat z) |
| void | setUniformValue(const char *nombre, GLfloat x, GLfloat y, GLfloat z, GLfloat w) |
| void | setUniformValue(int ubicación, GLuint valor) |
| void | setUniformValue(int lugar, const QColor &color) |
| 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 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 QTransform &value) |
| 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, GLfloat x, GLfloat y) |
| void | setUniformValue(int location, GLfloat x, GLfloat y, GLfloat z) |
| void | setUniformValue(int posición, GLfloat x, GLfloat y, GLfloat z, GLfloat w) |
| void | setUniformValue(const char *nombre, GLfloat valor) |
| void | setUniformValue(const char *nombre, valor GLint) |
| void | setUniformValue(const char *nombre, valor GLuint) |
| void | setUniformValue(const char *nombre, const GLfloat[2][2] valor) |
| void | setUniformValue(const char *nombre, const GLfloat[3][3] valor) |
| void | setUniformValue(const char *nombre, const GLfloat[4][4] valor) |
| void | setUniformValue(const char *nombre, const QColor &color) |
| void | setUniformValue(const char *nombre, const QMatrix2x2 &valor) |
| void | setUniformValue(const char *nombre, const QMatrix2x3 &valor) |
| void | setUniformValue(const char *nombre, const QMatrix2x4 &valor) |
| void | setUniformValue(const char *nombre, const QMatrix3x2 &valor) |
| void | setUniformValue(const char *nombre, const QMatrix3x3 &valor) |
| void | setUniformValueArray(int location, const GLint *values, int count) |
| void | setUniformValueArray(int location, const GLuint *values, int count) |
| void | setUniformValueArray(int posición, const QMatrix2x2 *valores, int valor) |
| void | setUniformValueArray(int ubicación, const QMatrix2x3 *valores, int recuento) |
| void | setUniformValueArray(int posición, const QMatrix2x4 *valores, int cuenta) |
| 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(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 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 *nombre, const QMatrix2x2 *valores, 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 *nombre, const QMatrix4x2 *valores, int count) |
| void | setUniformValueArray(const char *name, const QMatrix4x3 *values, int count) |
| void | setUniformValueArray(const char *name, const QMatrix4x4 *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 GLfloat *values, int count, int tupleSize) |
| QList<QOpenGLShader *> | shaders() const |
| int | uniformLocation(const char *name) const |
| int | uniformLocation(const QByteArray &name) const |
| int | uniformLocation(const QString &nombre) const |
Miembros públicos estáticos
| bool | hasOpenGLShaderPrograms(QOpenGLContext *context = nullptr) |
Descripción detallada
Introducción
Esta clase soporta programas de sombreado escritos en el Lenguaje de Sombreado OpenGL (GLSL) y en el Lenguaje de Sombreado OpenGL/ES (GLSL/ES).
QOpenGLShader y QOpenGLShaderProgram resguardan al programador de los detalles de compilación y vinculación de los sombreadores de vértices y fragmentos.
El siguiente ejemplo crea un programa de sombreado de vértices utilizando el código fuente suministrado code. Una vez compilado y enlazado, el programa shader se activa en la actual QOpenGLContext llamando a QOpenGLShaderProgram::bind():
QOpenGLShader shader(QOpenGLShader::Vertex); shader.compileSourceCode(code); QOpenGLShaderProgram program(context); program.addShader(&shader); program.link(); program.bind();
Escribir sombreadores portátiles
Los programas de sombreado pueden ser difíciles de reutilizar en distintas implementaciones de OpenGL debido a los distintos niveles de compatibilidad con los atributos de vértice estándar y las variables uniformes. En particular, GLSL/ES carece de todas las variables estándar presentes en los sistemas OpenGL de escritorio: gl_Vertex gl_Normal , gl_Color, etc. OpenGL de escritorio carece de los calificadores de variables highp, mediump, y lowp.
La clase QOpenGLShaderProgram facilita el proceso de escribir shaders portables prefijando todos los programas shader con las siguientes líneas en OpenGL de escritorio:
#define highp #define mediump #define lowp
Esto hace posible ejecutar la mayoría de los programas de sombreado GLSL/ES en sistemas de escritorio. El programador debe limitarse sólo a las características que están presentes en GLSL/ES, y evitar nombres de variables estándar que sólo funcionan en el escritorio.
Ejemplo de sombreado simple
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");
Con el programa shader anterior activo, podemos dibujar un triángulo verde de la siguiente manera:
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);
Shaders Binarios y Programas
Los shaders binarios pueden especificarse utilizando glShaderBinary() en el valor de retorno de QOpenGLShader::shaderId(). La instancia QOpenGLShader que contiene el binario puede entonces añadirse al programa shader con addShader() y enlazarse de la forma habitual con link().
Los programas binarios pueden especificarse utilizando glProgramBinaryOES() en el valor de retorno de programId(). Entonces la aplicación debe llamar a link(), que se dará cuenta de que el programa ya ha sido especificado y enlazado, permitiendo realizar otras operaciones en el programa shader. El id del programa de sombreado puede crearse explícitamente utilizando la función create().
Almacenamiento en caché de binarios de programa
A partir de Qt 5.9, el soporte para cachear binarios de programa en disco está integrado. Para habilitar esto, cambie al uso de addCacheableShaderFromSourceCode() y addCacheableShaderFromSourceFile(). Con un contexto OpenGL ES 3.x o soporte para GL_ARB_get_program_binary, esto almacenará en caché de forma transparente los binarios de programa bajo QStandardPaths::GenericCacheLocation o QStandardPaths::CacheLocation. Cuando el soporte no está disponible, llamar a las variantes de funciones almacenables en caché es equivalente a las normales.
Nota: Algunos controladores no tienen ningún formato binario disponible, aunque anuncien la extensión u ofrezcan OpenGL ES 3.0. En este caso, el soporte binario del programa estará desactivado.
Consideraciones de seguridad
Se espera que todos los datos consumidos por QOpenGLShaderProgram sean contenido confiable. El código fuente del shader se pasa, posiblemente después de mínimas modificaciones, al compilador de la implementación OpenGL subyacente, que es una caja negra desde la perspectiva de Qt.
Advertencia: Se recomienda a los desarrolladores de aplicaciones que consideren cuidadosamente las implicaciones potenciales antes de pasar contenido proporcionado por el usuario a funciones como addShaderFromSourceFile().
Véase también QOpenGLShader.
Documentación de funciones miembro
[explicit] QOpenGLShaderProgram::QOpenGLShaderProgram(QObject *parent = nullptr)
Construye un nuevo programa de sombreado y lo asocia a parent. El programa no será válido hasta que se llame a addShader().
El programa de sombreado se asociará al QOpenGLContext actual.
Véase también addShader().
[virtual noexcept] QOpenGLShaderProgram::~QOpenGLShaderProgram()
Elimina este programa de sombreado.
bool QOpenGLShaderProgram::addCacheableShaderFromSourceCode(QOpenGLShader::ShaderType type, const char *source)
Registra el shader de los especificados type y source en este programa. A diferencia de addShaderFromSourceCode(), esta función no realiza la compilación. La compilación se difiere a link(), y puede no ocurrir en absoluto, porque link() puede potencialmente utilizar un binario de programa de la caché de disco del shader de Qt. Esto suele suponer un aumento significativo del rendimiento.
Devuelve true si el shader ha sido registrado o, en el caso no cacheado, compilado con éxito; false si hubo un error. Los mensajes de error de compilación pueden recuperarse a través de log().
Cuando la caché de disco está desactivada, a través de Qt::AA_DisableShaderDiskCache por ejemplo, o el contexto OpenGL no tiene soporte para binarios de contexto, llamar a esta función es equivalente a addShaderFromSourceCode().
Véase también addShaderFromSourceCode() y addCacheableShaderFromSourceFile().
bool QOpenGLShaderProgram::addCacheableShaderFromSourceCode(QOpenGLShader::ShaderType type, const QByteArray &source)
Registra el shader de los especificados type y source en este programa. A diferencia de addShaderFromSourceCode(), esta función no realiza la compilación. La compilación se difiere a link(), y puede no ocurrir en absoluto, porque link() puede potencialmente utilizar un binario de programa de la caché de disco del shader de Qt. Esto suele suponer un aumento significativo del rendimiento.
Devuelve true si el shader ha sido registrado o, en el caso no cacheado, compilado con éxito; false si hubo un error. Los mensajes de error de compilación pueden recuperarse a través de log().
Cuando la caché de disco está deshabilitada, a través de Qt::AA_DisableShaderDiskCache por ejemplo, o el contexto OpenGL no tiene soporte para binarios de contexto, llamar a esta función es equivalente a addShaderFromSourceCode().
Se trata de una función sobrecargada.
Véase también addShaderFromSourceCode() y addCacheableShaderFromSourceFile().
bool QOpenGLShaderProgram::addCacheableShaderFromSourceCode(QOpenGLShader::ShaderType type, const QString &source)
Registra el shader de los especificados type y source en este programa. A diferencia de addShaderFromSourceCode(), esta función no realiza la compilación. La compilación se difiere a link(), y puede no ocurrir en absoluto, porque link() puede potencialmente utilizar un binario de programa de la caché de disco del shader de Qt. Esto normalmente conducirá a un aumento significativo en el rendimiento.
Cuando la caché de disco está deshabilitada, a través de Qt::AA_DisableShaderDiskCache por ejemplo, o el contexto OpenGL no tiene soporte para binarios de contexto, llamar a esta función es equivalente a addShaderFromSourceCode().
Se trata de una función sobrecargada.
Véase también addShaderFromSourceCode() y addCacheableShaderFromSourceFile().
bool QOpenGLShaderProgram::addCacheableShaderFromSourceFile(QOpenGLShader::ShaderType type, const QString &fileName)
Registra el shader de los especificados type y fileName en este programa. A diferencia de addShaderFromSourceFile(), esta función no realiza la compilación. La compilación se difiere a link(), y puede no ocurrir en absoluto, porque link() puede potencialmente utilizar un binario de programa de la caché de disco del shader de Qt. Esto suele suponer un aumento significativo del rendimiento.
Devuelve true si el archivo ha sido leído con éxito, false si el archivo no ha podido ser abierto o la compilación normal, sin caché, del shader ha fallado. Los mensajes de error de compilación pueden recuperarse mediante log().
Cuando la caché de disco está desactivada, a través de Qt::AA_DisableShaderDiskCache por ejemplo, o el contexto OpenGL no tiene soporte para binarios de contexto, llamar a esta función es equivalente a addShaderFromSourceFile().
Véase también addShaderFromSourceFile() y addCacheableShaderFromSourceCode().
bool QOpenGLShaderProgram::addShader(QOpenGLShader *shader)
Añade un shader compilado a este programa de sombreado. Devuelve true si se pudo añadir el sombreador, o false en caso contrario.
La propiedad del objeto shader permanece con la persona que llama. No se eliminará cuando se elimine esta instancia de QOpenGLShaderProgram. Esto permite al usuario añadir el mismo sombreador a varios programas de sombreado.
Véase también addShaderFromSourceCode(), addShaderFromSourceFile(), removeShader(), link(), y removeAllShaders().
bool QOpenGLShaderProgram::addShaderFromSourceCode(QOpenGLShader::ShaderType type, const char *source)
Compila source como un shader del especificado type y lo añade a este programa shader. Devuelve true si la compilación se ha realizado correctamente, false en caso contrario. Los errores y advertencias de compilación estarán disponibles a través de log().
Esta función está pensada como un atajo para añadir rápidamente sombreadores de vértices y fragmentos a un programa de sombreado sin crear primero una instancia de QOpenGLShader.
Véase también addShader(), addShaderFromSourceFile(), removeShader(), link(), log() y removeAllShaders().
bool QOpenGLShaderProgram::addShaderFromSourceCode(QOpenGLShader::ShaderType type, const QByteArray &source)
Compila source como un shader del especificado type y lo añade a este programa shader. Devuelve true si la compilación se ha realizado correctamente, false en caso contrario. Los errores y advertencias de compilación estarán disponibles a través de log().
Esta función pretende ser un atajo para añadir rápidamente sombreadores de vértices y fragmentos a un programa de sombreado sin crear primero una instancia de QOpenGLShader.
Se trata de una función sobrecargada.
Véase también addShader(), addShaderFromSourceFile(), removeShader(), link(), log(), y removeAllShaders().
bool QOpenGLShaderProgram::addShaderFromSourceCode(QOpenGLShader::ShaderType type, const QString &source)
Compila source como un shader del especificado type y lo añade a este programa shader. Devuelve true si la compilación se ha realizado correctamente, false en caso contrario. Los errores y advertencias de compilación estarán disponibles a través de log().
Esta función pretende ser un atajo para añadir rápidamente sombreadores de vértices y fragmentos a un programa de sombreado sin crear primero una instancia de QOpenGLShader.
Se trata de una función sobrecargada.
Véase también addShader(), addShaderFromSourceFile(), removeShader(), link(), log(), y removeAllShaders().
bool QOpenGLShaderProgram::addShaderFromSourceFile(QOpenGLShader::ShaderType type, const QString &fileName)
Compila el contenido de fileName como un shader del especificado type y lo añade a este programa shader. Devuelve true si la compilación se ha realizado correctamente, false en caso contrario. Los errores y advertencias de compilación estarán disponibles a través de log().
Esta función está pensada como un atajo para añadir rápidamente sombreadores de vértices y fragmentos a un programa de sombreado sin crear primero una instancia de QOpenGLShader.
Véase también addShader() y addShaderFromSourceCode().
int QOpenGLShaderProgram::attributeLocation(const char *name) const
Devuelve la ubicación del atributo name dentro de la lista de parámetros de este programa de sombreado. Devuelve -1 si name no es un atributo válido para este programa de sombreado.
Véase también uniformLocation() y bindAttributeLocation().
int QOpenGLShaderProgram::attributeLocation(const QByteArray &name) const
Devuelve la ubicación del atributo name dentro de la lista de parámetros de este programa de sombreado. Devuelve -1 si name no es un atributo válido para este programa de sombreado.
Esta es una función sobrecargada.
Véase también uniformLocation() y bindAttributeLocation().
int QOpenGLShaderProgram::attributeLocation(const QString &name) const
Devuelve la ubicación del atributo name dentro de la lista de parámetros de este programa de sombreado. Devuelve -1 si name no es un atributo válido para este programa de sombreado.
Esta es una función sobrecargada.
Véase también uniformLocation() y bindAttributeLocation().
bool QOpenGLShaderProgram::bind()
Vincula este programa de sombreado a la página QOpenGLContext activa y lo convierte en el programa de sombreado actual. Cualquier programa de sombreado previamente vinculado se libera. Esto es equivalente a llamar a glUseProgram() en programId(). Devuelve true si el programa se ha vinculado correctamente; false en caso contrario. Si el programa de sombreado aún no ha sido enlazado, o necesita ser re-enlazado, esta función llamará a link().
Véase también link() y release().
void QOpenGLShaderProgram::bindAttributeLocation(const char *name, int location)
Vincula el atributo name al location especificado. Esta función puede invocarse antes o después de enlazar el programa. Los atributos que no se hayan vinculado explícitamente al vincular el programa se asignarán automáticamente.
Si se llama a esta función después de haber enlazado el programa, será necesario volver a enlazarlo para que el cambio surta efecto.
Véase también attributeLocation().
void QOpenGLShaderProgram::bindAttributeLocation(const QByteArray &name, int location)
Vincula el atributo name al location especificado. Esta función puede invocarse antes o después de enlazar el programa. Los atributos que no se hayan vinculado explícitamente al vincular el programa se asignarán automáticamente.
Si se llama a esta función después de haber enlazado el programa, será necesario volver a enlazarlo para que el cambio surta efecto.
Se trata de una función sobrecargada.
Véase también attributeLocation().
void QOpenGLShaderProgram::bindAttributeLocation(const QString &name, int location)
Vincula el atributo name al location especificado. Esta función puede invocarse antes o después de enlazar el programa. Los atributos que no se hayan vinculado explícitamente al vincular el programa se asignarán automáticamente.
Si se llama a esta función después de haber enlazado el programa, será necesario volver a enlazarlo para que el cambio surta efecto.
Se trata de una función sobrecargada.
Véase también attributeLocation().
bool QOpenGLShaderProgram::create()
Solicita la creación inmediata del id del programa de sombreado. Devuelve true si tiene éxito; false en caso contrario.
Esta función es útil principalmente cuando se combina QOpenGLShaderProgram con otras funciones OpenGL que operan directamente sobre el id del programa de sombreado, como GL_OES_get_program_binary.
Cuando el programa de sombreado se utiliza normalmente, el id del programa de sombreado se creará bajo demanda.
Véase también programId().
QList<float> QOpenGLShaderProgram::defaultInnerTessellationLevels() const
Devuelve los niveles de teselación internos predeterminados que utilizará el generador de primitivas de teselación en caso de que el sombreador de control de teselación no los emita. Para más detalles sobre OpenGL y los shaders de teselación, véase OpenGL Tessellation Shaders.
Devuelve un vector QList de elementos flotantes que describen los niveles de teselación internos. El vector siempre tendrá dos elementos pero no todos tienen sentido para cada modo de teselación.
Nota: Esto devuelve el valor global del estado OpenGL. No es específico de esta instancia de QOpenGLShaderProgram.
Nota: Esta función sólo es compatible con OpenGL >= 4.0 y no devolverá resultados válidos con OpenGL ES 3.2.
Véase también setDefaultInnerTessellationLevels() y defaultOuterTessellationLevels().
QList<float> QOpenGLShaderProgram::defaultOuterTessellationLevels() const
Devuelve los niveles de teselación exteriores predeterminados que utilizará el generador de primitivas de teselación en caso de que el sombreador de control de teselación no los emita. Para más detalles sobre OpenGL y los shaders de teselación, véase OpenGL Tessellation Shaders.
Devuelve un vector QList de elementos flotantes que describen los niveles de teselación exteriores. El vector siempre tendrá cuatro elementos pero no todos tienen sentido para cada modo de teselación.
Nota: Esto devuelve el valor global del estado OpenGL. No es específico de esta instancia de QOpenGLShaderProgram.
Nota: Esta función sólo es compatible con OpenGL >= 4.0 y no devolverá resultados válidos con OpenGL ES 3.2.
Véase también setDefaultOuterTessellationLevels() y defaultInnerTessellationLevels().
void QOpenGLShaderProgram::disableAttributeArray(int location)
Desactiva la matriz de vértices en location en este programa de sombreado que fue activada por una llamada previa a enableAttributeArray().
Ver también enableAttributeArray(), setAttributeArray(), setAttributeValue(), y setUniformValue().
void QOpenGLShaderProgram::disableAttributeArray(const char *name)
Desactiva la matriz de vértices llamada name en este programa de sombreado que fue activada por una llamada previa a enableAttributeArray().
Esta es una función sobrecargada.
Ver también enableAttributeArray(), setAttributeArray(), setAttributeValue(), y setUniformValue().
void QOpenGLShaderProgram::enableAttributeArray(int location)
Habilita la matriz de vértices en location en este programa de sombreado para que el valor establecido por setAttributeArray() en location sea utilizado por el programa de sombreado.
Ver también disableAttributeArray(), setAttributeArray(), setAttributeValue(), y setUniformValue().
void QOpenGLShaderProgram::enableAttributeArray(const char *name)
Habilita la matriz de vértices llamada name en este programa de sombreado para que el valor establecido por setAttributeArray() en name sea utilizado por el programa de sombreado.
Esta es una función sobrecargada.
Ver también disableAttributeArray(), setAttributeArray(), setAttributeValue(), y setUniformValue().
[static] bool QOpenGLShaderProgram::hasOpenGLShaderPrograms(QOpenGLContext *context = nullptr)
Devuelve true si los programas de sombreado escritos en OpenGL Shading Language (GLSL) son compatibles con este sistema; false en caso contrario.
Se utiliza context para resolver las extensiones GLSL. Si context es nullptr, se utiliza QOpenGLContext::currentContext().
bool QOpenGLShaderProgram::isLinked() const
Devuelve true si este programa de sombreado ha sido enlazado; false en caso contrario.
Véase también link().
[virtual] bool QOpenGLShaderProgram::link()
Enlaza los shaders que fueron añadidos a este programa con addShader(). Devuelve true si el enlace tuvo éxito o false en caso contrario. Si el enlace falló, los mensajes de error pueden ser recuperados con log().
Las subclases pueden sobrescribir esta función para inicializar atributos y variables uniformes para su uso en programas de sombreado específicos.
Si el programa de sombreado ya estaba enlazado, llamar a esta función de nuevo obligará a que se vuelva a enlazar.
Cuando los sombreadores se añadieron a este programa a través de addCacheableShaderFromSourceCode() o addCacheableShaderFromSourceFile(), los binarios del programa son compatibles, y un binario en caché está disponible en el disco, la compilación real y la vinculación se omiten. En su lugar, link() inicializará el programa con el blob binario a través de glProgramBinary(). Si no hay una versión en caché del programa o se generó con una versión diferente del controlador, los shaders se compilarán desde el código fuente y el programa se enlazará normalmente. Esto permite actualizar sin problemas los controladores gráficos, sin tener que preocuparse por formatos binarios potencialmente incompatibles.
Véase también addShader() y log().
QString QOpenGLShaderProgram::log() const
Devuelve los errores y advertencias que se produjeron durante la última link() o addShader() con código fuente especificado explícitamente.
Véase también link().
int QOpenGLShaderProgram::maxGeometryOutputVertices() const
Devuelve el límite de hardware para el número de vértices que puede producir un sombreador de geometría.
int QOpenGLShaderProgram::patchVertexCount() const
Devuelve el número de vértices por parche que se utilizarán al renderizar.
Nota: Esto devuelve el valor global del estado OpenGL. No es específico de esta instancia de QOpenGLShaderProgram.
Véase también setPatchVertexCount().
GLuint QOpenGLShaderProgram::programId() const
Devuelve el identificador OpenGL asociado a este programa de sombreado.
Véase también QOpenGLShader::shaderId().
void QOpenGLShaderProgram::release()
Libera el programa de sombreado activo del QOpenGLContext actual. Esto es equivalente a llamar a glUseProgram(0).
Véase también bind().
void QOpenGLShaderProgram::removeAllShaders()
Elimina todos los shaders que fueron añadidos a este programa previamente. Los objetos QOpenGLShader para los shaders no serán eliminados si fueron construidos externamente. Los objetos QOpenGLShader que son construidos internamente por QOpenGLShaderProgram serán eliminados.
Ver también addShader() y removeShader().
void QOpenGLShaderProgram::removeShader(QOpenGLShader *shader)
Elimina shader de este programa de sombreado. El objeto no se elimina.
El programa de sombreado debe ser válido en el actual QOpenGLContext.
Véase también addShader(), link(), y removeAllShaders().
void QOpenGLShaderProgram::setAttributeArray(int location, const QVector2D *values, int stride = 0)
Establece una matriz de vértices 2D values en el atributo en location en este programa shader. stride indica el número de bytes entre vértices. Un valor por defecto stride de cero indica que los vértices están densamente empaquetados en values.
La matriz se activará cuando se llame a enableAttributeArray() en location. De lo contrario, se utilizará el valor especificado con setAttributeValue() para location.
Véase también setAttributeValue(), setUniformValue(), enableAttributeArray() y disableAttributeArray().
void QOpenGLShaderProgram::setAttributeArray(int location, const QVector3D *values, int stride = 0)
Establece una matriz de vértices 3D values en el atributo en location en este programa de sombreado. stride indica el número de bytes entre vértices. Un valor por defecto stride de cero indica que los vértices están densamente empaquetados en values.
La matriz se activará cuando se llame a enableAttributeArray() en location. De lo contrario, se utilizará el valor especificado con setAttributeValue() para location.
Véase también setAttributeValue(), setUniformValue(), enableAttributeArray() y disableAttributeArray().
void QOpenGLShaderProgram::setAttributeArray(int location, const QVector4D *values, int stride = 0)
Establece un array de vértices 4D values en el atributo en location en este programa shader. stride indica el número de bytes entre vértices. Un valor por defecto stride de cero indica que los vértices están densamente empaquetados en values.
La matriz se activará cuando se llame a enableAttributeArray() en location. De lo contrario, se utilizará el valor especificado con setAttributeValue() para location.
Véase también setAttributeValue(), setUniformValue(), enableAttributeArray() y disableAttributeArray().
void QOpenGLShaderProgram::setAttributeArray(int location, const GLfloat *values, int tupleSize, int stride = 0)
Establece una matriz de vértices values en el atributo en location en este programa de sombreado. El tupleSize indica el número de componentes por vértice (1, 2, 3, o 4), y el stride indica el número de bytes entre vértices. Un valor por defecto de stride de cero indica que los vértices están densamente empaquetados en values.
La matriz se activará cuando se llame a enableAttributeArray() en location. De lo contrario, se utilizará el valor especificado con setAttributeValue() para location.
Véase también setAttributeValue(), setUniformValue(), enableAttributeArray() y disableAttributeArray().
void QOpenGLShaderProgram::setAttributeArray(int location, GLenum type, const void *values, int tupleSize, int stride = 0)
Establece una matriz de vértices values en el atributo en location en este programa shader. stride indica el número de bytes entre vértices. Un valor por defecto stride de cero indica que los vértices están densamente empaquetados en values.
El type indica el tipo de elementos en el array values, normalmente GL_FLOAT, GL_UNSIGNED_BYTE, etc. tupleSize indica el número de componentes por vértice: 1, 2, 3 o 4.
La matriz se activará cuando se llame a enableAttributeArray() en location. De lo contrario, se utilizará el valor especificado con setAttributeValue() para location.
La función setAttributeBuffer() puede utilizarse para establecer la matriz de atributos en un desplazamiento dentro de un búfer de vértices.
Nota: Se activará la normalización. Si esto no se desea, llame a glVertexAttribPointer directamente a través de QOpenGLFunctions.
Véase también setAttributeValue(), setUniformValue(), enableAttributeArray(), disableAttributeArray(), y setAttributeBuffer().
void QOpenGLShaderProgram::setAttributeArray(const char *name, const QVector2D *values, int stride = 0)
Establece un array de vértices 2D values en el atributo llamado name en este programa shader. El stride indica el número de bytes entre vértices. Un valor por defecto stride de cero indica que los vértices están densamente empaquetados en values.
El array se activará cuando enableAttributeArray() sea llamado en name. En caso contrario, se utilizará el valor especificado con setAttributeValue() para name.
Se trata de una función sobrecargada.
Véase también setAttributeValue(), setUniformValue(), enableAttributeArray() y disableAttributeArray().
void QOpenGLShaderProgram::setAttributeArray(const char *name, const QVector3D *values, int stride = 0)
Establece un array de vértices 3D values en el atributo llamado name en este programa shader. El stride indica el número de bytes entre vértices. Un valor por defecto stride de cero indica que los vértices están densamente empaquetados en values.
El array se activará cuando enableAttributeArray() sea llamado en name. En caso contrario, se utilizará el valor especificado con setAttributeValue() para name.
Se trata de una función sobrecargada.
Véase también setAttributeValue(), setUniformValue(), enableAttributeArray() y disableAttributeArray().
void QOpenGLShaderProgram::setAttributeArray(const char *name, const QVector4D *values, int stride = 0)
Establece un array de vértices 4D values en el atributo llamado name en este programa shader. El stride indica el número de bytes entre vértices. Un valor por defecto stride de cero indica que los vértices están densamente empaquetados en values.
El array se activará cuando enableAttributeArray() sea llamado en name. En caso contrario, se utilizará el valor especificado con setAttributeValue() para name.
Se trata de una función sobrecargada.
Véase también setAttributeValue(), setUniformValue(), enableAttributeArray() y disableAttributeArray().
void QOpenGLShaderProgram::setAttributeArray(const char *name, const GLfloat *values, int tupleSize, int stride = 0)
Establece una matriz de vértices values en el atributo llamado name en este programa shader. El tupleSize indica el número de componentes por vértice (1, 2, 3, o 4), y el stride indica el número de bytes entre vértices. Un valor por defecto de stride de cero indica que los vértices están densamente empaquetados en values.
La matriz se activará cuando se llame a enableAttributeArray() en name. En caso contrario, se utilizará el valor especificado con setAttributeValue() para name.
Se trata de una función sobrecargada.
Véase también setAttributeValue(), setUniformValue(), enableAttributeArray() y disableAttributeArray().
void QOpenGLShaderProgram::setAttributeArray(const char *name, GLenum type, const void *values, int tupleSize, int stride = 0)
Establece un array de vértices values en el atributo llamado name en este programa shader. stride indica el número de bytes entre vértices. Un valor por defecto stride de cero indica que los vértices están densamente empaquetados en values.
El type indica el tipo de elementos en el array values, normalmente GL_FLOAT, GL_UNSIGNED_BYTE, etc. tupleSize indica el número de componentes por vértice: 1, 2, 3 o 4.
La matriz se activará cuando se llame a enableAttributeArray() en name. De lo contrario, se utilizará el valor especificado con setAttributeValue() para name.
La función setAttributeBuffer() puede utilizarse para establecer la matriz de atributos en un desplazamiento dentro de un búfer de vértices.
Se trata de una función sobrecargada.
Véase también setAttributeValue(), setUniformValue(), enableAttributeArray(), disableAttributeArray() y setAttributeBuffer().
void QOpenGLShaderProgram::setAttributeBuffer(int location, GLenum type, int offset, int tupleSize, int stride = 0)
Establece una matriz de valores de vértice en el atributo en location en este programa de sombreado, comenzando en un offset específico en el búfer de vértice actualmente vinculado. stride indica el número de bytes entre vértices. Un valor por defecto stride de cero indica que los vértices están densamente empaquetados en la matriz de valores.
type indica el tipo de elementos de la matriz de valores de vértices, normalmente GL_FLOAT, GL_UNSIGNED_BYTE, etc. tupleSize indica el número de componentes por vértice: 1, 2, 3 o 4.
La matriz se activará cuando se llame a enableAttributeArray() en location. De lo contrario, se utilizará el valor especificado con setAttributeValue() para location.
Nota: Se activará la normalización. Si esto no se desea, llame a glVertexAttribPointer directamente a través de QOpenGLFunctions.
Véase también setAttributeArray().
void QOpenGLShaderProgram::setAttributeBuffer(const char *name, GLenum type, int offset, int tupleSize, int stride = 0)
Establece una matriz de valores de vértices en el atributo llamado name en este programa de sombreado, comenzando en un offset específico en el búfer de vértices actualmente enlazado. stride indica el número de bytes entre vértices. Un valor por defecto stride de cero indica que los vértices están densamente empaquetados en la matriz de valores.
type indica el tipo de elementos de la matriz de valores de vértices, normalmente GL_FLOAT, GL_UNSIGNED_BYTE, etc. tupleSize indica el número de componentes por vértice: 1, 2, 3 o 4.
La matriz se activará cuando se llame a enableAttributeArray() en name. De lo contrario, se utilizará el valor especificado con setAttributeValue() para name.
Se trata de una función sobrecargada.
Véase también setAttributeArray().
void QOpenGLShaderProgram::setAttributeValue(int location, GLfloat value)
Establece el atributo en location en el contexto actual a value.
Véase también setUniformValue().
void QOpenGLShaderProgram::setAttributeValue(int location, const QColor &value)
Establece el atributo en location en el contexto actual a value.
Véase también setUniformValue().
void QOpenGLShaderProgram::setAttributeValue(int location, const QVector2D &value)
Establece el atributo en location en el contexto actual a value.
Véase también setUniformValue().
void QOpenGLShaderProgram::setAttributeValue(int location, const QVector3D &value)
Establece el atributo en location en el contexto actual a value.
Véase también setUniformValue().
void QOpenGLShaderProgram::setAttributeValue(int location, const QVector4D &value)
Establece el atributo en location en el contexto actual a value.
Véase también setUniformValue().
void QOpenGLShaderProgram::setAttributeValue(int location, GLfloat x, GLfloat y)
Establece el atributo en location en el contexto actual al vector 2D (x, y).
Véase también setUniformValue().
void QOpenGLShaderProgram::setAttributeValue(int location, GLfloat x, GLfloat y, GLfloat z)
Establece el atributo en location en el contexto actual al vector 3D (x, y, z).
Véase también setUniformValue().
void QOpenGLShaderProgram::setAttributeValue(int location, const GLfloat *values, int columns, int rows)
Establece el atributo en location en el contexto actual al contenido de values, que contiene elementos columns, cada uno de los cuales consta de elementos rows. El valor de rows debe ser 1, 2, 3 o 4. Esta función se utiliza normalmente para establecer valores de matrices y vectores de columnas.
Véase también setUniformValue().
void QOpenGLShaderProgram::setAttributeValue(int location, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
Establece el atributo en location en el contexto actual al vector 4D (x, y, z, w).
Véase también setUniformValue().
void QOpenGLShaderProgram::setAttributeValue(const char *name, GLfloat value)
Establece el atributo llamado name en el contexto actual a value.
Se trata de una función sobrecargada.
Véase también setUniformValue().
void QOpenGLShaderProgram::setAttributeValue(const char *name, const QColor &value)
Establece el atributo llamado name en el contexto actual a value.
Se trata de una función sobrecargada.
Véase también setUniformValue().
void QOpenGLShaderProgram::setAttributeValue(const char *name, const QVector2D &value)
Establece el atributo llamado name en el contexto actual a value.
Se trata de una función sobrecargada.
Véase también setUniformValue().
void QOpenGLShaderProgram::setAttributeValue(const char *name, const QVector3D &value)
Establece el atributo llamado name en el contexto actual a value.
Se trata de una función sobrecargada.
Véase también setUniformValue().
void QOpenGLShaderProgram::setAttributeValue(const char *name, const QVector4D &value)
Establece el atributo llamado name en el contexto actual a value.
Se trata de una función sobrecargada.
Véase también setUniformValue().
void QOpenGLShaderProgram::setAttributeValue(const char *name, GLfloat x, GLfloat y)
Establece el atributo llamado name en el contexto actual al vector 2D (x, y).
Se trata de una función sobrecargada.
Véase también setUniformValue().
void QOpenGLShaderProgram::setAttributeValue(const char *name, GLfloat x, GLfloat y, GLfloat z)
Establece el atributo llamado name en el contexto actual al vector 3D (x, y, z).
Se trata de una función sobrecargada.
Véase también setUniformValue().
void QOpenGLShaderProgram::setAttributeValue(const char *name, const GLfloat *values, int columns, int rows)
Establece el atributo denominado name en el contexto actual con el contenido de values, que contiene elementos columns, cada uno de los cuales consta de elementos rows. El valor de rows debe ser 1, 2, 3 o 4. Esta función se utiliza normalmente para establecer valores de matrices y vectores de columnas.
Se trata de una función sobrecargada.
Véase también setUniformValue().
void QOpenGLShaderProgram::setAttributeValue(const char *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
Establece el atributo llamado name en el contexto actual al vector 4D (x, y, z, w).
Se trata de una función sobrecargada.
Véase también setUniformValue().
void QOpenGLShaderProgram::setDefaultInnerTessellationLevels(const QList<float> &levels)
Establece los niveles de teselación exteriores por defecto que utilizará el generador de primitivas de teselación en caso de que el shader de control de teselación no los envíe a levels. Para más detalles sobre OpenGL y los shaders de teselación, véase OpenGL Tessellation Shaders.
El argumento levels debe ser un QList formado por 2 floats. No todos los valores tienen sentido para todos los modos de teselación. Si especifica un vector con menos de 2 elementos, a los elementos restantes se les dará un valor por defecto de 1.
Nota: Esto modifica el estado global de OpenGL y no es específico de esta instancia QOpenGLShaderProgram. Usted debe llamar a esto en su función de render cuando sea necesario, como QOpenGLShaderProgram no se aplicará esto para usted. Esto es puramente una función de conveniencia.
Nota: Esta función sólo está disponible con OpenGL >= 4.0 y no es compatible con OpenGL ES 3.2.
Véase también defaultInnerTessellationLevels() y setDefaultOuterTessellationLevels().
void QOpenGLShaderProgram::setDefaultOuterTessellationLevels(const QList<float> &levels)
Establece los niveles de teselación exteriores por defecto que utilizará el generador de primitivas de teselación en caso de que el shader de control de teselación no los envíe a levels. Para más detalles sobre OpenGL y los shaders de teselación, véase OpenGL Tessellation Shaders.
El argumento levels debe ser un QList formado por 4 floats. No todos los valores tienen sentido para todos los modos de teselación. Si especifica un vector con menos de 4 elementos, a los elementos restantes se les dará un valor por defecto de 1.
Nota: Esto modifica el estado global de OpenGL y no es específico de esta instancia QOpenGLShaderProgram. Usted debe llamar a esto en su función de render cuando sea necesario, como QOpenGLShaderProgram no se aplicará esto para usted. Esto es puramente una función de conveniencia.
Nota: Esta función sólo está disponible con OpenGL >= 4.0 y no es compatible con OpenGL ES 3.2.
Véase también defaultOuterTessellationLevels() y setDefaultInnerTessellationLevels().
void QOpenGLShaderProgram::setPatchVertexCount(int count)
Utilice esta función para especificar a OpenGL el número de vértices de un parche a count. Un parche es una primitiva OpenGL personalizada cuya interpretación está totalmente definida por las etapas del shader de teselación. Por lo tanto, llamar a esta función sólo tiene sentido cuando se utiliza un QOpenGLShaderProgram que contiene shaders de etapas de teselación. Cuando se utiliza el teselado OpenGL, la única primitiva que se puede renderizar con las funciones glDraw*() es GL_PATCHES.
Esto equivale a llamar a glPatchParameteri(GL_PATCH_VERTICES, count).
Nota: Esto modifica el estado global de OpenGL y no es específico de esta instancia QOpenGLShaderProgram. Usted debe llamar a esto en su función de render cuando sea necesario, como QOpenGLShaderProgram no se aplicará esto para usted. Esto es puramente una función de conveniencia.
Véase también patchVertexCount().
void QOpenGLShaderProgram::setUniformValue(int location, GLfloat value)
Establece la variable uniforme en location en el contexto actual a value.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(int location, GLint value)
Establece la variable uniforme en location en el contexto actual a value.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(const char *name, const QMatrix3x4 &value)
Establece la variable uniforme llamada name en el contexto actual a una matriz 3x4 value.
Nota: Esta función no tiene en cuenta el soporte de matrices no cuadradas, es decir, tipos GLSL como mat3x4, que está presente en las versiones modernas de OpenGL. En su lugar, trata el uniforme como un array de vec4.
Esta es una función sobrecargada.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(const char *name, const QMatrix4x2 &value)
Establece la variable uniforme llamada name en el contexto actual a una matriz 4x2 value.
Nota: Esta función no tiene en cuenta el soporte de matrices no cuadradas, es decir, tipos GLSL como mat4x2, que está presente en las versiones modernas de OpenGL. En su lugar, trata el uniforme como un array de vec2.
Esta es una función sobrecargada.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(const char *name, const QMatrix4x3 &value)
Establece la variable uniforme llamada name en el contexto actual a una matriz 4x3 value.
Nota: Esta función no tiene en cuenta el soporte de matrices no cuadradas, es decir, tipos GLSL como mat4x3, que está presente en las versiones modernas de OpenGL. En su lugar, trata el uniforme como un array de vec3.
Esta es una función sobrecargada.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(const char *name, const QMatrix4x4 &value)
Establece la variable uniforme llamada name en el contexto actual a una matriz 4x4 value.
Esta es una función sobrecargada.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(const char *name, const QPoint &point)
Establece la variable uniforme asociada a name en el contexto actual en las coordenadas x e y de point.
Se trata de una función sobrecargada.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(const char *name, const QPointF &point)
Establece la variable uniforme asociada a name en el contexto actual en las coordenadas x e y de point.
Se trata de una función sobrecargada.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(const char *name, const QSize &size)
Establece la variable uniforme asociada a name en el contexto actual con la anchura y la altura de size.
Se trata de una función sobrecargada.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(const char *name, const QSizeF &size)
Establece la variable uniforme asociada a name en el contexto actual con la anchura y la altura de size.
Se trata de una función sobrecargada.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(const char *name, const QTransform &value)
Establece la variable uniforme llamada name en el contexto actual a una matriz de transformación 3x3 value que se especifica como un valor QTransform.
Para establecer un valor QTransform como una matriz 4x4 en un shader, utilice setUniformValue(name, QMatrix4x4(value)).
Esta es una función sobrecargada.
void QOpenGLShaderProgram::setUniformValue(const char *name, const QVector2D &value)
Establece la variable uniforme llamada name en el contexto actual a value.
Esta es una función sobrecargada.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(const char *name, const QVector3D &value)
Establece la variable uniforme llamada name en el contexto actual a value.
Esta es una función sobrecargada.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(const char *name, const QVector4D &value)
Establece la variable uniforme llamada name en el contexto actual a value.
Esta es una función sobrecargada.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(int location, const GLfloat[2][2] value)
Establece la variable uniforme en location en el contexto actual a una matriz de 2x2 value. Los elementos de la matriz deben especificarse en orden columna-mayor.
Esta es una función sobrecargada.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(int location, const GLfloat[3][3] value)
Establece la variable uniforme en location en el contexto actual a una matriz 3x3 value. Los elementos de la matriz deben especificarse en orden columna-mayor.
Esta es una función sobrecargada.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(int location, const GLfloat[4][4] value)
Establece la variable uniforme en location en el contexto actual a una matriz 4x4 value. Los elementos de la matriz deben especificarse en orden columna-mayor.
Esta es una función sobrecargada.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(const char *name, GLfloat x, GLfloat y)
Establece la variable uniforme llamada name en el contexto actual al vector 2D (x, y).
Esta es una función sobrecargada.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(const char *name, GLfloat x, GLfloat y, GLfloat z)
Establece la variable uniforme llamada name en el contexto actual al vector 3D (x, y, z).
Esta es una función sobrecargada.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(const char *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
Establece la variable uniforme llamada name en el contexto actual al vector 4D (x, y, z, w).
Esta es una función sobrecargada.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(int location, GLuint value)
Establece la variable uniforme en location en el contexto actual a value. Esta función debe usarse cuando se establecen valores de muestreador.
Nota: Esta función no es consciente del soporte de unsigned int en las versiones modernas de OpenGL y por lo tanto trata value como un GLint y llama a glUniform1i.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(int location, const QColor &color)
Establece la variable uniforme en location en el contexto actual a los componentes rojo, verde, azul y alfa de color.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(int location, const QMatrix2x2 &value)
Establece la variable uniforme en location en el contexto actual a una matriz de 2x2 value.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(int location, const QMatrix2x3 &value)
Establece la variable uniforme en location en el contexto actual a una matriz 2x3 value.
Nota: Esta función no tiene en cuenta el soporte de matrices no cuadradas, es decir, tipos GLSL como mat2x3, que está presente en las versiones modernas de OpenGL. En su lugar, trata el uniforme como un array de vec3.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(int location, const QMatrix2x4 &value)
Establece la variable uniforme en location en el contexto actual a una matriz 2x4 value.
Nota: Esta función no tiene en cuenta el soporte de matrices no cuadradas, es decir, tipos GLSL como mat2x4, que está presente en las versiones modernas de OpenGL. En su lugar, trata el uniforme como un array de vec4.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(int location, const QMatrix3x2 &value)
Establece la variable uniforme en location en el contexto actual a una matriz 3x2 value.
Nota: Esta función no tiene en cuenta el soporte de matrices no cuadradas, es decir, tipos GLSL como mat3x2, que está presente en las versiones modernas de OpenGL. En su lugar, trata el uniforme como un array de vec2.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(int location, const QMatrix3x3 &value)
Establece la variable uniforme en location en el contexto actual a una matriz 3x3 value.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(int location, const QMatrix3x4 &value)
Establece la variable uniforme en location en el contexto actual a una matriz 3x4 value.
Nota: Esta función no tiene en cuenta el soporte de matrices no cuadradas, es decir, tipos GLSL como mat3x4, que está presente en las versiones modernas de OpenGL. En su lugar, trata el uniforme como un array de vec4.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(int location, const QMatrix4x2 &value)
Establece la variable uniforme en location en el contexto actual a una matriz 4x2 value.
Nota: Esta función no tiene en cuenta el soporte de matrices no cuadradas, es decir, tipos GLSL como mat4x2, que está presente en las versiones modernas de OpenGL. En su lugar, trata el uniforme como un array de vec2.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(int location, const QMatrix4x3 &value)
Establece la variable uniforme en location en el contexto actual a una matriz 4x3 value.
Nota: Esta función no tiene en cuenta el soporte de matrices no cuadradas, es decir, tipos GLSL como mat4x3, que está presente en las versiones modernas de OpenGL. En su lugar, trata el uniforme como un array de vec3.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(int location, const QMatrix4x4 &value)
Establece la variable uniforme en location en el contexto actual a una matriz 4x4 value.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(int location, const QPoint &point)
Establece la variable uniforme en location en el contexto actual a las coordenadas x e y de point.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(int location, const QPointF &point)
Establece la variable uniforme en location en el contexto actual a las coordenadas x e y de point.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(int location, const QSize &size)
Establece la variable uniforme en location en el contexto actual a la anchura y altura del size dado.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(int location, const QSizeF &size)
Establece la variable uniforme en location en el contexto actual a la anchura y altura del size dado.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(int location, const QTransform &value)
Establece la variable uniforme en location en el contexto actual a una matriz de transformación 3x3 value que se especifica como un valor QTransform.
Para establecer un valor QTransform como una matriz 4x4 en un sombreador, utilice setUniformValue(location, QMatrix4x4(value)).
void QOpenGLShaderProgram::setUniformValue(int location, const QVector2D &value)
Establece la variable uniforme en location en el contexto actual a value.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(int location, const QVector3D &value)
Establece la variable uniforme en location en el contexto actual a value.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(int location, const QVector4D &value)
Establece la variable uniforme en location en el contexto actual a value.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(int location, GLfloat x, GLfloat y)
Establece la variable uniforme en location en el contexto actual al vector 2D (x, y).
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(int location, GLfloat x, GLfloat y, GLfloat z)
Establece la variable uniforme en location en el contexto actual al vector 3D (x, y, z).
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(int location, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
Establece la variable uniforme en location en el contexto actual al vector 4D (x, y, z, w).
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(const char *name, GLfloat value)
Establece la variable uniforme llamada name en el contexto actual a value.
Esta es una función sobrecargada.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(const char *name, GLint value)
Establece la variable uniforme llamada name en el contexto actual a value.
Esta es una función sobrecargada.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(const char *name, GLuint value)
Establece la variable uniforme llamada name en el contexto actual a value. Esta función debe usarse cuando se establecen valores de muestreador.
Nota: Esta función no es consciente del soporte unsigned int en las versiones modernas de OpenGL y por lo tanto trata value como un GLint y llama a glUniform1i.
Esta es una función sobrecargada.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(const char *name, const GLfloat[2][2] value)
Establece la variable uniforme llamada name en el contexto actual a una matriz de 2x2 value. Los elementos de la matriz deben especificarse en orden columna-mayor.
Esta es una función sobrecargada.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(const char *name, const GLfloat[3][3] value)
Establece la variable uniforme llamada name en el contexto actual a una matriz 3x3 value. Los elementos de la matriz deben especificarse en orden columna-mayor.
Esta es una función sobrecargada.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(const char *name, const GLfloat[4][4] value)
Establece la variable uniforme llamada name en el contexto actual a una matriz 4x4 value. Los elementos de la matriz deben especificarse en orden columna-mayor.
Esta es una función sobrecargada.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(const char *name, const QColor &color)
Establece la variable uniforme llamada name en el contexto actual a los componentes rojo, verde, azul y alfa de color.
Esta es una función sobrecargada.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(const char *name, const QMatrix2x2 &value)
Establece la variable uniforme llamada name en el contexto actual a una matriz de 2x2 value.
Esta es una función sobrecargada.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(const char *name, const QMatrix2x3 &value)
Establece la variable uniforme llamada name en el contexto actual a una matriz de 2x3 value.
Nota: Esta función no tiene en cuenta el soporte de matrices no cuadradas, es decir, tipos GLSL como mat2x3, que está presente en las versiones modernas de OpenGL. En su lugar, trata el uniforme como un array de vec3.
Esta es una función sobrecargada.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(const char *name, const QMatrix2x4 &value)
Establece la variable uniforme llamada name en el contexto actual a una matriz de 2x4 value.
Nota: Esta función no tiene en cuenta el soporte de matrices no cuadradas, es decir, tipos GLSL como mat2x4, que está presente en las versiones modernas de OpenGL. En su lugar, trata el uniforme como un array de vec4.
Esta es una función sobrecargada.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(const char *name, const QMatrix3x2 &value)
Establece la variable uniforme llamada name en el contexto actual a una matriz 3x2 value.
Nota: Esta función no tiene en cuenta el soporte de matrices no cuadradas, es decir, tipos GLSL como mat3x2, que está presente en las versiones modernas de OpenGL. En su lugar, trata el uniforme como un array de vec2.
Esta es una función sobrecargada.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValue(const char *name, const QMatrix3x3 &value)
Establece la variable uniforme llamada name en el contexto actual a una matriz 3x3 value.
Esta es una función sobrecargada.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValueArray(int location, const GLint *values, int count)
Establece la matriz de variables uniformes en location en el contexto actual a los elementos count de values.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValueArray(int location, const GLuint *values, int count)
Establece el array de variables uniformes en location en el contexto actual a los elementos count de values. Esta sobrecarga debería usarse cuando se establece un array de valores de muestreo.
Nota: Esta función no es consciente del soporte de unsigned int en las versiones modernas de OpenGL y por lo tanto trata values como un GLint y llama a glUniform1iv.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValueArray(int location, const QMatrix2x2 *values, int count)
Establece la matriz de variables uniforme en location en el contexto actual a los elementos de la matriz count 2x2 de values.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValueArray(int location, const QMatrix2x3 *values, int count)
Establece la matriz variable uniforme en location en el contexto actual a los elementos de la matriz count 2x3 de values.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValueArray(int location, const QMatrix2x4 *values, int count)
Establece la matriz de variables uniforme en location en el contexto actual a los elementos de la matriz count 2x4 de values.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValueArray(int location, const QMatrix3x2 *values, int count)
Establece la matriz de variables uniforme en location en el contexto actual a los elementos de la matriz count 3x2 de values.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValueArray(int location, const QMatrix3x3 *values, int count)
Establece la matriz variable uniforme en location en el contexto actual a los elementos de la matriz count 3x3 de values.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValueArray(int location, const QMatrix3x4 *values, int count)
Establece la matriz variable uniforme en location en el contexto actual a los elementos de la matriz count 3x4 de values.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValueArray(int location, const QMatrix4x2 *values, int count)
Establece la matriz de variables uniforme en location en el contexto actual a los elementos de la matriz count 4x2 de values.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValueArray(int location, const QMatrix4x3 *values, int count)
Establece la matriz de variables uniforme en location en el contexto actual a los elementos de la matriz count 4x3 de values.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValueArray(int location, const QMatrix4x4 *values, int count)
Establece la matriz variable uniforme en location en el contexto actual a los elementos de la matriz count 4x4 de values.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValueArray(int location, const QVector2D *values, int count)
Establece el array de variables uniforme en location en el contexto actual a los elementos del vector 2D count de values.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValueArray(int location, const QVector3D *values, int count)
Establece el array de variables uniforme en location en el contexto actual a los elementos del vector 3D count de values.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValueArray(int location, const QVector4D *values, int count)
Establece la matriz de variables uniformes en location en el contexto actual a los elementos del vector count 4D de values.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValueArray(int location, const GLfloat *values, int count, int tupleSize)
Establece la matriz de variables uniformes en location en el contexto actual a los elementos count de values. Cada elemento tiene componentes tupleSize. tupleSize debe ser 1, 2, 3 o 4.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValueArray(const char *name, const GLint *values, int count)
Establece la matriz de variables uniforme llamada name en el contexto actual a los elementos count de values.
Esta es una función sobrecargada.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValueArray(const char *name, const GLuint *values, int count)
Establece la matriz de variables uniformes llamada name en el contexto actual a los elementos count de values. Esta sobrecarga debe utilizarse cuando se establece una matriz de valores de muestreador.
Esta es una función sobrecargada.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValueArray(const char *name, const QMatrix2x2 *values, int count)
Establece la matriz variable uniforme llamada name en el contexto actual a los elementos de la matriz count 2x2 de values.
Esta es una función sobrecargada.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValueArray(const char *name, const QMatrix2x3 *values, int count)
Establece la matriz variable uniforme llamada name en el contexto actual a los elementos de la matriz count 2x3 de values.
Esta es una función sobrecargada.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValueArray(const char *name, const QMatrix2x4 *values, int count)
Establece la matriz variable uniforme llamada name en el contexto actual a los elementos de la matriz count 2x4 de values.
Esta es una función sobrecargada.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValueArray(const char *name, const QMatrix3x2 *values, int count)
Establece la matriz variable uniforme llamada name en el contexto actual a los elementos de la matriz count 3x2 de values.
Esta es una función sobrecargada.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValueArray(const char *name, const QMatrix3x3 *values, int count)
Establece la matriz variable uniforme llamada name en el contexto actual a los elementos de la matriz count 3x3 de values.
Esta es una función sobrecargada.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValueArray(const char *name, const QMatrix3x4 *values, int count)
Establece la matriz variable uniforme llamada name en el contexto actual a los elementos de la matriz count 3x4 de values.
Esta es una función sobrecargada.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValueArray(const char *name, const QMatrix4x2 *values, int count)
Establece la matriz variable uniforme llamada name en el contexto actual a los elementos de la matriz count 4x2 de values.
Esta es una función sobrecargada.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValueArray(const char *name, const QMatrix4x3 *values, int count)
Establece la matriz variable uniforme llamada name en el contexto actual a los elementos de la matriz count 4x3 de values.
Esta es una función sobrecargada.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValueArray(const char *name, const QMatrix4x4 *values, int count)
Establece la matriz variable uniforme llamada name en el contexto actual a los elementos de la matriz count 4x4 de values.
Esta es una función sobrecargada.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValueArray(const char *name, const QVector2D *values, int count)
Establece la matriz de variables uniforme llamada name en el contexto actual a los elementos del vector count 2D de values.
Esta es una función sobrecargada.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValueArray(const char *name, const QVector3D *values, int count)
Establece la matriz variable uniforme llamada name en el contexto actual a los elementos del vector count 3D de values.
Esta es una función sobrecargada.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValueArray(const char *name, const QVector4D *values, int count)
Establece la matriz variable uniforme llamada name en el contexto actual a los elementos del vector count 4D de values.
Esta es una función sobrecargada.
Véase también setAttributeValue().
void QOpenGLShaderProgram::setUniformValueArray(const char *name, const GLfloat *values, int count, int tupleSize)
Establece la matriz de variables uniformes llamada name en el contexto actual a los elementos count de values. Cada elemento tiene componentes tupleSize. tupleSize debe ser 1, 2, 3 o 4.
Esta es una función sobrecargada.
Véase también setAttributeValue().
QList<QOpenGLShader *> QOpenGLShaderProgram::shaders() const
Devuelve una lista de todos los sombreadores que han sido añadidos a este programa de sombreado usando addShader().
Véase también addShader() y removeShader().
int QOpenGLShaderProgram::uniformLocation(const char *name) const
Devuelve la ubicación de la variable uniforme name dentro de la lista de parámetros de este programa de sombreado. Devuelve -1 si name no es una variable uniforme válida para este programa de sombreado.
Véase también attributeLocation().
int QOpenGLShaderProgram::uniformLocation(const QByteArray &name) const
Devuelve la ubicación de la variable uniforme name dentro de la lista de parámetros de este programa de sombreado. Devuelve -1 si name no es una variable uniforme válida para este programa de sombreado.
Esta es una función sobrecargada.
Ver también attributeLocation().
int QOpenGLShaderProgram::uniformLocation(const QString &name) const
Devuelve la ubicación de la variable uniforme name dentro de la lista de parámetros de este programa de sombreado. Devuelve -1 si name no es una variable uniforme válida para este programa de sombreado.
Esta es una función sobrecargada.
Ver también attributeLocation().
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.