From dce7b78db8a7071217b1439c4b7f6a341ce37cf1 Mon Sep 17 00:00:00 2001 From: chai Date: Wed, 17 Oct 2018 07:50:46 +0800 Subject: =?UTF-8?q?*=E6=A0=BC=E5=BC=8F=E5=8C=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/libjin/Graphics/Shader/Shader.h | 123 ++++++++++++++++++++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 src/libjin/Graphics/Shader/Shader.h (limited to 'src/libjin/Graphics/Shader/Shader.h') diff --git a/src/libjin/Graphics/Shader/Shader.h b/src/libjin/Graphics/Shader/Shader.h new file mode 100644 index 0000000..b9f83e7 --- /dev/null +++ b/src/libjin/Graphics/Shader/Shader.h @@ -0,0 +1,123 @@ +#ifndef __LIBJIN_SHADER_H +#define __LIBJIN_SHADER_H +#include "../../jin_configuration.h" +#if LIBJIN_MODULES_RENDER + +#include +#include +#include "../../3rdparty/GLee/GLee.h" +#include "../color.h" +#include "../texture.h" +#include "../canvas.h" +#include "base.shader.h" + +namespace jin +{ + namespace graphics + { + /// + /// @details Built in shader program. + /// + class Shader + { + public: + /// + /// @brief Create shader program from source code. + /// + /// @param source The shader source code. + /// + static Shader* createShader(const std::string& source); + + /// + /// @brief Get current shader. + /// + static inline Shader* getCurrentShader() { return CurrentShader; } + + /// + /// @brief Unuse current shader + /// + static void unuse(); + + /// + /// + /// + virtual ~Shader(); + + /// + /// + /// + void use(); + + /// + /// + /// + void sendFloat(const char* name, float number); + + /// + /// + /// + void sendTexture(const char* name, const Texture* image); + + /// + /// + /// + void sendInt(const char* name, int value); + + /// + /// + /// + void sendVec2(const char* name, float x, float y); + + /// + /// + /// + void sendVec3(const char* name, float x, float y, float z); + + /// + /// + /// + void sendVec4(const char* name, float x, float y, float z, float w); + + /// + /// + /// + void sendCanvas(const char* name, const Canvas* canvas); + + /// + /// + /// + void sendColor(const char* name, const Color* col); + + /// + /// + /// + void sendMatrix4(const char* name, const math::Matrix* mat4); + + /// + /// + /// + void bindVertexPointer(int n, GLenum type, GLsizei stride, const GLvoid * pointers); + + /// + /// + /// + void bindUVPointer(int n, GLenum type, GLsizei stride, const GLvoid * pointers); + + protected: + static Shader* CurrentShader; + + GLint claimTextureUnit(const std::string& name); + Shader(const std::string& program); + bool compile(const std::string& program); + + GLuint mPID; + GLint mCurrentTextureUnit; + std::map mTextureUnits; + + }; + + } // namespace graphics +} // namespace jin + +#endif // LIBJIN_MODULES_RENDER +#endif // __LIBJIN_SHADER_H \ No newline at end of file -- cgit v1.1-26-g67d0