|
@@ -109,6 +109,9 @@ void Label3D::_bind_methods() {
|
|
ClassDB::bind_method(D_METHOD("set_alpha_scissor_threshold", "threshold"), &Label3D::set_alpha_scissor_threshold);
|
|
ClassDB::bind_method(D_METHOD("set_alpha_scissor_threshold", "threshold"), &Label3D::set_alpha_scissor_threshold);
|
|
ClassDB::bind_method(D_METHOD("get_alpha_scissor_threshold"), &Label3D::get_alpha_scissor_threshold);
|
|
ClassDB::bind_method(D_METHOD("get_alpha_scissor_threshold"), &Label3D::get_alpha_scissor_threshold);
|
|
|
|
|
|
|
|
+ ClassDB::bind_method(D_METHOD("set_alpha_hash_scale", "threshold"), &Label3D::set_alpha_hash_scale);
|
|
|
|
+ ClassDB::bind_method(D_METHOD("get_alpha_hash_scale"), &Label3D::get_alpha_hash_scale);
|
|
|
|
+
|
|
ClassDB::bind_method(D_METHOD("set_texture_filter", "mode"), &Label3D::set_texture_filter);
|
|
ClassDB::bind_method(D_METHOD("set_texture_filter", "mode"), &Label3D::set_texture_filter);
|
|
ClassDB::bind_method(D_METHOD("get_texture_filter"), &Label3D::get_texture_filter);
|
|
ClassDB::bind_method(D_METHOD("get_texture_filter"), &Label3D::get_texture_filter);
|
|
|
|
|
|
@@ -127,8 +130,9 @@ void Label3D::_bind_methods() {
|
|
ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "double_sided"), "set_draw_flag", "get_draw_flag", FLAG_DOUBLE_SIDED);
|
|
ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "double_sided"), "set_draw_flag", "get_draw_flag", FLAG_DOUBLE_SIDED);
|
|
ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "no_depth_test"), "set_draw_flag", "get_draw_flag", FLAG_DISABLE_DEPTH_TEST);
|
|
ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "no_depth_test"), "set_draw_flag", "get_draw_flag", FLAG_DISABLE_DEPTH_TEST);
|
|
ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "fixed_size"), "set_draw_flag", "get_draw_flag", FLAG_FIXED_SIZE);
|
|
ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "fixed_size"), "set_draw_flag", "get_draw_flag", FLAG_FIXED_SIZE);
|
|
- ADD_PROPERTY(PropertyInfo(Variant::INT, "alpha_cut", PROPERTY_HINT_ENUM, "Disabled,Discard,Opaque Pre-Pass"), "set_alpha_cut_mode", "get_alpha_cut_mode");
|
|
|
|
|
|
+ ADD_PROPERTY(PropertyInfo(Variant::INT, "alpha_cut", PROPERTY_HINT_ENUM, "Disabled,Discard,Opaque Pre-Pass,Alpha Hash"), "set_alpha_cut_mode", "get_alpha_cut_mode");
|
|
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "alpha_scissor_threshold", PROPERTY_HINT_RANGE, "0,1,0.001"), "set_alpha_scissor_threshold", "get_alpha_scissor_threshold");
|
|
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "alpha_scissor_threshold", PROPERTY_HINT_RANGE, "0,1,0.001"), "set_alpha_scissor_threshold", "get_alpha_scissor_threshold");
|
|
|
|
+ ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "alpha_hash_scale", PROPERTY_HINT_RANGE, "0,2,0.01"), "set_alpha_hash_scale", "get_alpha_hash_scale");
|
|
ADD_PROPERTY(PropertyInfo(Variant::INT, "texture_filter", PROPERTY_HINT_ENUM, "Nearest,Linear,Nearest Mipmap,Linear Mipmap,Nearest Mipmap Anisotropic,Linear Mipmap Anisotropic"), "set_texture_filter", "get_texture_filter");
|
|
ADD_PROPERTY(PropertyInfo(Variant::INT, "texture_filter", PROPERTY_HINT_ENUM, "Nearest,Linear,Nearest Mipmap,Linear Mipmap,Nearest Mipmap Anisotropic,Linear Mipmap Anisotropic"), "set_texture_filter", "get_texture_filter");
|
|
ADD_PROPERTY(PropertyInfo(Variant::INT, "render_priority", PROPERTY_HINT_RANGE, itos(RS::MATERIAL_RENDER_PRIORITY_MIN) + "," + itos(RS::MATERIAL_RENDER_PRIORITY_MAX) + ",1"), "set_render_priority", "get_render_priority");
|
|
ADD_PROPERTY(PropertyInfo(Variant::INT, "render_priority", PROPERTY_HINT_RANGE, itos(RS::MATERIAL_RENDER_PRIORITY_MIN) + "," + itos(RS::MATERIAL_RENDER_PRIORITY_MAX) + ",1"), "set_render_priority", "get_render_priority");
|
|
ADD_PROPERTY(PropertyInfo(Variant::INT, "outline_render_priority", PROPERTY_HINT_RANGE, itos(RS::MATERIAL_RENDER_PRIORITY_MIN) + "," + itos(RS::MATERIAL_RENDER_PRIORITY_MAX) + ",1"), "set_outline_render_priority", "get_outline_render_priority");
|
|
ADD_PROPERTY(PropertyInfo(Variant::INT, "outline_render_priority", PROPERTY_HINT_RANGE, itos(RS::MATERIAL_RENDER_PRIORITY_MIN) + "," + itos(RS::MATERIAL_RENDER_PRIORITY_MAX) + ",1"), "set_outline_render_priority", "get_outline_render_priority");
|
|
@@ -162,6 +166,7 @@ void Label3D::_bind_methods() {
|
|
BIND_ENUM_CONSTANT(ALPHA_CUT_DISABLED);
|
|
BIND_ENUM_CONSTANT(ALPHA_CUT_DISABLED);
|
|
BIND_ENUM_CONSTANT(ALPHA_CUT_DISCARD);
|
|
BIND_ENUM_CONSTANT(ALPHA_CUT_DISCARD);
|
|
BIND_ENUM_CONSTANT(ALPHA_CUT_OPAQUE_PREPASS);
|
|
BIND_ENUM_CONSTANT(ALPHA_CUT_OPAQUE_PREPASS);
|
|
|
|
+ BIND_ENUM_CONSTANT(ALPHA_CUT_HASH);
|
|
}
|
|
}
|
|
|
|
|
|
void Label3D::_validate_property(PropertyInfo &p_property) const {
|
|
void Label3D::_validate_property(PropertyInfo &p_property) const {
|
|
@@ -350,13 +355,23 @@ void Label3D::_generate_glyph_surfaces(const Glyph &p_glyph, Vector2 &r_offset,
|
|
RS::get_singleton()->material_set_param(surf.material, "uv2_offset", Vector3(0, 0, 0));
|
|
RS::get_singleton()->material_set_param(surf.material, "uv2_offset", Vector3(0, 0, 0));
|
|
RS::get_singleton()->material_set_param(surf.material, "uv2_scale", Vector3(1, 1, 1));
|
|
RS::get_singleton()->material_set_param(surf.material, "uv2_scale", Vector3(1, 1, 1));
|
|
RS::get_singleton()->material_set_param(surf.material, "alpha_scissor_threshold", alpha_scissor_threshold);
|
|
RS::get_singleton()->material_set_param(surf.material, "alpha_scissor_threshold", alpha_scissor_threshold);
|
|
|
|
+ RS::get_singleton()->material_set_param(surf.material, "alpha_hash_scale", alpha_hash_scale);
|
|
if (msdf) {
|
|
if (msdf) {
|
|
RS::get_singleton()->material_set_param(surf.material, "msdf_pixel_range", TS->font_get_msdf_pixel_range(p_glyph.font_rid));
|
|
RS::get_singleton()->material_set_param(surf.material, "msdf_pixel_range", TS->font_get_msdf_pixel_range(p_glyph.font_rid));
|
|
RS::get_singleton()->material_set_param(surf.material, "msdf_outline_size", p_outline_size);
|
|
RS::get_singleton()->material_set_param(surf.material, "msdf_outline_size", p_outline_size);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ BaseMaterial3D::Transparency mat_transparency = BaseMaterial3D::Transparency::TRANSPARENCY_ALPHA;
|
|
|
|
+ if (get_alpha_cut_mode() == ALPHA_CUT_DISCARD) {
|
|
|
|
+ mat_transparency = BaseMaterial3D::Transparency::TRANSPARENCY_ALPHA_SCISSOR;
|
|
|
|
+ } else if (get_alpha_cut_mode() == ALPHA_CUT_OPAQUE_PREPASS) {
|
|
|
|
+ mat_transparency = BaseMaterial3D::Transparency::TRANSPARENCY_ALPHA_DEPTH_PRE_PASS;
|
|
|
|
+ } else if (get_alpha_cut_mode() == ALPHA_CUT_HASH) {
|
|
|
|
+ mat_transparency = BaseMaterial3D::Transparency::TRANSPARENCY_ALPHA_HASH;
|
|
|
|
+ }
|
|
|
|
+
|
|
RID shader_rid;
|
|
RID shader_rid;
|
|
- StandardMaterial3D::get_material_for_2d(get_draw_flag(FLAG_SHADED), true, get_draw_flag(FLAG_DOUBLE_SIDED), get_alpha_cut_mode() == ALPHA_CUT_DISCARD, get_alpha_cut_mode() == ALPHA_CUT_OPAQUE_PREPASS, get_billboard_mode() == StandardMaterial3D::BILLBOARD_ENABLED, get_billboard_mode() == StandardMaterial3D::BILLBOARD_FIXED_Y, msdf, get_draw_flag(FLAG_DISABLE_DEPTH_TEST), get_draw_flag(FLAG_FIXED_SIZE), texture_filter, &shader_rid);
|
|
|
|
|
|
+ StandardMaterial3D::get_material_for_2d(get_draw_flag(FLAG_SHADED), mat_transparency, get_draw_flag(FLAG_DOUBLE_SIDED), get_billboard_mode() == StandardMaterial3D::BILLBOARD_ENABLED, get_billboard_mode() == StandardMaterial3D::BILLBOARD_FIXED_Y, msdf, get_draw_flag(FLAG_DISABLE_DEPTH_TEST), get_draw_flag(FLAG_FIXED_SIZE), texture_filter, &shader_rid);
|
|
|
|
|
|
RS::get_singleton()->material_set_shader(surf.material, shader_rid);
|
|
RS::get_singleton()->material_set_shader(surf.material, shader_rid);
|
|
RS::get_singleton()->material_set_param(surf.material, "texture_albedo", tex);
|
|
RS::get_singleton()->material_set_param(surf.material, "texture_albedo", tex);
|
|
@@ -906,7 +921,7 @@ StandardMaterial3D::BillboardMode Label3D::get_billboard_mode() const {
|
|
}
|
|
}
|
|
|
|
|
|
void Label3D::set_alpha_cut_mode(AlphaCutMode p_mode) {
|
|
void Label3D::set_alpha_cut_mode(AlphaCutMode p_mode) {
|
|
- ERR_FAIL_INDEX(p_mode, 3);
|
|
|
|
|
|
+ ERR_FAIL_INDEX(p_mode, ALPHA_CUT_MAX);
|
|
if (alpha_cut != p_mode) {
|
|
if (alpha_cut != p_mode) {
|
|
alpha_cut = p_mode;
|
|
alpha_cut = p_mode;
|
|
_queue_update();
|
|
_queue_update();
|
|
@@ -929,6 +944,17 @@ Label3D::AlphaCutMode Label3D::get_alpha_cut_mode() const {
|
|
return alpha_cut;
|
|
return alpha_cut;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+void Label3D::set_alpha_hash_scale(float p_hash_scale) {
|
|
|
|
+ if (alpha_hash_scale != p_hash_scale) {
|
|
|
|
+ alpha_hash_scale = p_hash_scale;
|
|
|
|
+ _queue_update();
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+float Label3D::get_alpha_hash_scale() const {
|
|
|
|
+ return alpha_hash_scale;
|
|
|
|
+}
|
|
|
|
+
|
|
void Label3D::set_alpha_scissor_threshold(float p_threshold) {
|
|
void Label3D::set_alpha_scissor_threshold(float p_threshold) {
|
|
if (alpha_scissor_threshold != p_threshold) {
|
|
if (alpha_scissor_threshold != p_threshold) {
|
|
alpha_scissor_threshold = p_threshold;
|
|
alpha_scissor_threshold = p_threshold;
|