diff options
Diffstat (limited to 'source/modules')
-rw-r--r-- | source/modules/asura-core/graphics/shader.cpp | 37 | ||||
-rw-r--r-- | source/modules/asura-core/graphics/shader.h | 74 |
2 files changed, 87 insertions, 24 deletions
diff --git a/source/modules/asura-core/graphics/shader.cpp b/source/modules/asura-core/graphics/shader.cpp index 662ce5e..0d92c60 100644 --- a/source/modules/asura-core/graphics/shader.cpp +++ b/source/modules/asura-core/graphics/shader.cpp @@ -15,10 +15,20 @@ namespace AsuraEngine /// static int _texture_unit = 0; - const char* Shader::ASLSemantics[] = { - "asura_model_matrix", // BUILTIN_UNIFORM_MODEL_MATRIX - "asura_view_matrix", // BUILTIN_UNIFORM_VIEW_MATRIX - "asura_projection_matrix", // BUILTIN_UNIFORM_PROJECTION_MATRIX + const char* Shader::SemanticsName[] = { + // uniforms + "asura_model_matrix", + "asura_view_matrix", + "asura_projection_matrix", + // attributes + "asura_position", + "asura_tangent", + "asura_normal", + "asura_texcoord0", + "asura_texcoord1", + "asura_texcoord2", + "asura_texcoord3", + "asura_color" }; Shader::Shader() @@ -98,9 +108,18 @@ namespace AsuraEngine } // mvplocation - mMVP[MATRIX_MODE_MODEL] = glGetUniformLocation(mProgram, ASLSemantics[BUILTIN_UNIFORM_MODEL_MATRIX]); - mMVP[MATRIX_MODE_VIEW] = glGetUniformLocation(mProgram, ASLSemantics[BUILTIN_UNIFORM_VIEW_MATRIX]); - mMVP[MATRIX_MODE_PROJECTION] = glGetUniformLocation(mProgram, ASLSemantics[BUILTIN_UNIFORM_PROJECTION_MATRIX]); + 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]); return true; } @@ -115,13 +134,13 @@ namespace AsuraEngine { _texture_unit = 0; } - +/* int Shader::GetAttributeLocation(const std::string& name) { GLint loc = glGetAttribLocation(mProgram, name.c_str()); return loc; } - +*/ uint Shader::GetUniformLocation(const std::string& uniform) { GLint loc = glGetUniformLocation(mProgram, uniform.c_str()); diff --git a/source/modules/asura-core/graphics/shader.h b/source/modules/asura-core/graphics/shader.h index 12d2f59..25b36dc 100644 --- a/source/modules/asura-core/graphics/shader.h +++ b/source/modules/asura-core/graphics/shader.h @@ -24,15 +24,6 @@ namespace AsuraEngine namespace Graphics { - enum BuiltInUniforms - { - BUILTIN_UNIFORM_MODEL_MATRIX = 0, - BUILTIN_UNIFORM_VIEW_MATRIX, - BUILTIN_UNIFORM_PROJECTION_MATRIX, - - BUILTIN_UNIFORM_COUNT - }; - /// /// һshaderһڲʼ乲ijShaderuniformsͶݣֻṩ /// uniformsuseɫķ༭ÿshaderͨshaderҵuniforms @@ -48,7 +39,7 @@ namespace AsuraEngine ~Shader(); - bool Load(const std::string& vert, const std::string& frag); + bool Load(const std::string& vert, const std::string& frag) ASURA_THROW(Exception); void OnUse(); void OnUnuse(); @@ -56,9 +47,21 @@ namespace AsuraEngine /// /// öԣAsuraֻ֧2ά /// - int GetAttributeLocation(const std::string& name); - void SetAttribute(int loc, void* data, uint offset = 0, uint stride = 0); - void SetAttribute(int loc, GPUBuffer* vbo, uint offset = 0, uint stride = 0); + //int GetAttributeLocation(const std::string& name); + //void SetAttribute(int loc, void* data, uint offset = 0, uint stride = 0); + //void SetAttribute(int loc, GPUBuffer* vbo, uint offset = 0, uint stride = 0); + + /// + /// ǰö + /// + void SetAttribPosition(int size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* pointer); + void SetAttribTangent(int size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* pointer); + void SetAttribNormal(int size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* pointer); + void SetAttribTexcoord0(int size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* pointer); + void SetAttribTexcoord1(int size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* pointer); + void SetAttribTexcoord2(int size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* pointer); + void SetAttribTexcoord3(int size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* pointer); + void SetAttribColor(int size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* pointer); /// /// uniform @@ -113,11 +116,39 @@ namespace AsuraEngine std::string GetProgramWarnings(); std::string GetShaderWarnings(GLuint shader); - + + /// + /// AsuraShader壬Ժuniformframeworkлshaderװ + /// ν壬ָshaderԶıⲿʱҪṩЩֵ + /// ĻҪ + /// + enum ASLSemantics + { + // MVP + SEMANTICS_UNIFORM_MODEL_MATRIX = 0, + SEMANTICS_UNIFORM_VIEW_MATRIX, + SEMANTICS_UNIFORM_PROJECTION_MATRIX, + // + SEMANTICS_ATTRIBUTE_POSITION, + // + SEMANTICS_ATTRIBUTE_TANGENT, + // + SEMANTICS_ATTRIBUTE_NORMAL, + // UV + SEMANTICS_ATTRIBUTE_TEXCOORD0, + SEMANTICS_ATTRIBUTE_TEXCOORD1, + SEMANTICS_ATTRIBUTE_TEXCOORD2, + SEMANTICS_ATTRIBUTE_TEXCOORD3, + // ɫ + SEMANTICS_ATTRIBUTE_COLOR, + + SEMANTICS_COUNT + }; + /// /// Asura shader ַͳһ /// - static const char* ASLSemantics[BUILTIN_UNIFORM_COUNT]; + static const char* SemanticsName[SEMANTICS_COUNT]; GLuint mProgram; GLuint mVertShader; @@ -133,6 +164,19 @@ namespace AsuraEngine /// GLint mMVP[3]; + /// + /// Եlocation + /// + GLint mPosition; + GLint mTangent; + GLint mNormal; + GLint mColor; + // ֧UV + GLint mTexcoord0; + GLint mTexcoord1; + GLint mTexcoord2; + GLint mTexcoord3; + }; } |