[Bf-blender-cvs] [657d36c8b79] tmp-workbench-rewrite2: remove static GPUShaders

Miguel Pozo noreply at git.blender.org
Mon Oct 31 18:27:51 CET 2022


Commit: 657d36c8b7964b021c2f81a2f43a6100f407d67f
Author: Miguel Pozo
Date:   Mon Oct 31 17:53:59 2022 +0100
Branches: tmp-workbench-rewrite2
https://developer.blender.org/rB657d36c8b7964b021c2f81a2f43a6100f407d67f

remove static GPUShaders

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

M	source/blender/draw/engines/workbench/workbench_mesh_passes.cc
M	source/blender/draw/engines/workbench/workbench_private.hh

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

diff --git a/source/blender/draw/engines/workbench/workbench_mesh_passes.cc b/source/blender/draw/engines/workbench/workbench_mesh_passes.cc
index 11961b5ff8f..2fecd4af9a3 100644
--- a/source/blender/draw/engines/workbench/workbench_mesh_passes.cc
+++ b/source/blender/draw/engines/workbench/workbench_mesh_passes.cc
@@ -183,12 +183,12 @@ void TransparentPass::sync(const SceneState &scene_state, SceneResources &resour
   accumulation_in_front_ps_.init_subpasses(
       ePipelineType::TRANSPARENT, scene_state.shading_type, resources.shader_cache);
 
+  if (resolve_sh_ == nullptr) {
+    resolve_sh_ = GPU_shader_create_from_info_name("workbench_transparent_resolve");
+  }
   resolve_ps_.init();
-  /*TODO(Miguel Pozo): Use shaders.resolve_shader_get()*/
-  static GPUShader *resolve_shader = GPU_shader_create_from_info_name(
-      "workbench_transparent_resolve");
   resolve_ps_.state_set(DRW_STATE_WRITE_COLOR | DRW_STATE_BLEND_ALPHA);
-  resolve_ps_.shader_set(resolve_shader);
+  resolve_ps_.shader_set(resolve_sh_);
   resolve_ps_.bind_texture("transparentAccum", &accumulation_tx);
   resolve_ps_.bind_texture("transparentRevealage", &reveal_tx);
   resolve_ps_.draw_procedural(GPU_PRIM_TRIS, 1, 3);
@@ -245,10 +245,11 @@ void TransparentDepthPass::sync(const SceneState &scene_state, SceneResources &r
   in_front_ps_.state_stencil(0xFF, 0xFF, 0x00);
   in_front_ps_.init_subpasses(ePipelineType::OPAQUE, eShadingType::FLAT, resources.shader_cache);
 
+  if (merge_sh_ == nullptr) {
+    merge_sh_ = GPU_shader_create_from_info_name("workbench_next_merge_depth");
+  }
   merge_ps_.init();
-  /*TODO(Miguel Pozo): Use ShaderCache*/
-  static GPUShader *merge_shader = GPU_shader_create_from_info_name("workbench_next_merge_depth");
-  merge_ps_.shader_set(merge_shader);
+  merge_ps_.shader_set(merge_sh_);
   merge_ps_.state_set(DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_ALWAYS | DRW_STATE_WRITE_STENCIL |
                       DRW_STATE_STENCIL_ALWAYS);
   merge_ps_.state_stencil(0xFF, 0xFF, 0x00);
diff --git a/source/blender/draw/engines/workbench/workbench_private.hh b/source/blender/draw/engines/workbench/workbench_private.hh
index fcd57d2ea85..74d3afac1de 100644
--- a/source/blender/draw/engines/workbench/workbench_private.hh
+++ b/source/blender/draw/engines/workbench/workbench_private.hh
@@ -197,6 +197,9 @@ class OpaquePass {
 };
 
 class TransparentPass {
+ private:
+  GPUShader *resolve_sh_;
+
  public:
   TextureFromPool accumulation_tx = {"accumulation_accumulation_tx"};
   TextureFromPool reveal_tx = {"accumulation_reveal_tx"};
@@ -215,6 +218,9 @@ class TransparentPass {
 };
 
 class TransparentDepthPass {
+ private:
+  GPUShader *merge_sh_;
+
  public:
   MeshPass main_ps_ = {"TransparentDepth.Main"};
   Framebuffer main_fb = {"TransparentDepth.Main"};



More information about the Bf-blender-cvs mailing list