[Bf-blender-cvs] [7e754023a70] tmp-workbench-rewrite2: Use stencil buffer for Opaque in_front
Miguel Pozo
noreply at git.blender.org
Fri Oct 14 12:51:14 CEST 2022
Commit: 7e754023a7079b78188e6c14d1acc5c6a232c3de
Author: Miguel Pozo
Date: Fri Oct 14 12:51:01 2022 +0200
Branches: tmp-workbench-rewrite2
https://developer.blender.org/rB7e754023a7079b78188e6c14d1acc5c6a232c3de
Use stencil buffer for Opaque in_front
===================================================================
M source/blender/draw/engines/workbench/shaders/infos/workbench_composite_info.hh
M source/blender/draw/engines/workbench/shaders/workbench_composite_comp.glsl
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/shaders/infos/workbench_composite_info.hh b/source/blender/draw/engines/workbench/shaders/infos/workbench_composite_info.hh
index f2e996a1f0f..5b8fee31f45 100644
--- a/source/blender/draw/engines/workbench/shaders/infos/workbench_composite_info.hh
+++ b/source/blender/draw/engines/workbench/shaders/infos/workbench_composite_info.hh
@@ -22,7 +22,6 @@ GPU_SHADER_CREATE_INFO(workbench_next_composite)
.sampler(3, ImageType::FLOAT_2D, "normal_tx")
.sampler(4, ImageType::FLOAT_2D, "material_tx")
.sampler(5, ImageType::DEPTH_2D, "depth_tx")
- .sampler(6, ImageType::DEPTH_2D, "depth_in_front_tx")
.uniform_buf(WB_WORLD_SLOT, "WorldData", "world_data")
.push_constant(Type::BOOL, "forceShadowing")
.image(0, GPU_RGBA16F, Qualifier::WRITE, ImageType::FLOAT_2D, "out_color_img")
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_composite_comp.glsl b/source/blender/draw/engines/workbench/shaders/workbench_composite_comp.glsl
index 837f0628fbc..8ece9c17caf 100644
--- a/source/blender/draw/engines/workbench/shaders/workbench_composite_comp.glsl
+++ b/source/blender/draw/engines/workbench/shaders/workbench_composite_comp.glsl
@@ -13,7 +13,7 @@ void main()
vec3 N = workbench_normal_decode(texture(normal_tx, uv));
vec4 mat_data = texture(material_tx, uv);
float depth = texture(depth_tx, uv).r;
- depth = min(depth, texture(depth_in_front_tx, uv).r);
+ // depth = min(depth, texture(depth_in_front_tx, uv).r);
vec3 base_color = mat_data.rgb;
vec4 color = world_data.background_color;
diff --git a/source/blender/draw/engines/workbench/workbench_engine.cc b/source/blender/draw/engines/workbench/workbench_engine.cc
index ad00f91a415..0de83b2c560 100644
--- a/source/blender/draw/engines/workbench/workbench_engine.cc
+++ b/source/blender/draw/engines/workbench/workbench_engine.cc
@@ -182,7 +182,6 @@ class Instance {
/* TODO(pragma37) volumes_do */
resources.depth_tx.ensure_2d(GPU_DEPTH24_STENCIL8, output_res);
- resources.depth_in_front_tx.ensure_2d(GPU_DEPTH24_STENCIL8, output_res);
anti_aliasing_ps.init(reset_taa);
/* TODO(pragma37) taa_sample_len */
@@ -517,7 +516,7 @@ class Instance {
{
resources.color_tx.acquire(int2(resources.depth_tx.size()), GPU_RGBA16F);
- opaque_ps.draw_prepass(manager, view, resources.depth_tx, resources.depth_in_front_tx);
+ opaque_ps.draw_prepass(manager, view, resources.depth_tx);
// transparent_ps.draw_prepass(manager, view, resources.depth_tx);
// volume_ps.draw_prepass(manager, view, resources.depth_tx);
diff --git a/source/blender/draw/engines/workbench/workbench_mesh_passes.cc b/source/blender/draw/engines/workbench/workbench_mesh_passes.cc
index 23fa3bd7f5e..e6d0b1c78f6 100644
--- a/source/blender/draw/engines/workbench/workbench_mesh_passes.cc
+++ b/source/blender/draw/engines/workbench/workbench_mesh_passes.cc
@@ -90,14 +90,16 @@ void OpaquePass::sync(DRWState cull_state,
SceneResources &resources)
{
Texture &depth_tx = resources.depth_tx;
- Texture &depth_in_front_tx = resources.depth_in_front_tx;
TextureFromPool &color_tx = resources.color_tx;
ShaderCache &shaders = resources.shader_cache;
DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS_EQUAL |
cull_state | clip_state;
- gbuffer_ps_.init(ePipelineType::OPAQUE, shading_type, resources, state);
gbuffer_in_front_ps_.init(ePipelineType::OPAQUE, shading_type, resources, state);
+ gbuffer_in_front_ps_.clear_depth_stencil(1.0, 0x00);
+ gbuffer_in_front_ps_.state_stencil(0xFF, 0x00, 0x00);
+ gbuffer_ps_.init(ePipelineType::OPAQUE, shading_type, resources, state);
+ gbuffer_in_front_ps_.state_stencil(0x00, 0x00, 0xFF);
deferred_ps_.init();
deferred_ps_.shader_set(shaders.resolve_shader_get(ePipelineType::OPAQUE, shading_type));
@@ -106,16 +108,12 @@ void OpaquePass::sync(DRWState cull_state,
deferred_ps_.bind_texture("normal_tx", &gbuffer_normal_tx);
deferred_ps_.bind_texture("material_tx", &gbuffer_material_tx);
deferred_ps_.bind_texture("depth_tx", &depth_tx);
- deferred_ps_.bind_texture("depth_in_front_tx", &depth_in_front_tx);
deferred_ps_.bind_image("out_color_img", &color_tx);
deferred_ps_.dispatch(math::divide_ceil(int2(depth_tx.size()), int2(WB_RESOLVE_GROUP_SIZE)));
deferred_ps_.barrier(GPU_BARRIER_TEXTURE_FETCH);
}
-void OpaquePass::draw_prepass(Manager &manager,
- View &view,
- Texture &depth_tx,
- Texture &depth_in_front_tx)
+void OpaquePass::draw_prepass(Manager &manager, View &view, Texture &depth_tx)
{
gbuffer_material_tx.acquire(int2(depth_tx.size()), GPU_RGBA16F);
gbuffer_normal_tx.acquire(int2(depth_tx.size()), GPU_RG16F);
@@ -126,19 +124,9 @@ void OpaquePass::draw_prepass(Manager &manager,
GPU_ATTACHMENT_TEXTURE(gbuffer_normal_tx),
GPU_ATTACHMENT_TEXTURE(gbuffer_object_id_tx));
opaque_fb.bind();
- opaque_fb.clear_depth(1.0f);
- manager.submit(gbuffer_ps_, view);
- /* TODO(pragma37): render in front first and setup stencil testing */
- if (!gbuffer_in_front_ps_.is_empty()) {
- opaque_fb.ensure(GPU_ATTACHMENT_TEXTURE(depth_in_front_tx),
- GPU_ATTACHMENT_TEXTURE(gbuffer_material_tx),
- GPU_ATTACHMENT_TEXTURE(gbuffer_normal_tx),
- GPU_ATTACHMENT_TEXTURE(gbuffer_object_id_tx));
- opaque_fb.bind();
- opaque_fb.clear_depth(1.0f);
- manager.submit(gbuffer_in_front_ps_, view);
- }
+ manager.submit(gbuffer_in_front_ps_, view);
+ manager.submit(gbuffer_ps_, view);
}
void OpaquePass::draw_resolve(Manager &manager, View &view)
diff --git a/source/blender/draw/engines/workbench/workbench_private.hh b/source/blender/draw/engines/workbench/workbench_private.hh
index 07624ccdc19..6d88eb19bbb 100644
--- a/source/blender/draw/engines/workbench/workbench_private.hh
+++ b/source/blender/draw/engines/workbench/workbench_private.hh
@@ -103,7 +103,7 @@ class OpaquePass {
eShadingType shading_type,
SceneResources &resources);
- void draw_prepass(Manager &manager, View &view, Texture &depth_tx, Texture &depth_in_front_tx);
+ void draw_prepass(Manager &manager, View &view, Texture &depth_tx);
void draw_resolve(Manager &manager, View &view);
More information about the Bf-blender-cvs
mailing list