- Qt 6.9
- Qt OpenGL
- C++ Classes
- QOpenGLShader
- Qt 6.9.3 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.

All data consumed by QOpenGLShader is expected to be trusted content. Shader source code is passed, possibly after minimal modifications, on to the underlying OpenGL implementation's compiler, which is a black box from Qt's perspective.

Warning: Application developers are advised to carefully consider the potential implications before passing in user-provided content to functions such as compileSourceFile().

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)

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

This is an overloaded function.

See also compileSourceFile().

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

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

This is an overloaded function.

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().