feat: updated engine version to 4.4-rc1
This commit is contained in:
parent
ee00efde1f
commit
21ba8e33af
5459 changed files with 1128836 additions and 198305 deletions
|
|
@ -37,7 +37,7 @@
|
|||
#include "scene/main/scene_tree.h"
|
||||
|
||||
void Material::set_next_pass(const Ref<Material> &p_pass) {
|
||||
for (Ref<Material> pass_child = p_pass; pass_child != nullptr; pass_child = pass_child->get_next_pass()) {
|
||||
for (Ref<Material> pass_child = p_pass; pass_child.is_valid(); pass_child = pass_child->get_next_pass()) {
|
||||
ERR_FAIL_COND_MSG(pass_child == this, "Can't set as next_pass one of its parents to prevent crashes due to recursive loop.");
|
||||
}
|
||||
|
||||
|
|
@ -46,11 +46,15 @@ void Material::set_next_pass(const Ref<Material> &p_pass) {
|
|||
}
|
||||
|
||||
next_pass = p_pass;
|
||||
RID next_pass_rid;
|
||||
if (next_pass.is_valid()) {
|
||||
next_pass_rid = next_pass->get_rid();
|
||||
|
||||
if (material.is_valid()) {
|
||||
RID next_pass_rid;
|
||||
if (next_pass.is_valid()) {
|
||||
next_pass_rid = next_pass->get_rid();
|
||||
}
|
||||
|
||||
RS::get_singleton()->material_set_next_pass(material, next_pass_rid);
|
||||
}
|
||||
RS::get_singleton()->material_set_next_pass(material, next_pass_rid);
|
||||
}
|
||||
|
||||
Ref<Material> Material::get_next_pass() const {
|
||||
|
|
@ -61,7 +65,10 @@ void Material::set_render_priority(int p_priority) {
|
|||
ERR_FAIL_COND(p_priority < RENDER_PRIORITY_MIN);
|
||||
ERR_FAIL_COND(p_priority > RENDER_PRIORITY_MAX);
|
||||
render_priority = p_priority;
|
||||
RS::get_singleton()->material_set_render_priority(material, p_priority);
|
||||
|
||||
if (material.is_valid()) {
|
||||
RS::get_singleton()->material_set_render_priority(material, p_priority);
|
||||
}
|
||||
}
|
||||
|
||||
int Material::get_render_priority() const {
|
||||
|
|
@ -92,9 +99,13 @@ void Material::_mark_initialized(const Callable &p_add_to_dirty_list, const Call
|
|||
if (ResourceLoader::is_within_load()) {
|
||||
DEV_ASSERT(init_state != INIT_STATE_READY);
|
||||
if (init_state == INIT_STATE_UNINITIALIZED) { // Prevent queueing twice.
|
||||
init_state = INIT_STATE_INITIALIZING;
|
||||
callable_mp(this, &Material::_mark_ready).call_deferred();
|
||||
p_update_shader.call_deferred();
|
||||
if (p_update_shader.is_valid()) {
|
||||
init_state = INIT_STATE_INITIALIZING;
|
||||
callable_mp(this, &Material::_mark_ready).call_deferred();
|
||||
p_update_shader.call_deferred();
|
||||
} else {
|
||||
init_state = INIT_STATE_READY;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Straightforward conditions.
|
||||
|
|
@ -113,12 +124,12 @@ void Material::inspect_native_shader_code() {
|
|||
|
||||
RID Material::get_shader_rid() const {
|
||||
RID ret;
|
||||
GDVIRTUAL_REQUIRED_CALL(_get_shader_rid, ret);
|
||||
GDVIRTUAL_CALL(_get_shader_rid, ret);
|
||||
return ret;
|
||||
}
|
||||
Shader::Mode Material::get_shader_mode() const {
|
||||
Shader::Mode ret = Shader::MODE_MAX;
|
||||
GDVIRTUAL_REQUIRED_CALL(_get_shader_mode, ret);
|
||||
GDVIRTUAL_CALL(_get_shader_mode, ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
@ -165,13 +176,14 @@ void Material::_bind_methods() {
|
|||
}
|
||||
|
||||
Material::Material() {
|
||||
material = RenderingServer::get_singleton()->material_create();
|
||||
render_priority = 0;
|
||||
}
|
||||
|
||||
Material::~Material() {
|
||||
ERR_FAIL_NULL(RenderingServer::get_singleton());
|
||||
RenderingServer::get_singleton()->free(material);
|
||||
if (material.is_valid()) {
|
||||
ERR_FAIL_NULL(RenderingServer::get_singleton());
|
||||
RenderingServer::get_singleton()->free(material);
|
||||
}
|
||||
}
|
||||
|
||||
///////////////////////////////////
|
||||
|
|
@ -227,7 +239,7 @@ bool ShaderMaterial::_get(const StringName &p_name, Variant &r_ret) const {
|
|||
}
|
||||
|
||||
void ShaderMaterial::_get_property_list(List<PropertyInfo> *p_list) const {
|
||||
if (!shader.is_null()) {
|
||||
if (shader.is_valid()) {
|
||||
List<PropertyInfo> list;
|
||||
shader->get_shader_uniform_list(&list, true);
|
||||
|
||||
|
|
@ -374,12 +386,11 @@ void ShaderMaterial::_get_property_list(List<PropertyInfo> *p_list) const {
|
|||
|
||||
bool ShaderMaterial::_property_can_revert(const StringName &p_name) const {
|
||||
if (shader.is_valid()) {
|
||||
const StringName *pr = remap_cache.getptr(p_name);
|
||||
if (pr) {
|
||||
Variant default_value = RenderingServer::get_singleton()->shader_get_parameter_default(shader->get_rid(), *pr);
|
||||
Variant current_value = get_shader_parameter(*pr);
|
||||
return default_value.get_type() != Variant::NIL && default_value != current_value;
|
||||
if (remap_cache.has(p_name)) {
|
||||
return true;
|
||||
}
|
||||
const String sname = p_name;
|
||||
return sname == "render_priority" || sname == "next_pass";
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
|
@ -390,6 +401,12 @@ bool ShaderMaterial::_property_get_revert(const StringName &p_name, Variant &r_p
|
|||
if (pr) {
|
||||
r_property = RenderingServer::get_singleton()->shader_get_parameter_default(shader->get_rid(), *pr);
|
||||
return true;
|
||||
} else if (p_name == "render_priority") {
|
||||
r_property = 0;
|
||||
return true;
|
||||
} else if (p_name == "next_pass") {
|
||||
r_property = Variant();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
|
|
@ -414,7 +431,11 @@ void ShaderMaterial::set_shader(const Ref<Shader> &p_shader) {
|
|||
}
|
||||
}
|
||||
|
||||
RS::get_singleton()->material_set_shader(_get_material(), rid);
|
||||
RID material_rid = _get_material();
|
||||
if (material_rid.is_valid()) {
|
||||
RS::get_singleton()->material_set_shader(material_rid, rid);
|
||||
}
|
||||
|
||||
notify_property_list_changed(); //properties for shader exposed
|
||||
emit_changed();
|
||||
}
|
||||
|
|
@ -424,9 +445,12 @@ Ref<Shader> ShaderMaterial::get_shader() const {
|
|||
}
|
||||
|
||||
void ShaderMaterial::set_shader_parameter(const StringName &p_param, const Variant &p_value) {
|
||||
RID material_rid = _get_material();
|
||||
if (p_value.get_type() == Variant::NIL) {
|
||||
param_cache.erase(p_param);
|
||||
RS::get_singleton()->material_set_param(_get_material(), p_param, Variant());
|
||||
if (material_rid.is_valid()) {
|
||||
RS::get_singleton()->material_set_param(material_rid, p_param, Variant());
|
||||
}
|
||||
} else {
|
||||
Variant *v = param_cache.getptr(p_param);
|
||||
if (!v) {
|
||||
|
|
@ -441,12 +465,15 @@ void ShaderMaterial::set_shader_parameter(const StringName &p_param, const Varia
|
|||
RID tex_rid = p_value;
|
||||
if (tex_rid == RID()) {
|
||||
param_cache.erase(p_param);
|
||||
RS::get_singleton()->material_set_param(_get_material(), p_param, Variant());
|
||||
} else {
|
||||
RS::get_singleton()->material_set_param(_get_material(), p_param, tex_rid);
|
||||
|
||||
if (material_rid.is_valid()) {
|
||||
RS::get_singleton()->material_set_param(material_rid, p_param, Variant());
|
||||
}
|
||||
} else if (material_rid.is_valid()) {
|
||||
RS::get_singleton()->material_set_param(material_rid, p_param, tex_rid);
|
||||
}
|
||||
} else {
|
||||
RS::get_singleton()->material_set_param(_get_material(), p_param, p_value);
|
||||
} else if (material_rid.is_valid()) {
|
||||
RS::get_singleton()->material_set_param(material_rid, p_param, p_value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -463,6 +490,32 @@ void ShaderMaterial::_shader_changed() {
|
|||
notify_property_list_changed(); //update all properties
|
||||
}
|
||||
|
||||
void ShaderMaterial::_check_material_rid() const {
|
||||
MutexLock lock(material_rid_mutex);
|
||||
if (_get_material().is_null()) {
|
||||
RID shader_rid = shader.is_valid() ? shader->get_rid() : RID();
|
||||
RID next_pass_rid;
|
||||
if (get_next_pass().is_valid()) {
|
||||
next_pass_rid = get_next_pass()->get_rid();
|
||||
}
|
||||
|
||||
_set_material(RS::get_singleton()->material_create_from_shader(next_pass_rid, get_render_priority(), shader_rid));
|
||||
|
||||
for (KeyValue<StringName, Variant> param : param_cache) {
|
||||
if (param.value.get_type() == Variant::OBJECT) {
|
||||
RID tex_rid = param.value;
|
||||
if (tex_rid.is_valid()) {
|
||||
RS::get_singleton()->material_set_param(_get_material(), param.key, tex_rid);
|
||||
} else {
|
||||
RS::get_singleton()->material_set_param(_get_material(), param.key, Variant());
|
||||
}
|
||||
} else {
|
||||
RS::get_singleton()->material_set_param(_get_material(), param.key, param.value);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ShaderMaterial::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("set_shader", "shader"), &ShaderMaterial::set_shader);
|
||||
ClassDB::bind_method(D_METHOD("get_shader"), &ShaderMaterial::get_shader);
|
||||
|
|
@ -503,6 +556,12 @@ Shader::Mode ShaderMaterial::get_shader_mode() const {
|
|||
return Shader::MODE_SPATIAL;
|
||||
}
|
||||
}
|
||||
|
||||
RID ShaderMaterial::get_rid() const {
|
||||
_check_material_rid();
|
||||
return Material::get_rid();
|
||||
}
|
||||
|
||||
RID ShaderMaterial::get_shader_rid() const {
|
||||
if (shader.is_valid()) {
|
||||
return shader->get_rid();
|
||||
|
|
@ -512,6 +571,7 @@ RID ShaderMaterial::get_shader_rid() const {
|
|||
}
|
||||
|
||||
ShaderMaterial::ShaderMaterial() {
|
||||
// Material RID will be empty until it is required.
|
||||
}
|
||||
|
||||
ShaderMaterial::~ShaderMaterial() {
|
||||
|
|
@ -519,10 +579,11 @@ ShaderMaterial::~ShaderMaterial() {
|
|||
|
||||
/////////////////////////////////
|
||||
|
||||
HashMap<BaseMaterial3D::MaterialKey, BaseMaterial3D::ShaderData, BaseMaterial3D::MaterialKey> BaseMaterial3D::shader_map;
|
||||
Mutex BaseMaterial3D::shader_map_mutex;
|
||||
BaseMaterial3D::ShaderNames *BaseMaterial3D::shader_names = nullptr;
|
||||
Mutex BaseMaterial3D::material_mutex;
|
||||
SelfList<BaseMaterial3D>::List BaseMaterial3D::dirty_materials;
|
||||
HashMap<BaseMaterial3D::MaterialKey, BaseMaterial3D::ShaderData, BaseMaterial3D::MaterialKey> BaseMaterial3D::shader_map;
|
||||
BaseMaterial3D::ShaderNames *BaseMaterial3D::shader_names = nullptr;
|
||||
|
||||
void BaseMaterial3D::init_shaders() {
|
||||
shader_names = memnew(ShaderNames);
|
||||
|
|
@ -623,10 +684,11 @@ void BaseMaterial3D::_update_shader() {
|
|||
return; //no update required in the end
|
||||
}
|
||||
|
||||
MutexLock lock(shader_map_mutex);
|
||||
if (shader_map.has(current_key)) {
|
||||
shader_map[current_key].users--;
|
||||
if (shader_map[current_key].users == 0) {
|
||||
//deallocate shader, as it's no longer in use
|
||||
// Deallocate shader which is no longer in use.
|
||||
RS::get_singleton()->free(shader_map[current_key].shader);
|
||||
shader_map.erase(current_key);
|
||||
}
|
||||
|
|
@ -635,8 +697,13 @@ void BaseMaterial3D::_update_shader() {
|
|||
current_key = mk;
|
||||
|
||||
if (shader_map.has(mk)) {
|
||||
RS::get_singleton()->material_set_shader(_get_material(), shader_map[mk].shader);
|
||||
shader_rid = shader_map[mk].shader;
|
||||
shader_map[mk].users++;
|
||||
|
||||
if (_get_material().is_valid()) {
|
||||
RS::get_singleton()->material_set_shader(_get_material(), shader_rid);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -865,12 +932,10 @@ uniform float msdf_outline_size : hint_range(0.0, 250.0, 1.0);
|
|||
// If alpha antialiasing isn't off, add in the edge variable.
|
||||
if (alpha_antialiasing_mode != ALPHA_ANTIALIASING_OFF &&
|
||||
(transparency == TRANSPARENCY_ALPHA_SCISSOR || transparency == TRANSPARENCY_ALPHA_HASH)) {
|
||||
code += R"(
|
||||
uniform float alpha_antialiasing_edge : hint_range(0.0, 1.0, 0.01);
|
||||
uniform ivec2 albedo_texture_size;
|
||||
)";
|
||||
code += "uniform float alpha_antialiasing_edge : hint_range(0.0, 1.0, 0.01);\n";
|
||||
}
|
||||
|
||||
code += "uniform ivec2 albedo_texture_size;\n";
|
||||
code += "uniform float point_size : hint_range(0.1, 128.0, 0.1);\n";
|
||||
|
||||
if (!orm) {
|
||||
|
|
@ -938,7 +1003,7 @@ uniform vec4 refraction_texture_channel;
|
|||
code += "uniform sampler2D screen_texture : hint_screen_texture, repeat_disable, filter_linear_mipmap;\n";
|
||||
}
|
||||
|
||||
if (proximity_fade_enabled) {
|
||||
if (features[FEATURE_REFRACTION] || proximity_fade_enabled) {
|
||||
code += "uniform sampler2D depth_texture : hint_depth_texture, repeat_disable, filter_nearest;\n";
|
||||
}
|
||||
|
||||
|
|
@ -1448,7 +1513,7 @@ void fragment() {)";
|
|||
vec3(1.0 + 0.055) * pow(albedo_tex.rgb, vec3(1.0 / 2.4)) - vec3(0.055),
|
||||
vec3(12.92) * albedo_tex.rgb,
|
||||
lessThan(albedo_tex.rgb, vec3(0.0031308)));
|
||||
vec2 msdf_size = vec2(msdf_pixel_range) / vec2(textureSize(texture_albedo, 0));
|
||||
vec2 msdf_size = vec2(msdf_pixel_range) / vec2(albedo_texture_size);
|
||||
)";
|
||||
if (flags[FLAG_USE_POINT_SIZE]) {
|
||||
code += " vec2 dest_size = vec2(1.0) / fwidth(POINT_COORD);\n";
|
||||
|
|
@ -1619,7 +1684,14 @@ void fragment() {)";
|
|||
}
|
||||
code += R"(
|
||||
float ref_amount = 1.0 - albedo.a * albedo_tex.a;
|
||||
EMISSION += textureLod(screen_texture, ref_ofs, ROUGHNESS * 8.0).rgb * ref_amount * EXPOSURE;
|
||||
|
||||
float refraction_depth_tex = textureLod(depth_texture, ref_ofs, 0.0).r;
|
||||
vec4 refraction_view_pos = INV_PROJECTION_MATRIX * vec4(SCREEN_UV * 2.0 - 1.0, refraction_depth_tex, 1.0);
|
||||
refraction_view_pos.xyz /= refraction_view_pos.w;
|
||||
|
||||
// If the depth buffer is lower then the model's Z position, use the refracted UV, otherwise use the normal screen UV.
|
||||
// At low depth differences, decrease refraction intensity to avoid sudden discontinuities.
|
||||
EMISSION += textureLod(screen_texture, mix(SCREEN_UV, ref_ofs, smoothstep(0.0, 1.0, VERTEX.z - refraction_view_pos.z)), ROUGHNESS * 8.0).rgb * ref_amount * EXPOSURE;
|
||||
ALBEDO *= 1.0 - ref_amount;
|
||||
// Force transparency on the material (required for refraction).
|
||||
ALPHA = 1.0;
|
||||
|
|
@ -1641,10 +1713,10 @@ void fragment() {)";
|
|||
if (proximity_fade_enabled) {
|
||||
code += R"(
|
||||
// Proximity Fade: Enabled
|
||||
float depth_tex = textureLod(depth_texture, SCREEN_UV, 0.0).r;
|
||||
vec4 world_pos = INV_PROJECTION_MATRIX * vec4(SCREEN_UV * 2.0 - 1.0, depth_tex, 1.0);
|
||||
world_pos.xyz /= world_pos.w;
|
||||
ALPHA *= clamp(1.0 - smoothstep(world_pos.z + proximity_fade_distance, world_pos.z, VERTEX.z), 0.0, 1.0);
|
||||
float proximity_depth_tex = textureLod(depth_texture, SCREEN_UV, 0.0).r;
|
||||
vec4 proximity_view_pos = INV_PROJECTION_MATRIX * vec4(SCREEN_UV * 2.0 - 1.0, proximity_depth_tex, 1.0);
|
||||
proximity_view_pos.xyz /= proximity_view_pos.w;
|
||||
ALPHA *= clamp(1.0 - smoothstep(proximity_view_pos.z + proximity_fade_distance, proximity_view_pos.z, VERTEX.z), 0.0, 1.0);
|
||||
)";
|
||||
}
|
||||
|
||||
|
|
@ -1858,14 +1930,32 @@ void fragment() {)";
|
|||
code += "}\n";
|
||||
|
||||
ShaderData shader_data;
|
||||
shader_data.shader = RS::get_singleton()->shader_create();
|
||||
shader_data.shader = RS::get_singleton()->shader_create_from_code(code);
|
||||
shader_data.users = 1;
|
||||
|
||||
RS::get_singleton()->shader_set_code(shader_data.shader, code);
|
||||
|
||||
shader_map[mk] = shader_data;
|
||||
shader_rid = shader_data.shader;
|
||||
|
||||
RS::get_singleton()->material_set_shader(_get_material(), shader_data.shader);
|
||||
if (_get_material().is_valid()) {
|
||||
RS::get_singleton()->material_set_shader(_get_material(), shader_rid);
|
||||
}
|
||||
}
|
||||
|
||||
void BaseMaterial3D::_check_material_rid() {
|
||||
MutexLock lock(material_rid_mutex);
|
||||
if (_get_material().is_null()) {
|
||||
RID next_pass_rid;
|
||||
if (get_next_pass().is_valid()) {
|
||||
next_pass_rid = get_next_pass()->get_rid();
|
||||
}
|
||||
|
||||
_set_material(RS::get_singleton()->material_create_from_shader(next_pass_rid, get_render_priority(), shader_rid));
|
||||
|
||||
for (KeyValue<StringName, Variant> param : pending_params) {
|
||||
RS::get_singleton()->material_set_param(_get_material(), param.key, param.value);
|
||||
}
|
||||
|
||||
pending_params.clear();
|
||||
}
|
||||
}
|
||||
|
||||
void BaseMaterial3D::flush_changes() {
|
||||
|
|
@ -1878,17 +1968,28 @@ void BaseMaterial3D::flush_changes() {
|
|||
}
|
||||
|
||||
void BaseMaterial3D::_queue_shader_change() {
|
||||
if (!_is_initialized()) {
|
||||
return;
|
||||
}
|
||||
|
||||
MutexLock lock(material_mutex);
|
||||
|
||||
if (_is_initialized() && !element.in_list()) {
|
||||
if (!element.in_list()) {
|
||||
dirty_materials.add(&element);
|
||||
}
|
||||
}
|
||||
|
||||
void BaseMaterial3D::_material_set_param(const StringName &p_name, const Variant &p_value) {
|
||||
if (_get_material().is_valid()) {
|
||||
RS::get_singleton()->material_set_param(_get_material(), p_name, p_value);
|
||||
} else {
|
||||
pending_params[p_name] = p_value;
|
||||
}
|
||||
}
|
||||
|
||||
void BaseMaterial3D::set_albedo(const Color &p_albedo) {
|
||||
albedo = p_albedo;
|
||||
|
||||
RS::get_singleton()->material_set_param(_get_material(), shader_names->albedo, p_albedo);
|
||||
_material_set_param(shader_names->albedo, p_albedo);
|
||||
}
|
||||
|
||||
Color BaseMaterial3D::get_albedo() const {
|
||||
|
|
@ -1897,7 +1998,7 @@ Color BaseMaterial3D::get_albedo() const {
|
|||
|
||||
void BaseMaterial3D::set_specular(float p_specular) {
|
||||
specular = p_specular;
|
||||
RS::get_singleton()->material_set_param(_get_material(), shader_names->specular, p_specular);
|
||||
_material_set_param(shader_names->specular, p_specular);
|
||||
}
|
||||
|
||||
float BaseMaterial3D::get_specular() const {
|
||||
|
|
@ -1906,7 +2007,7 @@ float BaseMaterial3D::get_specular() const {
|
|||
|
||||
void BaseMaterial3D::set_roughness(float p_roughness) {
|
||||
roughness = p_roughness;
|
||||
RS::get_singleton()->material_set_param(_get_material(), shader_names->roughness, p_roughness);
|
||||
_material_set_param(shader_names->roughness, p_roughness);
|
||||
}
|
||||
|
||||
float BaseMaterial3D::get_roughness() const {
|
||||
|
|
@ -1915,7 +2016,7 @@ float BaseMaterial3D::get_roughness() const {
|
|||
|
||||
void BaseMaterial3D::set_metallic(float p_metallic) {
|
||||
metallic = p_metallic;
|
||||
RS::get_singleton()->material_set_param(_get_material(), shader_names->metallic, p_metallic);
|
||||
_material_set_param(shader_names->metallic, p_metallic);
|
||||
}
|
||||
|
||||
float BaseMaterial3D::get_metallic() const {
|
||||
|
|
@ -1924,7 +2025,7 @@ float BaseMaterial3D::get_metallic() const {
|
|||
|
||||
void BaseMaterial3D::set_emission(const Color &p_emission) {
|
||||
emission = p_emission;
|
||||
RS::get_singleton()->material_set_param(_get_material(), shader_names->emission, p_emission);
|
||||
_material_set_param(shader_names->emission, p_emission);
|
||||
}
|
||||
|
||||
Color BaseMaterial3D::get_emission() const {
|
||||
|
|
@ -1933,10 +2034,11 @@ Color BaseMaterial3D::get_emission() const {
|
|||
|
||||
void BaseMaterial3D::set_emission_energy_multiplier(float p_emission_energy_multiplier) {
|
||||
emission_energy_multiplier = p_emission_energy_multiplier;
|
||||
|
||||
if (GLOBAL_GET("rendering/lights_and_shadows/use_physical_light_units")) {
|
||||
RS::get_singleton()->material_set_param(_get_material(), shader_names->emission_energy, p_emission_energy_multiplier * emission_intensity);
|
||||
_material_set_param(shader_names->emission_energy, p_emission_energy_multiplier * emission_intensity);
|
||||
} else {
|
||||
RS::get_singleton()->material_set_param(_get_material(), shader_names->emission_energy, p_emission_energy_multiplier);
|
||||
_material_set_param(shader_names->emission_energy, p_emission_energy_multiplier);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1947,7 +2049,7 @@ float BaseMaterial3D::get_emission_energy_multiplier() const {
|
|||
void BaseMaterial3D::set_emission_intensity(float p_emission_intensity) {
|
||||
ERR_FAIL_COND_EDMSG(!GLOBAL_GET("rendering/lights_and_shadows/use_physical_light_units"), "Cannot set material emission intensity when Physical Light Units disabled.");
|
||||
emission_intensity = p_emission_intensity;
|
||||
RS::get_singleton()->material_set_param(_get_material(), shader_names->emission_energy, emission_energy_multiplier * emission_intensity);
|
||||
_material_set_param(shader_names->emission_energy, emission_energy_multiplier * emission_intensity);
|
||||
}
|
||||
|
||||
float BaseMaterial3D::get_emission_intensity() const {
|
||||
|
|
@ -1956,7 +2058,7 @@ float BaseMaterial3D::get_emission_intensity() const {
|
|||
|
||||
void BaseMaterial3D::set_normal_scale(float p_normal_scale) {
|
||||
normal_scale = p_normal_scale;
|
||||
RS::get_singleton()->material_set_param(_get_material(), shader_names->normal_scale, p_normal_scale);
|
||||
_material_set_param(shader_names->normal_scale, p_normal_scale);
|
||||
}
|
||||
|
||||
float BaseMaterial3D::get_normal_scale() const {
|
||||
|
|
@ -1965,7 +2067,7 @@ float BaseMaterial3D::get_normal_scale() const {
|
|||
|
||||
void BaseMaterial3D::set_rim(float p_rim) {
|
||||
rim = p_rim;
|
||||
RS::get_singleton()->material_set_param(_get_material(), shader_names->rim, p_rim);
|
||||
_material_set_param(shader_names->rim, p_rim);
|
||||
}
|
||||
|
||||
float BaseMaterial3D::get_rim() const {
|
||||
|
|
@ -1974,7 +2076,7 @@ float BaseMaterial3D::get_rim() const {
|
|||
|
||||
void BaseMaterial3D::set_rim_tint(float p_rim_tint) {
|
||||
rim_tint = p_rim_tint;
|
||||
RS::get_singleton()->material_set_param(_get_material(), shader_names->rim_tint, p_rim_tint);
|
||||
_material_set_param(shader_names->rim_tint, p_rim_tint);
|
||||
}
|
||||
|
||||
float BaseMaterial3D::get_rim_tint() const {
|
||||
|
|
@ -1983,7 +2085,7 @@ float BaseMaterial3D::get_rim_tint() const {
|
|||
|
||||
void BaseMaterial3D::set_ao_light_affect(float p_ao_light_affect) {
|
||||
ao_light_affect = p_ao_light_affect;
|
||||
RS::get_singleton()->material_set_param(_get_material(), shader_names->ao_light_affect, p_ao_light_affect);
|
||||
_material_set_param(shader_names->ao_light_affect, p_ao_light_affect);
|
||||
}
|
||||
|
||||
float BaseMaterial3D::get_ao_light_affect() const {
|
||||
|
|
@ -1992,7 +2094,7 @@ float BaseMaterial3D::get_ao_light_affect() const {
|
|||
|
||||
void BaseMaterial3D::set_clearcoat(float p_clearcoat) {
|
||||
clearcoat = p_clearcoat;
|
||||
RS::get_singleton()->material_set_param(_get_material(), shader_names->clearcoat, p_clearcoat);
|
||||
_material_set_param(shader_names->clearcoat, p_clearcoat);
|
||||
}
|
||||
|
||||
float BaseMaterial3D::get_clearcoat() const {
|
||||
|
|
@ -2001,7 +2103,7 @@ float BaseMaterial3D::get_clearcoat() const {
|
|||
|
||||
void BaseMaterial3D::set_clearcoat_roughness(float p_clearcoat_roughness) {
|
||||
clearcoat_roughness = p_clearcoat_roughness;
|
||||
RS::get_singleton()->material_set_param(_get_material(), shader_names->clearcoat_roughness, p_clearcoat_roughness);
|
||||
_material_set_param(shader_names->clearcoat_roughness, p_clearcoat_roughness);
|
||||
}
|
||||
|
||||
float BaseMaterial3D::get_clearcoat_roughness() const {
|
||||
|
|
@ -2010,7 +2112,7 @@ float BaseMaterial3D::get_clearcoat_roughness() const {
|
|||
|
||||
void BaseMaterial3D::set_anisotropy(float p_anisotropy) {
|
||||
anisotropy = p_anisotropy;
|
||||
RS::get_singleton()->material_set_param(_get_material(), shader_names->anisotropy, p_anisotropy);
|
||||
_material_set_param(shader_names->anisotropy, p_anisotropy);
|
||||
}
|
||||
|
||||
float BaseMaterial3D::get_anisotropy() const {
|
||||
|
|
@ -2019,7 +2121,7 @@ float BaseMaterial3D::get_anisotropy() const {
|
|||
|
||||
void BaseMaterial3D::set_heightmap_scale(float p_heightmap_scale) {
|
||||
heightmap_scale = p_heightmap_scale;
|
||||
RS::get_singleton()->material_set_param(_get_material(), shader_names->heightmap_scale, p_heightmap_scale);
|
||||
_material_set_param(shader_names->heightmap_scale, p_heightmap_scale);
|
||||
}
|
||||
|
||||
float BaseMaterial3D::get_heightmap_scale() const {
|
||||
|
|
@ -2028,7 +2130,7 @@ float BaseMaterial3D::get_heightmap_scale() const {
|
|||
|
||||
void BaseMaterial3D::set_subsurface_scattering_strength(float p_subsurface_scattering_strength) {
|
||||
subsurface_scattering_strength = p_subsurface_scattering_strength;
|
||||
RS::get_singleton()->material_set_param(_get_material(), shader_names->subsurface_scattering_strength, subsurface_scattering_strength);
|
||||
_material_set_param(shader_names->subsurface_scattering_strength, subsurface_scattering_strength);
|
||||
}
|
||||
|
||||
float BaseMaterial3D::get_subsurface_scattering_strength() const {
|
||||
|
|
@ -2037,7 +2139,7 @@ float BaseMaterial3D::get_subsurface_scattering_strength() const {
|
|||
|
||||
void BaseMaterial3D::set_transmittance_color(const Color &p_color) {
|
||||
transmittance_color = p_color;
|
||||
RS::get_singleton()->material_set_param(_get_material(), shader_names->transmittance_color, p_color);
|
||||
_material_set_param(shader_names->transmittance_color, p_color);
|
||||
}
|
||||
|
||||
Color BaseMaterial3D::get_transmittance_color() const {
|
||||
|
|
@ -2046,7 +2148,7 @@ Color BaseMaterial3D::get_transmittance_color() const {
|
|||
|
||||
void BaseMaterial3D::set_transmittance_depth(float p_depth) {
|
||||
transmittance_depth = p_depth;
|
||||
RS::get_singleton()->material_set_param(_get_material(), shader_names->transmittance_depth, p_depth);
|
||||
_material_set_param(shader_names->transmittance_depth, p_depth);
|
||||
}
|
||||
|
||||
float BaseMaterial3D::get_transmittance_depth() const {
|
||||
|
|
@ -2055,7 +2157,7 @@ float BaseMaterial3D::get_transmittance_depth() const {
|
|||
|
||||
void BaseMaterial3D::set_transmittance_boost(float p_boost) {
|
||||
transmittance_boost = p_boost;
|
||||
RS::get_singleton()->material_set_param(_get_material(), shader_names->transmittance_boost, p_boost);
|
||||
_material_set_param(shader_names->transmittance_boost, p_boost);
|
||||
}
|
||||
|
||||
float BaseMaterial3D::get_transmittance_boost() const {
|
||||
|
|
@ -2064,7 +2166,7 @@ float BaseMaterial3D::get_transmittance_boost() const {
|
|||
|
||||
void BaseMaterial3D::set_backlight(const Color &p_backlight) {
|
||||
backlight = p_backlight;
|
||||
RS::get_singleton()->material_set_param(_get_material(), shader_names->backlight, backlight);
|
||||
_material_set_param(shader_names->backlight, backlight);
|
||||
}
|
||||
|
||||
Color BaseMaterial3D::get_backlight() const {
|
||||
|
|
@ -2073,7 +2175,7 @@ Color BaseMaterial3D::get_backlight() const {
|
|||
|
||||
void BaseMaterial3D::set_refraction(float p_refraction) {
|
||||
refraction = p_refraction;
|
||||
RS::get_singleton()->material_set_param(_get_material(), shader_names->refraction, refraction);
|
||||
_material_set_param(shader_names->refraction, refraction);
|
||||
}
|
||||
|
||||
float BaseMaterial3D::get_refraction() const {
|
||||
|
|
@ -2261,11 +2363,10 @@ void BaseMaterial3D::set_texture(TextureParam p_param, const Ref<Texture2D> &p_t
|
|||
|
||||
textures[p_param] = p_texture;
|
||||
Variant rid = p_texture.is_valid() ? Variant(p_texture->get_rid()) : Variant();
|
||||
RS::get_singleton()->material_set_param(_get_material(), shader_names->texture_names[p_param], rid);
|
||||
_material_set_param(shader_names->texture_names[p_param], rid);
|
||||
|
||||
if (p_texture.is_valid() && p_param == TEXTURE_ALBEDO) {
|
||||
RS::get_singleton()->material_set_param(_get_material(), shader_names->albedo_texture_size,
|
||||
Vector2i(p_texture->get_width(), p_texture->get_height()));
|
||||
_material_set_param(shader_names->albedo_texture_size, Vector2i(p_texture->get_width(), p_texture->get_height()));
|
||||
}
|
||||
|
||||
notify_property_list_changed();
|
||||
|
|
@ -2461,7 +2562,7 @@ void BaseMaterial3D::_validate_property(PropertyInfo &p_property) const {
|
|||
|
||||
void BaseMaterial3D::set_point_size(float p_point_size) {
|
||||
point_size = p_point_size;
|
||||
RS::get_singleton()->material_set_param(_get_material(), shader_names->point_size, p_point_size);
|
||||
_material_set_param(shader_names->point_size, p_point_size);
|
||||
}
|
||||
|
||||
float BaseMaterial3D::get_point_size() const {
|
||||
|
|
@ -2470,7 +2571,7 @@ float BaseMaterial3D::get_point_size() const {
|
|||
|
||||
void BaseMaterial3D::set_uv1_scale(const Vector3 &p_scale) {
|
||||
uv1_scale = p_scale;
|
||||
RS::get_singleton()->material_set_param(_get_material(), shader_names->uv1_scale, p_scale);
|
||||
_material_set_param(shader_names->uv1_scale, p_scale);
|
||||
}
|
||||
|
||||
Vector3 BaseMaterial3D::get_uv1_scale() const {
|
||||
|
|
@ -2479,7 +2580,7 @@ Vector3 BaseMaterial3D::get_uv1_scale() const {
|
|||
|
||||
void BaseMaterial3D::set_uv1_offset(const Vector3 &p_offset) {
|
||||
uv1_offset = p_offset;
|
||||
RS::get_singleton()->material_set_param(_get_material(), shader_names->uv1_offset, p_offset);
|
||||
_material_set_param(shader_names->uv1_offset, p_offset);
|
||||
}
|
||||
|
||||
Vector3 BaseMaterial3D::get_uv1_offset() const {
|
||||
|
|
@ -2489,7 +2590,7 @@ Vector3 BaseMaterial3D::get_uv1_offset() const {
|
|||
void BaseMaterial3D::set_uv1_triplanar_blend_sharpness(float p_sharpness) {
|
||||
// Negative values or values higher than 150 can result in NaNs, leading to broken rendering.
|
||||
uv1_triplanar_sharpness = CLAMP(p_sharpness, 0.0, 150.0);
|
||||
RS::get_singleton()->material_set_param(_get_material(), shader_names->uv1_blend_sharpness, uv1_triplanar_sharpness);
|
||||
_material_set_param(shader_names->uv1_blend_sharpness, uv1_triplanar_sharpness);
|
||||
}
|
||||
|
||||
float BaseMaterial3D::get_uv1_triplanar_blend_sharpness() const {
|
||||
|
|
@ -2498,7 +2599,7 @@ float BaseMaterial3D::get_uv1_triplanar_blend_sharpness() const {
|
|||
|
||||
void BaseMaterial3D::set_uv2_scale(const Vector3 &p_scale) {
|
||||
uv2_scale = p_scale;
|
||||
RS::get_singleton()->material_set_param(_get_material(), shader_names->uv2_scale, p_scale);
|
||||
_material_set_param(shader_names->uv2_scale, p_scale);
|
||||
}
|
||||
|
||||
Vector3 BaseMaterial3D::get_uv2_scale() const {
|
||||
|
|
@ -2507,7 +2608,7 @@ Vector3 BaseMaterial3D::get_uv2_scale() const {
|
|||
|
||||
void BaseMaterial3D::set_uv2_offset(const Vector3 &p_offset) {
|
||||
uv2_offset = p_offset;
|
||||
RS::get_singleton()->material_set_param(_get_material(), shader_names->uv2_offset, p_offset);
|
||||
_material_set_param(shader_names->uv2_offset, p_offset);
|
||||
}
|
||||
|
||||
Vector3 BaseMaterial3D::get_uv2_offset() const {
|
||||
|
|
@ -2517,7 +2618,7 @@ Vector3 BaseMaterial3D::get_uv2_offset() const {
|
|||
void BaseMaterial3D::set_uv2_triplanar_blend_sharpness(float p_sharpness) {
|
||||
// Negative values or values higher than 150 can result in NaNs, leading to broken rendering.
|
||||
uv2_triplanar_sharpness = CLAMP(p_sharpness, 0.0, 150.0);
|
||||
RS::get_singleton()->material_set_param(_get_material(), shader_names->uv2_blend_sharpness, uv2_triplanar_sharpness);
|
||||
_material_set_param(shader_names->uv2_blend_sharpness, uv2_triplanar_sharpness);
|
||||
}
|
||||
|
||||
float BaseMaterial3D::get_uv2_triplanar_blend_sharpness() const {
|
||||
|
|
@ -2536,7 +2637,7 @@ BaseMaterial3D::BillboardMode BaseMaterial3D::get_billboard_mode() const {
|
|||
|
||||
void BaseMaterial3D::set_particles_anim_h_frames(int p_frames) {
|
||||
particles_anim_h_frames = p_frames;
|
||||
RS::get_singleton()->material_set_param(_get_material(), shader_names->particles_anim_h_frames, p_frames);
|
||||
_material_set_param(shader_names->particles_anim_h_frames, p_frames);
|
||||
}
|
||||
|
||||
int BaseMaterial3D::get_particles_anim_h_frames() const {
|
||||
|
|
@ -2545,7 +2646,7 @@ int BaseMaterial3D::get_particles_anim_h_frames() const {
|
|||
|
||||
void BaseMaterial3D::set_particles_anim_v_frames(int p_frames) {
|
||||
particles_anim_v_frames = p_frames;
|
||||
RS::get_singleton()->material_set_param(_get_material(), shader_names->particles_anim_v_frames, p_frames);
|
||||
_material_set_param(shader_names->particles_anim_v_frames, p_frames);
|
||||
}
|
||||
|
||||
int BaseMaterial3D::get_particles_anim_v_frames() const {
|
||||
|
|
@ -2554,7 +2655,7 @@ int BaseMaterial3D::get_particles_anim_v_frames() const {
|
|||
|
||||
void BaseMaterial3D::set_particles_anim_loop(bool p_loop) {
|
||||
particles_anim_loop = p_loop;
|
||||
RS::get_singleton()->material_set_param(_get_material(), shader_names->particles_anim_loop, particles_anim_loop);
|
||||
_material_set_param(shader_names->particles_anim_loop, particles_anim_loop);
|
||||
}
|
||||
|
||||
bool BaseMaterial3D::get_particles_anim_loop() const {
|
||||
|
|
@ -2573,7 +2674,7 @@ bool BaseMaterial3D::is_heightmap_deep_parallax_enabled() const {
|
|||
|
||||
void BaseMaterial3D::set_heightmap_deep_parallax_min_layers(int p_layer) {
|
||||
deep_parallax_min_layers = p_layer;
|
||||
RS::get_singleton()->material_set_param(_get_material(), shader_names->heightmap_min_layers, p_layer);
|
||||
_material_set_param(shader_names->heightmap_min_layers, p_layer);
|
||||
}
|
||||
|
||||
int BaseMaterial3D::get_heightmap_deep_parallax_min_layers() const {
|
||||
|
|
@ -2582,7 +2683,7 @@ int BaseMaterial3D::get_heightmap_deep_parallax_min_layers() const {
|
|||
|
||||
void BaseMaterial3D::set_heightmap_deep_parallax_max_layers(int p_layer) {
|
||||
deep_parallax_max_layers = p_layer;
|
||||
RS::get_singleton()->material_set_param(_get_material(), shader_names->heightmap_max_layers, p_layer);
|
||||
_material_set_param(shader_names->heightmap_max_layers, p_layer);
|
||||
}
|
||||
|
||||
int BaseMaterial3D::get_heightmap_deep_parallax_max_layers() const {
|
||||
|
|
@ -2591,7 +2692,7 @@ int BaseMaterial3D::get_heightmap_deep_parallax_max_layers() const {
|
|||
|
||||
void BaseMaterial3D::set_heightmap_deep_parallax_flip_tangent(bool p_flip) {
|
||||
heightmap_parallax_flip_tangent = p_flip;
|
||||
RS::get_singleton()->material_set_param(_get_material(), shader_names->heightmap_flip, Vector2(heightmap_parallax_flip_tangent ? -1 : 1, heightmap_parallax_flip_binormal ? -1 : 1));
|
||||
_material_set_param(shader_names->heightmap_flip, Vector2(heightmap_parallax_flip_tangent ? -1 : 1, heightmap_parallax_flip_binormal ? -1 : 1));
|
||||
}
|
||||
|
||||
bool BaseMaterial3D::get_heightmap_deep_parallax_flip_tangent() const {
|
||||
|
|
@ -2600,7 +2701,7 @@ bool BaseMaterial3D::get_heightmap_deep_parallax_flip_tangent() const {
|
|||
|
||||
void BaseMaterial3D::set_heightmap_deep_parallax_flip_binormal(bool p_flip) {
|
||||
heightmap_parallax_flip_binormal = p_flip;
|
||||
RS::get_singleton()->material_set_param(_get_material(), shader_names->heightmap_flip, Vector2(heightmap_parallax_flip_tangent ? -1 : 1, heightmap_parallax_flip_binormal ? -1 : 1));
|
||||
_material_set_param(shader_names->heightmap_flip, Vector2(heightmap_parallax_flip_tangent ? -1 : 1, heightmap_parallax_flip_binormal ? -1 : 1));
|
||||
}
|
||||
|
||||
bool BaseMaterial3D::get_heightmap_deep_parallax_flip_binormal() const {
|
||||
|
|
@ -2619,7 +2720,7 @@ bool BaseMaterial3D::is_grow_enabled() const {
|
|||
|
||||
void BaseMaterial3D::set_alpha_scissor_threshold(float p_threshold) {
|
||||
alpha_scissor_threshold = p_threshold;
|
||||
RS::get_singleton()->material_set_param(_get_material(), shader_names->alpha_scissor_threshold, p_threshold);
|
||||
_material_set_param(shader_names->alpha_scissor_threshold, p_threshold);
|
||||
}
|
||||
|
||||
float BaseMaterial3D::get_alpha_scissor_threshold() const {
|
||||
|
|
@ -2628,7 +2729,7 @@ float BaseMaterial3D::get_alpha_scissor_threshold() const {
|
|||
|
||||
void BaseMaterial3D::set_alpha_hash_scale(float p_scale) {
|
||||
alpha_hash_scale = p_scale;
|
||||
RS::get_singleton()->material_set_param(_get_material(), shader_names->alpha_hash_scale, p_scale);
|
||||
_material_set_param(shader_names->alpha_hash_scale, p_scale);
|
||||
}
|
||||
|
||||
float BaseMaterial3D::get_alpha_hash_scale() const {
|
||||
|
|
@ -2637,7 +2738,7 @@ float BaseMaterial3D::get_alpha_hash_scale() const {
|
|||
|
||||
void BaseMaterial3D::set_alpha_antialiasing_edge(float p_edge) {
|
||||
alpha_antialiasing_edge = p_edge;
|
||||
RS::get_singleton()->material_set_param(_get_material(), shader_names->alpha_antialiasing_edge, p_edge);
|
||||
_material_set_param(shader_names->alpha_antialiasing_edge, p_edge);
|
||||
}
|
||||
|
||||
float BaseMaterial3D::get_alpha_antialiasing_edge() const {
|
||||
|
|
@ -2646,20 +2747,20 @@ float BaseMaterial3D::get_alpha_antialiasing_edge() const {
|
|||
|
||||
void BaseMaterial3D::set_grow(float p_grow) {
|
||||
grow = p_grow;
|
||||
RS::get_singleton()->material_set_param(_get_material(), shader_names->grow, p_grow);
|
||||
_material_set_param(shader_names->grow, p_grow);
|
||||
}
|
||||
|
||||
float BaseMaterial3D::get_grow() const {
|
||||
return grow;
|
||||
}
|
||||
|
||||
static Plane _get_texture_mask(BaseMaterial3D::TextureChannel p_channel) {
|
||||
static const Plane masks[5] = {
|
||||
Plane(1, 0, 0, 0),
|
||||
Plane(0, 1, 0, 0),
|
||||
Plane(0, 0, 1, 0),
|
||||
Plane(0, 0, 0, 1),
|
||||
Plane(0.3333333, 0.3333333, 0.3333333, 0),
|
||||
static Vector4 _get_texture_mask(BaseMaterial3D::TextureChannel p_channel) {
|
||||
static const Vector4 masks[5] = {
|
||||
Vector4(1, 0, 0, 0),
|
||||
Vector4(0, 1, 0, 0),
|
||||
Vector4(0, 0, 1, 0),
|
||||
Vector4(0, 0, 0, 1),
|
||||
Vector4(0.3333333, 0.3333333, 0.3333333, 0),
|
||||
};
|
||||
|
||||
return masks[p_channel];
|
||||
|
|
@ -2668,7 +2769,7 @@ static Plane _get_texture_mask(BaseMaterial3D::TextureChannel p_channel) {
|
|||
void BaseMaterial3D::set_metallic_texture_channel(TextureChannel p_channel) {
|
||||
ERR_FAIL_INDEX(p_channel, 5);
|
||||
metallic_texture_channel = p_channel;
|
||||
RS::get_singleton()->material_set_param(_get_material(), shader_names->metallic_texture_channel, _get_texture_mask(p_channel));
|
||||
_material_set_param(shader_names->metallic_texture_channel, _get_texture_mask(p_channel));
|
||||
}
|
||||
|
||||
BaseMaterial3D::TextureChannel BaseMaterial3D::get_metallic_texture_channel() const {
|
||||
|
|
@ -2688,7 +2789,7 @@ BaseMaterial3D::TextureChannel BaseMaterial3D::get_roughness_texture_channel() c
|
|||
void BaseMaterial3D::set_ao_texture_channel(TextureChannel p_channel) {
|
||||
ERR_FAIL_INDEX(p_channel, 5);
|
||||
ao_texture_channel = p_channel;
|
||||
RS::get_singleton()->material_set_param(_get_material(), shader_names->ao_texture_channel, _get_texture_mask(p_channel));
|
||||
_material_set_param(shader_names->ao_texture_channel, _get_texture_mask(p_channel));
|
||||
}
|
||||
|
||||
BaseMaterial3D::TextureChannel BaseMaterial3D::get_ao_texture_channel() const {
|
||||
|
|
@ -2698,7 +2799,7 @@ BaseMaterial3D::TextureChannel BaseMaterial3D::get_ao_texture_channel() const {
|
|||
void BaseMaterial3D::set_refraction_texture_channel(TextureChannel p_channel) {
|
||||
ERR_FAIL_INDEX(p_channel, 5);
|
||||
refraction_texture_channel = p_channel;
|
||||
RS::get_singleton()->material_set_param(_get_material(), shader_names->refraction_texture_channel, _get_texture_mask(p_channel));
|
||||
_material_set_param(shader_names->refraction_texture_channel, _get_texture_mask(p_channel));
|
||||
}
|
||||
|
||||
BaseMaterial3D::TextureChannel BaseMaterial3D::get_refraction_texture_channel() const {
|
||||
|
|
@ -2770,7 +2871,7 @@ bool BaseMaterial3D::is_proximity_fade_enabled() const {
|
|||
|
||||
void BaseMaterial3D::set_proximity_fade_distance(float p_distance) {
|
||||
proximity_fade_distance = MAX(p_distance, 0.01);
|
||||
RS::get_singleton()->material_set_param(_get_material(), shader_names->proximity_fade_distance, proximity_fade_distance);
|
||||
_material_set_param(shader_names->proximity_fade_distance, proximity_fade_distance);
|
||||
}
|
||||
|
||||
float BaseMaterial3D::get_proximity_fade_distance() const {
|
||||
|
|
@ -2779,7 +2880,7 @@ float BaseMaterial3D::get_proximity_fade_distance() const {
|
|||
|
||||
void BaseMaterial3D::set_msdf_pixel_range(float p_range) {
|
||||
msdf_pixel_range = p_range;
|
||||
RS::get_singleton()->material_set_param(_get_material(), shader_names->msdf_pixel_range, p_range);
|
||||
_material_set_param(shader_names->msdf_pixel_range, p_range);
|
||||
}
|
||||
|
||||
float BaseMaterial3D::get_msdf_pixel_range() const {
|
||||
|
|
@ -2788,7 +2889,7 @@ float BaseMaterial3D::get_msdf_pixel_range() const {
|
|||
|
||||
void BaseMaterial3D::set_msdf_outline_size(float p_size) {
|
||||
msdf_outline_size = p_size;
|
||||
RS::get_singleton()->material_set_param(_get_material(), shader_names->msdf_outline_size, p_size);
|
||||
_material_set_param(shader_names->msdf_outline_size, p_size);
|
||||
}
|
||||
|
||||
float BaseMaterial3D::get_msdf_outline_size() const {
|
||||
|
|
@ -2807,7 +2908,7 @@ BaseMaterial3D::DistanceFadeMode BaseMaterial3D::get_distance_fade() const {
|
|||
|
||||
void BaseMaterial3D::set_distance_fade_max_distance(float p_distance) {
|
||||
distance_fade_max_distance = p_distance;
|
||||
RS::get_singleton()->material_set_param(_get_material(), shader_names->distance_fade_max, distance_fade_max_distance);
|
||||
_material_set_param(shader_names->distance_fade_max, distance_fade_max_distance);
|
||||
}
|
||||
|
||||
float BaseMaterial3D::get_distance_fade_max_distance() const {
|
||||
|
|
@ -2816,7 +2917,7 @@ float BaseMaterial3D::get_distance_fade_max_distance() const {
|
|||
|
||||
void BaseMaterial3D::set_distance_fade_min_distance(float p_distance) {
|
||||
distance_fade_min_distance = p_distance;
|
||||
RS::get_singleton()->material_set_param(_get_material(), shader_names->distance_fade_min, distance_fade_min_distance);
|
||||
_material_set_param(shader_names->distance_fade_min, distance_fade_min_distance);
|
||||
}
|
||||
|
||||
float BaseMaterial3D::get_distance_fade_min_distance() const {
|
||||
|
|
@ -2835,13 +2936,15 @@ BaseMaterial3D::EmissionOperator BaseMaterial3D::get_emission_operator() const {
|
|||
return emission_op;
|
||||
}
|
||||
|
||||
RID BaseMaterial3D::get_rid() const {
|
||||
const_cast<BaseMaterial3D *>(this)->_update_shader();
|
||||
const_cast<BaseMaterial3D *>(this)->_check_material_rid();
|
||||
return _get_material();
|
||||
}
|
||||
|
||||
RID BaseMaterial3D::get_shader_rid() const {
|
||||
MutexLock lock(material_mutex);
|
||||
if (element.in_list()) {
|
||||
((BaseMaterial3D *)this)->_update_shader();
|
||||
}
|
||||
ERR_FAIL_COND_V(!shader_map.has(current_key), RID());
|
||||
return shader_map[current_key].shader;
|
||||
const_cast<BaseMaterial3D *>(this)->_update_shader();
|
||||
return shader_rid;
|
||||
}
|
||||
|
||||
Shader::Mode BaseMaterial3D::get_shader_mode() const {
|
||||
|
|
@ -3425,21 +3528,25 @@ BaseMaterial3D::BaseMaterial3D(bool p_orm) :
|
|||
|
||||
current_key.invalid_key = 1;
|
||||
|
||||
_mark_initialized(callable_mp(this, &BaseMaterial3D::_queue_shader_change), callable_mp(this, &BaseMaterial3D::_update_shader));
|
||||
_mark_initialized(callable_mp(this, &BaseMaterial3D::_queue_shader_change), Callable());
|
||||
}
|
||||
|
||||
BaseMaterial3D::~BaseMaterial3D() {
|
||||
ERR_FAIL_NULL(RenderingServer::get_singleton());
|
||||
MutexLock lock(material_mutex);
|
||||
ERR_FAIL_NULL(RS::get_singleton());
|
||||
|
||||
if (shader_map.has(current_key)) {
|
||||
shader_map[current_key].users--;
|
||||
if (shader_map[current_key].users == 0) {
|
||||
//deallocate shader, as it's no longer in use
|
||||
RS::get_singleton()->free(shader_map[current_key].shader);
|
||||
shader_map.erase(current_key);
|
||||
{
|
||||
MutexLock lock(shader_map_mutex);
|
||||
if (shader_map.has(current_key)) {
|
||||
shader_map[current_key].users--;
|
||||
if (shader_map[current_key].users == 0) {
|
||||
// Deallocate shader which is no longer in use.
|
||||
RS::get_singleton()->free(shader_map[current_key].shader);
|
||||
shader_map.erase(current_key);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (_get_material().is_valid()) {
|
||||
RS::get_singleton()->material_set_shader(_get_material(), RID());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue