[Bf-blender-cvs] [2f3e890b94e] blender2.8: DRW: Fix crash caused by hair transform feedback

Clément Foucault noreply at git.blender.org
Wed Jun 13 22:25:41 CEST 2018


Commit: 2f3e890b94eb905b13243af955da2baeae9a1f5c
Author: Clément Foucault
Date:   Wed Jun 13 22:20:48 2018 +0200
Branches: blender2.8
https://developer.blender.org/rB2f3e890b94eb905b13243af955da2baeae9a1f5c

DRW: Fix crash caused by hair transform feedback

Seem to be cause by the lack of proper FBO bound.

===================================================================

M	source/blender/draw/engines/eevee/eevee_render.c
M	source/blender/draw/intern/draw_manager.c

===================================================================

diff --git a/source/blender/draw/engines/eevee/eevee_render.c b/source/blender/draw/engines/eevee/eevee_render.c
index 5d31488d75f..d24551976f9 100644
--- a/source/blender/draw/engines/eevee/eevee_render.c
+++ b/source/blender/draw/engines/eevee/eevee_render.c
@@ -423,6 +423,8 @@ void EEVEE_render_draw(EEVEE_Data *vedata, RenderEngine *engine, RenderLayer *rl
 	DRW_render_instance_buffer_finish();
 
 	/* Need to be called after DRW_render_instance_buffer_finish() */
+	/* Also we weed to have a correct fbo bound for DRW_hair_update */
+	GPU_framebuffer_bind(fbl->main_fb);
 	DRW_hair_update();
 
 	if ((view_layer->passflag & (SCE_PASS_SUBSURFACE_COLOR |
diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c
index ee876275d9e..4991f325e13 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -1311,13 +1311,14 @@ void DRW_draw_render_loop_ex(
 	}
 
 	DRW_stats_begin();
-	DRW_hair_update();
 
 	GPU_framebuffer_bind(DST.default_framebuffer);
 
 	/* Start Drawing */
 	DRW_state_reset();
 
+	DRW_hair_update();
+
 	drw_engines_draw_background();
 
 	/* WIP, single image drawn over the camera view (replace) */
@@ -1737,8 +1738,6 @@ void DRW_draw_select_loop(
 		DRW_render_instance_buffer_finish();
 	}
 
-	DRW_hair_update();
-
 	/* Setup framebuffer */
 	draw_select_framebuffer_setup(rect);
 	GPU_framebuffer_bind(g_select_buffer.framebuffer);
@@ -1748,6 +1747,8 @@ void DRW_draw_select_loop(
 	DRW_state_reset();
 	DRW_draw_callbacks_pre_scene();
 
+	DRW_hair_update();
+
 	DRW_state_lock(
 	        DRW_STATE_WRITE_DEPTH |
 	        DRW_STATE_DEPTH_ALWAYS |
@@ -1897,10 +1898,11 @@ void DRW_draw_depth_loop(
 		DRW_render_instance_buffer_finish();
 	}
 
-	DRW_hair_update();
-
 	/* Start Drawing */
 	DRW_state_reset();
+
+	DRW_hair_update();
+
 	DRW_draw_callbacks_pre_scene();
 	drw_engines_draw_scene();
 	DRW_draw_callbacks_post_scene();



More information about the Bf-blender-cvs mailing list