From b5b43bac50ad58949e70bcd1a34b1e6c4765fd51 Mon Sep 17 00:00:00 2001 From: chai Date: Wed, 10 Apr 2019 09:03:57 +0800 Subject: *misc --- source/modules/asura-core/graphics/shader.h | 60 +++++++++++++---------------- 1 file changed, 26 insertions(+), 34 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 25b36dc..a725ccf 100644 --- a/source/modules/asura-core/graphics/shader.h +++ b/source/modules/asura-core/graphics/shader.h @@ -45,23 +45,18 @@ namespace AsuraEngine void OnUnuse(); /// - /// 设置顶点属性,Asura只支持2维顶点数据 + /// 设置顶点属性,这些值在framework的renderer里面被设置,而不是Image、Mesh2D这些“数据源“ + /// 如果normalized为true,输入的数据会在给定buffer的类型下归一化,如255的颜色归一化到 + /// 0~1。 /// - //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); + void SetAttribPosition(int size, GPUBuffer* vbo, GLsizei offset = 0, GLsizei stride = 0, bool normalized = false); + void SetAttribTangent(int size, GPUBuffer* vbo, GLsizei offset = 0, GLsizei stride = 0, bool normalized = false); + void SetAttribNormal(int size, GPUBuffer* vbo, GLsizei offset = 0, GLsizei stride = 0, bool normalized = false); + void SetAttribColor(int size, GPUBuffer* vbo, GLsizei offset = 0, GLsizei stride = 0, bool normalized = false); + void SetAttribTexcoord0(int size, GPUBuffer* vbo, GLsizei offset = 0, GLsizei stride = 0, bool normalized = false); + void SetAttribTexcoord1(int size, GPUBuffer* vbo, GLsizei offset = 0, GLsizei stride = 0, bool normalized = false); + void SetAttribTexcoord2(int size, GPUBuffer* vbo, GLsizei offset = 0, GLsizei stride = 0, bool normalized = false); + void SetAttribTexcoord3(int size, GPUBuffer* vbo, GLsizei offset = 0, GLsizei stride = 0, bool normalized = false); /// /// 设置uniform变量 @@ -98,31 +93,40 @@ namespace AsuraEngine LUAX_DECL_FACTORY(Shader); LUAX_DECL_METHOD(_New); - LUAX_DECL_METHOD(_Use); - LUAX_DECL_METHOD(_Unuse); LUAX_DECL_METHOD(_Load); LUAX_DECL_METHOD(_Update); LUAX_DECL_METHOD(_HasUniform); LUAX_DECL_METHOD(_GetUniformLocation); - LUAX_DECL_METHOD(_SetBuiltInUniforms); LUAX_DECL_METHOD(_SetUniformFloat); LUAX_DECL_METHOD(_SetUniformTexture); LUAX_DECL_METHOD(_SetUniformVector2); LUAX_DECL_METHOD(_SetUniformVector3); 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); + // 设置内置uniform变量 + LUAX_DECL_METHOD(_SetBuiltInUniforms); //----------------------------------------------------------------------------// std::string GetProgramWarnings(); std::string GetShaderWarnings(GLuint shader); + void UpdateSemanticsLocations(); /// - /// AsuraShader的语义,包含顶点属性和uniform变量。在framework中会对shader做封装。 + /// AsuraShader的语义,包含顶点属性和uniform变量。在framework中会对shader做再次封装。 /// 所谓的语义,指shader自定义的变量,和外部程序交互时,需要提供这些变量值,满足基本 /// 的绘制需要。这里用来索引语义名。 /// - enum ASLSemantics + enum Semantics { // MVP矩阵 SEMANTICS_UNIFORM_MODEL_MATRIX = 0, @@ -154,24 +158,12 @@ namespace AsuraEngine GLuint mVertShader; GLuint mFragShader; - /// - /// Model\View\Projection matrix uniform变量的location。Asura要求shader必须有以下 - /// 语义: - /// 1: asura_model_matrix 模型矩阵 - /// 2: asura_view_matrix 观察者矩阵 - /// 3: asura_projection_matrix 投影(正交)矩阵 - /// 会在framework里设置更多的内置语义,公共部分的语义是游戏和编辑器共有的。 - /// + // 内置语义 GLint mMVP[3]; - - /// - /// 顶点属性的location - /// GLint mPosition; GLint mTangent; GLint mNormal; GLint mColor; - // 支持四套UV GLint mTexcoord0; GLint mTexcoord1; GLint mTexcoord2; -- cgit v1.1-26-g67d0