nCine::Shader class

GPU shader program usable by materials and drawable nodes.

Wraps an OpenGL shader program built from a vertex and a fragment shader. The sources can come from memory, a file, one of the built-in default shaders or the binary cache, and a matching variant can be registered for rendering batched draw commands.

Base classes

class Object
Base class of all nCine objects.

Public types

enum class LoadMode { String, File }
Load mode.
enum class Introspection { Enabled, NoUniformsInBlocks, Disabled }
Introspection mode.
enum class DefaultVertex { SPRITE, SPRITE_NOTEXTURE, MESHSPRITE, MESHSPRITE_NOTEXTURE, BATCHED_SPRITES, BATCHED_SPRITES_NOTEXTURE, BATCHED_MESHSPRITES, BATCHED_MESHSPRITES_NOTEXTURE }
Built-in vertex shaders.
enum class DefaultFragment { SPRITE, SPRITE_NOTEXTURE }
Built-in fragment shaders.

Public static functions

static auto sType() -> ObjectType

Constructors, destructors, conversion operators

Shader()
Shader(const char* shaderName, LoadMode loadMode, Introspection introspection, const char* vertex, const char* fragment, std::int32_t batchSize = GLShaderProgram::DefaultBatchSize)
Shader(const char* shaderName, LoadMode loadMode, const char* vertex, const char* fragment, std::int32_t batchSize = GLShaderProgram::DefaultBatchSize)
Shader(LoadMode loadMode, const char* vertex, const char* fragment, std::int32_t batchSize = GLShaderProgram::DefaultBatchSize)
Shader(const char* shaderName, LoadMode loadMode, Introspection introspection, DefaultVertex vertex, const char* fragment, std::int32_t batchSize = GLShaderProgram::DefaultBatchSize)
Shader(const char* shaderName, LoadMode loadMode, DefaultVertex vertex, const char* fragment, std::int32_t batchSize = GLShaderProgram::DefaultBatchSize)
Shader(LoadMode loadMode, DefaultVertex vertex, const char* fragment, std::int32_t batchSize = GLShaderProgram::DefaultBatchSize)
Shader(const char* shaderName, LoadMode loadMode, Introspection introspection, const char* vertex, DefaultFragment fragment, std::int32_t batchSize = GLShaderProgram::DefaultBatchSize)
Shader(const char* shaderName, LoadMode loadMode, const char* vertex, DefaultFragment fragment, std::int32_t batchSize = GLShaderProgram::DefaultBatchSize)
Shader(LoadMode loadMode, const char* vertex, DefaultFragment fragment, std::int32_t batchSize = GLShaderProgram::DefaultBatchSize)
~Shader() override
Shader(const Shader&) deleted

Public functions

auto operator=(const Shader&) -> Shader& deleted
auto LoadFromMemory(const char* shaderName, Introspection introspection, const char* vertex, const char* fragment, std::int32_t batchSize = GLShaderProgram::DefaultBatchSize, ArrayView<const StringView> defines = {}) -> bool
auto LoadFromMemory(const char* shaderName, const char* vertex, const char* fragment, std::int32_t batchSize = GLShaderProgram::DefaultBatchSize) -> bool
auto LoadFromMemory(const char* vertex, const char* fragment, std::int32_t batchSize = GLShaderProgram::DefaultBatchSize) -> bool
auto LoadFromMemory(const char* shaderName, Introspection introspection, DefaultVertex vertex, const char* fragment, std::int32_t batchSize = GLShaderProgram::DefaultBatchSize, ArrayView<const StringView> defines = {}) -> bool
auto LoadFromMemory(const char* shaderName, DefaultVertex vertex, const char* fragment, std::int32_t batchSize = GLShaderProgram::DefaultBatchSize) -> bool
auto LoadFromMemory(DefaultVertex vertex, const char* fragment, std::int32_t batchSize = GLShaderProgram::DefaultBatchSize) -> bool
auto LoadFromMemory(const char* shaderName, Introspection introspection, const char* vertex, DefaultFragment fragment, std::int32_t batchSize = GLShaderProgram::DefaultBatchSize, ArrayView<const StringView> defines = {}) -> bool
auto LoadFromMemory(const char* shaderName, const char* vertex, DefaultFragment fragment, std::int32_t batchSize = GLShaderProgram::DefaultBatchSize) -> bool
auto LoadFromMemory(const char* vertex, DefaultFragment fragment, std::int32_t batchSize = GLShaderProgram::DefaultBatchSize) -> bool
auto LoadFromFile(const char* shaderName, Introspection introspection, StringView vertexPath, StringView fragmentPath, std::int32_t batchSize = GLShaderProgram::DefaultBatchSize, ArrayView<const StringView> defines = {}) -> bool
auto LoadFromFile(const char* shaderName, StringView vertexPath, StringView fragmentPath, std::int32_t batchSize = GLShaderProgram::DefaultBatchSize) -> bool
auto LoadFromFile(StringView vertexPath, StringView fragmentPath, std::int32_t batchSize = GLShaderProgram::DefaultBatchSize) -> bool
auto LoadFromFile(const char* shaderName, Introspection introspection, DefaultVertex vertex, StringView fragmentPath, std::int32_t batchSize = GLShaderProgram::DefaultBatchSize, ArrayView<const StringView> defines = {}) -> bool
auto LoadFromFile(const char* shaderName, DefaultVertex vertex, StringView fragmentPath, std::int32_t batchSize = GLShaderProgram::DefaultBatchSize) -> bool
auto LoadFromFile(DefaultVertex vertex, StringView fragmentPath, std::int32_t batchSize = GLShaderProgram::DefaultBatchSize) -> bool
auto LoadFromFile(const char* shaderName, Introspection introspection, StringView vertexPath, DefaultFragment fragment, std::int32_t batchSize = GLShaderProgram::DefaultBatchSize, ArrayView<const StringView> defines = {}) -> bool
auto LoadFromFile(const char* shaderName, StringView vertexPath, DefaultFragment fragment, std::int32_t batchSize = GLShaderProgram::DefaultBatchSize) -> bool
auto LoadFromFile(StringView vertexPath, DefaultFragment fragment, std::int32_t batchSize = GLShaderProgram::DefaultBatchSize) -> bool
auto LoadFromCache(const char* shaderName, std::uint64_t shaderVersion, Introspection introspection) -> bool
auto SaveToCache(const char* shaderName, std::uint64_t shaderVersion) const -> bool
auto SetAttribute(const char* name, std::int32_t stride, void* pointer) -> bool
Sets the VBO stride and pointer for the specified vertex attribute.
auto IsLinked() const -> bool
Returns true if the shader is linked and can therefore be used.
auto RetrieveInfoLogLength() const -> unsigned int
Returns the length of the information log, including the null terminator.
void RetrieveInfoLog(std::string& infoLog) const
Retrieves the information log and copies it into the provided string object.
auto GetLogOnErrors() const -> bool
Returns the automatic log on errors flag.
void SetLogOnErrors(bool shouldLogOnErrors)
Sets the automatic log on errors flag.
void SetGLShaderProgramLabel(const char* label)
Sets the OpenGL object label for the shader program.
void RegisterBatchedShader(Shader& batchedShader)
Registers a shader to be used when rendering batches of render commands.
auto GetHandle() -> GLShaderProgram*

Function documentation

void nCine::Shader::SetLogOnErrors(bool shouldLogOnErrors)

Sets the automatic log on errors flag.

When the flag is true the shader automatically logs compilation and linking errors.