Commit: 9a040fa3d4af2c2d4f51eafd3ce88c1f60ffc3a9 Author: Clément Foucault Date: Fri Jun 16 13:27:09 2017 +0200 Branches: blender2.8 https://developer.blender.org/rB9a040fa3d4af2c2d4f51eafd3ce88c1f60ffc3a9
DrwManager: Add the possibility to invert backfacing. This is done in order to support planar reflection rendering. =================================================================== M source/blender/draw/intern/DRW_render.h M source/blender/draw/intern/draw_manager.c =================================================================== diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h index 3c368944320..e49a6ab7926 100644 --- a/source/blender/draw/intern/DRW_render.h +++ b/source/blender/draw/intern/DRW_render.h @@ -363,6 +363,7 @@ void DRW_draw_region_engine_info(void); void DRW_state_reset_ex(DRWState state); void DRW_state_reset(void); +void DRW_state_invert_facing(void); /* Selection */ void DRW_select_load_id(unsigned int id); diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c index 9483a55ec40..90a3aaa84d5 100644 --- a/source/blender/draw/intern/draw_manager.c +++ b/source/blender/draw/intern/draw_manager.c @@ -290,6 +290,8 @@ static struct DRWGlobalState { float screenvecs[2][3]; float pixsize; + GLenum backface, frontface; + struct { unsigned int is_select : 1; unsigned int is_depth : 1; @@ -1792,7 +1794,7 @@ static void draw_shgroup(DRWShadingGroup *shgroup, DRWState pass_state) /* Negative scale objects */ if (neg_scale) { - glFrontFace(GL_CW); + glFrontFace(DST.backface); } GPU_SELECT_LOAD_IF_PICKSEL(call); @@ -1809,7 +1811,7 @@ static void draw_shgroup(DRWShadingGroup *shgroup, DRWState pass_state) /* Reset state */ if (neg_scale) { - glFrontFace(GL_CCW); + glFrontFace(DST.frontface); } } } @@ -1901,6 +1903,13 @@ void DRW_state_reset(void) DRW_state_reset_ex(DRW_STATE_DEFAULT); } +/* NOTE : Make sure to reset after use! */ +void DRW_state_invert_facing(void) +{ + SWAP(GLenum, DST.backface, DST.frontface); + glFrontFace(DST.frontface); +} + /** \} */ @@ -2249,6 +2258,11 @@ static void DRW_viewport_var_init(void) /* Refresh DST.pixelsize */ DST.pixsize = rv3d->pixsize; + + /* Reset facing */ + DST.frontface = GL_CCW; + DST.backface = GL_CW; + glFrontFace(DST.frontface); } void DRW_viewport_matrix_get(float mat[4][4], DRWViewportMatrixType type) _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org https://lists.blender.org/mailman/listinfo/bf-blender-cvs