KarmaEngine
Game Engine for practical learning and research purposes
Loading...
Searching...
No Matches
Karma::VulkanShader Class Reference

Vulkan specific implementation of Shader class. More...

#include <VulkanShader.h>

Inheritance diagram for Karma::VulkanShader:
Karma::Shader

Public Member Functions

 VulkanShader (const std::string &vertexSrc, const std::string &fragmentSrc, std::shared_ptr< UniformBufferObject > ubo)
 Constructor that compiles vertex and fragment shaders from source code.
virtual ~VulkanShader () override
 Destructor.
virtual void Bind () const override
 Installs a shader (vertex + fragment) and uniform program object as part of current rendering state.
virtual void UnBind () const override
 Undo the binding of shader program.
std::vector< uint32_t > Compile (const std::string &src, const std::string &source, EShLanguage lang)
 Compiles GLSL source code to SPIR-V bytecode using GLSLANG.
void UploadUniformMat4 (const std::string &name, const glm::mat4 &matrix)
 Uploads a 4x4 matrix uniform to the shader.
const std::vector< uint32_t > & GetVertSpirV () const
const std::vector< uint32_t > & GetFragSpirV () const
std::shared_ptr< VulkanUniformBufferGetUniformBufferObject () const
Public Member Functions inherited from Karma::Shader
 Shader (std::shared_ptr< UniformBufferObject > ubo)
 A constructor.
virtual ~Shader ()=default
 Destructor.
virtual void Bind (const std::string &texShaderNames) const
 Binding using name of texture.
std::shared_ptr< UniformBufferObjectGetUniformBufferObject () const
 Getter for uniform buffer object.
const std::string & GetShaderName () const
 Getter for shader name.

Additional Inherited Members

Static Public Member Functions inherited from Karma::Shader
static ShaderCreate (const std::string &vertexSrc, const std::string &fragmentSrc)
 Instantiating shader object according to the programmer chosen API.
static ShaderCreate (const std::string &vertexSrcFile, const std::string &fragmentSrcFile, std::shared_ptr< UniformBufferObject > ubo, const std::string &shaderName="NoNamedShader")
 For instantiating shader object accodring to programer's chosen API.
Protected Attributes inherited from Karma::Shader
std::string m_ShaderName

Detailed Description

Vulkan specific implementation of Shader class.

This class handles the compilation of GLSL shader source code to SPIR-V bytecode and manages the associated uniform buffer object.

Since
Karma 1.0.0

Constructor & Destructor Documentation

◆ VulkanShader()

Karma::VulkanShader::VulkanShader ( const std::string & vertexSrc,
const std::string & fragmentSrc,
std::shared_ptr< UniformBufferObject > ubo )

Constructor that compiles vertex and fragment shaders from source code.

GLSLANG is used to compile the GLSL source code into SPIR-V bytecode for Vulkan.

Parameters
vertexSrcPath to vertex shader source file
fragmentSrcPath to fragment shader source file
uboShared pointer to the uniform buffer object
See also
Shader::Create()
Since
Karma 1.0.0

◆ ~VulkanShader()

Karma::VulkanShader::~VulkanShader ( )
overridevirtual

Destructor.

Cleans up any allocated resources.

Since
Karma 1.0.0

Member Function Documentation

◆ Bind()

void Karma::VulkanShader::Bind ( ) const
overridevirtual

Installs a shader (vertex + fragment) and uniform program object as part of current rendering state.

Todo
For OpenGL only. Vulkan Bind() is empty and may need abstract thinking
Since
Karma 1.0.0

Reimplemented from Karma::Shader.

◆ Compile()

std::vector< uint32_t > Karma::VulkanShader::Compile ( const std::string & src,
const std::string & source,
EShLanguage lang )

Compiles GLSL source code to SPIR-V bytecode using GLSLANG.

Parameters
srcPath to the (vertex or fragment) shader GLSL source file
sourceThe actual GLSL source code as a string (read from the file)
langShader stage (vertex or fragment)
Returns
A vector containing the compiled SPIR-V bytecode
Since
Karma 1.0.0

◆ UnBind()

void Karma::VulkanShader::UnBind ( ) const
overridevirtual

Undo the binding of shader program.

Todo
Only OpenGL uses this, that too, for shader and not uniform. May need pondering over.
Since
Karma 1.0.0

Reimplemented from Karma::Shader.

◆ UploadUniformMat4()

void Karma::VulkanShader::UploadUniformMat4 ( const std::string & name,
const glm::mat4 & matrix )

Uploads a 4x4 matrix uniform to the shader.

Note
For legacy purposes. Vulkan UBO upload is handled in VulkanUniformBuffer::UploadUniformBuffer()
Since
Karma 1.0.0

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