From 3f3bf076c0b81a03312b0c19070e1237b415b8f1 Mon Sep 17 00:00:00 2001 From: blobt Date: Tue, 21 Apr 2020 17:51:34 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=9A=E9=87=8D=E7=BA=B9=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vs/shader/v14/.suo | Bin 4608 -> 5120 bytes Res/test.fs | 3 ++- Res/test2.bmp | Bin 0 -> 73728 bytes scene.cpp | 9 ++------- shader.cpp | 23 +++++++++++++++++++++++ shader.h | 10 ++++++++++ 6 files changed, 37 insertions(+), 8 deletions(-) create mode 100644 Res/test2.bmp diff --git a/.vs/shader/v14/.suo b/.vs/shader/v14/.suo index 64e3f107a61f2c4f166bf478f87f2cb083e09eb3..90a26418b17c5cfc2b3a6d7e702db4f94839912b 100644 GIT binary patch delta 256 zcmZorY0#Kppuofc1p*8VEI=kB5dZuC|365S8HhJ4vTR`7#N@*=*@sDiPr!(E-dgc% zj2u9j1B{ca*!(7670_m4V4M7v=^QU3P~U%$As~8kAhU`l$n;ns1_6*D2(SX#e}Oc} z77zx5&4L_{87FaZaDwaviL!2HuEk{Jqs@VAXdLy}(oKh;n2pO4&`nLhcXfcfM)o+bdhoLcAr delta 156 zcmZqBXi%A8puhkF0t^gnKsF-~|NH;{KS&tF-mJ*7fpHU)4+|sXWJM-kOB|@ nnf(`tH}mj)V4TFou~~xa1>?j7fk^@liv$@bD+o3$;$r~-kU2JF diff --git a/Res/test.fs b/Res/test.fs index 6e4f27d..b4ee29d 100644 --- a/Res/test.fs +++ b/Res/test.fs @@ -2,9 +2,10 @@ precision mediump float; #endif uniform sampler2D U_Texture; +uniform sampler2D U_Texture2; varying vec4 V_Color; varying vec2 V_Texcoord; void main() { - gl_FragColor=V_Color*texture2D(U_Texture,V_Texcoord); + gl_FragColor=V_Color*texture2D(U_Texture,V_Texcoord)*texture2D(U_Texture2,V_Texcoord); } \ No newline at end of file diff --git a/Res/test2.bmp b/Res/test2.bmp new file mode 100644 index 0000000000000000000000000000000000000000..90b5dee2eb5f98dc00cd6bd010f687b29600e7d1 GIT binary patch literal 73728 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 T|2E{DyGMTLV{FETv(tx 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"Res/test.vs", "Res/test.fs"); - - textureLocation = glGetUniformLocation(shader->mProgram, "U_Texture"); + shader->SetTexture("U_Texture", "Res/test.bmp"); + shader->SetTexture("U_Texture2", "Res/test2.bmp"); modelMatrix = glm::translate(0.0f, 0.0f, -0.6f); - texture = CreateTexture2DFromBMP("Res/test.bmp"); - ground.Init(); } void SetViewPortSize(float width, float height) { @@ -51,8 +48,6 @@ void Draw() { vertexbuffer->Bind(); shader->Bind(glm::value_ptr(modelMatrix), glm::value_ptr(viewMatrix), glm::value_ptr(projectionMatrix)); - glBindTexture(GL_TEXTURE_2D, texture); - glUniform1i(textureLocation, 0); glDrawArrays(GL_TRIANGLES, 0, 3); vertexbuffer->Unbind(); } \ No newline at end of file diff --git a/shader.cpp b/shader.cpp index 3b22e76..7db3232 100644 --- a/shader.cpp +++ b/shader.cpp @@ -36,6 +36,13 @@ void Shader::Bind(float *M, float *V, float*P) { glUniformMatrix4fv(mViewMatrixLocation, 1, GL_FALSE, V); glUniformMatrix4fv(mProjectionMatrixLocation, 1, GL_FALSE, P); + int iIndex = 0; + for (auto iter = mUniformTextures.begin(); iter != mUniformTextures.end(); ++iter) { + glActiveTexture(GL_TEXTURE0 + iIndex); + glBindTexture(GL_TEXTURE_2D, iter->second->mTexture); + glUniform1i(iter->second->mLocation, iIndex++); + } + glEnableVertexAttribArray(mPositionLocation); glVertexAttribPointer(mPositionLocation, 4, GL_FLOAT, GL_FALSE, sizeof(Vertex), 0); @@ -47,4 +54,20 @@ void Shader::Bind(float *M, float *V, float*P) { glEnableVertexAttribArray(mNormalLocation); glVertexAttribPointer(mNormalLocation, 4, GL_FLOAT, GL_FALSE, sizeof(Vertex), (void*)(sizeof(float) * 12)); +} +void Shader::SetTexture(const char * name, const char*imagePath) { + auto iter = mUniformTextures.find(name); + if (iter == mUniformTextures.end()) { + GLint location = glGetUniformLocation(mProgram, name); + if (location != -1) { + UniformTexture* t = new UniformTexture; + t->mLocation = location; + t->mTexture = CreateTexture2DFromBMP(imagePath); + mUniformTextures.insert(std::pair(name, t)); + } + } + else { + glDeleteTextures(1, &iter->second->mTexture); + iter->second->mTexture = CreateTexture2DFromBMP(imagePath); + } } \ No newline at end of file diff --git a/shader.h b/shader.h index c4e145c..1775678 100644 --- a/shader.h +++ b/shader.h @@ -1,10 +1,20 @@ #pragma once #include "ggl.h" +struct UniformTexture { + GLint mLocation; + GLuint mTexture; + UniformTexture() { + mLocation = -1; + mTexture = 0; + } +}; class Shader { public: GLuint mProgram; + std::map mUniformTextures; GLint mModelMatrixLocation, mViewMatrixLocation, mProjectionMatrixLocation; GLint mPositionLocation, mColorLocation, mTexcoordLocation, mNormalLocation; void Init(const char*vs, const char*fs); void Bind(float *M, float *V, float*P); + void SetTexture(const char * name, const char*imagePath); }; \ No newline at end of file