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/device.h |
+init
Diffstat (limited to 'src/core/device.h')
-rw-r--r-- | src/core/device.h | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/src/core/device.h b/src/core/device.h new file mode 100644 index 0000000..aa6e73f --- /dev/null +++ b/src/core/device.h @@ -0,0 +1,98 @@ +#ifndef _SOFTSHADEROOM_DEVICE_H_ +#define _SOFTSHADEROOM_DEVICE_H_ + +#include "../math/math.h" +#include "../util/type.h" +#include "mem.h" +#include "limits.h" +#include "shader.h" +#include "rasterizer.h" +#include "vert.h" + +typedef enum ssr_MatrixMode { + MATRIX_MODEL = 0, + MATRIX_VIEW = 1, + MATRIX_PROJECTION = 2, +} ssr_MatrixMode; + +typedef struct ssr_Config { + int width, height; + bool dbuffer;/* double buffer? */ + Color* target; /* screen target buffer */ +} ssr_Config; + +typedef enum ssr_PrimitiveType { + PRIMITIVE_POINT, + PRIMITIVE_LINE, + PRIMITIVE_TRIANGLE, +} ssr_PrimitiveType; + +typedef enum ssr_EnableMask { + ENABLEMASK_BACKFACECULL = 1 , + ENABLEMASK_DEPTHTEST = 1 << 1, +} ssr_EnableMask; + +void ssr_init(ssr_Config* config); + +int ssr_getframebufferw(); +int ssr_getframebufferh(); + +void ssr_matrixmode(ssr_MatrixMode mode); +void ssr_loadidentity(); +void ssr_pushmatrix(); +void ssr_popmatrix(); +void ssr_lookat(Vec3* pos, Vec3* target, Vec3* up); + +/*后乘,意味着这些操作会被率先应用到物体上,应该按照反向顺序调用这些函数*/ +void ssr_translate(float x, float y, float z); +void ssr_rotate(float angle, float x, float y, float z); +void ssr_scale(float sx, float sy, float sz); + +void ssr_multmatrix(Mat4* m);/*右乘矩阵*/ +void ssr_loadmatrix(Mat4* m); +void ssr_frustum(float l, float r, float b, float t, float n, float f); +void ssr_perspective(float fov, float aspect, float n, float f); + +void ssr_viewport(float l, float r, float b, float t); + +void ssr_getmv(Mat4* out); +void ssr_getmvp(Mat4* out); + +void ssr_enable(uint mask); +void ssr_disable(uint mask); +bool ssr_isenable(uint mask); + +/* 绑定顶点数据 */ +void ssr_bindvertices(Vert** verts, int nverts, uint* indices, int nprims); +void ssr_unbindvertices(); + +void ssr_useprogram(Program* program); +void ssr_unuseprogram(); + +void ssr_setuniformmat4(uint idx, Mat4* src); +void ssr_setuniformvec4(uint idx, Vec4* src); +void ssr_setuniformvec3(uint idx, Vec3* src); +void ssr_setuniformvec2(uint idx, Vec2* src); + +void ssr_draw(ssr_PrimitiveType primitive); +void ssr_clearcolor(Color color); +void ssr_cleardepth(); + +/*直接绘制到缓冲区*/ +void ssr_putpoint(uint screenx, uint screeny, Color color); /*直接修改某个位置的颜色*/ + +void ssr_present(); + +Color ssr_color(unsigned char r, unsigned char g, unsigned char b, unsigned char a); + +//bool ssr_cutline(int* x0, int* y0, int* x1, int* y1); + +bool ssr_testdepth(uint x, uint y, uint depth); /*尝试写入深度,如果可绘制返回true,否则discard*/ +bool ssr_testdepthf(uint x, uint y, float depth01); + +/* +** Utils +*/ +void ssrU_viewport(Vec2* p, Vec2* out); + +#endif
\ No newline at end of file |