From 4c137d1e9fa6a49503053c8d8ac85e200b742de1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A4=E9=BE=99?= <68932014+12gch138@users.noreply.github.com> Date: Tue, 13 Dec 2022 10:34:09 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=99shader=E6=B7=BB=E5=8A=A0=E4=BA=86unifo?= =?UTF-8?q?rm=E7=9A=84=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 直接添加在基类Shader中的 --- FinalProject/shader.h | 57 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/FinalProject/shader.h b/FinalProject/shader.h index 68b94b4..7c2e7f4 100644 --- a/FinalProject/shader.h +++ b/FinalProject/shader.h @@ -17,6 +17,63 @@ public: inline unsigned int shaderId() const { return _shaderId; } inline void dispose(); + void setBool(const std::string& name, bool value) const + { + OPENGL_EXTRA_FUNCTIONS->glUniform1i(OPENGL_EXTRA_FUNCTIONS->glGetUniformLocation(_shaderId, name.c_str()), (int)value); + } + // ------------------------------------------------------------------------ + void setInt(const std::string& name, int value) const + { + OPENGL_EXTRA_FUNCTIONS->glUniform1i(OPENGL_EXTRA_FUNCTIONS->glGetUniformLocation(_shaderId, name.c_str()), value); + } + // ------------------------------------------------------------------------ + void setFloat(const std::string& name, float value) const + { + OPENGL_EXTRA_FUNCTIONS->glUniform1f(OPENGL_EXTRA_FUNCTIONS->glGetUniformLocation(_shaderId, name.c_str()), value); + } + // ------------------------------------------------------------------------ + void setVec2(const std::string& name, const glm::vec2& value) const + { + OPENGL_EXTRA_FUNCTIONS->glUniform2fv(OPENGL_EXTRA_FUNCTIONS->glGetUniformLocation(_shaderId, name.c_str()), 1, &value[0]); + } + void setVec2(const std::string& name, float x, float y) const + { + OPENGL_EXTRA_FUNCTIONS->glUniform2f(OPENGL_EXTRA_FUNCTIONS->glGetUniformLocation(_shaderId, name.c_str()), x, y); + } + // ------------------------------------------------------------------------ + void setVec3(const std::string& name, const glm::vec3& value) const + { + OPENGL_EXTRA_FUNCTIONS->glUniform3fv(OPENGL_EXTRA_FUNCTIONS->glGetUniformLocation(_shaderId, name.c_str()), 1, &value[0]); + } + void setVec3(const std::string& name, float x, float y, float z) const + { + OPENGL_EXTRA_FUNCTIONS->glUniform3f(OPENGL_EXTRA_FUNCTIONS->glGetUniformLocation(_shaderId, name.c_str()), x, y, z); + } + // ------------------------------------------------------------------------ + void setVec4(const std::string& name, const glm::vec4& value) const + { + OPENGL_EXTRA_FUNCTIONS->glUniform4fv(OPENGL_EXTRA_FUNCTIONS->glGetUniformLocation(_shaderId, name.c_str()), 1, &value[0]); + } + void setVec4(const std::string& name, float x, float y, float z, float w) + { + OPENGL_EXTRA_FUNCTIONS->glUniform4f(OPENGL_EXTRA_FUNCTIONS->glGetUniformLocation(_shaderId, name.c_str()), x, y, z, w); + } + // ------------------------------------------------------------------------ + void setMat2(const std::string& name, const glm::mat2& mat) const + { + OPENGL_EXTRA_FUNCTIONS->glUniformMatrix2fv(OPENGL_EXTRA_FUNCTIONS->glGetUniformLocation(_shaderId, name.c_str()), 1, GL_FALSE, &mat[0][0]); + } + // ------------------------------------------------------------------------ + void setMat3(const std::string& name, const glm::mat3& mat) const + { + OPENGL_EXTRA_FUNCTIONS->glUniformMatrix3fv(OPENGL_EXTRA_FUNCTIONS->glGetUniformLocation(_shaderId, name.c_str()), 1, GL_FALSE, &mat[0][0]); + } + // ------------------------------------------------------------------------ + void setMat4(const std::string& name, const glm::mat4& mat) const + { + OPENGL_EXTRA_FUNCTIONS->glUniformMatrix4fv(OPENGL_EXTRA_FUNCTIONS->glGetUniformLocation(_shaderId, name.c_str()), 1, GL_FALSE, &mat[0][0]); + } + protected: virtual void compile(const std::string& sourceFilePath) = 0; };