diff options
Diffstat (limited to 'src/core/device.h')
-rw-r--r-- | src/core/device.h | 45 |
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 |