diff options
author | chai <chaifix@163.com> | 2019-12-04 00:07:32 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2019-12-04 00:07:32 +0800 |
commit | 2e82e2ddd0852b8063a3d6645366f53ee844e273 (patch) | |
tree | 41ec10760f2d2c9f1f782a918f48e1287da2a4b4 /src/core/shader.h |
+init
Diffstat (limited to 'src/core/shader.h')
-rw-r--r-- | src/core/shader.h | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/src/core/shader.h b/src/core/shader.h new file mode 100644 index 0000000..8da8ae3 --- /dev/null +++ b/src/core/shader.h @@ -0,0 +1,89 @@ +#ifndef _SOFTSHADEROOM_SHADER_H_ +#define _SOFTSHADEROOM_SHADER_H_ + +#include "../math/math.h" +#include "vert.h" + +typedef struct UniformCollection { + /*built in varaibles*/ + Mat4* model; + Mat4* view; + Mat4* projection; + Mat4* mvp; + Mat4* mv; + /*userside variables*/ + Mat4 var_mat4[8]; + Vec4 var_vec4[8]; + Vec3 var_vec3[8]; + Vec2 var_vec2[8]; +} UniformCollection; + +#define ssrum4(i) (uniforms->var_mat4[i]) +#define ssruv2(i) (uniforms->var_vec2[i]) +#define ssruv3(i) (uniforms->var_vec3[i]) +#define ssruv4(i) (uniforms->var_vec4[i]) + +typedef struct VertexShaderIn { + Vert* vertex; +} VertexShaderIn; + +typedef void(*VertexShader)(UniformCollection* uniforms, VertexShaderIn* in, Vec4* homocoord); + +typedef struct FragmentShaderIn { + Vert *A, *B, *C; + Vec3* bc; +} FragmentShaderIn; + +typedef bool(*FragmentShader)(UniformCollection* uniforms, FragmentShaderIn* in, Color* color); + +typedef struct Program { + VertexShader vertexshader; + FragmentShader fragmentshader; +} Program; + +void ssrS_bcpcolor(Vec3* bc, Color A, Color B, Color C, Color* out); +void ssrS_bcpvec2(Vec3* bc, Vec2* A, Vec2* B, Vec2* C, Vec2* out); +void ssrS_bcpvec3(Vec3* bc, Vec3* A, Vec3* B, Vec3* C, Vec3* out); +void ssrS_bcpvec4(Vec3* bc, Vec4* A, Vec4* B, Vec4* C, Vec4* out); + +/* +** 顶点数据外,还提供额外的寄存器 +*/ +enum RegisterType { + REGTYPE_VEC2 = 1, + REGTYPE_VEC4 = 2, + REGTYPE_VEC3 = 3, +}; + +typedef struct Register { + uint length; + uint type; + union { + Vec4* v4; + Vec2* v2; + Vec3* v3; + }; +} Register; + +void ssrS_setregvec4_01i(uint idx, Vec4* value); +void ssrS_setregvec4_02i(uint idx, Vec4* value); +void ssrS_setregvec2_01i(uint idx, Vec2* value); +void ssrS_setregvec2_02i(uint idx, Vec2* value); +void ssrS_setregvec3_01i(uint idx, Vec3* value); +void ssrS_setregvec3_02i(uint idx, Vec3* value); + +Vec4* ssrS_getregvec4_01i(uint idx); +Vec4* ssrS_getregvec4_02i(uint idx); +Vec2* ssrS_getregvec2_01i(uint idx); +Vec2* ssrS_getregvec2_02i(uint idx); +Vec3* ssrS_getregvec3_01i(uint idx); +Vec3* ssrS_getregvec3_02i(uint idx); + +Vec4* ssrS_getregvec4_01(Vert* vert); +Vec4* ssrS_getregvec4_02(Vert* vert); +Vec2* ssrS_getregvec2_01(Vert* vert); +Vec2* ssrS_getregvec2_02(Vert* vert); +Vec3* ssrS_getregvec3_01(Vert* vert); +Vec3* ssrS_getregvec3_02(Vert* vert); + +#endif
\ No newline at end of file |