Commit: ca22d1ec79327bae0bfdf53952a3fb1d0660b884
Author: Clément Foucault
Date:   Sat May 9 02:30:26 2020 +0200
Branches: tmp-eevee-material-refactor
https://developer.blender.org/rBca22d1ec79327bae0bfdf53952a3fb1d0660b884

Cleanup: EEVEE: Move shader related function to eevee_shaders.c

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

M       source/blender/draw/engines/eevee/eevee_materials.c
M       source/blender/draw/engines/eevee/eevee_private.h
M       source/blender/draw/engines/eevee/eevee_shaders.c

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

diff --git a/source/blender/draw/engines/eevee/eevee_materials.c 
b/source/blender/draw/engines/eevee/eevee_materials.c
index 200f40a263b..179b5ee045f 100644
--- a/source/blender/draw/engines/eevee/eevee_materials.c
+++ b/source/blender/draw/engines/eevee/eevee_materials.c
@@ -23,7 +23,6 @@
 #include "DRW_render.h"
 
 #include "BLI_alloca.h"
-#include "BLI_dynstr.h"
 #include "BLI_ghash.h"
 #include "BLI_listbase.h"
 #include "BLI_math_bits.h"
@@ -49,17 +48,6 @@
 
 /* *********** STATIC *********** */
 static struct {
-  char *frag_shader_lib;
-  char *vert_shader_str;
-  char *vert_shadow_shader_str;
-  char *vert_background_shader_str;
-  char *vert_volume_shader_str;
-  char *geom_volume_shader_str;
-  char *volume_shader_lib;
-
-  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. */
   struct GPUTexture *util_tex;
@@ -119,98 +107,6 @@ struct GPUTexture *EEVEE_materials_get_util_tex(void)
   return e_data.util_tex;
 }
 
-static char *eevee_get_defines(int options)
-{
-  char *str = NULL;
-
-  DynStr *ds = BLI_dynstr_new();
-  BLI_dynstr_append(ds, SHADER_DEFINES);
-
-  if ((options & VAR_WORLD_BACKGROUND) != 0) {
-    BLI_dynstr_append(ds, "#define WORLD_BACKGROUND\n");
-  }
-  if ((options & VAR_MAT_VOLUME) != 0) {
-    BLI_dynstr_append(ds, "#define VOLUMETRICS\n");
-  }
-  if ((options & VAR_MAT_MESH) != 0) {
-    BLI_dynstr_append(ds, "#define MESH_SHADER\n");
-  }
-  if ((options & VAR_MAT_DEPTH) != 0) {
-    BLI_dynstr_append(ds, "#define DEPTH_SHADER\n");
-  }
-  if ((options & VAR_MAT_HAIR) != 0) {
-    BLI_dynstr_append(ds, "#define HAIR_SHADER\n");
-  }
-  if ((options & (VAR_MAT_PROBE | VAR_WORLD_PROBE)) != 0) {
-    BLI_dynstr_append(ds, "#define PROBE_CAPTURE\n");
-  }
-  if ((options & VAR_MAT_HASH) != 0) {
-    BLI_dynstr_append(ds, "#define USE_ALPHA_HASH\n");
-  }
-  if ((options & VAR_MAT_BLEND) != 0) {
-    BLI_dynstr_append(ds, "#define USE_ALPHA_BLEND\n");
-  }
-  if ((options & VAR_MAT_REFRACT) != 0) {
-    BLI_dynstr_append(ds, "#define USE_REFRACTION\n");
-  }
-  if ((options & VAR_MAT_LOOKDEV) != 0) {
-    BLI_dynstr_append(ds, "#define LOOKDEV\n");
-  }
-  if ((options & VAR_MAT_HOLDOUT) != 0) {
-    BLI_dynstr_append(ds, "#define HOLDOUT\n");
-  }
-
-  str = BLI_dynstr_get_cstring(ds);
-  BLI_dynstr_free(ds);
-
-  return str;
-}
-
-static char *eevee_get_vert(int options)
-{
-  char *str = NULL;
-
-  if ((options & VAR_MAT_VOLUME) != 0) {
-    str = BLI_strdup(e_data.vert_volume_shader_str);
-  }
-  else if ((options & (VAR_WORLD_PROBE | VAR_WORLD_BACKGROUND)) != 0) {
-    str = BLI_strdup(e_data.vert_background_shader_str);
-  }
-  else {
-    str = BLI_strdup(e_data.vert_shader_str);
-  }
-
-  return str;
-}
-
-static char *eevee_get_geom(int options)
-{
-  char *str = NULL;
-
-  if ((options & VAR_MAT_VOLUME) != 0) {
-    str = BLI_strdup(e_data.geom_volume_shader_str);
-  }
-
-  return str;
-}
-
-static char *eevee_get_frag(int options)
-{
-  char *str = NULL;
-
-  if ((options & VAR_MAT_VOLUME) != 0) {
-    str = BLI_strdup(e_data.volume_shader_lib);
-  }
-  else if ((options & VAR_MAT_DEPTH) != 0) {
-    str = BLI_string_joinN(e_data.frag_shader_lib, datatoc_prepass_frag_glsl);
-  }
-  else {
-    str = BLI_strdup(e_data.frag_shader_lib);
-  }
-
-  return str;
-}
-
 /* Get the default render pass ubo. This is a ubo that enables all bsdf render 
passes. */
 struct GPUUniformBuffer 
*EEVEE_material_default_render_pass_ubo_get(EEVEE_ViewLayerData *sldata)
 {
@@ -348,8 +244,6 @@ void EEVEE_update_noise(EEVEE_PassList *psl, 
EEVEE_FramebufferList *fbl, const d
   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. */
   GPU_framebuffer_bind(fbl->update_noise_fb);
   DRW_draw_pass(psl->update_noise_pass);
 }
@@ -402,70 +296,8 @@ void EEVEE_materials_init(EEVEE_ViewLayerData *sldata,
   const DRWContextState *draw_ctx = DRW_context_state_get();
   EEVEE_PrivateData *g_data = stl->g_data;
 
-  if (!e_data.frag_shader_lib) {
-    /* Shaders */
-    e_data.frag_shader_lib = BLI_string_joinN(datatoc_common_view_lib_glsl,
-                                              datatoc_common_uniforms_lib_glsl,
-                                              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_cubemap_lib_glsl,
-                                              datatoc_irradiance_lib_glsl,
-                                              datatoc_lightprobe_lib_glsl,
-                                              datatoc_ltc_lib_glsl,
-                                              datatoc_lights_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_lit_surface_frag_glsl,
-                                              datatoc_lit_surface_frag_glsl,
-                                              datatoc_lit_surface_frag_glsl,
-                                              datatoc_volumetric_lib_glsl);
-
-    e_data.volume_shader_lib = BLI_string_joinN(datatoc_common_view_lib_glsl,
-                                                
datatoc_common_uniforms_lib_glsl,
-                                                datatoc_bsdf_common_lib_glsl,
-                                                
datatoc_ambient_occlusion_lib_glsl,
-                                                datatoc_octahedron_lib_glsl,
-                                                datatoc_cubemap_lib_glsl,
-                                                datatoc_irradiance_lib_glsl,
-                                                datatoc_lightprobe_lib_glsl,
-                                                datatoc_ltc_lib_glsl,
-                                                datatoc_lights_lib_glsl,
-                                                datatoc_volumetric_lib_glsl,
-                                                datatoc_volumetric_frag_glsl);
-
-    e_data.vert_shader_str = BLI_string_joinN(
-        datatoc_common_view_lib_glsl, datatoc_common_hair_lib_glsl, 
datatoc_lit_surface_vert_glsl);
-
-    e_data.vert_shadow_shader_str = BLI_string_joinN(
-        datatoc_common_view_lib_glsl, datatoc_common_hair_lib_glsl, 
datatoc_shadow_vert_glsl);
-
-    e_data.vert_background_shader_str = 
BLI_string_joinN(datatoc_common_view_lib_glsl,
-                                                         
datatoc_background_vert_glsl);
-
-    e_data.vert_volume_shader_str = 
BLI_string_joinN(datatoc_common_view_lib_glsl,
-                                                     
datatoc_volumetric_vert_glsl);
-
-    e_data.geom_volume_shader_str = 
BLI_string_joinN(datatoc_common_view_lib_glsl,
-                                                     
datatoc_volumetric_geom_glsl);
-
-    e_data.default_background = 
DRW_shader_create_with_lib(datatoc_background_vert_glsl,
-                                                           NULL,
-                                                           
datatoc_default_world_frag_glsl,
-                                                           
datatoc_common_view_lib_glsl,
-                                                           NULL);
-
-    e_data.update_noise_sh = 
DRW_shader_create_fullscreen(datatoc_update_noise_frag_glsl, NULL);
+  if (!e_data.util_tex) {
+    EEVEE_shaders_material_shaders_init();
 
     eevee_init_util_texture();
     eevee_init_noise_texture();
@@ -544,95 +376,6 @@ void EEVEE_materials_init(EEVEE_ViewLayerData *sldata,
   }
 }
 
-static struct GPUMaterial *eevee_material_get_ex(
-    struct Scene *scene, Material *ma, World *wo, int options, bool deferred)
-{
-  BLI_assert(ma || wo);
-  const bool is_volume = (options & VAR_MAT_VOLUME) != 0;
-  const bool is_default = (options & VAR_DEFAULT) != 0;
-  const void *engine = &DRW_engine_viewport_eevee_type;
-
-  GPUMaterial *mat = NULL;
-
-  if (ma) {
-    mat = DRW_shader_find_from_material(ma, engine, options, deferred);
-  }
-  else {
-    mat = DRW_shader_find_from_world(wo, engine, options, deferred);
-  }
-
-  if (mat) {
-    return mat;
-  }
-
-  char *defines = eevee_get_defines(options);
-  char *vert = eevee_get_vert(options);
-  char *geom = eevee_get_geom(options);
-  char *frag = eevee_get_frag(options);
-
-  if (ma) {
-    bNodeTree *ntree = !is_default ? ma->nodetree : 
EEVEE_shader_default_surface_nodetree(ma);
-    mat = DRW_shader_create_from_material(
-        scene, ma, ntree, engine, options, is_volume, vert, geom, frag, 
defines, deferred);
-  }
-  else {
-    bNodeTree *ntree = !is_default ? wo->nodetree : 
EEVEE_shader_default_world_nodetree(wo);
-    mat = DRW_shader_create_from_world(
-        scene, wo, ntree, engine, options, is_volume, vert, geom, frag, 
defines, deferred);
-  }
-
-  MEM_SAFE_FREE(defines);
-  MEM_SAFE_FREE(vert);
-  MEM_SAFE_FREE(geom);
-  MEM_SAFE_FREE(frag);
-
-  return mat;
-}
-
-/* Note: Compilation is not deferred. */
-static struct GPUMaterial *EEVEE_material_default_get(struct Scene *s

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to