summaryrefslogtreecommitdiff
path: root/src/core/device.h
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2019-12-04 00:07:32 +0800
committerchai <chaifix@163.com>2019-12-04 00:07:32 +0800
commit2e82e2ddd0852b8063a3d6645366f53ee844e273 (patch)
tree41ec10760f2d2c9f1f782a918f48e1287da2a4b4 /src/core/device.h
+init
Diffstat (limited to 'src/core/device.h')
-rw-r--r--src/core/device.h98
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