Add an option to disable boot splash filtering
Disabling filtering is usually desired in projects using a pixel art style. This closes #19415.
This commit is contained in:
parent
bd937ea397
commit
786a7341a7
13 changed files with 19 additions and 16 deletions
|
@ -3157,8 +3157,10 @@
|
||||||
</argument>
|
</argument>
|
||||||
<argument index="2" name="scale" type="bool">
|
<argument index="2" name="scale" type="bool">
|
||||||
</argument>
|
</argument>
|
||||||
|
<argument index="3" name="use_filter" type="bool" default="true">
|
||||||
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
Sets a boot image. The color defines the background color and if scale is [code]true[/code] the image will be scaled to fit the screen size.
|
Sets a boot image. The color defines the background color. If [code]scale[/code] is [code]true[/code], the image will be scaled to fit the screen size. If [code]use_filter[/code] is [code]true[/code], the image will be scaled with linear interpolation. If [code]use_filter[/code] is [code]false[/code], the image will be scaled with nearest-neighbor interpolation.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="set_debug_generate_wireframes">
|
<method name="set_debug_generate_wireframes">
|
||||||
|
|
|
@ -780,7 +780,7 @@ public:
|
||||||
RasterizerCanvas *get_canvas() { return &canvas; }
|
RasterizerCanvas *get_canvas() { return &canvas; }
|
||||||
RasterizerScene *get_scene() { return &scene; }
|
RasterizerScene *get_scene() { return &scene; }
|
||||||
|
|
||||||
void set_boot_image(const Ref<Image> &p_image, const Color &p_color, bool p_scale) {}
|
void set_boot_image(const Ref<Image> &p_image, const Color &p_color, bool p_scale, bool p_use_filter = true) {}
|
||||||
|
|
||||||
void initialize() {}
|
void initialize() {}
|
||||||
void begin_frame(double frame_step) {}
|
void begin_frame(double frame_step) {}
|
||||||
|
|
|
@ -338,7 +338,7 @@ void RasterizerGLES2::clear_render_target(const Color &p_color) {
|
||||||
storage->frame.clear_request_color = p_color;
|
storage->frame.clear_request_color = p_color;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerGLES2::set_boot_image(const Ref<Image> &p_image, const Color &p_color, bool p_scale) {
|
void RasterizerGLES2::set_boot_image(const Ref<Image> &p_image, const Color &p_color, bool p_scale, bool p_use_filter) {
|
||||||
|
|
||||||
if (p_image.is_null() || p_image->empty())
|
if (p_image.is_null() || p_image->empty())
|
||||||
return;
|
return;
|
||||||
|
@ -360,7 +360,7 @@ void RasterizerGLES2::set_boot_image(const Ref<Image> &p_image, const Color &p_c
|
||||||
canvas->canvas_begin();
|
canvas->canvas_begin();
|
||||||
|
|
||||||
RID texture = storage->texture_create();
|
RID texture = storage->texture_create();
|
||||||
storage->texture_allocate(texture, p_image->get_width(), p_image->get_height(), 0, p_image->get_format(), VS::TEXTURE_TYPE_2D, VS::TEXTURE_FLAG_FILTER);
|
storage->texture_allocate(texture, p_image->get_width(), p_image->get_height(), 0, p_image->get_format(), VS::TEXTURE_TYPE_2D, p_use_filter ? VS::TEXTURE_FLAG_FILTER : 0);
|
||||||
storage->texture_set_data(texture, p_image);
|
storage->texture_set_data(texture, p_image);
|
||||||
|
|
||||||
Rect2 imgrect(0, 0, p_image->get_width(), p_image->get_height());
|
Rect2 imgrect(0, 0, p_image->get_width(), p_image->get_height());
|
||||||
|
|
|
@ -51,7 +51,7 @@ public:
|
||||||
virtual RasterizerCanvas *get_canvas();
|
virtual RasterizerCanvas *get_canvas();
|
||||||
virtual RasterizerScene *get_scene();
|
virtual RasterizerScene *get_scene();
|
||||||
|
|
||||||
virtual void set_boot_image(const Ref<Image> &p_image, const Color &p_color, bool p_scale);
|
virtual void set_boot_image(const Ref<Image> &p_image, const Color &p_color, bool p_scale, bool p_use_filter = true);
|
||||||
|
|
||||||
virtual void initialize();
|
virtual void initialize();
|
||||||
virtual void begin_frame(double frame_step);
|
virtual void begin_frame(double frame_step);
|
||||||
|
|
|
@ -273,7 +273,7 @@ void RasterizerGLES3::clear_render_target(const Color &p_color) {
|
||||||
storage->frame.clear_request_color = p_color;
|
storage->frame.clear_request_color = p_color;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerGLES3::set_boot_image(const Ref<Image> &p_image, const Color &p_color, bool p_scale) {
|
void RasterizerGLES3::set_boot_image(const Ref<Image> &p_image, const Color &p_color, bool p_scale, bool p_use_filter) {
|
||||||
|
|
||||||
if (p_image.is_null() || p_image->empty())
|
if (p_image.is_null() || p_image->empty())
|
||||||
return;
|
return;
|
||||||
|
@ -296,7 +296,7 @@ void RasterizerGLES3::set_boot_image(const Ref<Image> &p_image, const Color &p_c
|
||||||
canvas->canvas_begin();
|
canvas->canvas_begin();
|
||||||
|
|
||||||
RID texture = storage->texture_create();
|
RID texture = storage->texture_create();
|
||||||
storage->texture_allocate(texture, p_image->get_width(), p_image->get_height(), 0, p_image->get_format(), VS::TEXTURE_TYPE_2D, VS::TEXTURE_FLAG_FILTER);
|
storage->texture_allocate(texture, p_image->get_width(), p_image->get_height(), 0, p_image->get_format(), VS::TEXTURE_TYPE_2D, p_use_filter ? VS::TEXTURE_FLAG_FILTER : 0);
|
||||||
storage->texture_set_data(texture, p_image);
|
storage->texture_set_data(texture, p_image);
|
||||||
|
|
||||||
Rect2 imgrect(0, 0, p_image->get_width(), p_image->get_height());
|
Rect2 imgrect(0, 0, p_image->get_width(), p_image->get_height());
|
||||||
|
|
|
@ -51,7 +51,7 @@ public:
|
||||||
virtual RasterizerCanvas *get_canvas();
|
virtual RasterizerCanvas *get_canvas();
|
||||||
virtual RasterizerScene *get_scene();
|
virtual RasterizerScene *get_scene();
|
||||||
|
|
||||||
virtual void set_boot_image(const Ref<Image> &p_image, const Color &p_color, bool p_scale);
|
virtual void set_boot_image(const Ref<Image> &p_image, const Color &p_color, bool p_scale, bool p_use_filter = true);
|
||||||
|
|
||||||
virtual void initialize();
|
virtual void initialize();
|
||||||
virtual void begin_frame(double frame_step);
|
virtual void begin_frame(double frame_step);
|
||||||
|
|
|
@ -1153,6 +1153,7 @@ Error Main::setup2(Thread::ID p_main_tid_override) {
|
||||||
if (show_logo) { //boot logo!
|
if (show_logo) { //boot logo!
|
||||||
String boot_logo_path = GLOBAL_DEF("application/boot_splash/image", String());
|
String boot_logo_path = GLOBAL_DEF("application/boot_splash/image", String());
|
||||||
bool boot_logo_scale = GLOBAL_DEF("application/boot_splash/fullsize", true);
|
bool boot_logo_scale = GLOBAL_DEF("application/boot_splash/fullsize", true);
|
||||||
|
bool boot_logo_filter = GLOBAL_DEF("application/boot_splash/use_filter", true);
|
||||||
ProjectSettings::get_singleton()->set_custom_property_info("application/boot_splash/image", PropertyInfo(Variant::STRING, "application/boot_splash/image", PROPERTY_HINT_FILE, "*.png"));
|
ProjectSettings::get_singleton()->set_custom_property_info("application/boot_splash/image", PropertyInfo(Variant::STRING, "application/boot_splash/image", PROPERTY_HINT_FILE, "*.png"));
|
||||||
|
|
||||||
Ref<Image> boot_logo;
|
Ref<Image> boot_logo;
|
||||||
|
@ -1169,7 +1170,7 @@ Error Main::setup2(Thread::ID p_main_tid_override) {
|
||||||
Color boot_bg_color = GLOBAL_DEF("application/boot_splash/bg_color", boot_splash_bg_color);
|
Color boot_bg_color = GLOBAL_DEF("application/boot_splash/bg_color", boot_splash_bg_color);
|
||||||
if (boot_logo.is_valid()) {
|
if (boot_logo.is_valid()) {
|
||||||
OS::get_singleton()->_msec_splash = OS::get_singleton()->get_ticks_msec();
|
OS::get_singleton()->_msec_splash = OS::get_singleton()->get_ticks_msec();
|
||||||
VisualServer::get_singleton()->set_boot_image(boot_logo, boot_bg_color, boot_logo_scale);
|
VisualServer::get_singleton()->set_boot_image(boot_logo, boot_bg_color, boot_logo_scale, boot_logo_filter);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
#ifndef NO_DEFAULT_BOOT_LOGO
|
#ifndef NO_DEFAULT_BOOT_LOGO
|
||||||
|
|
|
@ -1103,7 +1103,7 @@ public:
|
||||||
virtual RasterizerCanvas *get_canvas() = 0;
|
virtual RasterizerCanvas *get_canvas() = 0;
|
||||||
virtual RasterizerScene *get_scene() = 0;
|
virtual RasterizerScene *get_scene() = 0;
|
||||||
|
|
||||||
virtual void set_boot_image(const Ref<Image> &p_image, const Color &p_color, bool p_scale) = 0;
|
virtual void set_boot_image(const Ref<Image> &p_image, const Color &p_color, bool p_scale, bool p_use_filter = true) = 0;
|
||||||
|
|
||||||
virtual void initialize() = 0;
|
virtual void initialize() = 0;
|
||||||
virtual void begin_frame(double frame_step) = 0;
|
virtual void begin_frame(double frame_step) = 0;
|
||||||
|
|
|
@ -153,10 +153,10 @@ int VisualServerRaster::get_render_info(RenderInfo p_info) {
|
||||||
|
|
||||||
/* TESTING */
|
/* TESTING */
|
||||||
|
|
||||||
void VisualServerRaster::set_boot_image(const Ref<Image> &p_image, const Color &p_color, bool p_scale) {
|
void VisualServerRaster::set_boot_image(const Ref<Image> &p_image, const Color &p_color, bool p_scale, bool p_use_filter) {
|
||||||
|
|
||||||
redraw_request();
|
redraw_request();
|
||||||
VSG::rasterizer->set_boot_image(p_image, p_color, p_scale);
|
VSG::rasterizer->set_boot_image(p_image, p_color, p_scale, p_use_filter);
|
||||||
}
|
}
|
||||||
void VisualServerRaster::set_default_clear_color(const Color &p_color) {
|
void VisualServerRaster::set_default_clear_color(const Color &p_color) {
|
||||||
VSG::viewport->set_default_clear_color(p_color);
|
VSG::viewport->set_default_clear_color(p_color);
|
||||||
|
|
|
@ -685,7 +685,7 @@ public:
|
||||||
|
|
||||||
/* TESTING */
|
/* TESTING */
|
||||||
|
|
||||||
virtual void set_boot_image(const Ref<Image> &p_image, const Color &p_color, bool p_scale);
|
virtual void set_boot_image(const Ref<Image> &p_image, const Color &p_color, bool p_scale, bool p_use_filter = true);
|
||||||
virtual void set_default_clear_color(const Color &p_color);
|
virtual void set_default_clear_color(const Color &p_color);
|
||||||
|
|
||||||
virtual bool has_feature(Features p_feature) const;
|
virtual bool has_feature(Features p_feature) const;
|
||||||
|
|
|
@ -602,7 +602,7 @@ public:
|
||||||
return visual_server->get_render_info(p_info);
|
return visual_server->get_render_info(p_info);
|
||||||
}
|
}
|
||||||
|
|
||||||
FUNC3(set_boot_image, const Ref<Image> &, const Color &, bool)
|
FUNC4(set_boot_image, const Ref<Image> &, const Color &, bool, bool)
|
||||||
FUNC1(set_default_clear_color, const Color &)
|
FUNC1(set_default_clear_color, const Color &)
|
||||||
|
|
||||||
FUNC0R(RID, get_test_cube)
|
FUNC0R(RID, get_test_cube)
|
||||||
|
|
|
@ -2047,7 +2047,7 @@ void VisualServer::_bind_methods() {
|
||||||
ClassDB::bind_method(D_METHOD("get_test_texture"), &VisualServer::get_test_texture);
|
ClassDB::bind_method(D_METHOD("get_test_texture"), &VisualServer::get_test_texture);
|
||||||
ClassDB::bind_method(D_METHOD("get_white_texture"), &VisualServer::get_white_texture);
|
ClassDB::bind_method(D_METHOD("get_white_texture"), &VisualServer::get_white_texture);
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("set_boot_image", "image", "color", "scale"), &VisualServer::set_boot_image);
|
ClassDB::bind_method(D_METHOD("set_boot_image", "image", "color", "scale", "use_filter"), &VisualServer::set_boot_image, DEFVAL(true));
|
||||||
ClassDB::bind_method(D_METHOD("set_default_clear_color", "color"), &VisualServer::set_default_clear_color);
|
ClassDB::bind_method(D_METHOD("set_default_clear_color", "color"), &VisualServer::set_default_clear_color);
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("has_feature", "feature"), &VisualServer::has_feature);
|
ClassDB::bind_method(D_METHOD("has_feature", "feature"), &VisualServer::has_feature);
|
||||||
|
|
|
@ -1029,7 +1029,7 @@ public:
|
||||||
virtual void mesh_add_surface_from_mesh_data(RID p_mesh, const Geometry::MeshData &p_mesh_data);
|
virtual void mesh_add_surface_from_mesh_data(RID p_mesh, const Geometry::MeshData &p_mesh_data);
|
||||||
virtual void mesh_add_surface_from_planes(RID p_mesh, const PoolVector<Plane> &p_planes);
|
virtual void mesh_add_surface_from_planes(RID p_mesh, const PoolVector<Plane> &p_planes);
|
||||||
|
|
||||||
virtual void set_boot_image(const Ref<Image> &p_image, const Color &p_color, bool p_scale) = 0;
|
virtual void set_boot_image(const Ref<Image> &p_image, const Color &p_color, bool p_scale, bool p_use_filter = true) = 0;
|
||||||
virtual void set_default_clear_color(const Color &p_color) = 0;
|
virtual void set_default_clear_color(const Color &p_color) = 0;
|
||||||
|
|
||||||
enum Features {
|
enum Features {
|
||||||
|
|
Loading…
Reference in a new issue