[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