From 59a0e32991b5b714b6bdba504b6fbacdcd4b907a Mon Sep 17 00:00:00 2001 From: chai Date: Thu, 2 May 2019 21:42:09 +0800 Subject: *misc --- source/modules/asura-core/graphics/shader.h | 98 +++-------------------------- 1 file changed, 8 insertions(+), 90 deletions(-) (limited to 'source/modules/asura-core/graphics/shader.h') diff --git a/source/modules/asura-core/graphics/shader.h b/source/modules/asura-core/graphics/shader.h index 9bb745e..b7bc70d 100644 --- a/source/modules/asura-core/graphics/shader.h +++ b/source/modules/asura-core/graphics/shader.h @@ -44,25 +44,15 @@ namespace AsuraEngine void OnUse(); void OnUnuse(); - - /// - /// Disable掉之前SetAttribXXX开启的attributes,在每次drawcall时会被gl调用。 - /// - void DisableAttribArraies(); - + /// /// 设置顶点属性,这些值在framework的renderer里面被设置,而不是Image、Mesh2D这些“数据源“ /// 如果normalized为true,输入的数据会在给定buffer的类型下归一化,如255的颜色归一化到 /// 0~1。 /// - void SetAttribPosition(VertexBuffer* vbo, uint offseti = 0, uint stridei = 0,bool normalized = false); - void SetAttribTangent(VertexBuffer* vbo, uint offseti = 0, uint stridei = 0,bool normalized = false); - void SetAttribNormal(VertexBuffer* vbo, uint offseti = 0, uint stridei = 0,bool normalized = false); - void SetAttribColor(VertexBuffer* vbo, uint offseti = 0, uint stridei = 0,bool normalized = false); - void SetAttribTexcoord0(VertexBuffer* vbo, uint offseti = 0, uint stridei = 0,bool normalized = false); - void SetAttribTexcoord1(VertexBuffer* vbo, uint offseti = 0, uint stridei = 0,bool normalized = false); - void SetAttribTexcoord2(VertexBuffer* vbo, uint offseti = 0, uint stridei = 0,bool normalized = false); - void SetAttribTexcoord3(VertexBuffer* vbo, uint offseti = 0, uint stridei = 0,bool normalized = false); + void SetAttribute(int loc, VertexBuffer* vbo, uint offseti = 0, uint stridei = 0, bool normalized = false); + int GetAttributeLocation(const std::string& attribute); + void DisableAttribute(int loc); /// /// 设置uniform变量 @@ -77,11 +67,6 @@ namespace AsuraEngine void SetUniformMatrix44(uint loc, const Math::Matrix44& mat44); bool SetUniformTexture(uint loc, const Texture& texture); - /// - /// 设置\更新内置uniform变量 - /// - void SetBuiltInUniforms(); - float GetUniformFloat(uint loc); AEMath::Vector2f GetUniformVector2(uint loc); AEMath::Vector3f GetUniformVector3(uint loc); @@ -110,14 +95,9 @@ namespace AsuraEngine LUAX_DECL_METHOD(_SetUniformVector4); LUAX_DECL_METHOD(_SetUniformColor); // 设置vertex attributes - LUAX_DECL_METHOD(_SetAttribPosition); - LUAX_DECL_METHOD(_SetAttribTangent); - LUAX_DECL_METHOD(_SetAttribNormal); - LUAX_DECL_METHOD(_SetAttribColor); - LUAX_DECL_METHOD(_SetAttribTexcoord0); - LUAX_DECL_METHOD(_SetAttribTexcoord1); - LUAX_DECL_METHOD(_SetAttribTexcoord2); - LUAX_DECL_METHOD(_SetAttribTexcoord3); + LUAX_DECL_METHOD(_GetAttributeLocation); + LUAX_DECL_METHOD(_SetAttribute); + LUAX_DECL_METHOD(_DisableAttribute); // 设置内置uniform变量 LUAX_DECL_METHOD(_SetBuiltInUniforms); @@ -125,73 +105,11 @@ namespace AsuraEngine std::string GetProgramWarnings(); std::string GetShaderWarnings(GLuint shader); - void UpdateSemanticsLocations(); - - /// - /// AsuraShader的语义,包含顶点属性和uniform变量。在framework中会对shader做再次封装。 - /// 所谓的语义,指shader自定义的变量,和外部程序交互时,需要提供这些变量值,满足基本 - /// 的绘制需要。这里用来索引语义名。 - /// - enum Semantics - { - // MVP矩阵 - SEMANTICS_UNIFORM_MODEL_MATRIX = 0, - SEMANTICS_UNIFORM_VIEW_MATRIX, - SEMANTICS_UNIFORM_PROJECTION_MATRIX, - // 绘制时的颜色 - SEMANTICS_UNIFORM_DRAW_COLOR, - // 坐标 - 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 - }; - - enum Attribute - { - ATTRIBUTE_POSITION = 1, - ATTRIBUTE_TANGENT = 1 << 1, - ATTRIBUTE_NORMAL = 1 << 2, - ATTRIBUTE_COLOR = 1 << 3, - ATTRIBUTE_TEXCOORD0 = 1 << 4, - ATTRIBUTE_TEXCOORD1 = 1 << 5, - ATTRIBUTE_TEXCOORD2 = 1 << 6, - ATTRIBUTE_TEXCOORD3 = 1 << 7, - }; - - /// - /// Asura shader 语义字符串统一管理。 - /// - static const char* SemanticsName[SEMANTICS_COUNT]; GLuint mProgram; GLuint mVertShader; GLuint mFragShader; - GLuint mDrawColor; - - // 内置语义 - GLint mMVP[3]; - GLint mPosition; - GLint mTangent; - GLint mNormal; - GLint mColor; - GLint mTexcoord0; - GLint mTexcoord1; - GLint mTexcoord2; - GLint mTexcoord3; - - int mEnabledAttributes; - + }; } -- cgit v1.1-26-g67d0