diff --git a/doc/classes/Viewport.xml b/doc/classes/Viewport.xml index 65586629e7e..e449159ce60 100644 --- a/doc/classes/Viewport.xml +++ b/doc/classes/Viewport.xml @@ -291,6 +291,7 @@ The rendering mode of viewport. + [b]Note:[/b] If set to [constant USAGE_2D] or [constant USAGE_2D_NO_SAMPLING], [member hdr] will have no effect when enabled since HDR is not supported for 2D. If [code]true[/code], allocates the viewport's framebuffer with full floating-point precision (32-bit) instead of half floating-point precision (16-bit). Only effective when [member hdr] is also enabled. diff --git a/scene/main/viewport.cpp b/scene/main/viewport.cpp index 1ec1e869413..78b12714c08 100644 --- a/scene/main/viewport.cpp +++ b/scene/main/viewport.cpp @@ -3022,11 +3022,6 @@ Control *Viewport::get_modal_stack_top() const { } String Viewport::get_configuration_warning() const { - /*if (get_parent() && !Object::cast_to(get_parent()) && !render_target) { - - return TTR("This viewport is not set as render target. If you intend for it to display its contents directly to the screen, make it a child of a Control so it can obtain a size. Otherwise, make it a RenderTarget and assign its internal texture to some node for display."); - }*/ - String warning = Node::get_configuration_warning(); if (size.x <= 1 || size.y <= 1) { @@ -3035,6 +3030,14 @@ String Viewport::get_configuration_warning() const { } warning += TTR("The Viewport size must be greater than or equal to 2 pixels on both dimensions to render anything."); } + + if (hdr && (usage == USAGE_2D || usage == USAGE_2D_NO_SAMPLING)) { + if (warning != String()) { + warning += "\n\n"; + } + warning += TTR("This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-Sampling.\nHDR is only supported in Viewports that have their Usage set to 3D or 3D No-Effects.\nHDR will be disabled for this Viewport."); + } + return warning; } @@ -3101,6 +3104,7 @@ void Viewport::set_hdr(bool p_hdr) { hdr = p_hdr; VS::get_singleton()->viewport_set_hdr(viewport, p_hdr); + update_configuration_warning(); } bool Viewport::get_hdr() const { @@ -3121,8 +3125,13 @@ bool Viewport::is_using_32_bpc_depth() const { } void Viewport::set_usage(Usage p_usage) { + if (usage == p_usage) { + return; + } + usage = p_usage; VS::get_singleton()->viewport_set_usage(viewport, VS::ViewportUsage(p_usage)); + update_configuration_warning(); } Viewport::Usage Viewport::get_usage() const {