QOpenGLShader Class | Qt OpenGL
Description: The QOpenGLShader class allows OpenGL shaders to be compiled.

- Qt 6.8
- Qt OpenGL
- C++ Classes
- QOpenGLShader
- Qt 6.8.0 Reference Documentation

# QOpenGLShader Class

The QOpenGLShader class allows OpenGL shaders to be compiled. More...

Header: | #include <QOpenGLShader>
CMake: | find_package(Qt6 REQUIRED COMPONENTS OpenGL) target_link_libraries(mytarget PRIVATE Qt6::OpenGL)
qmake: | QT += opengl
Inherits: | QObject

- List of all members, including inherited members
- QOpenGLShader is part of Rendering in 3D.

## Public Types

flags | ShaderType
enum | ShaderTypeBit { Vertex, Fragment, Geometry, TessellationControl, TessellationEvaluation, Compute }

## Public Functions

| QOpenGLShader(QOpenGLShader::ShaderType type, QObject *parent = nullptr)
virtual | ~QOpenGLShader()
bool | compileSourceCode(const char *source)
bool | compileSourceCode(const QByteArray &source)
bool | compileSourceCode(const QString &source)
bool | compileSourceFile(const QString &fileName)
bool | isCompiled() const
QString | log() const
GLuint | shaderId() const
QOpenGLShader::ShaderType | shaderType() const
QByteArray | sourceCode() const

## Static Public Members

bool | hasOpenGLShaders(QOpenGLShader::ShaderType type, QOpenGLContext *context = nullptr)

## Detailed Description

This class supports shaders written in the OpenGL Shading Language (GLSL) and in the OpenGL/ES Shading Language (GLSL/ES).

QOpenGLShader and QOpenGLShaderProgram shelter the programmer from the details of compiling and linking vertex and fragment shaders.

See also QOpenGLShaderProgram.

## Member Type Documentation

### enum QOpenGLShader::ShaderTypeBit
flags QOpenGLShader::ShaderType

This enum specifies the type of QOpenGLShader that is being created.

Constant | Value | Description
--- | --- | ---
`QOpenGLShader::Vertex` | `0x0001` | Vertex shader written in the OpenGL Shading Language (GLSL).
`QOpenGLShader::Fragment` | `0x0002` | Fragment shader written in the OpenGL Shading Language (GLSL).
`QOpenGLShader::Geometry` | `0x0004` | Geometry shaders written in the OpenGL Shading Language (GLSL) (requires OpenGL >= 3.2 or OpenGL ES >= 3.2).
`QOpenGLShader::TessellationControl` | `0x0008` | Tessellation control shaders written in the OpenGL shading language (GLSL) (requires OpenGL >= 4.0 or OpenGL ES >= 3.2).
`QOpenGLShader::TessellationEvaluation` | `0x0010` | Tessellation evaluation shaders written in the OpenGL shading language (GLSL) (requires OpenGL >= 4.0 or OpenGL ES >= 3.2).
`QOpenGLShader::Compute` | `0x0020` | Compute shaders written in the OpenGL shading language (GLSL) (requires OpenGL >= 4.3 or OpenGL ES >= 3.1).

The ShaderType type is a typedef for QFlags<ShaderTypeBit>. It stores an OR combination of ShaderTypeBit values.

## Member Function Documentation

### `[explicit]` QOpenGLShader::QOpenGLShader(QOpenGLShader::ShaderType type, QObject *parent = nullptr)

Constructs a new QOpenGLShader object of the specified type and attaches it to parent. If shader programs are not supported, QOpenGLShaderProgram::hasOpenGLShaderPrograms() will return false.

This constructor is normally followed by a call to compileSourceCode() or compileSourceFile().

The shader will be associated with the current QOpenGLContext.

See also compileSourceCode() and compileSourceFile().

### `[virtual noexcept]` QOpenGLShader::~QOpenGLShader()

Deletes this shader. If the shader has been attached to a QOpenGLShaderProgram object, then the actual shader will stay around until the QOpenGLShaderProgram is destroyed.

### bool QOpenGLShader::compileSourceCode(const char *source)

Sets the source code for this shader and compiles it. Returns `true` if the source was successfully compiled, false otherwise.

See also compileSourceFile().

### bool QOpenGLShader::compileSourceCode(const QByteArray &source)

This is an overloaded function.

Sets the source code for this shader and compiles it. Returns `true` if the source was successfully compiled, false otherwise.

See also compileSourceFile().

### bool QOpenGLShader::compileSourceCode(const QString &source)

This is an overloaded function.

Sets the source code for this shader and compiles it. Returns `true` if the source was successfully compiled, false otherwise.

See also compileSourceFile().

### bool QOpenGLShader::compileSourceFile(const QString &fileName)

Sets the source code for this shader to the contents of fileName and compiles it. Returns `true` if the file could be opened and the source compiled, false otherwise.

See also compileSourceCode().

### `[static]` bool QOpenGLShader::hasOpenGLShaders(QOpenGLShader::ShaderType type, QOpenGLContext *context = nullptr)

Returns `true` if shader programs of type type are supported on this system; false otherwise.

The context is used to resolve the GLSL extensions. If context is `nullptr`, then QOpenGLContext::currentContext() is used.

### bool QOpenGLShader::isCompiled() const

Returns `true` if this shader has been compiled; false otherwise.

See also compileSourceCode() and compileSourceFile().

### QString QOpenGLShader::log() const

Returns the errors and warnings that occurred during the last compile.

See also compileSourceCode() and compileSourceFile().

### GLuint QOpenGLShader::shaderId() const

Returns the OpenGL identifier associated with this shader.

See also QOpenGLShaderProgram::programId().

### QOpenGLShader::ShaderType QOpenGLShader::shaderType() const

Returns the type of this shader.

### QByteArray QOpenGLShader::sourceCode() const

Returns the source code for this shader.

See also compileSourceCode().