diff options
author | chai <chaifix@163.com> | 2019-04-10 09:03:57 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2019-04-10 09:03:57 +0800 |
commit | b5b43bac50ad58949e70bcd1a34b1e6c4765fd51 (patch) | |
tree | 32e8655bf48ca059d818501c8d95fc92ae97b318 /source/modules/asura-core/graphics/shader.cpp | |
parent | 200f710983fd54b23437cb78d5a03c90b5a47523 (diff) |
*misc
Diffstat (limited to 'source/modules/asura-core/graphics/shader.cpp')
-rw-r--r-- | source/modules/asura-core/graphics/shader.cpp | 112 |
1 files changed, 95 insertions, 17 deletions
diff --git a/source/modules/asura-core/graphics/shader.cpp b/source/modules/asura-core/graphics/shader.cpp index 0d92c60..cf3d4b2 100644 --- a/source/modules/asura-core/graphics/shader.cpp +++ b/source/modules/asura-core/graphics/shader.cpp @@ -13,7 +13,7 @@ namespace AsuraEngine /// /// texture unit /// - static int _texture_unit = 0; + static int _texture_unit; const char* Shader::SemanticsName[] = { // uniforms @@ -107,19 +107,8 @@ namespace AsuraEngine throw Exception("Link shader program failed:\n%s", warnning.c_str()); } - // mvplocation - mMVP[MATRIX_MODE_MODEL] = glGetUniformLocation(mProgram, SemanticsName[SEMANTICS_UNIFORM_MODEL_MATRIX]); - mMVP[MATRIX_MODE_VIEW] = glGetUniformLocation(mProgram, SemanticsName[SEMANTICS_UNIFORM_VIEW_MATRIX]); - mMVP[MATRIX_MODE_PROJECTION] = glGetUniformLocation(mProgram, SemanticsName[SEMANTICS_UNIFORM_PROJECTION_MATRIX]); - - mPosition = glGetAttribLocation(mProgram, SemanticsName[SEMANTICS_ATTRIBUTE_POSITION]); - mTangent = glGetAttribLocation(mProgram, SemanticsName[SEMANTICS_ATTRIBUTE_TANGENT]); - mNormal = glGetAttribLocation(mProgram, SemanticsName[SEMANTICS_ATTRIBUTE_NORMAL]); - mTexcoord0 = glGetAttribLocation(mProgram, SemanticsName[SEMANTICS_ATTRIBUTE_TEXCOORD0]); - mTexcoord1 = glGetAttribLocation(mProgram, SemanticsName[SEMANTICS_ATTRIBUTE_TEXCOORD1]); - mTexcoord2 = glGetAttribLocation(mProgram, SemanticsName[SEMANTICS_ATTRIBUTE_TEXCOORD2]); - mTexcoord3 = glGetAttribLocation(mProgram, SemanticsName[SEMANTICS_ATTRIBUTE_TEXCOORD3]); - mColor = glGetAttribLocation(mProgram, SemanticsName[SEMANTICS_ATTRIBUTE_COLOR]); + // linklocations + UpdateSemanticsLocations(); return true; } @@ -127,12 +116,20 @@ namespace AsuraEngine void Shader::OnUse() { _texture_unit = 0; - SetBuiltInUniforms(); + // Disableöԣsetʱ + glDisableVertexAttribArray(mPosition); + glDisableVertexAttribArray(mTangent); + glDisableVertexAttribArray(mNormal); + glDisableVertexAttribArray(mColor); + glDisableVertexAttribArray(mTexcoord0); + glDisableVertexAttribArray(mTexcoord1); + glDisableVertexAttribArray(mTexcoord2); + glDisableVertexAttribArray(mTexcoord3); } void Shader::OnUnuse() { - _texture_unit = 0; + _texture_unit; } /* int Shader::GetAttributeLocation(const std::string& name) @@ -223,7 +220,7 @@ namespace AsuraEngine uint Shader::GetGLTextureUnitCount() { - GLint maxTextureUnits = 0; + GLint maxTextureUnits; glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, &maxTextureUnits); return (uint)maxTextureUnits; } @@ -268,5 +265,86 @@ namespace AsuraEngine return warnings; } + void Shader::UpdateSemanticsLocations() + { + // mvplocation + mMVP[MATRIX_MODE_MODEL] = glGetUniformLocation(mProgram, SemanticsName[SEMANTICS_UNIFORM_MODEL_MATRIX]); + mMVP[MATRIX_MODE_VIEW] = glGetUniformLocation(mProgram, SemanticsName[SEMANTICS_UNIFORM_VIEW_MATRIX]); + mMVP[MATRIX_MODE_PROJECTION] = glGetUniformLocation(mProgram, SemanticsName[SEMANTICS_UNIFORM_PROJECTION_MATRIX]); + + mPosition = glGetAttribLocation(mProgram, SemanticsName[SEMANTICS_ATTRIBUTE_POSITION]); + mTangent = glGetAttribLocation(mProgram, SemanticsName[SEMANTICS_ATTRIBUTE_TANGENT]); + mNormal = glGetAttribLocation(mProgram, SemanticsName[SEMANTICS_ATTRIBUTE_NORMAL]); + mTexcoord0 = glGetAttribLocation(mProgram, SemanticsName[SEMANTICS_ATTRIBUTE_TEXCOORD0]); + mTexcoord1 = glGetAttribLocation(mProgram, SemanticsName[SEMANTICS_ATTRIBUTE_TEXCOORD1]); + mTexcoord2 = glGetAttribLocation(mProgram, SemanticsName[SEMANTICS_ATTRIBUTE_TEXCOORD2]); + mTexcoord3 = glGetAttribLocation(mProgram, SemanticsName[SEMANTICS_ATTRIBUTE_TEXCOORD3]); + mColor = glGetAttribLocation(mProgram, SemanticsName[SEMANTICS_ATTRIBUTE_COLOR]); + } + + void Shader::SetAttribPosition(int size, GPUBuffer* vbo, GLsizei offset, GLsizei stride , bool normalized) + { + vbo->Bind(); + glVertexAttribPointer(mPosition, size, vbo->GetDataType(), normalized, stride, (GLvoid*)offset); + vbo->UnBind(); + glEnableVertexAttribArray(mPosition); + } + + void Shader::SetAttribTangent(int size, GPUBuffer* vbo, GLsizei offset, GLsizei stride , bool normalized) + { + vbo->Bind(); + glVertexAttribPointer(mTangent, size, vbo->GetDataType(), normalized, stride, (GLvoid*)offset); + vbo->UnBind(); + glEnableVertexAttribArray(mTangent); + } + + void Shader::SetAttribNormal(int size, GPUBuffer* vbo, GLsizei offset, GLsizei stride , bool normalized) + { + vbo->Bind(); + glVertexAttribPointer(mNormal, size, vbo->GetDataType(), normalized, stride, (GLvoid*)offset); + vbo->UnBind(); + glEnableVertexAttribArray(mNormal); + } + + void Shader::SetAttribColor(int size, GPUBuffer* vbo, GLsizei offset, GLsizei stride , bool normalized) + { + vbo->Bind(); + glVertexAttribPointer(mColor, size, vbo->GetDataType(), normalized, stride, (GLvoid*)offset); + vbo->UnBind(); + glEnableVertexAttribArray(mColor); + } + + void Shader::SetAttribTexcoord0(int size, GPUBuffer* vbo, GLsizei offset, GLsizei stride , bool normalized) + { + vbo->Bind(); + glVertexAttribPointer(mTexcoord0, size, vbo->GetDataType(), normalized, stride, (GLvoid*)offset); + vbo->UnBind(); + glEnableVertexAttribArray(mTexcoord0); + } + + void Shader::SetAttribTexcoord1(int size, GPUBuffer* vbo, GLsizei offset, GLsizei stride , bool normalized) + { + vbo->Bind(); + glVertexAttribPointer(mTexcoord1, size, vbo->GetDataType(), normalized, stride, (GLvoid*) offset); + vbo->UnBind(); + glEnableVertexAttribArray(mTexcoord1); + } + + void Shader::SetAttribTexcoord2(int size, GPUBuffer* vbo, GLsizei offset, GLsizei stride , bool normalized) + { + vbo->Bind(); + glVertexAttribPointer(mTexcoord2, size, vbo->GetDataType(), normalized, stride, (GLvoid*)offset); + vbo->UnBind(); + glEnableVertexAttribArray(mTexcoord2); + } + + void Shader::SetAttribTexcoord3(int size, GPUBuffer* vbo, GLsizei offset, GLsizei stride , bool normalized) + { + vbo->Bind(); + glVertexAttribPointer(mTexcoord3, size, vbo->GetDataType(), normalized, stride, (GLvoid*)offset); + vbo->UnBind(); + glEnableVertexAttribArray(mTexcoord3); + } + } }
\ No newline at end of file |