diff options
author | Julian Eisel <julian@blender.org> | 2022-11-10 15:17:42 +0300 |
---|---|---|
committer | Julian Eisel <julian@blender.org> | 2022-11-10 15:17:42 +0300 |
commit | 7246c387435769a169ac24c91434c615df6434b4 (patch) | |
tree | 61842e3e0ce85e80720fdd7476d44d2e629f59fd /source/blender/draw/engines/image/image_drawing_mode.hh | |
parent | c5f55d17096d373791363e46004176e3f7f7ae52 (diff) | |
parent | 0b4bd3ddc016298e868169a541cf6c132b10c587 (diff) |
Merge branch 'master' into asset-browser-grid-viewasset-browser-grid-view
Diffstat (limited to 'source/blender/draw/engines/image/image_drawing_mode.hh')
-rw-r--r-- | source/blender/draw/engines/image/image_drawing_mode.hh | 37 |
1 files changed, 18 insertions, 19 deletions
diff --git a/source/blender/draw/engines/image/image_drawing_mode.hh b/source/blender/draw/engines/image/image_drawing_mode.hh index a1cd110e1d8..8913b7469ed 100644 --- a/source/blender/draw/engines/image/image_drawing_mode.hh +++ b/source/blender/draw/engines/image/image_drawing_mode.hh @@ -243,8 +243,8 @@ template<typename TextureMethod> class ScreenSpaceDrawingMode : public AbstractD do_partial_update_float_buffer(tile_buffer, iterator); } - const float tile_width = static_cast<float>(iterator.tile_data.tile_buffer->x); - const float tile_height = static_cast<float>(iterator.tile_data.tile_buffer->y); + const float tile_width = float(iterator.tile_data.tile_buffer->x); + const float tile_height = float(iterator.tile_data.tile_buffer->y); for (int i = 0; i < SCREEN_SPACE_DRAWING_MODE_TEXTURE_LEN; i++) { const TextureInfo &info = instance_data.texture_infos[i]; @@ -260,23 +260,20 @@ template<typename TextureMethod> class ScreenSpaceDrawingMode : public AbstractD const float texture_height = GPU_texture_height(texture); /* TODO: early bound check. */ ImageTileWrapper tile_accessor(iterator.tile_data.tile); - float tile_offset_x = static_cast<float>(tile_accessor.get_tile_x_offset()); - float tile_offset_y = static_cast<float>(tile_accessor.get_tile_y_offset()); + float tile_offset_x = float(tile_accessor.get_tile_x_offset()); + float tile_offset_y = float(tile_accessor.get_tile_y_offset()); rcti *changed_region_in_texel_space = &iterator.changed_region.region; rctf changed_region_in_uv_space; - BLI_rctf_init(&changed_region_in_uv_space, - static_cast<float>(changed_region_in_texel_space->xmin) / - static_cast<float>(iterator.tile_data.tile_buffer->x) + - tile_offset_x, - static_cast<float>(changed_region_in_texel_space->xmax) / - static_cast<float>(iterator.tile_data.tile_buffer->x) + - tile_offset_x, - static_cast<float>(changed_region_in_texel_space->ymin) / - static_cast<float>(iterator.tile_data.tile_buffer->y) + - tile_offset_y, - static_cast<float>(changed_region_in_texel_space->ymax) / - static_cast<float>(iterator.tile_data.tile_buffer->y) + - tile_offset_y); + BLI_rctf_init( + &changed_region_in_uv_space, + float(changed_region_in_texel_space->xmin) / float(iterator.tile_data.tile_buffer->x) + + tile_offset_x, + float(changed_region_in_texel_space->xmax) / float(iterator.tile_data.tile_buffer->x) + + tile_offset_x, + float(changed_region_in_texel_space->ymin) / float(iterator.tile_data.tile_buffer->y) + + tile_offset_y, + float(changed_region_in_texel_space->ymax) / float(iterator.tile_data.tile_buffer->y) + + tile_offset_y); rctf changed_overlapping_region_in_uv_space; const bool region_overlap = BLI_rctf_isect(&info.clipping_uv_bounds, &changed_region_in_uv_space, @@ -335,6 +332,7 @@ template<typename TextureMethod> class ScreenSpaceDrawingMode : public AbstractD offset++; } } + IMB_gpu_clamp_half_float(&extracted_buffer); GPU_texture_update_sub(texture, GPU_DATA_FLOAT, @@ -391,6 +389,7 @@ template<typename TextureMethod> class ScreenSpaceDrawingMode : public AbstractD } BKE_image_release_ibuf(image, tile_buffer, lock); } + IMB_gpu_clamp_half_float(&texture_buffer); GPU_texture_update(info.texture, GPU_DATA_FLOAT, texture_buffer.rect_float); imb_freerectImbuf_all(&texture_buffer); } @@ -423,8 +422,8 @@ template<typename TextureMethod> class ScreenSpaceDrawingMode : public AbstractD * transformation. */ float uv_to_texel[4][4]; copy_m4_m4(uv_to_texel, instance_data.ss_to_texture); - float scale[3] = {static_cast<float>(texture_width) / static_cast<float>(tile_buffer.x), - static_cast<float>(texture_height) / static_cast<float>(tile_buffer.y), + float scale[3] = {float(texture_width) / float(tile_buffer.x), + float(texture_height) / float(tile_buffer.y), 1.0f}; rescale_m4(uv_to_texel, scale); uv_to_texel[3][0] += image_tile.get_tile_x_offset() / |