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.
This commit is contained in:
parent
9216cf9cb5
commit
cde5e12c0b
Notes:
blender-bot
2023-02-14 09:48:25 +01:00
Referenced by issue #96097, Image, UV Editor: Repeat image not working.
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue