[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