From 866e00474be3bfe0e7dac73b720af0b9ebf7109a Mon Sep 17 00:00:00 2001 From: chai Date: Sat, 13 Apr 2019 20:15:07 +0800 Subject: *misc --- source/modules/asura-core/graphics/shader.h | 41 ++++++++++++++++++++++------- 1 file changed, 32 insertions(+), 9 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 a725ccf..9bb745e 100644 --- a/source/modules/asura-core/graphics/shader.h +++ b/source/modules/asura-core/graphics/shader.h @@ -17,7 +17,8 @@ #include "gl.h" #include "color.h" #include "texture.h" -#include "gpu_buffer.h" +#include "vertex_buffer.h" +#include "index_buffer.h" namespace AsuraEngine { @@ -44,19 +45,24 @@ 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(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); + 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); /// /// 设置uniform变量 @@ -132,6 +138,8 @@ namespace AsuraEngine SEMANTICS_UNIFORM_MODEL_MATRIX = 0, SEMANTICS_UNIFORM_VIEW_MATRIX, SEMANTICS_UNIFORM_PROJECTION_MATRIX, + // 绘制时的颜色 + SEMANTICS_UNIFORM_DRAW_COLOR, // 坐标 SEMANTICS_ATTRIBUTE_POSITION, // 切线 @@ -149,6 +157,18 @@ namespace AsuraEngine 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 语义字符串统一管理。 /// @@ -157,6 +177,7 @@ namespace AsuraEngine GLuint mProgram; GLuint mVertShader; GLuint mFragShader; + GLuint mDrawColor; // 内置语义 GLint mMVP[3]; @@ -169,6 +190,8 @@ namespace AsuraEngine GLint mTexcoord2; GLint mTexcoord3; + int mEnabledAttributes; + }; } -- cgit v1.1-26-g67d0