[Bf-blender-cvs] [5c4a5c637c0] tmp-worbench-rewrite2-optimizations: MeshPass replace sub_pass_get() with draw()
Miguel Pozo
noreply at git.blender.org
Sun Jan 1 15:39:55 CET 2023
Commit: 5c4a5c637c0f8bd7214f0205e49a958840d106aa
Author: Miguel Pozo
Date: Thu Dec 29 17:21:04 2022 +0100
Branches: tmp-worbench-rewrite2-optimizations
https://developer.blender.org/rB5c4a5c637c0f8bd7214f0205e49a958840d106aa
MeshPass replace sub_pass_get() with draw()
===================================================================
M source/blender/draw/engines/workbench/workbench_engine.cc
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_engine.cc b/source/blender/draw/engines/workbench/workbench_engine.cc
index 9c7bfb7c6c3..fff98692220 100644
--- a/source/blender/draw/engines/workbench/workbench_engine.cc
+++ b/source/blender/draw/engines/workbench/workbench_engine.cc
@@ -273,7 +273,7 @@ class Instance {
const bool in_front = (ob_ref.object->dtx & OB_DRAW_IN_FRONT) != 0;
auto draw = [&](MeshPass &pass) {
- pass.sub_pass_get(ob_ref, image, sampler_state, iuser).draw(batch, handle);
+ pass.draw(ob_ref, batch, handle, image, sampler_state, iuser);
};
if (scene_state.xray_mode || material.is_transparent()) {
diff --git a/source/blender/draw/engines/workbench/workbench_mesh_passes.cc b/source/blender/draw/engines/workbench/workbench_mesh_passes.cc
index cd71bb7c6a3..06f77a0e619 100644
--- a/source/blender/draw/engines/workbench/workbench_mesh_passes.cc
+++ b/source/blender/draw/engines/workbench/workbench_mesh_passes.cc
@@ -50,12 +50,13 @@ void MeshPass::init_subpasses(ePipelineType pipeline,
}
}
-PassMain::Sub &MeshPass::sub_pass_get(ObjectRef &ref,
- ::Image *image /* = nullptr */,
- eGPUSamplerState sampler_state /* = GPU_SAMPLER_DEFAULT */,
- ImageUser *iuser /* = nullptr */)
+void MeshPass::draw(ObjectRef &ref,
+ GPUBatch *batch,
+ ResourceHandle handle,
+ ::Image *image /* = nullptr */,
+ eGPUSamplerState sampler_state /* = GPU_SAMPLER_DEFAULT */,
+ ImageUser *iuser /* = nullptr */)
{
- /*TODO(Miguel Pozo): For now we assume retrieving a subpass means it's not empty anymore*/
is_empty_ = false;
eGeometryType geometry_type = geometry_type_from_object(ref.object);
@@ -90,11 +91,12 @@ PassMain::Sub &MeshPass::sub_pass_get(ObjectRef &ref,
return sub_pass;
};
- return *texture_subpass_map_.lookup_or_add_cb(TextureSubPassKey(texture, geometry_type),
- add_cb);
+ texture_subpass_map_.lookup_or_add_cb(TextureSubPassKey(texture, geometry_type), add_cb)
+ ->draw(batch, handle);
}
}
- return *passes_[static_cast<int>(geometry_type)][static_cast<int>(eShaderType::MATERIAL)];
+ passes_[static_cast<int>(geometry_type)][static_cast<int>(eShaderType::MATERIAL)]->draw(batch,
+ handle);
}
void OpaquePass::sync(const SceneState &scene_state, SceneResources &resources)
diff --git a/source/blender/draw/engines/workbench/workbench_private.hh b/source/blender/draw/engines/workbench/workbench_private.hh
index 9173cc089c7..a0bc247798c 100644
--- a/source/blender/draw/engines/workbench/workbench_private.hh
+++ b/source/blender/draw/engines/workbench/workbench_private.hh
@@ -175,11 +175,12 @@ class MeshPass : public PassMain {
bool clip,
ShaderCache &shaders);
- PassMain::Sub &sub_pass_get(
- ObjectRef &ref,
- ::Image *image = nullptr,
- eGPUSamplerState sampler_state = eGPUSamplerState::GPU_SAMPLER_DEFAULT,
- ImageUser *iuser = nullptr);
+ void draw(ObjectRef &ref,
+ GPUBatch *batch,
+ ResourceHandle handle,
+ ::Image *image = nullptr,
+ eGPUSamplerState sampler_state = eGPUSamplerState::GPU_SAMPLER_DEFAULT,
+ ImageUser *iuser = nullptr);
};
class OpaquePass {
More information about the Bf-blender-cvs
mailing list