[Bf-blender-cvs] [9a040fa3d4a] blender2.8: DrwManager: Add the possibility to invert backfacing.
Clément Foucault
noreply at git.blender.org
Mon Jun 19 10:48:03 CEST 2017
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)
More information about the Bf-blender-cvs
mailing list