Skip to content

Commit 9d97caa

Browse files
committed
Add support for contrast-adaptive sharpening in 3D
This is an older, easier to implement variant of CAS as a pure fragment shader. It doesn't support upscaling, but the upscaling part of CAS has been superseded by FSR 1.0 anyway. The sharpening intensity can be adjusted on a per-Viewport basis. For the root viewport, it can be adjusted in the Project Settings.
1 parent 4463dd9 commit 9d97caa

23 files changed

+145
-12
lines changed

doc/classes/ProjectSettings.xml

+5-2
Original file line numberDiff line numberDiff line change
@@ -1591,10 +1591,13 @@
15911591
Sets the number of MSAA samples to use (as a power of two). MSAA is used to reduce aliasing around the edges of polygons. A higher MSAA value results in smoother edges but can be significantly slower on some hardware. See also bilinear scaling 3d [member rendering/scaling_3d/mode] for supersampling, which provides higher quality but is much more expensive.
15921592
</member>
15931593
<member name="rendering/anti_aliasing/quality/screen_space_aa" type="int" setter="" getter="" default="0">
1594-
Sets the screen-space antialiasing mode for the default screen [Viewport]. Screen-space antialiasing works by selectively blurring edges in a post-process shader. It differs from MSAA which takes multiple coverage samples while rendering objects. Screen-space AA methods are typically faster than MSAA and will smooth out specular aliasing, but tend to make scenes appear blurry.
1595-
Another way to combat specular aliasing is to enable [member rendering/anti_aliasing/screen_space_roughness_limiter/enabled].
1594+
Sets the screen-space antialiasing mode for the default screen [Viewport]. Screen-space antialiasing works by selectively blurring edges in a post-process shader. It differs from MSAA which takes multiple coverage samples while rendering objects. Screen-space AA methods are typically faster than MSAA and will smooth out specular aliasing, but tend to make scenes appear blurry. Some of the lost sharpness can be recovered by enabling contrast-adaptive sharpening (see [member rendering/anti_aliasing/quality/sharpen_intensity]).
1595+
</member>
1596+
<member name="rendering/anti_aliasing/quality/sharpen_intensity" type="float" setter="" getter="" default="0.0">
1597+
If set to a value greater than [code]0.0[/code], contrast-adaptive sharpening will be applied to the 3D viewport. This has a small GPU performance cost and can be used to recover some of the sharpness lost due to screen-space antialiasing. Values around [code]0.5[/code] generally give the best results. See also [member rendering/anti_aliasing/quality/screen_space_aa].
15961598
</member>
15971599
<member name="rendering/anti_aliasing/quality/use_debanding" type="bool" setter="" getter="" default="false">
1600+
If [code]true[/code], uses a fast post-processing filter to make banding significantly less visible. In some cases, debanding may introduce a slightly noticeable dithering pattern. It's recommended to enable debanding only when actually needed since the dithering pattern will make lossless-compressed screenshots larger.
15981601
</member>
15991602
<member name="rendering/anti_aliasing/quality/use_taa" type="bool" setter="" getter="" default="false">
16001603
Enables Temporal Anti-Aliasing for the default screen [Viewport]. TAA works by jittering the camera and accumulating the images of the last rendered frames, motion vector rendering is used to account for camera and object motion.

doc/classes/RenderingServer.xml

+8
Original file line numberDiff line numberDiff line change
@@ -3287,6 +3287,14 @@
32873287
Sets the size of the shadow atlas's images (used for omni and spot lights). The value will be rounded up to the nearest power of 2.
32883288
</description>
32893289
</method>
3290+
<method name="viewport_set_sharpen_intensity">
3291+
<return type="void" />
3292+
<argument index="0" name="viewport" type="RID" />
3293+
<argument index="1" name="intensity" type="float" />
3294+
<description>
3295+
Sets the sharpening [code]intensity[/code] for the [code]viewport[/code]. If set to a value greater than [code]0.0[/code], contrast-adaptive sharpening will be applied to the 3D viewport. This has a small GPU performance cost and can be used to recover some of the sharpness lost due to screen-space antialiasing. Values around [code]0.5[/code] generally give the best results.
3296+
</description>
3297+
</method>
32903298
<method name="viewport_set_size">
32913299
<return type="void" />
32923300
<argument index="0" name="viewport" type="RID" />

doc/classes/Viewport.xml

+4-1
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,7 @@
242242
To control this property on the root viewport, set the [member ProjectSettings.rendering/scaling_3d/scale] project setting.
243243
</member>
244244
<member name="screen_space_aa" type="int" setter="set_screen_space_aa" getter="get_screen_space_aa" enum="Viewport.ScreenSpaceAA" default="0">
245-
Sets the screen-space antialiasing method used. Screen-space antialiasing works by selectively blurring edges in a post-process shader. It differs from MSAA which takes multiple coverage samples while rendering objects. Screen-space AA methods are typically faster than MSAA and will smooth out specular aliasing, but tend to make scenes appear blurry.
245+
Sets the screen-space antialiasing method used. Screen-space antialiasing works by selectively blurring edges in a post-process shader. It differs from MSAA which takes multiple coverage samples while rendering objects. Screen-space AA methods are typically faster than MSAA and will smooth out specular aliasing, but tend to make scenes appear blurry. Some of the lost sharpness can be recovered by enabling contrast-adaptive sharpening (see [member sharpen_intensity]).
246246
</member>
247247
<member name="sdf_oversize" type="int" setter="set_sdf_oversize" getter="get_sdf_oversize" enum="Viewport.SDFOversize" default="1">
248248
</member>
@@ -266,6 +266,9 @@
266266
The shadow atlas' resolution (used for omni and spot lights). The value will be rounded up to the nearest power of 2.
267267
[b]Note:[/b] If this is set to 0, shadows won't be visible.
268268
</member>
269+
<member name="sharpen_intensity" type="float" setter="set_sharpen_intensity" getter="get_sharpen_intensity" default="0.0">
270+
If set to a value greater than [code]0.0[/code], contrast-adaptive sharpening will be applied to the 3D viewport. This has a small GPU performance cost and can be used to recover some of the sharpness lost due to screen-space antialiasing. Values around [code]0.5[/code] generally give the best results. See also [member screen_space_aa].
271+
</member>
269272
<member name="snap_2d_transforms_to_pixel" type="bool" setter="set_snap_2d_transforms_to_pixel" getter="is_snap_2d_transforms_to_pixel_enabled" default="false">
270273
</member>
271274
<member name="snap_2d_vertices_to_pixel" type="bool" setter="set_snap_2d_vertices_to_pixel" getter="is_snap_2d_vertices_to_pixel_enabled" default="false">

drivers/gles3/rasterizer_scene_gles3.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -2507,7 +2507,7 @@ RID RasterizerSceneGLES3::render_buffers_create() {
25072507
return render_buffers_owner.make_rid(rb);
25082508
}
25092509

2510-
void RasterizerSceneGLES3::render_buffers_configure(RID p_render_buffers, RID p_render_target, int p_internal_width, int p_internal_height, int p_width, int p_height, float p_fsr_sharpness, float p_fsr_mipmap_bias, RS::ViewportMSAA p_msaa, RS::ViewportScreenSpaceAA p_screen_space_aa, bool p_use_taa, bool p_use_debanding, uint32_t p_view_count) {
2510+
void RasterizerSceneGLES3::render_buffers_configure(RID p_render_buffers, RID p_render_target, int p_internal_width, int p_internal_height, int p_width, int p_height, float p_fsr_sharpness, float p_fsr_mipmap_bias, RS::ViewportMSAA p_msaa, RS::ViewportScreenSpaceAA p_screen_space_aa, bool p_use_taa, bool p_use_debanding, float p_sharpen_intensity, uint32_t p_view_count) {
25112511
GLES3::TextureStorage *texture_storage = GLES3::TextureStorage::get_singleton();
25122512

25132513
RenderBuffers *rb = render_buffers_owner.get_or_null(p_render_buffers);

drivers/gles3/rasterizer_scene_gles3.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -923,7 +923,7 @@ class RasterizerSceneGLES3 : public RendererSceneRender {
923923
}
924924

925925
RID render_buffers_create() override;
926-
void render_buffers_configure(RID p_render_buffers, RID p_render_target, int p_internal_width, int p_internal_height, int p_width, int p_height, float p_fsr_sharpness, float p_fsr_mipmap_bias, RS::ViewportMSAA p_msaa, RS::ViewportScreenSpaceAA p_screen_space_aa, bool p_use_taa, bool p_use_debanding, uint32_t p_view_count) override;
926+
void render_buffers_configure(RID p_render_buffers, RID p_render_target, int p_internal_width, int p_internal_height, int p_width, int p_height, float p_fsr_sharpness, float p_fsr_mipmap_bias, RS::ViewportMSAA p_msaa, RS::ViewportScreenSpaceAA p_screen_space_aa, bool p_use_taa, bool p_use_debanding, float p_sharpen_intensity, uint32_t p_view_count) override;
927927
void gi_set_use_half_resolution(bool p_enable) override;
928928

929929
void screen_space_roughness_limiter_set_active(bool p_enable, float p_amount, float p_curve) override;

editor/plugins/node_3d_editor_plugin.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -2406,6 +2406,8 @@ void Node3DEditorViewport::_project_settings_changed() {
24062406

24072407
const bool use_debanding = GLOBAL_GET("rendering/anti_aliasing/quality/use_debanding");
24082408
viewport->set_use_debanding(use_debanding);
2409+
const float sharpen_intensity = GLOBAL_GET("rendering/anti_aliasing/quality/sharpen_intensity");
2410+
viewport->set_sharpen_intensity(sharpen_intensity);
24092411

24102412
const bool use_occlusion_culling = GLOBAL_GET("rendering/occlusion_culling/use_occlusion_culling");
24112413
viewport->set_use_occlusion_culling(use_occlusion_culling);

scene/main/scene_tree.cpp

+3
Original file line numberDiff line numberDiff line change
@@ -1387,6 +1387,9 @@ SceneTree::SceneTree() {
13871387
const bool use_debanding = GLOBAL_DEF("rendering/anti_aliasing/quality/use_debanding", false);
13881388
root->set_use_debanding(use_debanding);
13891389

1390+
const float sharpen_intensity = GLOBAL_GET("rendering/anti_aliasing/quality/sharpen_intensity");
1391+
root->set_sharpen_intensity(sharpen_intensity);
1392+
13901393
const bool use_occlusion_culling = GLOBAL_DEF("rendering/occlusion_culling/use_occlusion_culling", false);
13911394
root->set_use_occlusion_culling(use_occlusion_culling);
13921395

scene/main/viewport.cpp

+20
Original file line numberDiff line numberDiff line change
@@ -2900,6 +2900,18 @@ bool Viewport::is_using_debanding() const {
29002900
return use_debanding;
29012901
}
29022902

2903+
void Viewport::set_sharpen_intensity(float p_intensity) {
2904+
if (sharpen_intensity == p_intensity) {
2905+
return;
2906+
}
2907+
sharpen_intensity = p_intensity;
2908+
RS::get_singleton()->viewport_set_sharpen_intensity(viewport, p_intensity);
2909+
}
2910+
2911+
float Viewport::get_sharpen_intensity() const {
2912+
return sharpen_intensity;
2913+
}
2914+
29032915
void Viewport::set_mesh_lod_threshold(float p_pixels) {
29042916
mesh_lod_threshold = p_pixels;
29052917
RS::get_singleton()->viewport_set_mesh_lod_threshold(viewport, mesh_lod_threshold);
@@ -3629,6 +3641,9 @@ void Viewport::_bind_methods() {
36293641
ClassDB::bind_method(D_METHOD("set_use_debanding", "enable"), &Viewport::set_use_debanding);
36303642
ClassDB::bind_method(D_METHOD("is_using_debanding"), &Viewport::is_using_debanding);
36313643

3644+
ClassDB::bind_method(D_METHOD("set_sharpen_intensity", "intensity"), &Viewport::set_sharpen_intensity);
3645+
ClassDB::bind_method(D_METHOD("get_sharpen_intensity"), &Viewport::get_sharpen_intensity);
3646+
36323647
ClassDB::bind_method(D_METHOD("set_use_occlusion_culling", "enable"), &Viewport::set_use_occlusion_culling);
36333648
ClassDB::bind_method(D_METHOD("is_using_occlusion_culling"), &Viewport::is_using_occlusion_culling);
36343649

@@ -3751,11 +3766,13 @@ void Viewport::_bind_methods() {
37513766
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "handle_input_locally"), "set_handle_input_locally", "is_handling_input_locally");
37523767
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "snap_2d_transforms_to_pixel"), "set_snap_2d_transforms_to_pixel", "is_snap_2d_transforms_to_pixel_enabled");
37533768
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "snap_2d_vertices_to_pixel"), "set_snap_2d_vertices_to_pixel", "is_snap_2d_vertices_to_pixel_enabled");
3769+
37543770
ADD_GROUP("Rendering", "");
37553771
ADD_PROPERTY(PropertyInfo(Variant::INT, "msaa", PROPERTY_HINT_ENUM, String::utf8("Disabled (Fastest),2× (Average),4× (Slow),8× (Slowest)")), "set_msaa", "get_msaa");
37563772
ADD_PROPERTY(PropertyInfo(Variant::INT, "screen_space_aa", PROPERTY_HINT_ENUM, "Disabled (Fastest),FXAA (Fast)"), "set_screen_space_aa", "get_screen_space_aa");
37573773
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "use_taa"), "set_use_taa", "is_using_taa");
37583774
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "use_debanding"), "set_use_debanding", "is_using_debanding");
3775+
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "sharpen_intensity"), "set_sharpen_intensity", "get_sharpen_intensity");
37593776
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "use_occlusion_culling"), "set_use_occlusion_culling", "is_using_occlusion_culling");
37603777
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "mesh_lod_threshold", PROPERTY_HINT_RANGE, "0,1024,0.1"), "set_mesh_lod_threshold", "get_mesh_lod_threshold");
37613778
ADD_PROPERTY(PropertyInfo(Variant::INT, "debug_draw", PROPERTY_HINT_ENUM, "Disabled,Unshaded,Overdraw,Wireframe"), "set_debug_draw", "get_debug_draw");
@@ -3769,20 +3786,23 @@ void Viewport::_bind_methods() {
37693786
ADD_GROUP("Canvas Items", "canvas_item_");
37703787
ADD_PROPERTY(PropertyInfo(Variant::INT, "canvas_item_default_texture_filter", PROPERTY_HINT_ENUM, "Nearest,Linear,Linear Mipmap,Nearest Mipmap"), "set_default_canvas_item_texture_filter", "get_default_canvas_item_texture_filter");
37713788
ADD_PROPERTY(PropertyInfo(Variant::INT, "canvas_item_default_texture_repeat", PROPERTY_HINT_ENUM, "Disabled,Enabled,Mirror"), "set_default_canvas_item_texture_repeat", "get_default_canvas_item_texture_repeat");
3789+
37723790
ADD_GROUP("Audio Listener", "audio_listener_");
37733791
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "audio_listener_enable_2d"), "set_as_audio_listener_2d", "is_audio_listener_2d");
37743792
#ifndef _3D_DISABLED
37753793
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "audio_listener_enable_3d"), "set_as_audio_listener_3d", "is_audio_listener_3d");
37763794
#endif
37773795
ADD_GROUP("Physics", "physics_");
37783796
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "physics_object_picking"), "set_physics_object_picking", "get_physics_object_picking");
3797+
37793798
ADD_GROUP("GUI", "gui_");
37803799
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "gui_disable_input"), "set_disable_input", "is_input_disabled");
37813800
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "gui_snap_controls_to_pixels"), "set_snap_controls_to_pixels", "is_snap_controls_to_pixels_enabled");
37823801
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "gui_embed_subwindows"), "set_embedding_subwindows", "is_embedding_subwindows");
37833802
ADD_GROUP("SDF", "sdf_");
37843803
ADD_PROPERTY(PropertyInfo(Variant::INT, "sdf_oversize", PROPERTY_HINT_ENUM, "100%,120%,150%,200%"), "set_sdf_oversize", "get_sdf_oversize");
37853804
ADD_PROPERTY(PropertyInfo(Variant::INT, "sdf_scale", PROPERTY_HINT_ENUM, "100%,50%,25%"), "set_sdf_scale", "get_sdf_scale");
3805+
37863806
ADD_GROUP("Shadow Atlas", "shadow_atlas_");
37873807
ADD_PROPERTY(PropertyInfo(Variant::INT, "shadow_atlas_size"), "set_shadow_atlas_size", "get_shadow_atlas_size");
37883808
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "shadow_atlas_16_bits"), "set_shadow_atlas_16_bits", "get_shadow_atlas_16_bits");

scene/main/viewport.h

+4
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,7 @@ class Viewport : public Node {
299299
float fsr_sharpness = 0.2f;
300300
float fsr_mipmap_bias = 0.0f;
301301
bool use_debanding = false;
302+
float sharpen_intensity = 0.0;
302303
float mesh_lod_threshold = 1.0;
303304
bool use_occlusion_culling = false;
304305

@@ -535,6 +536,9 @@ class Viewport : public Node {
535536
void set_use_debanding(bool p_use_debanding);
536537
bool is_using_debanding() const;
537538

539+
void set_sharpen_intensity(float p_intensity);
540+
float get_sharpen_intensity() const;
541+
538542
void set_mesh_lod_threshold(float p_pixels);
539543
float get_mesh_lod_threshold() const;
540544

servers/rendering/dummy/rasterizer_scene_dummy.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ class RasterizerSceneDummy : public RendererSceneRender {
192192
void set_debug_draw_mode(RS::ViewportDebugDraw p_debug_draw) override {}
193193

194194
RID render_buffers_create() override { return RID(); }
195-
void render_buffers_configure(RID p_render_buffers, RID p_render_target, int p_internal_width, int p_internal_height, int p_width, int p_height, float p_fsr_sharpness, float p_fsr_mipmap_bias, RS::ViewportMSAA p_msaa, RS::ViewportScreenSpaceAA p_screen_space_aa, bool p_use_taa, bool p_use_debanding, uint32_t p_view_count) override {}
195+
void render_buffers_configure(RID p_render_buffers, RID p_render_target, int p_internal_width, int p_internal_height, int p_width, int p_height, float p_fsr_sharpness, float p_fsr_mipmap_bias, RS::ViewportMSAA p_msaa, RS::ViewportScreenSpaceAA p_screen_space_aa, bool p_use_taa, bool p_use_debanding, float p_sharpen_intensity, uint32_t p_view_count) override {}
196196
void gi_set_use_half_resolution(bool p_enable) override {}
197197

198198
void screen_space_roughness_limiter_set_active(bool p_enable, float p_amount, float p_curve) override {}

servers/rendering/renderer_rd/effects/tone_mapper.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@ void ToneMapper::tonemapper(RID p_source_color, RID p_dst_framebuffer, const Ton
124124

125125
tonemap.push_constant.use_fxaa = p_settings.use_fxaa;
126126
tonemap.push_constant.use_debanding = p_settings.use_debanding;
127+
tonemap.push_constant.sharpen_intensity = p_settings.sharpen_intensity;
127128
tonemap.push_constant.pixel_size[0] = 1.0 / p_settings.texture_size.x;
128129
tonemap.push_constant.pixel_size[1] = 1.0 / p_settings.texture_size.y;
129130

@@ -208,6 +209,7 @@ void ToneMapper::tonemapper(RD::DrawListID p_subpass_draw_list, RID p_source_col
208209
tonemap.push_constant.use_color_correction = p_settings.use_color_correction;
209210

210211
tonemap.push_constant.use_debanding = p_settings.use_debanding;
212+
tonemap.push_constant.sharpen_intensity = p_settings.sharpen_intensity;
211213
tonemap.push_constant.luminance_multiplier = p_settings.luminance_multiplier;
212214

213215
RID default_sampler = material_storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);

servers/rendering/renderer_rd/effects/tone_mapper.h

+4
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,9 @@ class ToneMapper {
8383
float pixel_size[2]; // 8 - 104
8484
uint32_t use_fxaa; // 4 - 108
8585
uint32_t use_debanding; // 4 - 112
86+
87+
uint32_t pad[3]; // 12 - 128
88+
float sharpen_intensity; // 4 - 116
8689
};
8790

8891
/* tonemap actually writes to a framebuffer, which is
@@ -139,6 +142,7 @@ class ToneMapper {
139142

140143
bool use_fxaa = false;
141144
bool use_debanding = false;
145+
float sharpen_intensity = 0.0;
142146
Vector2i texture_size;
143147
uint32_t view_count = 1;
144148
};

servers/rendering/renderer_rd/renderer_scene_render_rd.cpp

+5-1
Original file line numberDiff line numberDiff line change
@@ -2610,6 +2610,8 @@ void RendererSceneRenderRD::_render_buffers_post_process_and_tonemap(const Rende
26102610
}
26112611

26122612
tonemap.use_debanding = rb->use_debanding;
2613+
tonemap.sharpen_intensity = rb->sharpen_intensity;
2614+
26132615
tonemap.texture_size = Vector2i(rb->internal_width, rb->internal_height);
26142616

26152617
if (env) {
@@ -2717,6 +2719,7 @@ void RendererSceneRenderRD::_post_process_subpass(RID p_source_texture, RID p_fr
27172719
}
27182720

27192721
tonemap.use_debanding = rb->use_debanding;
2722+
tonemap.sharpen_intensity = rb->sharpen_intensity;
27202723
tonemap.texture_size = Vector2i(rb->width, rb->height);
27212724

27222725
tonemap.luminance_multiplier = _render_buffers_get_luminance_multiplier();
@@ -3031,7 +3034,7 @@ bool RendererSceneRenderRD::_render_buffers_can_be_storage() {
30313034
return true;
30323035
}
30333036

3034-
void RendererSceneRenderRD::render_buffers_configure(RID p_render_buffers, RID p_render_target, int p_internal_width, int p_internal_height, int p_width, int p_height, float p_fsr_sharpness, float p_fsr_mipmap_bias, RS::ViewportMSAA p_msaa, RenderingServer::ViewportScreenSpaceAA p_screen_space_aa, bool p_use_taa, bool p_use_debanding, uint32_t p_view_count) {
3037+
void RendererSceneRenderRD::render_buffers_configure(RID p_render_buffers, RID p_render_target, int p_internal_width, int p_internal_height, int p_width, int p_height, float p_fsr_sharpness, float p_fsr_mipmap_bias, RS::ViewportMSAA p_msaa, RenderingServer::ViewportScreenSpaceAA p_screen_space_aa, bool p_use_taa, bool p_use_debanding, float p_sharpen_intensity, uint32_t p_view_count) {
30353038
RendererRD::TextureStorage *texture_storage = RendererRD::TextureStorage::get_singleton();
30363039
RendererRD::MaterialStorage *material_storage = RendererRD::MaterialStorage::get_singleton();
30373040

@@ -3061,6 +3064,7 @@ void RendererSceneRenderRD::render_buffers_configure(RID p_render_buffers, RID p
30613064
rb->screen_space_aa = p_screen_space_aa;
30623065
rb->use_taa = p_use_taa;
30633066
rb->use_debanding = p_use_debanding;
3067+
rb->sharpen_intensity = p_sharpen_intensity;
30643068
rb->view_count = p_view_count;
30653069

30663070
if (is_clustered_enabled()) {

0 commit comments

Comments
 (0)