Switch XRServer to use LocalVector for interfaces and do a little clean up
This commit is contained in:
parent
220b0b2f74
commit
4a71c4fc68
2 changed files with 27 additions and 38 deletions
|
|
@ -279,11 +279,9 @@ void XRServer::set_camera_locked_to_origin(bool p_enable) {
|
|||
void XRServer::add_interface(const Ref<XRInterface> &p_interface) {
|
||||
ERR_FAIL_COND(p_interface.is_null());
|
||||
|
||||
for (int i = 0; i < interfaces.size(); i++) {
|
||||
if (interfaces[i] == p_interface) {
|
||||
ERR_PRINT("Interface was already added");
|
||||
return;
|
||||
}
|
||||
if (interfaces.has(p_interface)) {
|
||||
ERR_PRINT("Interface was already added");
|
||||
return;
|
||||
}
|
||||
|
||||
interfaces.push_back(p_interface);
|
||||
|
|
@ -293,14 +291,7 @@ void XRServer::add_interface(const Ref<XRInterface> &p_interface) {
|
|||
void XRServer::remove_interface(const Ref<XRInterface> &p_interface) {
|
||||
ERR_FAIL_COND(p_interface.is_null());
|
||||
|
||||
int idx = -1;
|
||||
for (int i = 0; i < interfaces.size(); i++) {
|
||||
if (interfaces[i] == p_interface) {
|
||||
idx = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
int idx = interfaces.find(p_interface);
|
||||
ERR_FAIL_COND_MSG(idx == -1, "Interface not found.");
|
||||
print_verbose("XR: Removed interface \"" + p_interface->get_name() + "\"");
|
||||
emit_signal(SNAME("interface_removed"), p_interface->get_name());
|
||||
|
|
@ -312,15 +303,15 @@ int XRServer::get_interface_count() const {
|
|||
}
|
||||
|
||||
Ref<XRInterface> XRServer::get_interface(int p_index) const {
|
||||
ERR_FAIL_INDEX_V(p_index, interfaces.size(), nullptr);
|
||||
ERR_FAIL_INDEX_V(p_index, (int)interfaces.size(), nullptr);
|
||||
|
||||
return interfaces[p_index];
|
||||
}
|
||||
|
||||
Ref<XRInterface> XRServer::find_interface(const String &p_name) const {
|
||||
for (int i = 0; i < interfaces.size(); i++) {
|
||||
if (interfaces[i]->get_name() == p_name) {
|
||||
return interfaces[i];
|
||||
for (const Ref<XRInterface> &interface : interfaces) {
|
||||
if (interface->get_name() == p_name) {
|
||||
return interface;
|
||||
}
|
||||
}
|
||||
return Ref<XRInterface>();
|
||||
|
|
@ -329,7 +320,7 @@ Ref<XRInterface> XRServer::find_interface(const String &p_name) const {
|
|||
TypedArray<Dictionary> XRServer::get_interfaces() const {
|
||||
Array ret;
|
||||
|
||||
for (int i = 0; i < interfaces.size(); i++) {
|
||||
for (uint32_t i = 0; i < interfaces.size(); i++) {
|
||||
Dictionary iface_info;
|
||||
|
||||
iface_info["id"] = i;
|
||||
|
|
@ -410,12 +401,11 @@ Ref<XRTracker> XRServer::get_tracker(const StringName &p_name) const {
|
|||
PackedStringArray XRServer::get_suggested_tracker_names() const {
|
||||
PackedStringArray arr;
|
||||
|
||||
for (int i = 0; i < interfaces.size(); i++) {
|
||||
Ref<XRInterface> interface = interfaces[i];
|
||||
for (const Ref<XRInterface> &interface : interfaces) {
|
||||
PackedStringArray interface_arr = interface->get_suggested_tracker_names();
|
||||
for (int a = 0; a < interface_arr.size(); a++) {
|
||||
if (!arr.has(interface_arr[a])) {
|
||||
arr.push_back(interface_arr[a]);
|
||||
for (int i = 0; i < interface_arr.size(); i++) {
|
||||
if (!arr.has(interface_arr[i])) {
|
||||
arr.push_back(interface_arr[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -433,8 +423,7 @@ PackedStringArray XRServer::get_suggested_tracker_names() const {
|
|||
PackedStringArray XRServer::get_suggested_pose_names(const StringName &p_tracker_name) const {
|
||||
PackedStringArray arr;
|
||||
|
||||
for (int i = 0; i < interfaces.size(); i++) {
|
||||
Ref<XRInterface> interface = interfaces[i];
|
||||
for (const Ref<XRInterface> &interface : interfaces) {
|
||||
PackedStringArray interface_arr = interface->get_suggested_pose_names(p_tracker_name);
|
||||
for (int a = 0; a < interface_arr.size(); a++) {
|
||||
if (!arr.has(interface_arr[a])) {
|
||||
|
|
@ -462,11 +451,11 @@ void XRServer::_process() {
|
|||
// note that we can have multiple interfaces active if we have interfaces that purely handle tracking
|
||||
|
||||
// process all active interfaces
|
||||
for (int i = 0; i < interfaces.size(); i++) {
|
||||
if (interfaces[i].is_null()) {
|
||||
for (const Ref<XRInterface> &interface : interfaces) {
|
||||
if (interface.is_null()) {
|
||||
// ignore, not a valid reference
|
||||
} else if (interfaces[i]->is_initialized()) {
|
||||
interfaces.write[i]->process();
|
||||
} else if (interface->is_initialized()) {
|
||||
interface->process();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -476,11 +465,11 @@ void XRServer::pre_render() {
|
|||
// note that we can have multiple interfaces active if we have interfaces that purely handle tracking
|
||||
|
||||
// process all active interfaces
|
||||
for (int i = 0; i < interfaces.size(); i++) {
|
||||
if (interfaces[i].is_null()) {
|
||||
for (const Ref<XRInterface> &interface : interfaces) {
|
||||
if (interface.is_null()) {
|
||||
// ignore, not a valid reference
|
||||
} else if (interfaces[i]->is_initialized()) {
|
||||
interfaces.write[i]->pre_render();
|
||||
} else if (interface->is_initialized()) {
|
||||
interface->pre_render();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -489,11 +478,11 @@ void XRServer::end_frame() {
|
|||
// called from RenderingServerDefault after Vulkan queues have been submitted
|
||||
|
||||
// process all active interfaces
|
||||
for (int i = 0; i < interfaces.size(); i++) {
|
||||
if (interfaces[i].is_null()) {
|
||||
for (const Ref<XRInterface> &interface : interfaces) {
|
||||
if (interface.is_null()) {
|
||||
// ignore, not a valid reference
|
||||
} else if (interfaces[i]->is_initialized()) {
|
||||
interfaces.write[i]->end_frame();
|
||||
} else if (interface->is_initialized()) {
|
||||
interface->end_frame();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -85,7 +85,7 @@ public:
|
|||
private:
|
||||
static XRMode xr_mode;
|
||||
|
||||
Vector<Ref<XRInterface>> interfaces;
|
||||
LocalVector<Ref<XRInterface>> interfaces;
|
||||
Dictionary trackers;
|
||||
|
||||
Ref<XRInterface> primary_interface; /* we'll identify one interface as primary, this will be used by our viewports */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue