CSGMesh material and CSGShape inherits from GeometryInstance
I left the material on CSGMesh because GeometryInstance's material override prevents the normal material behaviour of the csg meshes but the material_override is useful, and now you can control the shadow, lod and other properties you get from GeometryInstance
This commit is contained in:
@ -724,6 +724,7 @@ CSGBrush *CSGMesh::_build_brush() {
|
||||
PoolVector<bool> smooth;
|
||||
PoolVector<Ref<Material> > materials;
|
||||
PoolVector<Vector2> uvs;
|
||||
Ref<Material> material = get_material();
|
||||
|
||||
for (int i = 0; i < mesh->get_surface_count(); i++) {
|
||||
|
||||
@ -760,7 +761,12 @@ CSGBrush *CSGMesh::_build_brush() {
|
||||
uvr_used = true;
|
||||
}
|
||||
|
||||
Ref<Material> mat = mesh->surface_get_material(i);
|
||||
Ref<Material> mat;
|
||||
if (material.is_valid()) {
|
||||
mat = material;
|
||||
} else {
|
||||
mat = mesh->surface_get_material(i);
|
||||
}
|
||||
|
||||
PoolVector<int> aindices = arrays[Mesh::ARRAY_INDEX];
|
||||
if (aindices.size()) {
|
||||
@ -866,6 +872,18 @@ void CSGMesh::_mesh_changed() {
|
||||
update_gizmo();
|
||||
}
|
||||
|
||||
void CSGMesh::set_material(const Ref<Material> &p_material) {
|
||||
if (material == p_material)
|
||||
return;
|
||||
material = p_material;
|
||||
_make_dirty();
|
||||
}
|
||||
|
||||
Ref<Material> CSGMesh::get_material() const {
|
||||
|
||||
return material;
|
||||
}
|
||||
|
||||
void CSGMesh::_bind_methods() {
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_mesh", "mesh"), &CSGMesh::set_mesh);
|
||||
@ -873,7 +891,11 @@ void CSGMesh::_bind_methods() {
|
||||
|
||||
ClassDB::bind_method(D_METHOD("_mesh_changed"), &CSGMesh::_mesh_changed);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_material", "material"), &CSGMesh::set_material);
|
||||
ClassDB::bind_method(D_METHOD("get_material"), &CSGMesh::get_material);
|
||||
|
||||
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "mesh", PROPERTY_HINT_RESOURCE_TYPE, "Mesh"), "set_mesh", "get_mesh");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "material", PROPERTY_HINT_RESOURCE_TYPE, "SpatialMaterial,ShaderMaterial"), "set_material", "get_material");
|
||||
}
|
||||
|
||||
void CSGMesh::set_mesh(const Ref<Mesh> &p_mesh) {
|
||||
|
||||
Reference in New Issue
Block a user