[Bf-blender-cvs] [1e8139d9126] hair_guides: Merge branch 'blender2.8' into hair_guides

Lukas Tönne noreply at git.blender.org
Sun Jan 21 13:00:43 CET 2018


Commit: 1e8139d91264b471f40b60b3dbcb28e9f7ba864b
Author: Lukas Tönne
Date:   Sun Jan 21 12:00:35 2018 +0000
Branches: hair_guides
https://developer.blender.org/rB1e8139d91264b471f40b60b3dbcb28e9f7ba864b

Merge branch 'blender2.8' into hair_guides

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



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

diff --cc source/blender/draw/CMakeLists.txt
index c14ae2d4129,7737e0b18db..426b74e7d31
--- a/source/blender/draw/CMakeLists.txt
+++ b/source/blender/draw/CMakeLists.txt
@@@ -64,7 -62,7 +64,8 @@@ set(SR
  	intern/draw_cache_impl_metaball.c
  	intern/draw_cache_impl_particles.c
  	intern/draw_common.c
 +	intern/draw_hair.c
+ 	intern/draw_instance_data.c
  	intern/draw_manager.c
  	intern/draw_manager_text.c
  	intern/draw_manager_profiling.c
@@@ -207,9 -205,8 +210,10 @@@ data_to_c_simple(modes/shaders/edit_mes
  data_to_c_simple(modes/shaders/edit_mesh_overlay_facefill_vert.glsl SRC)
  data_to_c_simple(modes/shaders/edit_mesh_overlay_facefill_frag.glsl SRC)
  data_to_c_simple(modes/shaders/edit_curve_overlay_frag.glsl SRC)
+ data_to_c_simple(modes/shaders/edit_curve_overlay_handle_geom.glsl SRC)
  data_to_c_simple(modes/shaders/edit_curve_overlay_loosevert_vert.glsl SRC)
 +data_to_c_simple(modes/shaders/edit_groom_overlay_frag.glsl SRC)
 +data_to_c_simple(modes/shaders/edit_groom_overlay_loosevert_vert.glsl SRC)
  data_to_c_simple(modes/shaders/edit_lattice_overlay_frag.glsl SRC)
  data_to_c_simple(modes/shaders/edit_lattice_overlay_loosevert_vert.glsl SRC)
  data_to_c_simple(modes/shaders/edit_normals_vert.glsl SRC)
diff --cc source/blender/draw/engines/eevee/eevee_materials.c
index dc19ced7c47,88b68df18b9..e2d47ab4e98
--- a/source/blender/draw/engines/eevee/eevee_materials.c
+++ b/source/blender/draw/engines/eevee/eevee_materials.c
@@@ -28,9 -28,9 +28,11 @@@
  #include "BLI_dynstr.h"
  #include "BLI_ghash.h"
  #include "BLI_alloca.h"
+ #include "BLI_rand.h"
+ #include "BLI_string_utils.h"
  
 +#include "BKE_DerivedMesh.h"
 +#include "BKE_groom.h"
  #include "BKE_particle.h"
  #include "BKE_paint.h"
  #include "BKE_pbvh.h"
@@@ -55,11 -52,9 +57,11 @@@ static struct 
  
  	struct GPUShader *default_prepass_sh;
  	struct GPUShader *default_prepass_clip_sh;
 +	struct GPUShader *default_prepass_hair_fiber_sh;
 +	struct GPUShader *default_prepass_hair_fiber_clip_sh;
  	struct GPUShader *default_lit[VAR_MAT_MAX];
- 
  	struct GPUShader *default_background;
+ 	struct GPUShader *update_noise_sh;
  
  	/* 64*64 array texture containing all LUTs and other utilitarian arrays.
  	 * Packing enables us to same precious textures slots. */
@@@ -429,23 -414,9 +425,13 @@@ static void add_standard_uniforms
  
  static void create_default_shader(int options)
  {
- 	char *vert_str = NULL;
- 	{
- 		DynStr *ds_vert = BLI_dynstr_new();
- 		BLI_dynstr_append(ds_vert, datatoc_hair_lib_glsl);
- 		BLI_dynstr_append(ds_vert, datatoc_lit_surface_vert_glsl);
- 		vert_str = BLI_dynstr_get_cstring(ds_vert);
- 		BLI_dynstr_free(ds_vert);
- 	}
++	char *vert_str = BLI_string_joinN(
++	        datatoc_hair_lib_glsl,
++	        datatoc_lit_surface_vert_glsl);
 +
- 	char *frag_str = NULL;
- 	{
- 		DynStr *ds_frag = BLI_dynstr_new();
- 		BLI_dynstr_append(ds_frag, e_data.frag_shader_lib);
- 		BLI_dynstr_append(ds_frag, datatoc_default_frag_glsl);
- 		frag_str = BLI_dynstr_get_cstring(ds_frag);
- 		BLI_dynstr_free(ds_frag);
- 	}
+ 	char *frag_str = BLI_string_joinN(
+ 	        e_data.frag_shader_lib,
+ 	        datatoc_default_frag_glsl);
  
  	char *defines = eevee_get_defines(options);
  
@@@ -513,65 -477,64 +493,66 @@@ static void eevee_init_util_texture(voi
  	MEM_freeN(texels);
  }
  
- void EEVEE_materials_init(EEVEE_StorageList *stl)
+ void EEVEE_update_noise(EEVEE_PassList *psl, EEVEE_FramebufferList *fbl, double offsets[3])
+ {
+ 	e_data.noise_offsets[0] = offsets[0];
+ 	e_data.noise_offsets[1] = offsets[1];
+ 	e_data.noise_offsets[2] = offsets[2];
+ 
+ 	/* Attach & detach because we don't currently support multiple FB per texture,
+ 	 * and this would be the case for multiple viewport. */
+ 	DRW_framebuffer_texture_layer_attach(fbl->update_noise_fb, e_data.util_tex, 0, 2, 0);
+ 	DRW_framebuffer_bind(fbl->update_noise_fb);
+ 	DRW_draw_pass(psl->update_noise_pass);
+ 	DRW_framebuffer_texture_detach(e_data.util_tex);
+ }
+ 
+ void EEVEE_materials_init(EEVEE_StorageList *stl, EEVEE_FramebufferList *fbl)
  {
  	if (!e_data.frag_shader_lib) {
 -		char *frag_str = NULL;
 -
  		/* Shaders */
- 		{
- 			DynStr *ds_frag = BLI_dynstr_new();
- 			BLI_dynstr_append(ds_frag, datatoc_bsdf_common_lib_glsl);
- 		BLI_dynstr_append(ds_frag, datatoc_bsdf_sampling_lib_glsl);
- 			BLI_dynstr_append(ds_frag, datatoc_ambient_occlusion_lib_glsl);
- 		BLI_dynstr_append(ds_frag, datatoc_raytrace_lib_glsl);
- 		BLI_dynstr_append(ds_frag, datatoc_ssr_lib_glsl);
- 			BLI_dynstr_append(ds_frag, datatoc_octahedron_lib_glsl);
- 			BLI_dynstr_append(ds_frag, datatoc_irradiance_lib_glsl);
- 			BLI_dynstr_append(ds_frag, datatoc_lightprobe_lib_glsl);
- 			BLI_dynstr_append(ds_frag, datatoc_ltc_lib_glsl);
- 			BLI_dynstr_append(ds_frag, datatoc_bsdf_direct_lib_glsl);
- 			BLI_dynstr_append(ds_frag, datatoc_lamps_lib_glsl);
- 		for (int i = 0; i < 7; ++i) {
- 			/* Add one for each Closure */
- 			BLI_dynstr_append(ds_frag, datatoc_lit_surface_frag_glsl);
- 		}
- 		BLI_dynstr_append(ds_frag, datatoc_volumetric_lib_glsl);
- 			e_data.frag_shader_lib = BLI_dynstr_get_cstring(ds_frag);
- 			BLI_dynstr_free(ds_frag);
- 		}
+ 		e_data.frag_shader_lib = BLI_string_joinN(
+ 		        datatoc_bsdf_common_lib_glsl,
+ 		        datatoc_bsdf_sampling_lib_glsl,
+ 		        datatoc_ambient_occlusion_lib_glsl,
+ 		        datatoc_raytrace_lib_glsl,
+ 		        datatoc_ssr_lib_glsl,
+ 		        datatoc_octahedron_lib_glsl,
+ 		        datatoc_irradiance_lib_glsl,
+ 		        datatoc_lightprobe_lib_glsl,
+ 		        datatoc_ltc_lib_glsl,
+ 		        datatoc_bsdf_direct_lib_glsl,
+ 		        datatoc_lamps_lib_glsl,
+ 		        /* Add one for each Closure */
+ 		        datatoc_lit_surface_frag_glsl,
+ 		        datatoc_lit_surface_frag_glsl,
+ 		        datatoc_lit_surface_frag_glsl,
+ 		        datatoc_lit_surface_frag_glsl,
+ 		        datatoc_lit_surface_frag_glsl,
+ 		        datatoc_lit_surface_frag_glsl,
+ 		        datatoc_lit_surface_frag_glsl,
+ 		        datatoc_lit_surface_frag_glsl,
+ 		        datatoc_volumetric_lib_glsl);
 -
 +		
- 		{
- 			DynStr *ds_frag = BLI_dynstr_new();
- 			BLI_dynstr_append(ds_frag, datatoc_bsdf_common_lib_glsl);
- 			BLI_dynstr_append(ds_frag, datatoc_ambient_occlusion_lib_glsl);
- 			BLI_dynstr_append(ds_frag, datatoc_octahedron_lib_glsl);
- 			BLI_dynstr_append(ds_frag, datatoc_irradiance_lib_glsl);
- 			BLI_dynstr_append(ds_frag, datatoc_lightprobe_lib_glsl);
- 			BLI_dynstr_append(ds_frag, datatoc_ltc_lib_glsl);
- 			BLI_dynstr_append(ds_frag, datatoc_bsdf_direct_lib_glsl);
- 			BLI_dynstr_append(ds_frag, datatoc_lamps_lib_glsl);
- 		BLI_dynstr_append(ds_frag, datatoc_volumetric_lib_glsl);
- 			BLI_dynstr_append(ds_frag, datatoc_volumetric_frag_glsl);
- 			e_data.volume_shader_lib = BLI_dynstr_get_cstring(ds_frag);
- 			BLI_dynstr_free(ds_frag);
- 		}
- 
- 		char *hair_fiber_vert_str = NULL;
- 		{
- 			DynStr *ds_vert = BLI_dynstr_new();
- 			BLI_dynstr_append(ds_vert, datatoc_hair_lib_glsl);
- 			BLI_dynstr_append(ds_vert, datatoc_prepass_vert_glsl);
- 			hair_fiber_vert_str = BLI_dynstr_get_cstring(ds_vert);
- 			BLI_dynstr_free(ds_vert);
- 		}
- 
- 		char *frag_str = NULL;
- 		{
- 			DynStr *ds_frag = BLI_dynstr_new();
- 			BLI_dynstr_append(ds_frag, e_data.frag_shader_lib);
- 			BLI_dynstr_append(ds_frag, datatoc_default_frag_glsl);
- 			frag_str = BLI_dynstr_get_cstring(ds_frag);
- 			BLI_dynstr_free(ds_frag);
- 		}
+ 		e_data.volume_shader_lib = BLI_string_joinN(
+ 		        datatoc_bsdf_common_lib_glsl,
+ 		        datatoc_ambient_occlusion_lib_glsl,
+ 		        datatoc_octahedron_lib_glsl,
+ 		        datatoc_irradiance_lib_glsl,
+ 		        datatoc_lightprobe_lib_glsl,
+ 		        datatoc_ltc_lib_glsl,
+ 		        datatoc_bsdf_direct_lib_glsl,
+ 		        datatoc_lamps_lib_glsl,
+ 		        datatoc_volumetric_lib_glsl,
+ 		        datatoc_volumetric_frag_glsl);
+ 
 -		frag_str = BLI_string_joinN(
++		char *hair_fiber_vert_str = BLI_string_joinN(
++		        datatoc_hair_lib_glsl,
++		        datatoc_prepass_vert_glsl);
++
++		char *frag_str = BLI_string_joinN(
+ 		        e_data.frag_shader_lib,
+ 		        datatoc_default_frag_glsl);
  
  		e_data.default_background = DRW_shader_create(
  		        datatoc_background_vert_glsl, NULL, datatoc_default_world_frag_glsl,
@@@ -585,21 -548,26 +566,38 @@@
  		        datatoc_prepass_vert_glsl, NULL, datatoc_prepass_frag_glsl,
  		        "#define CLIP_PLANES\n");
  
 +		e_data.default_prepass_hair_fiber_sh = DRW_shader_create(
 +		        hair_fiber_vert_str, NULL, datatoc_prepass_frag_glsl, DRW_hair_shader_defines());
 +
 +		{
 +			char defines[256];
 +			BLI_snprintf(defines, sizeof(defines), "#define CLIP_PLANES\n%s",
 +			             DRW_hair_shader_defines());
 +			e_data.default_prepass_hair_fiber_clip_sh = DRW_shader_create(
 +			        hair_fiber_vert_str, NULL, datatoc_prepass_frag_glsl, defines);
 +		}
 +
  		MEM_freeN(frag_str);
 +		MEM_freeN(hair_fiber_vert_str);
  
- 		EEVEE_update_util_texture(0.0f);
+ 		e_data.update_noise_sh = DRW_shader_create_fullscreen(
+ 		        datatoc_update_noise_frag_glsl, NULL);
+ 
+ 		eevee_init_util_texture();
+ 		eevee_init_noise_texture();
+ 	}
+ 
+ 	/* Alpha hash scale: Non-flickering size if we are not refining the render. */
+ 	if (!DRW_state_is_image_render() &&
+ 		(((stl->effects->enabled_effects & EFFECT_TAA) == 0) ||
+ 		 (stl->effects->taa_current_sample == 1)))
+ 	{
+ 		e_data.alpha_hash_offset = 0.0f;
+ 	}
+ 	else {
+ 		double r;
+ 		BLI_halton_1D(5, 0.0, stl->effects->taa_current_sample, &r);
+ 		e_data.alpha_hash_offset = (float)r;
  	}
  
  	{
@@@ -1613,10 -1475,10 +1631,12 @@@ void EEVEE_materials_free(void
  	MEM_SAFE_FREE(e_data.volume_shader_lib);
  	DRW_SHADER_FREE_SAFE(e_data.default_prepass_sh);
  	DRW_SHADER_FREE_SAFE(e_data.default_prepass_clip_sh);
 +	DRW_SHADER_FREE_SAFE(e_data.default_prepass_hair_fiber_sh);
 +	DRW_SHADER_FREE_SAFE(e_data.default_prepass_hair_fiber_clip_sh);
  	DRW_SHADER_FREE_SAFE(e_data.default_background);
+ 	DRW_SHADER_FREE_SAFE(e_data.update_noise_sh);
  	DRW_TEXTURE_FREE_SAFE(e_data.util_tex);
+ 	DRW_TEXTURE_FREE_SAFE(e_data.noise_tex);
  }
  
  void EEVEE_draw_default_passes(EEVEE_PassList *psl)
diff --cc source/blender/draw/engines/ee

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list