[Bf-blender-cvs] [98f9a6667bd] tmp-eevee-glsl-cleanup: EEVEE: Rename default_world_frag.glsl to lookdev_world_frag.glsl

Clément Foucault noreply at git.blender.org
Mon Jul 13 15:44:11 CEST 2020


Commit: 98f9a6667bd1b5e45fef752e0140d9e35847fd69
Author: Clément Foucault
Date:   Mon Jul 13 14:54:21 2020 +0200
Branches: tmp-eevee-glsl-cleanup
https://developer.blender.org/rB98f9a6667bd1b5e45fef752e0140d9e35847fd69

EEVEE: Rename default_world_frag.glsl to lookdev_world_frag.glsl

Also include cleanups of the world rendering logic.

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

M	source/blender/draw/CMakeLists.txt
M	source/blender/draw/engines/eevee/eevee_lightprobes.c
M	source/blender/draw/engines/eevee/eevee_lookdev.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
R062	source/blender/draw/engines/eevee/shaders/default_world_frag.glsl	source/blender/draw/engines/eevee/shaders/lookdev_world_frag.glsl

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

diff --git a/source/blender/draw/CMakeLists.txt b/source/blender/draw/CMakeLists.txt
index b5b15d9ff5f..e79f2446588 100644
--- a/source/blender/draw/CMakeLists.txt
+++ b/source/blender/draw/CMakeLists.txt
@@ -186,7 +186,6 @@ set(LIB
 )
 
 data_to_c_simple(engines/eevee/shaders/ambient_occlusion_lib.glsl SRC)
-data_to_c_simple(engines/eevee/shaders/default_world_frag.glsl SRC)
 data_to_c_simple(engines/eevee/shaders/background_vert.glsl SRC)
 data_to_c_simple(engines/eevee/shaders/closure_lib.glsl SRC)
 data_to_c_simple(engines/eevee/shaders/common_uniforms_lib.glsl SRC)
@@ -205,6 +204,7 @@ data_to_c_simple(engines/eevee/shaders/lightprobe_grid_display_vert.glsl SRC)
 data_to_c_simple(engines/eevee/shaders/lightprobe_grid_fill_frag.glsl SRC)
 data_to_c_simple(engines/eevee/shaders/lightprobe_planar_display_frag.glsl SRC)
 data_to_c_simple(engines/eevee/shaders/lightprobe_planar_display_vert.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/lookdev_world_frag.glsl SRC)
 data_to_c_simple(engines/eevee/shaders/closure_lit_lib.glsl SRC)
 data_to_c_simple(engines/eevee/shaders/effect_bloom_frag.glsl SRC)
 data_to_c_simple(engines/eevee/shaders/effect_dof_vert.glsl SRC)
diff --git a/source/blender/draw/engines/eevee/eevee_lightprobes.c b/source/blender/draw/engines/eevee/eevee_lightprobes.c
index 72187dc29eb..d8c414fe636 100644
--- a/source/blender/draw/engines/eevee/eevee_lightprobes.c
+++ b/source/blender/draw/engines/eevee/eevee_lightprobes.c
@@ -326,38 +326,28 @@ void EEVEE_lightprobes_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedat
   {
     DRW_PASS_CREATE(psl->probe_background, DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_EQUAL);
 
-    struct GPUBatch *geom = DRW_cache_fullscreen_quad_get();
     DRWShadingGroup *grp = NULL;
+    EEVEE_lookdev_cache_init(vedata, sldata, psl->probe_background, pinfo, &grp);
 
-    Scene *scene = draw_ctx->scene;
-    World *wo = scene->world;
-
-    /* LookDev */
-    EEVEE_lookdev_cache_init(vedata, sldata, &grp, psl->probe_background, wo, pinfo);
+    if (grp == NULL) {
+      Scene *scene = draw_ctx->scene;
+      World *world = (scene->world) ? scene->world : EEVEE_world_default_get();
 
-    if (!grp && wo) {
-      struct GPUMaterial *gpumat = EEVEE_material_get(vedata, scene, NULL, wo, VAR_WORLD_PROBE);
+      int options = VAR_WORLD_BACKGROUND;
+      struct GPUMaterial *gpumat = EEVEE_material_get(vedata, scene, NULL, world, options);
 
       grp = DRW_shgroup_material_create(gpumat, psl->probe_background);
       DRW_shgroup_uniform_float_copy(grp, "backgroundAlpha", 1.0f);
-      /* TODO (fclem): remove those (need to clean the GLSL files). */
-      DRW_shgroup_uniform_block(grp, "common_block", sldata->common_ubo);
-      DRW_shgroup_uniform_block(grp, "grid_block", sldata->grid_ubo);
-      DRW_shgroup_uniform_block(grp, "probe_block", sldata->probe_ubo);
-      DRW_shgroup_uniform_block(grp, "planar_block", sldata->planar_ubo);
-      DRW_shgroup_uniform_block(grp, "light_block", sldata->light_ubo);
-      DRW_shgroup_uniform_block(grp, "shadow_block", sldata->shadow_ubo);
-      DRW_shgroup_uniform_block(grp, "renderpass_block", sldata->renderpass_ubo.combined);
-      DRW_shgroup_call(grp, geom, NULL);
     }
 
-    /* Fallback if shader fails or if not using nodetree. */
-    if (grp == NULL) {
-      grp = DRW_shgroup_create(EEVEE_shaders_probe_default_sh_get(), psl->probe_background);
-      DRW_shgroup_uniform_vec3(grp, "color", G_draw.block.colorBackground, 1);
-      DRW_shgroup_uniform_float_copy(grp, "backgroundAlpha", 1.0f);
-      DRW_shgroup_call(grp, geom, NULL);
-    }
+    DRW_shgroup_uniform_block(grp, "common_block", sldata->common_ubo);
+    DRW_shgroup_uniform_block(grp, "grid_block", sldata->grid_ubo);
+    DRW_shgroup_uniform_block(grp, "probe_block", sldata->probe_ubo);
+    DRW_shgroup_uniform_block(grp, "planar_block", sldata->planar_ubo);
+    DRW_shgroup_uniform_block(grp, "light_block", sldata->light_ubo);
+    DRW_shgroup_uniform_block(grp, "shadow_block", sldata->shadow_ubo);
+    DRW_shgroup_uniform_block_ref(grp, "renderpass_block", &stl->g_data->renderpass_ubo);
+    DRW_shgroup_call(grp, DRW_cache_fullscreen_quad_get(), NULL);
   }
 
   if (DRW_state_draw_support()) {
diff --git a/source/blender/draw/engines/eevee/eevee_lookdev.c b/source/blender/draw/engines/eevee/eevee_lookdev.c
index 105651d20c8..7a4e2eb1cb4 100644
--- a/source/blender/draw/engines/eevee/eevee_lookdev.c
+++ b/source/blender/draw/engines/eevee/eevee_lookdev.c
@@ -97,10 +97,9 @@ static void eevee_lookdev_hdri_preview_init(EEVEE_Data *vedata, EEVEE_ViewLayerD
 
 void EEVEE_lookdev_cache_init(EEVEE_Data *vedata,
                               EEVEE_ViewLayerData *sldata,
-                              DRWShadingGroup **r_grp,
                               DRWPass *pass,
-                              World *UNUSED(world),
-                              EEVEE_LightProbesInfo *pinfo)
+                              EEVEE_LightProbesInfo *pinfo,
+                              DRWShadingGroup **r_shgrp)
 {
   EEVEE_StorageList *stl = vedata->stl;
   EEVEE_TextureList *txl = vedata->txl;
@@ -152,92 +151,88 @@ void EEVEE_lookdev_cache_init(EEVEE_Data *vedata,
   if (LOOK_DEV_STUDIO_LIGHT_ENABLED(v3d)) {
     StudioLight *sl = BKE_studiolight_find(shading->lookdev_light,
                                            STUDIOLIGHT_ORIENTATIONS_MATERIAL_MODE);
-    if (sl && (sl->flag & STUDIOLIGHT_TYPE_WORLD)) {
-      GPUShader *shader = probe_render ? EEVEE_shaders_default_studiolight_sh_get() :
-                                         EEVEE_shaders_background_studiolight_sh_get();
+    if (sl == NULL || (sl->flag & STUDIOLIGHT_TYPE_WORLD) == 0) {
+      return;
+    }
+
+    GPUShader *shader = probe_render ? EEVEE_shaders_studiolight_probe_sh_get() :
+                                       EEVEE_shaders_studiolight_background_sh_get();
 
-      const Scene *scene_eval = DEG_get_evaluated_scene(draw_ctx->depsgraph);
-      int cube_res = scene_eval->eevee.gi_cubemap_resolution;
+    const Scene *scene_eval = DEG_get_evaluated_scene(draw_ctx->depsgraph);
+    int cube_res = scene_eval->eevee.gi_cubemap_resolution;
 
-      /* If one of the component is missing we start from scratch. */
-      if ((stl->lookdev_grid_data == NULL) || (stl->lookdev_cube_data == NULL) ||
-          (txl->lookdev_grid_tx == NULL) || (txl->lookdev_cube_tx == NULL) ||
-          (g_data->light_cache && g_data->light_cache->ref_res != cube_res)) {
-        eevee_lookdev_lightcache_delete(vedata);
-      }
+    /* If one of the component is missing we start from scratch. */
+    if ((stl->lookdev_grid_data == NULL) || (stl->lookdev_cube_data == NULL) ||
+        (txl->lookdev_grid_tx == NULL) || (txl->lookdev_cube_tx == NULL) ||
+        (g_data->light_cache && g_data->light_cache->ref_res != cube_res)) {
+      eevee_lookdev_lightcache_delete(vedata);
+    }
 
-      if (stl->lookdev_lightcache == NULL) {
+    if (stl->lookdev_lightcache == NULL) {
 #if defined(IRRADIANCE_SH_L2)
-        int grid_res = 4;
+      int grid_res = 4;
 #elif defined(IRRADIANCE_HL2)
-        int grid_res = 4;
+      int grid_res = 4;
 #endif
 
-        stl->lookdev_lightcache = EEVEE_lightcache_create(
-            1, 1, cube_res, 8, (int[3]){grid_res, grid_res, 1});
-
-        /* XXX: Fix memleak. TODO find out why. */
-        MEM_SAFE_FREE(stl->lookdev_cube_mips);
-
-        /* We do this to use a special light cache for lookdev.
-         * This light-cache needs to be per viewport. But we need to
-         * have correct freeing when the viewport is closed. So we
-         * need to reference all textures to the txl and the memblocks
-         * to the stl. */
-        stl->lookdev_grid_data = stl->lookdev_lightcache->grid_data;
-        stl->lookdev_cube_data = stl->lookdev_lightcache->cube_data;
-        stl->lookdev_cube_mips = stl->lookdev_lightcache->cube_mips;
-        txl->lookdev_grid_tx = stl->lookdev_lightcache->grid_tx.tex;
-        txl->lookdev_cube_tx = stl->lookdev_lightcache->cube_tx.tex;
-      }
-
-      g_data->light_cache = stl->lookdev_lightcache;
-
-      DRWShadingGroup *grp = *r_grp = DRW_shgroup_create(shader, pass);
-      axis_angle_to_mat3_single(g_data->studiolight_matrix, 'Z', shading->studiolight_rot_z);
-      DRW_shgroup_uniform_mat3(grp, "StudioLightMatrix", g_data->studiolight_matrix);
-
-      if (probe_render) {
-        DRW_shgroup_uniform_float_copy(
-            grp, "studioLightIntensity", shading->studiolight_intensity);
-        BKE_studiolight_ensure_flag(sl, STUDIOLIGHT_EQUIRECT_RADIANCE_GPUTEXTURE);
-        DRW_shgroup_uniform_texture(grp, "image", sl->equirect_radiance_gputexture);
-        /* Do not fadeout when doing probe rendering, only when drawing the background */
-        DRW_shgroup_uniform_float_copy(grp, "backgroundAlpha", 1.0f);
-        DRW_shgroup_uniform_block(grp, "grid_block", sldata->grid_ubo);
-        DRW_shgroup_uniform_block(grp, "probe_block", sldata->probe_ubo);
-        DRW_shgroup_uniform_block(grp, "common_block", sldata->common_ubo);
-      }
-      else {
-        float background_alpha = g_data->background_alpha * shading->studiolight_background;
-        float studiolight_blur = powf(shading->studiolight_blur, 2.5f);
-        DRW_shgroup_uniform_float_copy(grp, "backgroundAlpha", background_alpha);
-        DRW_shgroup_uniform_float_copy(grp, "studioLightBlur", studiolight_blur);
-        DRW_shgroup_uniform_texture(grp, "probeCubes", txl->lookdev_cube_tx);
-        DRW_shgroup_uniform_block(grp, "probe_block", sldata->probe_ubo);
-        DRW_shgroup_uniform_block(grp, "grid_block", sldata->grid_ubo);
-        DRW_shgroup_uniform_block(grp, "planar_block", sldata->planar_ubo);
-        DRW_shgroup_uniform_block(grp, "common_block", sldata->common_ubo);
-        DRW_shgroup_uniform_block(grp, "renderpass_block", sldata->renderpass_ubo.combined);
-      }
-
-      DRW_shgroup_call(grp, DRW_cache_fullscreen_quad_get(), NULL);
-
-      /* Do we need to recalc the lightprobes? */
-      if (g_data->studiolight_index != sl->index ||
-          g_data->studiolight_rot_z != shading->studiolight_rot_z ||
-          g_data->studiolight_intensity != shading->studiolight_inten

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list