Kemena3D
Loading...
Searching...
No Matches
kemena::kShader Class Reference

Wraps a compiled GLSL shader program. More...

#include <kshader.h>

Public Member Functions

 kShader ()
 Constructs an empty shader with no compiled program.
virtual ~kShader ()
 Destroys the shader, deleting the GPU program if one was compiled.
kString readFile (const kString filePath)
 Reads the entire contents of a text file into a string.
void loadGlslFile (const kString &path)
void loadGlslCode (const kString &src)
void loadShadersFile (const kString vertexShaderPath, const kString fragmentShaderPath)
void loadShadersCode (const char *vertexShaderCode, const char *fragmentShaderCode)
void loadHlslFileDX11 (const kString &path)
void loadHlslCodeDX11 (const kString &src)
void loadHlslFileDX12 (const kString &path)
void loadHlslCodeDX12 (const kString &src)
void loadSpirvFile (const kString &path)
void loadSpirvCode (const kString &src)
void loadSpirvBinary (const std::vector< uint8_t > &vertSpv, const std::vector< uint8_t > &fragSpv)
void loadMetalFile (const kString &path)
void loadMetalCode (const kString &src)
void use ()
 Binds this shader program for subsequent draw calls.
void unuse ()
 Unbinds the current shader program.
void setShaderProgram (uint32_t program)
 Overrides the internal program handle.
uint32_t getShaderProgram ()
 Returns the underlying program handle.
void setValue (kString name, std::vector< kMat4 > value)
 Sets a kMat4 array uniform.
void setValue (kString name, kMat4 value)
 Sets a kMat4 uniform.
void setValue (kString name, kVec4 value)
 Sets a kVec4 uniform.
void setValue (kString name, kVec3 value)
 Sets a kVec3 uniform.
void setValue (kString name, kVec2 value)
 Sets a kVec2 uniform.
void setValue (kString name, float value)
 Sets a float uniform.
void setValue (kString name, int value)
 Sets an integer uniform.
void setValue (kString name, unsigned int value)
 Sets an unsigned-integer uniform.
void setValue (kString name, bool value)
 Sets a boolean uniform (uploaded as int).

Static Public Member Functions

static kShaderSource splitSource (const kString &src)
 Splits a combined shader source string into per-stage strings.

Detailed Description

Wraps a compiled GLSL shader program.

Shaders can be loaded from source files or inline code strings. All GPU operations are dispatched through kDriver::getCurrent(), so no GL headers need to be included in client code.

Example:

kShader shader;
shader.loadShadersFile("vertex.glsl", "fragment.glsl");
shader.use();
shader.setValue("modelMatrix", modelMat);
// draw ...
shader.unuse();
void loadShadersFile(const kString vertexShaderPath, const kString fragmentShaderPath)
void use()
Binds this shader program for subsequent draw calls.
void setValue(kString name, std::vector< kMat4 > value)
Sets a kMat4 array uniform.
kShader()
Constructs an empty shader with no compiled program.
void unuse()
Unbinds the current shader program.

Constructor & Destructor Documentation

◆ kShader()

kemena::kShader::kShader ( )

Constructs an empty shader with no compiled program.

◆ ~kShader()

virtual kemena::kShader::~kShader ( )
virtual

Destroys the shader, deleting the GPU program if one was compiled.

Member Function Documentation

◆ getShaderProgram()

uint32_t kemena::kShader::getShaderProgram ( )

Returns the underlying program handle.

Returns
Opaque GPU handle (0 if not yet compiled).

◆ loadGlslCode()

void kemena::kShader::loadGlslCode ( const kString & src)

Load a combined GLSL source string.

◆ loadGlslFile()

void kemena::kShader::loadGlslFile ( const kString & path)

Load a combined GLSL source file (vertex + optional geometry + fragment).

◆ loadHlslCodeDX11()

void kemena::kShader::loadHlslCodeDX11 ( const kString & src)

Placeholder: load a combined HLSL source string for a DirectX 11 backend.

◆ loadHlslCodeDX12()

void kemena::kShader::loadHlslCodeDX12 ( const kString & src)

Placeholder: load a combined HLSL source string for a DirectX 12 backend.

◆ loadHlslFileDX11()

void kemena::kShader::loadHlslFileDX11 ( const kString & path)

Placeholder: load a combined HLSL source file for a DirectX 11 backend.

◆ loadHlslFileDX12()

void kemena::kShader::loadHlslFileDX12 ( const kString & path)

Placeholder: load a combined HLSL source file for a DirectX 12 backend.

◆ loadMetalCode()

void kemena::kShader::loadMetalCode ( const kString & src)

Placeholder: load a combined Metal Shading Language source string.

◆ loadMetalFile()

void kemena::kShader::loadMetalFile ( const kString & path)

Placeholder: load a combined Metal Shading Language source file.

◆ loadShadersCode()

void kemena::kShader::loadShadersCode ( const char * vertexShaderCode,
const char * fragmentShaderCode )

Load separate GLSL source strings (vertex, fragment).

◆ loadShadersFile()

void kemena::kShader::loadShadersFile ( const kString vertexShaderPath,
const kString fragmentShaderPath )

Load separate GLSL source files (vertex, fragment).

◆ loadSpirvBinary()

void kemena::kShader::loadSpirvBinary ( const std::vector< uint8_t > & vertSpv,
const std::vector< uint8_t > & fragSpv )

Placeholder: load pre-compiled SPIR-V binary blobs for Vulkan 1.3.

◆ loadSpirvCode()

void kemena::kShader::loadSpirvCode ( const kString & src)

Placeholder: load a combined GLSL/HLSL source string for Vulkan 1.3.

◆ loadSpirvFile()

void kemena::kShader::loadSpirvFile ( const kString & path)

Placeholder: load a combined GLSL/HLSL source file for Vulkan 1.3 (compiled to SPIR-V).

◆ readFile()

kString kemena::kShader::readFile ( const kString filePath)

Reads the entire contents of a text file into a string.

Parameters
filePathPath to the file to read.
Returns
The file contents, or an empty string if the file cannot be opened.

◆ setShaderProgram()

void kemena::kShader::setShaderProgram ( uint32_t program)

Overrides the internal program handle.

Use this when the program was compiled externally (e.g. via kDriver).

Parameters
programCompiled program handle.

◆ setValue() [1/9]

void kemena::kShader::setValue ( kString name,
bool value )

Sets a boolean uniform (uploaded as int).

◆ setValue() [2/9]

void kemena::kShader::setValue ( kString name,
float value )

Sets a float uniform.

◆ setValue() [3/9]

void kemena::kShader::setValue ( kString name,
int value )

Sets an integer uniform.

◆ setValue() [4/9]

void kemena::kShader::setValue ( kString name,
kMat4 value )

Sets a kMat4 uniform.

◆ setValue() [5/9]

void kemena::kShader::setValue ( kString name,
kVec2 value )

Sets a kVec2 uniform.

◆ setValue() [6/9]

void kemena::kShader::setValue ( kString name,
kVec3 value )

Sets a kVec3 uniform.

◆ setValue() [7/9]

void kemena::kShader::setValue ( kString name,
kVec4 value )

Sets a kVec4 uniform.

◆ setValue() [8/9]

void kemena::kShader::setValue ( kString name,
std::vector< kMat4 > value )

Sets a kMat4 array uniform.

◆ setValue() [9/9]

void kemena::kShader::setValue ( kString name,
unsigned int value )

Sets an unsigned-integer uniform.

◆ splitSource()

kShaderSource kemena::kShader::splitSource ( const kString & src)
static

Splits a combined shader source string into per-stage strings.

Recognised section markers (on their own line): // — VERTEX — (optional; top of file is implicitly vertex) // — GEOMETRY — (optional geometry stage) // — FRAGMENT — (fragment / pixel stage)

◆ unuse()

void kemena::kShader::unuse ( )

Unbinds the current shader program.

◆ use()

void kemena::kShader::use ( )

Binds this shader program for subsequent draw calls.


The documentation for this class was generated from the following file: