diff options
| author | Andre Weissflog <floooh@gmail.com> | 2019-03-27 13:55:18 +0100 |
|---|---|---|
| committer | Andre Weissflog <floooh@gmail.com> | 2019-03-27 13:55:18 +0100 |
| commit | 5110cf47d87a96ff5792a3c4d7b29a397f51aeb9 (patch) | |
| tree | f303f4a40cae67d9bb10ef749e59c3c8bc48785f /util | |
| parent | f96e0ad1bc9552ba825e0d5ae3811e1e0f609e96 (diff) | |
sokol_gl.h: API tweaks
Diffstat (limited to 'util')
| -rw-r--r-- | util/sokol_gl.h | 93 |
1 files changed, 28 insertions, 65 deletions
diff --git a/util/sokol_gl.h b/util/sokol_gl.h index 24565c65..48cd76bb 100644 --- a/util/sokol_gl.h +++ b/util/sokol_gl.h @@ -104,29 +104,23 @@ typedef struct sgl_desc_t { sg_face_winding face_winding; /* default front face winding is CCW */ } sgl_desc_t; -/* setup/shutdown */ +/* setup/shutdown/misc */ SOKOL_API_DECL void sgl_setup(const sgl_desc_t* desc); SOKOL_API_DECL void sgl_shutdown(void); SOKOL_API_DECL sgl_error_t sgl_error(void); +SOKOL_API_DECL void sgl_defaults(void); +SOKOL_API_DECL float sgl_rad(float deg); +SOKOL_API_DECL float sgl_deg(float rad); /* render state functions (only valid outside begin/end) */ -SOKOL_API_DECL void sgl_default_state(void); -SOKOL_API_DECL void sgl_enable_depth_test(void); -SOKOL_API_DECL void sgl_enable_blend(void); -SOKOL_API_DECL void sgl_enable_cull_face(void); -SOKOL_API_DECL void sgl_enable_texture(void); -SOKOL_API_DECL void sgl_disable_depth_test(void); -SOKOL_API_DECL void sgl_disable_blend(void); -SOKOL_API_DECL void sgl_disable_cull_face(void); -SOKOL_API_DECL void sgl_disable_texture(void); +SOKOL_API_DECL void sgl_state_depth_test(bool enabled); +SOKOL_API_DECL void sgl_state_blend(bool enabled); +SOKOL_API_DECL void sgl_state_cull_face(bool enabled); +SOKOL_API_DECL void sgl_state_texture(bool enabled); SOKOL_API_DECL void sgl_viewport(int x, int y, int w, int h, bool origin_top_left); SOKOL_API_DECL void sgl_scissor_rect(int x, int y, int w, int h, bool origin_top_left); SOKOL_API_DECL void sgl_texture(sg_image img); -/* degree-radian conversion */ -SOKOL_API_DECL float sgl_rad(float deg); -SOKOL_API_DECL float sgl_deg(float rad); - /* these functions only set the internal 'current texcoord / color' (valid inside or outside begin/end) */ SOKOL_API_DECL void sgl_t2f(float u, float v); SOKOL_API_DECL void sgl_c3f(float r, float g, float b); @@ -374,7 +368,6 @@ typedef enum { SGL_NUM_MATRIXMODES } _sgl_matrix_mode_t; - typedef struct { float pos[3]; float uv[2]; @@ -559,16 +552,10 @@ static inline void _sgl_vtx(float x, float y, float z, float u, float v, uint32_ _sgl.vtx_count++; } -/* set render state bit in 16-bit merged state */ -static inline uint16_t _sgl_enable_state(_sgl_state_t state, uint16_t bits) { +/* set or clear render state bit in 16-bit merged state */ +static inline uint16_t _sgl_set_state(_sgl_state_t state, bool enabled, uint16_t bits) { /* first 3 bits are used by the primitive type */ - return bits | (8<<state); -} - -/* clear render state bit in 16-bit merged state */ -static inline uint16_t _sgl_disable_state(_sgl_state_t state, uint16_t bits) { - /* first 3 bits are used by the primitive type */ - return bits & ~(8<<state); + return (bits & ~(8<<state)) | (enabled ? (8<<state) : 0); } /* get render state from merged state bit mask */ @@ -944,7 +931,15 @@ SOKOL_API_IMPL sgl_error_t sgl_error(void) { return _sgl.error; } -SOKOL_API_IMPL void sgl_default_state(void) { +SOKOL_API_IMPL float sgl_rad(float deg) { + return (deg * (float)M_PI) / 180.0f; +} + +SOKOL_API_IMPL float sgl_deg(float rad) { + return (rad * 180.0f) / (float)M_PI; +} + +SOKOL_API_IMPL void sgl_defaults(void) { SOKOL_ASSERT(_SGL_INIT_COOKIE == _sgl.init_cookie); SOKOL_ASSERT(!_sgl.in_begin); _sgl.state_bits = 0; @@ -958,52 +953,28 @@ SOKOL_API_IMPL void sgl_default_state(void) { _sgl.cur_matrix_mode = 0; } -SOKOL_API_IMPL void sgl_enable_depth_test(void) { - SOKOL_ASSERT(_SGL_INIT_COOKIE == _sgl.init_cookie); - SOKOL_ASSERT(!_sgl.in_begin); - _sgl.state_bits = _sgl_enable_state(SGL_STATE_DEPTHTEST, _sgl.state_bits); -} - -SOKOL_API_IMPL void sgl_enable_blend(void) { +SOKOL_API_IMPL void sgl_state_depth_test(bool enabled) { SOKOL_ASSERT(_SGL_INIT_COOKIE == _sgl.init_cookie); SOKOL_ASSERT(!_sgl.in_begin); - _sgl.state_bits = _sgl_enable_state(SGL_STATE_BLEND, _sgl.state_bits); + _sgl.state_bits = _sgl_set_state(SGL_STATE_DEPTHTEST, enabled, _sgl.state_bits); } -SOKOL_API_IMPL void sgl_enable_cull_face(void) { +SOKOL_API_IMPL void sgl_state_blend(bool enabled) { SOKOL_ASSERT(_SGL_INIT_COOKIE == _sgl.init_cookie); SOKOL_ASSERT(!_sgl.in_begin); - _sgl.state_bits = _sgl_enable_state(SGL_STATE_CULLFACE, _sgl.state_bits); + _sgl.state_bits = _sgl_set_state(SGL_STATE_BLEND, enabled, _sgl.state_bits); } -SOKOL_API_IMPL void sgl_enable_texture(void) { +SOKOL_API_IMPL void sgl_state_cull_face(bool enabled) { SOKOL_ASSERT(_SGL_INIT_COOKIE == _sgl.init_cookie); SOKOL_ASSERT(!_sgl.in_begin); - _sgl.state_bits = _sgl_enable_state(SGL_STATE_TEXTURE, _sgl.state_bits); + _sgl.state_bits = _sgl_set_state(SGL_STATE_CULLFACE, enabled,_sgl.state_bits); } -SOKOL_API_IMPL void sgl_disable_depth_test(void) { +SOKOL_API_IMPL void sgl_state_texture(bool enabled) { SOKOL_ASSERT(_SGL_INIT_COOKIE == _sgl.init_cookie); SOKOL_ASSERT(!_sgl.in_begin); - _sgl.state_bits = _sgl_disable_state(SGL_STATE_DEPTHTEST, _sgl.state_bits); -} - -SOKOL_API_IMPL void sgl_disable_blend(void) { - SOKOL_ASSERT(_SGL_INIT_COOKIE == _sgl.init_cookie); - SOKOL_ASSERT(!_sgl.in_begin); - _sgl.state_bits = _sgl_disable_state(SGL_STATE_BLEND, _sgl.state_bits); -} - -SOKOL_API_IMPL void sgl_disable_cull_face(void) { - SOKOL_ASSERT(_SGL_INIT_COOKIE == _sgl.init_cookie); - SOKOL_ASSERT(!_sgl.in_begin); - _sgl.state_bits = _sgl_disable_state(SGL_STATE_CULLFACE, _sgl.state_bits); -} - -SOKOL_API_IMPL void sgl_disable_texture(void) { - SOKOL_ASSERT(_SGL_INIT_COOKIE == _sgl.init_cookie); - SOKOL_ASSERT(!_sgl.in_begin); - _sgl.state_bits = _sgl_disable_state(SGL_STATE_TEXTURE, _sgl.state_bits); + _sgl.state_bits = _sgl_set_state(SGL_STATE_TEXTURE, enabled, _sgl.state_bits); } SOKOL_API_IMPL void sgl_viewport(int x, int y, int w, int h, bool origin_top_left) { @@ -1105,14 +1076,6 @@ SOKOL_API_IMPL void sgl_end(void) { } } -SOKOL_API_IMPL float sgl_rad(float deg) { - return (deg * (float)M_PI) / 180.0f; -} - -SOKOL_API_IMPL float sgl_deg(float rad) { - return (rad * 180.0f) / (float)M_PI; -} - SOKOL_API_IMPL void sgl_t2f(float u, float v) { _sgl.u = u; _sgl.v = v; } |