Skip to content

Commit

Permalink
Merge pull request #93802 from feiyue-z/Fix-inconsistent-CanvasModula…
Browse files Browse the repository at this point in the history
…te-color-in-2D-HDR

Fix inconsistent CanvasModulate color in 2D HDR
  • Loading branch information
akien-mga committed Jul 24, 2024
2 parents 7708f0e + 6f30df4 commit 27daf3b
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 8 deletions.
13 changes: 9 additions & 4 deletions drivers/gles3/rasterizer_canvas_gles3.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -341,10 +341,15 @@ void RasterizerCanvasGLES3::canvas_render_items(RID p_to_render_target, Item *p_
normal_transform.columns[2] = Vector2();
_update_transform_2d_to_mat4(normal_transform, state_buffer.canvas_normal_transform);

state_buffer.canvas_modulate[0] = p_modulate.r;
state_buffer.canvas_modulate[1] = p_modulate.g;
state_buffer.canvas_modulate[2] = p_modulate.b;
state_buffer.canvas_modulate[3] = p_modulate.a;
bool use_linear_colors = texture_storage->render_target_is_using_hdr(p_to_render_target);
Color modulate = p_modulate;
if (use_linear_colors) {
modulate = p_modulate.srgb_to_linear();
}
state_buffer.canvas_modulate[0] = modulate.r;
state_buffer.canvas_modulate[1] = modulate.g;
state_buffer.canvas_modulate[2] = modulate.b;
state_buffer.canvas_modulate[3] = modulate.a;

Size2 render_target_size = texture_storage->render_target_get_size(p_to_render_target);
state_buffer.screen_pixel_size[0] = 1.0 / render_target_size.x;
Expand Down
13 changes: 9 additions & 4 deletions servers/rendering/renderer_rd/renderer_canvas_render_rd.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1451,10 +1451,15 @@ void RendererCanvasRenderRD::canvas_render_items(RID p_to_render_target, Item *p
normal_transform.columns[2] = Vector2();
_update_transform_2d_to_mat4(normal_transform, state_buffer.canvas_normal_transform);

state_buffer.canvas_modulate[0] = p_modulate.r;
state_buffer.canvas_modulate[1] = p_modulate.g;
state_buffer.canvas_modulate[2] = p_modulate.b;
state_buffer.canvas_modulate[3] = p_modulate.a;
bool use_linear_colors = texture_storage->render_target_is_using_hdr(p_to_render_target);
Color modulate = p_modulate;
if (use_linear_colors) {
modulate = p_modulate.srgb_to_linear();
}
state_buffer.canvas_modulate[0] = modulate.r;
state_buffer.canvas_modulate[1] = modulate.g;
state_buffer.canvas_modulate[2] = modulate.b;
state_buffer.canvas_modulate[3] = modulate.a;

Size2 render_target_size = texture_storage->render_target_get_size(p_to_render_target);
state_buffer.screen_pixel_size[0] = 1.0 / render_target_size.x;
Expand Down

0 comments on commit 27daf3b

Please sign in to comment.