Kemena3D
Loading...
Searching...
No Matches
kshader.h
Go to the documentation of this file.
1
5
6#ifndef KSHADER_H
7#define KSHADER_H
8
9#include "kexport.h"
10#include "kdriver.h"
11#include "kdatatype.h"
12
13#include <iostream>
14#include <string>
15#include <vector>
16#include <fstream>
17
18namespace kemena
19{
20
21
36
55 {
56 public:
59
61 virtual ~kShader();
62
68 kString readFile(const kString filePath);
69
78 static kShaderSource splitSource(const kString& src);
79
80 // --- OpenGL (GLSL) ---------------------------------------------------
81
83 void loadGlslFile(const kString& path);
85 void loadGlslCode(const kString& src);
86
88 void loadShadersFile(const kString vertexShaderPath, const kString fragmentShaderPath);
90 void loadShadersCode(const char *vertexShaderCode, const char *fragmentShaderCode);
91
92 // --- DirectX 11 (HLSL / DXBC) ----------------------------------------
93
95 void loadHlslFileDX11(const kString& path);
97 void loadHlslCodeDX11(const kString& src);
98
99 // --- DirectX 12 (HLSL / DXIL via DXC) --------------------------------
100
102 void loadHlslFileDX12(const kString& path);
104 void loadHlslCodeDX12(const kString& src);
105
106 // --- Vulkan 1.3 (SPIR-V) ---------------------------------------------
107
109 void loadSpirvFile(const kString& path);
111 void loadSpirvCode(const kString& src);
113 void loadSpirvBinary(const std::vector<uint8_t>& vertSpv, const std::vector<uint8_t>& fragSpv);
114
115 // --- Metal (via MoltenVK / metal-cpp) --------------------------------
116
118 void loadMetalFile(const kString& path);
120 void loadMetalCode(const kString& src);
121
123 void use();
124
126 void unuse();
127
134 void setShaderProgram(uint32_t program);
135
141
143 void setValue(kString name, std::vector<kMat4> value);
145 void setValue(kString name, kMat4 value);
147 void setValue(kString name, kVec4 value);
149 void setValue(kString name, kVec3 value);
151 void setValue(kString name, kVec2 value);
153 void setValue(kString name, float value);
155 void setValue(kString name, int value);
157 void setValue(kString name, unsigned int value);
159 void setValue(kString name, bool value);
160
161 protected:
162 private:
163 uint32_t shaderProgram = 0;
164 };
165}
166
167#endif // KSHADER_H
void loadShadersFile(const kString vertexShaderPath, const kString fragmentShaderPath)
void setValue(kString name, kVec4 value)
Sets a kVec4 uniform.
void loadHlslCodeDX12(const kString &src)
virtual ~kShader()
Destroys the shader, deleting the GPU program if one was compiled.
void loadMetalFile(const kString &path)
void loadSpirvFile(const kString &path)
void setValue(kString name, kVec3 value)
Sets a kVec3 uniform.
void setValue(kString name, kMat4 value)
Sets a kMat4 uniform.
void loadSpirvCode(const kString &src)
void loadGlslCode(const kString &src)
void loadHlslFileDX11(const kString &path)
static kShaderSource splitSource(const kString &src)
Splits a combined shader source string into per-stage strings.
void setValue(kString name, kVec2 value)
Sets a kVec2 uniform.
void setShaderProgram(uint32_t program)
Overrides the internal program handle.
void loadMetalCode(const kString &src)
void loadShadersCode(const char *vertexShaderCode, const char *fragmentShaderCode)
void use()
Binds this shader program for subsequent draw calls.
void setValue(kString name, float value)
Sets a float uniform.
void setValue(kString name, unsigned int value)
Sets an unsigned-integer uniform.
void setValue(kString name, int value)
Sets an integer uniform.
void loadGlslFile(const kString &path)
void setValue(kString name, bool value)
Sets a boolean uniform (uploaded as int).
void setValue(kString name, std::vector< kMat4 > value)
Sets a kMat4 array uniform.
kShader()
Constructs an empty shader with no compiled program.
void loadHlslCodeDX11(const kString &src)
void loadHlslFileDX12(const kString &path)
kString readFile(const kString filePath)
Reads the entire contents of a text file into a string.
void loadSpirvBinary(const std::vector< uint8_t > &vertSpv, const std::vector< uint8_t > &fragSpv)
uint32_t getShaderProgram()
Returns the underlying program handle.
void unuse()
Unbinds the current shader program.
Core type aliases, enumerations, structs, and utility functions used throughout the engine.
Abstract graphics driver interface used by the engine.
Symbol visibility / linkage macro for the Kemena3D library.
#define KEMENA3D_API
Definition kexport.h:35
Top-level Kemena3D engine namespace.
Definition kanimation.h:23
std::string kString
Standard string alias.
Definition kdatatype.h:42
glm::vec2 kVec2
2-component float vector.
Definition kdatatype.h:32
glm::vec4 kVec4
4-component float vector.
Definition kdatatype.h:34
glm::vec3 kVec3
3-component float vector.
Definition kdatatype.h:33
glm::mat4 kMat4
4x4 float matrix.
Definition kdatatype.h:39
Holds the split stages of a combined shader source.
Definition kshader.h:31
kString geometry
Optional geometry stage source (empty if absent).
Definition kshader.h:33
kString vertex
Vertex stage source.
Definition kshader.h:32
kString fragment
Fragment / pixel stage source.
Definition kshader.h:34