Commit: 8406fabc87446238a1168df5d57470c84edad85f
Author: Clément Foucault
Date:   Sat May 11 17:42:36 2019 +0200
Branches: master
https://developer.blender.org/rB8406fabc87446238a1168df5d57470c84edad85f

Eevee: Replace DRW_shgroup_empty_tri_batch_create by procedural calls

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

M       source/blender/draw/engines/eevee/eevee_depth_of_field.c
M       source/blender/draw/engines/eevee/eevee_lightprobes.c
M       source/blender/draw/engines/eevee/eevee_volumes.c

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

diff --git a/source/blender/draw/engines/eevee/eevee_depth_of_field.c 
b/source/blender/draw/engines/eevee/eevee_depth_of_field.c
index 8fb73bd605f..f09be2324a6 100644
--- a/source/blender/draw/engines/eevee/eevee_depth_of_field.c
+++ b/source/blender/draw/engines/eevee/eevee_depth_of_field.c
@@ -222,13 +222,14 @@ void EEVEE_depth_of_field_cache_init(EEVEE_ViewLayerData 
*UNUSED(sldata), EEVEE_
     const float *viewport_size = DRW_viewport_size_get();
     const int sprite_len = ((int)viewport_size[0] / 2) *
                            ((int)viewport_size[1] / 2); /* brackets matters */
-    grp = DRW_shgroup_empty_tri_batch_create(
-        e_data.dof_scatter_sh[use_alpha], psl->dof_scatter, sprite_len);
+    grp = DRW_shgroup_create(e_data.dof_scatter_sh[use_alpha], 
psl->dof_scatter);
     DRW_shgroup_uniform_texture_ref(grp, "nearBuffer", 
&effects->dof_down_near);
     DRW_shgroup_uniform_texture_ref(grp, "farBuffer", &effects->dof_down_far);
     DRW_shgroup_uniform_texture_ref(grp, "cocBuffer", &effects->dof_coc);
     DRW_shgroup_uniform_vec4(grp, "bokehParams", effects->dof_bokeh, 2);
 
+    DRW_shgroup_call_procedural_triangles_add(grp, sprite_len, NULL);
+
     psl->dof_resolve = DRW_pass_create("DoF Resolve", DRW_STATE_WRITE_COLOR);
 
     grp = DRW_shgroup_create(e_data.dof_resolve_sh[use_alpha], 
psl->dof_resolve);
diff --git a/source/blender/draw/engines/eevee/eevee_lightprobes.c 
b/source/blender/draw/engines/eevee/eevee_lightprobes.c
index 71c1aa99ed2..5976a30232e 100644
--- a/source/blender/draw/engines/eevee/eevee_lightprobes.c
+++ b/source/blender/draw/engines/eevee/eevee_lightprobes.c
@@ -386,8 +386,8 @@ void EEVEE_lightprobes_cache_init(EEVEE_ViewLayerData 
*sldata, EEVEE_Data *vedat
     /* Cube Display */
     if (scene_eval->eevee.flag & SCE_EEVEE_SHOW_CUBEMAPS && lcache->cube_len > 
1) {
       int cube_len = lcache->cube_len - 1; /* don't count the world. */
-      DRWShadingGroup *grp = DRW_shgroup_empty_tri_batch_create(
-          EEVEE_shaders_probe_cube_display_sh_get(), psl->probe_display, 
cube_len * 2);
+      DRWShadingGroup *grp = 
DRW_shgroup_create(EEVEE_shaders_probe_cube_display_sh_get(),
+                                                psl->probe_display);
 
       DRW_shgroup_uniform_texture_ref(grp, "probeCubes", &lcache->cube_tx.tex);
       DRW_shgroup_uniform_block(grp, "probe_block", sldata->probe_ubo);
@@ -398,6 +398,8 @@ void EEVEE_lightprobes_cache_init(EEVEE_ViewLayerData 
*sldata, EEVEE_Data *vedat
       /* TODO (fclem) get rid of those UBO. */
       DRW_shgroup_uniform_block(grp, "planar_block", sldata->planar_ubo);
       DRW_shgroup_uniform_block(grp, "grid_block", sldata->grid_ubo);
+
+      DRW_shgroup_call_procedural_triangles_add(grp, cube_len * 2, NULL);
     }
 
     /* Grid Display */
diff --git a/source/blender/draw/engines/eevee/eevee_volumes.c 
b/source/blender/draw/engines/eevee/eevee_volumes.c
index d2b3439133f..8e4a2da7743 100644
--- a/source/blender/draw/engines/eevee/eevee_volumes.c
+++ b/source/blender/draw/engines/eevee/eevee_volumes.c
@@ -400,8 +400,7 @@ void EEVEE_volumes_cache_init(EEVEE_ViewLayerData *sldata, 
EEVEE_Data *vedata)
         !LOOK_DEV_STUDIO_LIGHT_ENABLED(draw_ctx->v3d)) {
       struct GPUMaterial *mat = EEVEE_material_world_volume_get(scene, wo);
 
-      grp = DRW_shgroup_material_empty_tri_batch_create(
-          mat, psl->volumetric_world_ps, common_data->vol_tex_size[2]);
+      grp = DRW_shgroup_material_create(mat, psl->volumetric_world_ps);
 
       if (grp) {
         DRW_shgroup_uniform_block(grp, "common_block", sldata->common_ubo);
@@ -416,15 +415,18 @@ void EEVEE_volumes_cache_init(EEVEE_ViewLayerData 
*sldata, EEVEE_Data *vedata)
         DRW_shgroup_uniform_texture(grp, "sampdensity", e_data.dummy_density);
         DRW_shgroup_uniform_texture(grp, "sampflame", e_data.dummy_flame);
         DRW_shgroup_uniform_vec2(grp, "unftemperature", (float[2]){0.0f, 
1.0f}, 1);
+
+        DRW_shgroup_call_procedural_triangles_add(grp, 
common_data->vol_tex_size[2], NULL);
       }
     }
 
     if (grp == NULL) {
       /* If no world or volume material is present just clear the buffer with 
this drawcall */
-      grp = DRW_shgroup_empty_tri_batch_create(
-          e_data.volumetric_clear_sh, psl->volumetric_world_ps, 
common_data->vol_tex_size[2]);
+      grp = DRW_shgroup_create(e_data.volumetric_clear_sh, 
psl->volumetric_world_ps);
 
       DRW_shgroup_uniform_block(grp, "common_block", sldata->common_ubo);
+
+      DRW_shgroup_call_procedural_triangles_add(grp, 
common_data->vol_tex_size[2], NULL);
     }
 
     /* Volumetric Objects */
@@ -435,8 +437,7 @@ void EEVEE_volumes_cache_init(EEVEE_ViewLayerData *sldata, 
EEVEE_Data *vedata)
                                        
e_data.volumetric_scatter_with_lights_sh :
                                        e_data.volumetric_scatter_sh;
     psl->volumetric_scatter_ps = DRW_pass_create("Volumetric Scattering", 
DRW_STATE_WRITE_COLOR);
-    grp = DRW_shgroup_empty_tri_batch_create(
-        scatter_sh, psl->volumetric_scatter_ps, common_data->vol_tex_size[2]);
+    grp = DRW_shgroup_create(scatter_sh, psl->volumetric_scatter_ps);
     DRW_shgroup_uniform_texture_ref(grp, "irradianceGrid", 
&lcache->grid_tx.tex);
     DRW_shgroup_uniform_texture_ref(grp, "shadowCubeTexture", 
&sldata->shadow_cube_pool);
     DRW_shgroup_uniform_texture_ref(grp, "shadowCascadeTexture", 
&sldata->shadow_cascade_pool);
@@ -451,15 +452,17 @@ void EEVEE_volumes_cache_init(EEVEE_ViewLayerData 
*sldata, EEVEE_Data *vedata)
     DRW_shgroup_uniform_block(grp, "shadow_block", sldata->shadow_ubo);
     DRW_shgroup_uniform_block(grp, "common_block", sldata->common_ubo);
 
+    DRW_shgroup_call_procedural_triangles_add(grp, 
common_data->vol_tex_size[2], NULL);
+
     psl->volumetric_integration_ps = DRW_pass_create("Volumetric Integration",
                                                      DRW_STATE_WRITE_COLOR);
-    grp = DRW_shgroup_empty_tri_batch_create(e_data.volumetric_integration_sh,
-                                             psl->volumetric_integration_ps,
-                                             common_data->vol_tex_size[2]);
+    grp = DRW_shgroup_create(e_data.volumetric_integration_sh, 
psl->volumetric_integration_ps);
     DRW_shgroup_uniform_texture_ref(grp, "volumeScattering", 
&txl->volume_scatter);
     DRW_shgroup_uniform_texture_ref(grp, "volumeExtinction", 
&txl->volume_transmittance);
     DRW_shgroup_uniform_block(grp, "common_block", sldata->common_ubo);
 
+    DRW_shgroup_call_procedural_triangles_add(grp, 
common_data->vol_tex_size[2], NULL);
+
     psl->volumetric_resolve_ps = DRW_pass_create("Volumetric Resolve", 
DRW_STATE_WRITE_COLOR);
     grp = DRW_shgroup_create(e_data.volumetric_resolve_sh, 
psl->volumetric_resolve_ps);
     DRW_shgroup_uniform_texture_ref(grp, "inScattering", &txl->volume_scatter);
@@ -500,8 +503,7 @@ void EEVEE_volumes_cache_object_add(EEVEE_ViewLayerData 
*sldata,
     return;
   }
 
-  DRWShadingGroup *grp = DRW_shgroup_material_empty_tri_batch_create(
-      mat, vedata->psl->volumetric_objects_ps, 
sldata->common_data.vol_tex_size[2]);
+  DRWShadingGroup *grp = DRW_shgroup_material_create(mat, 
vedata->psl->volumetric_objects_ps);
 
   BKE_mesh_texspace_get_reference((struct Mesh *)ob->data, NULL, &texcoloc, 
NULL, &texcosize);
 
@@ -575,6 +577,10 @@ void EEVEE_volumes_cache_object_add(EEVEE_ViewLayerData 
*sldata,
     DRW_shgroup_uniform_vec3(grp, "volumeColor", white, 1);
     DRW_shgroup_uniform_vec2(grp, "unftemperature", (float[2]){0.0f, 1.0f}, 1);
   }
+
+  /* TODO Reduce to number of slices intersecting. */
+  /* TODO Preemptive culling. */
+  DRW_shgroup_call_procedural_triangles_add(grp, 
sldata->common_data.vol_tex_size[2], NULL);
 }
 
 void EEVEE_volumes_compute(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data 
*vedata)

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

Reply via email to