From caa087f88824993c99f2d5297eede4eb0a1af6ca Mon Sep 17 00:00:00 2001 From: lawnjelly Date: Sat, 7 May 2022 10:09:12 +0100 Subject: [PATCH] Portals - show gridmaps using global mode Gridmaps did not previously show at all when portals were active, due to the instances being created defaulting to static mode, and not being converted during the room conversion stage. This PR sets gridmap instances to global mode, which enables them to show up when portals are active (using frustum culling only, no occlusion). --- modules/gridmap/grid_map.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/modules/gridmap/grid_map.cpp b/modules/gridmap/grid_map.cpp index 30a30ce5a2c..e3aa7e320bc 100644 --- a/modules/gridmap/grid_map.cpp +++ b/modules/gridmap/grid_map.cpp @@ -74,6 +74,7 @@ bool GridMap::_set(const StringName &p_name, const Variant &p_value) { bm.mesh = meshes[i]; ERR_CONTINUE(!bm.mesh.is_valid()); bm.instance = RID_PRIME(VS::get_singleton()->instance_create()); + VS::get_singleton()->instance_set_portal_mode(bm.instance, VisualServer::InstancePortalMode::INSTANCE_PORTAL_MODE_GLOBAL); VS::get_singleton()->get_singleton()->instance_set_base(bm.instance, bm.mesh->get_rid()); VS::get_singleton()->instance_attach_object_instance_id(bm.instance, get_instance_id()); if (is_inside_tree()) { @@ -338,6 +339,7 @@ void GridMap::set_cell_item(int p_x, int p_y, int p_z, int p_item, int p_rot) { if (st && st->is_debugging_collisions_hint()) { g->collision_debug = RID_PRIME(VisualServer::get_singleton()->mesh_create()); g->collision_debug_instance = RID_PRIME(VisualServer::get_singleton()->instance_create()); + VS::get_singleton()->instance_set_portal_mode(g->collision_debug_instance, VisualServer::InstancePortalMode::INSTANCE_PORTAL_MODE_GLOBAL); VisualServer::get_singleton()->instance_set_base(g->collision_debug_instance, g->collision_debug); } @@ -558,6 +560,7 @@ bool GridMap::_octant_update(const OctantKey &p_key) { RID instance = RID_PRIME(VS::get_singleton()->instance_create()); VS::get_singleton()->instance_set_base(instance, mm); + VS::get_singleton()->instance_set_portal_mode(instance, VisualServer::InstancePortalMode::INSTANCE_PORTAL_MODE_GLOBAL); if (is_inside_tree()) { VS::get_singleton()->instance_set_scenario(instance, get_world()->get_scenario()); @@ -1095,6 +1098,7 @@ void GridMap::make_baked_meshes(bool p_gen_lightmap_uv, float p_lightmap_uv_texe BakedMesh bm; bm.mesh = mesh; bm.instance = RID_PRIME(VS::get_singleton()->instance_create()); + VS::get_singleton()->instance_set_portal_mode(bm.instance, VisualServer::InstancePortalMode::INSTANCE_PORTAL_MODE_GLOBAL); VS::get_singleton()->get_singleton()->instance_set_base(bm.instance, bm.mesh->get_rid()); VS::get_singleton()->instance_attach_object_instance_id(bm.instance, get_instance_id()); if (is_inside_tree()) {