Merge pull request #45335 from lawnjelly/bvh_revert_update
Partially revert change to BVH render tree update method
This commit is contained in:
commit
c97837d0ee
|
@ -104,7 +104,6 @@ void VisualServerRaster::draw(bool p_swap_buffers, double frame_step) {
|
||||||
VSG::rasterizer->begin_frame(frame_step);
|
VSG::rasterizer->begin_frame(frame_step);
|
||||||
|
|
||||||
VSG::scene->update_dirty_instances(); //update scene stuff
|
VSG::scene->update_dirty_instances(); //update scene stuff
|
||||||
VSG::scene->update_scenarios(); // render tree collision detection (pairing)
|
|
||||||
|
|
||||||
VSG::viewport->draw_viewports();
|
VSG::viewport->draw_viewports();
|
||||||
VSG::scene->render_probes();
|
VSG::scene->render_probes();
|
||||||
|
|
|
@ -3578,47 +3578,24 @@ void VisualServerScene::_update_dirty_instance(Instance *p_instance) {
|
||||||
p_instance->update_materials = false;
|
p_instance->update_materials = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void VisualServerScene::update_scenarios() {
|
|
||||||
// go through all scenarios and update BVH in each
|
|
||||||
if (!_use_bvh) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
List<RID> owned;
|
|
||||||
scenario_owner.get_owned_list(&owned);
|
|
||||||
|
|
||||||
for (List<RID>::Element *E = owned.front(); E; E = E->next()) {
|
|
||||||
RID rid = E->get();
|
|
||||||
Scenario *scenario = scenario_owner.get(rid);
|
|
||||||
|
|
||||||
scenario->sps->update();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void VisualServerScene::update_dirty_instances() {
|
void VisualServerScene::update_dirty_instances() {
|
||||||
|
|
||||||
VSG::storage->update_dirty_resources();
|
VSG::storage->update_dirty_resources();
|
||||||
|
|
||||||
// only define this if you run into problems with missed pairing collisions for debugging
|
|
||||||
//#define GODOT_RENDER_SPS_EXTRA_COLLISION_CHECKS
|
|
||||||
#ifdef GODOT_RENDER_SPS_EXTRA_COLLISION_CHECKS
|
|
||||||
// this is just to get access to scenario so we can update the spatial partitioning scheme
|
// this is just to get access to scenario so we can update the spatial partitioning scheme
|
||||||
Scenario *scenario = nullptr;
|
Scenario *scenario = nullptr;
|
||||||
if (_instance_update_list.first()) {
|
if (_instance_update_list.first()) {
|
||||||
scenario = _instance_update_list.first()->self()->scenario;
|
scenario = _instance_update_list.first()->self()->scenario;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
while (_instance_update_list.first()) {
|
while (_instance_update_list.first()) {
|
||||||
|
|
||||||
_update_dirty_instance(_instance_update_list.first()->self());
|
_update_dirty_instance(_instance_update_list.first()->self());
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef GODOT_RENDER_SPS_EXTRA_COLLISION_CHECKS
|
|
||||||
if (scenario) {
|
if (scenario) {
|
||||||
scenario->sps->update_collisions();
|
scenario->sps->update();
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool VisualServerScene::free(RID p_rid) {
|
bool VisualServerScene::free(RID p_rid) {
|
||||||
|
|
|
@ -554,7 +554,6 @@ public:
|
||||||
void render_camera(RID p_camera, RID p_scenario, Size2 p_viewport_size, RID p_shadow_atlas);
|
void render_camera(RID p_camera, RID p_scenario, Size2 p_viewport_size, RID p_shadow_atlas);
|
||||||
void render_camera(Ref<ARVRInterface> &p_interface, ARVRInterface::Eyes p_eye, RID p_camera, RID p_scenario, Size2 p_viewport_size, RID p_shadow_atlas);
|
void render_camera(Ref<ARVRInterface> &p_interface, ARVRInterface::Eyes p_eye, RID p_camera, RID p_scenario, Size2 p_viewport_size, RID p_shadow_atlas);
|
||||||
void update_dirty_instances();
|
void update_dirty_instances();
|
||||||
void update_scenarios();
|
|
||||||
|
|
||||||
//probes
|
//probes
|
||||||
struct GIProbeDataHeader {
|
struct GIProbeDataHeader {
|
||||||
|
|
Loading…
Reference in New Issue