raylib-cpp
C++ object-oriented wrapper library for raylib.
Loading...
Searching...
No Matches
ShaderUnmanaged.hpp
1#ifndef RAYLIB_CPP_INCLUDE_UNMANAGEDSHADER_HPP_
2#define RAYLIB_CPP_INCLUDE_UNMANAGEDSHADER_HPP_
3
4#include "./raylib-cpp-utils.hpp"
5#include "./raylib.hpp"
6
7#include <rlgl.h>
8#include <string>
9
10namespace raylib {
11
15class ShaderUnmanaged : public ::Shader {
16public:
17 ShaderUnmanaged() : ::Shader{rlGetShaderIdDefault(), rlGetShaderLocsDefault()} {}
18
19 ShaderUnmanaged(const ::Shader& shader) : ::Shader(shader) { }
20
21 ShaderUnmanaged(unsigned int id, int* locs = nullptr) : ::Shader{id, locs} {}
22
23 ShaderUnmanaged(const std::string& vsFileName, const std::string& fsFileName) {
24 set(::LoadShader(vsFileName.c_str(), fsFileName.c_str()));
25 }
26 ShaderUnmanaged(const char* vsFileName, const char* fsFileName) { set(::LoadShader(vsFileName, fsFileName)); }
27
33 static ::Shader Load(const std::string& vsFileName, const std::string& fsFileName) {
34 return ::LoadShader(vsFileName.c_str(), fsFileName.c_str());
35 }
36 static ::Shader Load(const char* vsFileName, const char* fsFileName) {
37 return ::LoadShader(vsFileName, fsFileName);
38 }
39
45 static ::Shader LoadFromMemory(const std::string& vsCode, const std::string& fsCode) {
46 return ::LoadShaderFromMemory(vsCode.c_str(), fsCode.c_str());
47 }
48 static ::Shader LoadFromMemory(const char* vsCode, const char* fsCode) {
49 return ::LoadShaderFromMemory(vsCode, fsCode);
50 }
51
52 GETTER(unsigned int, Id, id)
53 GETTER(int*, Locs, locs)
54
55 ShaderUnmanaged& operator=(const ::Shader& shader) {
56 set(shader);
57 return *this;
58 }
59
64 ::BeginShaderMode(*this);
65 return *this;
66 }
67
72 ::EndShaderMode();
73 return *this;
74 }
75
81 [[nodiscard]] int GetLocation(const std::string& uniformName) const { return ::GetShaderLocation(*this, uniformName.c_str()); }
82
88 [[nodiscard]] int GetLocationAttrib(const std::string& attribName) const {
89 return ::GetShaderLocationAttrib(*this, attribName.c_str());
90 }
91
97 ShaderUnmanaged& SetValue(int uniformLoc, const void* value, int uniformType) {
98 ::SetShaderValue(*this, uniformLoc, value, uniformType);
99 return *this;
100 }
101
107 ShaderUnmanaged& SetValue(int uniformLoc, const void* value, int uniformType, int count) {
108 ::SetShaderValueV(*this, uniformLoc, value, uniformType, count);
109 return *this;
110 }
111
117 ShaderUnmanaged& SetValue(int uniformLoc, const ::Matrix& mat) {
118 ::SetShaderValueMatrix(*this, uniformLoc, mat);
119 return *this;
120 }
121
127 ShaderUnmanaged& SetValue(int uniformLoc, const ::Texture2D& texture) {
128 ::SetShaderValueTexture(*this, uniformLoc, texture);
129 return *this;
130 }
131
135 [[nodiscard]] bool IsValid() const { return ::IsShaderValid(*this); }
136protected:
137 void set(const ::Shader& shader) {
138 id = shader.id;
139 locs = shader.locs;
140 }
141};
142} // namespace raylib
143
145
146#endif // RAYLIB_CPP_INCLUDE_UNMANAGEDSHADER_HPP_
Shader type (generic)
Definition: Shader.hpp:17
Shader type (generic), not managed by C++ RAII.
bool IsValid() const
Retrieves whether or not the shader is ready.
::Shader LoadFromMemory(const std::string &vsCode, const std::string &fsCode)
Load a shader from memory.
::Shader Load(const std::string &vsFileName, const std::string &fsFileName)
Load shader from files and bind default locations.
ShaderUnmanaged & SetValue(int uniformLoc, const void *value, int uniformType)
Set shader uniform value.
ShaderUnmanaged & SetValue(int uniformLoc, const ::Texture2D &texture)
Set shader uniform value for texture.
int GetLocationAttrib(const std::string &attribName) const
Get shader attribute location.
ShaderUnmanaged & SetValue(int uniformLoc, const ::Matrix &mat)
Set shader uniform value (matrix 4x4)
ShaderUnmanaged & EndMode()
End custom shader drawing (use default shader).
ShaderUnmanaged & BeginMode()
Begin custom shader drawing.
ShaderUnmanaged & SetValue(int uniformLoc, const void *value, int uniformType, int count)
Set shader uniform value vector.
int GetLocation(const std::string &uniformName) const
Get shader uniform location.
All raylib-cpp classes and functions appear in the raylib namespace.
Definition: AudioDevice.hpp:8