Now the mesher will set the material for the generated meshes directly, also it sets the material as surface material instead of an override material.

This commit is contained in:
Relintai 2019-12-03 19:22:04 +01:00
parent 22bf841298
commit ce4020962e
2 changed files with 8 additions and 26 deletions

View File

@ -63,10 +63,8 @@ void VoxelMesher::build_mesh(RID mesh) {
_surface_tool->begin(Mesh::PRIMITIVE_TRIANGLES); _surface_tool->begin(Mesh::PRIMITIVE_TRIANGLES);
if (_material.is_valid()) //if (_material.is_valid())
_surface_tool->set_material(_material); // _surface_tool->set_material(_material);
else
_surface_tool->set_material(_library->get_material());
if (_colors.size() != _vertices.size()) { if (_colors.size() != _vertices.size()) {
print_error("Colors.size() != vertices.size() -> " + String::num(_colors.size()) + " " + String::num(_vertices.size())); print_error("Colors.size() != vertices.size() -> " + String::num(_colors.size()) + " " + String::num(_vertices.size()));
@ -102,6 +100,9 @@ void VoxelMesher::build_mesh(RID mesh) {
Array arr = _surface_tool->commit_to_arrays(); Array arr = _surface_tool->commit_to_arrays();
VS::get_singleton()->mesh_add_surface_from_arrays(mesh, VisualServer::PRIMITIVE_TRIANGLES, arr); VS::get_singleton()->mesh_add_surface_from_arrays(mesh, VisualServer::PRIMITIVE_TRIANGLES, arr);
if (_material.is_valid())
VS::get_singleton()->mesh_surface_set_material(mesh, 0, _library->get_material()->get_rid());
} }
void VoxelMesher::reset() { void VoxelMesher::reset() {

View File

@ -466,6 +466,7 @@ void VoxelChunk::finalize_mesh() {
allocate_main_mesh(); allocate_main_mesh();
} }
_mesher->set_material(get_library()->get_material());
get_mesher()->build_mesh(_mesh_rid); get_mesher()->build_mesh(_mesh_rid);
} }
@ -784,7 +785,7 @@ void VoxelChunk::process_props() {
call("_process_props"); call("_process_props");
_mesher->bake_colors(this); _mesher->bake_colors(this);
_mesher->set_material(get_library()->get_material());
_mesher->build_mesh(_prop_mesh_rid); _mesher->build_mesh(_prop_mesh_rid);
} }
@ -794,7 +795,7 @@ void VoxelChunk::build_prop_meshes() {
} }
_mesher->bake_colors(this); _mesher->bake_colors(this);
_mesher->set_material(get_library()->get_material());
_mesher->build_mesh(_prop_mesh_rid); _mesher->build_mesh(_prop_mesh_rid);
} }
@ -802,14 +803,9 @@ void VoxelChunk::allocate_main_mesh() {
ERR_FAIL_COND(_voxel_world == NULL); ERR_FAIL_COND(_voxel_world == NULL);
ERR_FAIL_COND(!get_library().is_valid()); ERR_FAIL_COND(!get_library().is_valid());
ERR_FAIL_COND(!get_library()->get_material().is_valid());
_mesh_instance_rid = VS::get_singleton()->instance_create(); _mesh_instance_rid = VS::get_singleton()->instance_create();
if (get_library()->get_material().is_valid()) {
VS::get_singleton()->instance_geometry_set_material_override(_mesh_instance_rid, get_library()->get_material()->get_rid());
}
if (get_voxel_world()->get_world().is_valid()) if (get_voxel_world()->get_world().is_valid())
VS::get_singleton()->instance_set_scenario(_mesh_instance_rid, get_voxel_world()->get_world()->get_scenario()); VS::get_singleton()->instance_set_scenario(_mesh_instance_rid, get_voxel_world()->get_world()->get_scenario());
@ -833,14 +829,9 @@ void VoxelChunk::free_main_mesh() {
void VoxelChunk::allocate_prop_mesh() { void VoxelChunk::allocate_prop_mesh() {
ERR_FAIL_COND(_voxel_world == NULL); ERR_FAIL_COND(_voxel_world == NULL);
ERR_FAIL_COND(!get_library().is_valid()); ERR_FAIL_COND(!get_library().is_valid());
ERR_FAIL_COND(!get_library()->get_prop_material().is_valid());
_prop_mesh_instance_rid = VS::get_singleton()->instance_create(); _prop_mesh_instance_rid = VS::get_singleton()->instance_create();
if (get_library()->get_prop_material().is_valid()) {
VS::get_singleton()->instance_geometry_set_material_override(_prop_mesh_instance_rid, get_library()->get_prop_material()->get_rid());
}
if (get_voxel_world()->get_world().is_valid()) if (get_voxel_world()->get_world().is_valid())
VS::get_singleton()->instance_set_scenario(_prop_mesh_instance_rid, get_voxel_world()->get_world()->get_scenario()); VS::get_singleton()->instance_set_scenario(_prop_mesh_instance_rid, get_voxel_world()->get_world()->get_scenario());
@ -898,14 +889,9 @@ void VoxelChunk::allocate_liquid_mesh() {
ERR_FAIL_COND(_voxel_world == NULL); ERR_FAIL_COND(_voxel_world == NULL);
ERR_FAIL_COND(!get_library().is_valid()); ERR_FAIL_COND(!get_library().is_valid());
ERR_FAIL_COND(!get_library()->get_liquid_material().is_valid());
_liquid_mesh_instance_rid = VS::get_singleton()->instance_create(); _liquid_mesh_instance_rid = VS::get_singleton()->instance_create();
if (get_library()->get_liquid_material().is_valid()) {
VS::get_singleton()->instance_geometry_set_material_override(_liquid_mesh_instance_rid, get_library()->get_liquid_material()->get_rid());
}
if (get_voxel_world()->get_world().is_valid()) if (get_voxel_world()->get_world().is_valid())
VS::get_singleton()->instance_set_scenario(_liquid_mesh_instance_rid, get_voxel_world()->get_world()->get_scenario()); VS::get_singleton()->instance_set_scenario(_liquid_mesh_instance_rid, get_voxel_world()->get_world()->get_scenario());
@ -931,14 +917,9 @@ void VoxelChunk::allocate_clutter_mesh() {
ERR_FAIL_COND(_voxel_world == NULL); ERR_FAIL_COND(_voxel_world == NULL);
ERR_FAIL_COND(!get_library().is_valid()); ERR_FAIL_COND(!get_library().is_valid());
ERR_FAIL_COND(!get_library()->get_clutter_material().is_valid());
_clutter_mesh_instance_rid = VS::get_singleton()->instance_create(); _clutter_mesh_instance_rid = VS::get_singleton()->instance_create();
if (get_library()->get_clutter_material().is_valid()) {
VS::get_singleton()->instance_geometry_set_material_override(_clutter_mesh_instance_rid, get_library()->get_clutter_material()->get_rid());
}
if (get_voxel_world()->get_world().is_valid()) if (get_voxel_world()->get_world().is_valid())
VS::get_singleton()->instance_set_scenario(_clutter_mesh_instance_rid, get_voxel_world()->get_world()->get_scenario()); VS::get_singleton()->instance_set_scenario(_clutter_mesh_instance_rid, get_voxel_world()->get_world()->get_scenario());