summaryrefslogtreecommitdiff
path: root/src/core/device.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/device.h')
-rw-r--r--src/core/device.h45
1 files changed, 36 insertions, 9 deletions
diff --git a/src/core/device.h b/src/core/device.h
index b265471..d8daf76 100644
--- a/src/core/device.h
+++ b/src/core/device.h
@@ -8,30 +8,47 @@
#include "shader.h"
#include "rasterizer.h"
#include "vert.h"
+#include "framebuffer.h"
-typedef enum ssr_MatrixMode {
+typedef enum {
MATRIX_MODEL = 0,
MATRIX_VIEW = 1,
MATRIX_PROJECTION = 2,
} ssr_MatrixMode;
-typedef struct ssr_Config {
+typedef struct {
int width, height;
bool dbuffer;/* double buffer? */
Color* target; /* screen target buffer */
} ssr_Config;
-typedef enum ssr_PrimitiveType {
+typedef enum {
PRIMITIVE_POINT,
PRIMITIVE_LINE,
PRIMITIVE_TRIANGLE,
} ssr_PrimitiveType;
-typedef enum ssr_EnableMask {
- ENABLEMASK_BACKFACECULL = 1 ,
- ENABLEMASK_DEPTHTEST = 1 << 1,
+typedef enum {
+ ENABLEMASK_BACKFACECULL = 1,
+ ENABLEMASK_DEPTHTEST = 1 << 1,
+ ENABLEMASK_MULTISAMPLE = 1 << 2,
+ ENABLEMASK_BLEND = 1 << 3,
+ ENABLEMASK_WRITEDEPTH = 1 << 4,
} ssr_EnableMask;
+typedef enum {
+ BLENDFACTOR_ONE,
+ BLENDFACTOR_ZERO,
+ BLENDFACTOR_SRC_COLOR,
+ BLENDFACTOR_ONE_MINUS_SRC_COLOR,
+ BLENDFACTOR_DST_COLOR,
+ BLENDFACTOR_ONE_MINUS_DST_COLOR,
+ BLENDFACTOR_SRC_ALPHA,
+ BLENDFACTOR_ONE_MINUS_SRC_ALPHA,
+ BLENDFACTOR_DST_ALPHA,
+ BLENDFACTOR_ONE_MINUS_DST_ALPHA,
+} ssr_BlendFactor;
+
void ssr_init(ssr_Config* config);
float ssr_getaspect();
@@ -61,6 +78,7 @@ void ssr_ortho(float l, float r, float b, float t, float n, float f);
void ssr_viewport(float l, float r, float b, float t);
+void ssr_getm(Mat4* out);
void ssr_getmv(Mat4* out);
void ssr_getmvp(Mat4* out);
@@ -86,19 +104,28 @@ void ssr_clearcolor(Color color);
void ssr_cleardepth();
void ssr_putpoint(uint screenx, uint screeny, Color color); /*直接修改某个位置的颜色*/
+void ssr_putpoint32(uint screenx, uint screeny, Color32* c32);
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, float depth);
+void ssr_writedepth(uint x, uint y, float depth);
-bool ssr_testdepth(uint x, uint y, uint depth); /*尝试写入深度,如果可绘制返回true,否则discard*/
-bool ssr_testdepthf(uint x, uint y, float depth01);
+void ssr_blend(Color32* src, Color32* dst, Color32* out);
void ssrU_viewport(Vec2* p, Vec2* out);
+void ssrU_blend(ssr_BlendFactor sfactor, ssr_BlendFactor dfactor, Color32* src, Color32* dst, Color* out);
+
+Color32 ssr_getfbocolor(uint x, uint y);
FilterMode ssr_getfiltermode();
WrapMode ssr_getwrapmode();
+void ssr_bindframebuffer(FrameBuffer* fbo);
+void ssr_unbindframebuffer();
+
+void ssr_setblendfunc(ssr_BlendFactor sfactor, ssr_BlendFactor dfactor);
+
#endif \ No newline at end of file