Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeroen Bakker <jeroen@blender.org>2022-03-01 13:35:11 +0300
committerJeroen Bakker <jeroen@blender.org>2022-03-01 13:37:18 +0300
commitcde5e12c0bcc55b7c19b625ebf7a6f29dbd833d7 (patch)
treefde08c4e2bae375e3b1ce70bdce49036f01377ec
parent9216cf9cb589f4d8ec0e79f0f0a160ce2c1dfb07 (diff)
Fix T96097: Image editor tile drawing not working.
The image engine is depth aware when using tile drawing the depth is only updated for the central image what lead to showing the background on top of other areas. Also makes sure that switching the tile drawing would lead to an update of the texture slots.
-rw-r--r--source/blender/draw/engines/image/image_drawing_mode.hh8
-rw-r--r--source/blender/draw/engines/image/image_instance_data.hh2
-rw-r--r--source/blender/draw/engines/image/image_usage.hh6
3 files changed, 11 insertions, 5 deletions
diff --git a/source/blender/draw/engines/image/image_drawing_mode.hh b/source/blender/draw/engines/image/image_drawing_mode.hh
index 267b0477a29..12d8607a8bd 100644
--- a/source/blender/draw/engines/image/image_drawing_mode.hh
+++ b/source/blender/draw/engines/image/image_drawing_mode.hh
@@ -507,7 +507,9 @@ template<typename TextureMethod> class ScreenSpaceDrawingMode : public AbstractD
/* Step: Add the GPU textures to the shgroup. */
instance_data->update_batches();
- add_depth_shgroups(*instance_data, image, iuser);
+ if (!instance_data->flags.do_tile_drawing) {
+ add_depth_shgroups(*instance_data, image, iuser);
+ }
add_shgroups(instance_data);
}
@@ -523,8 +525,10 @@ template<typename TextureMethod> class ScreenSpaceDrawingMode : public AbstractD
DefaultFramebufferList *dfbl = DRW_viewport_framebuffer_list_get();
GPU_framebuffer_bind(dfbl->default_fb);
+
static float clear_col[4] = {0.0f, 0.0f, 0.0f, 0.0f};
- GPU_framebuffer_clear_color_depth(dfbl->default_fb, clear_col, 1.0);
+ float clear_depth = instance_data->flags.do_tile_drawing ? 0.75 : 1.0f;
+ GPU_framebuffer_clear_color_depth(dfbl->default_fb, clear_col, clear_depth);
DRW_view_set_active(instance_data->view);
DRW_draw_pass(instance_data->passes.depth_pass);
diff --git a/source/blender/draw/engines/image/image_instance_data.hh b/source/blender/draw/engines/image/image_instance_data.hh
index f8f20fbe178..7aeb423071e 100644
--- a/source/blender/draw/engines/image/image_instance_data.hh
+++ b/source/blender/draw/engines/image/image_instance_data.hh
@@ -121,7 +121,7 @@ struct IMAGE_InstanceData {
void update_image_usage(const ImageUser *image_user)
{
- ImageUsage usage(image, image_user);
+ ImageUsage usage(image, image_user, flags.do_tile_drawing);
if (last_usage != usage) {
last_usage = usage;
reset_dirty_flag(true);
diff --git a/source/blender/draw/engines/image/image_usage.hh b/source/blender/draw/engines/image/image_usage.hh
index bbd56e3db7a..a581731036e 100644
--- a/source/blender/draw/engines/image/image_usage.hh
+++ b/source/blender/draw/engines/image/image_usage.hh
@@ -24,7 +24,7 @@
/**
* ImageUsage contains data of the image and image user to identify changes that require a rebuild
- * of the texture slots.
+ * the texture slots.
*/
struct ImageUsage {
/** Render pass of the image that is used. */
@@ -37,11 +37,12 @@ struct ImageUsage {
ColorManagedColorspaceSettings colorspace_settings;
/** IMA_ALPHA_* */
char alpha_mode;
+ bool last_tile_drawing;
const void *last_image = nullptr;
ImageUsage() = default;
- ImageUsage(const struct Image *image, const struct ImageUser *image_user)
+ ImageUsage(const struct Image *image, const struct ImageUser *image_user, bool do_tile_drawing)
{
pass = image_user ? image_user->pass : 0;
layer = image_user ? image_user->layer : 0;
@@ -49,6 +50,7 @@ struct ImageUsage {
colorspace_settings = image->colorspace_settings;
alpha_mode = image->alpha_mode;
last_image = static_cast<const void *>(image);
+ last_tile_drawing = do_tile_drawing;
}
bool operator==(const ImageUsage &other) const