Make it more efficient to get the vector of browsers

This commit is contained in:
Ylva Selling
2021-05-07 14:37:52 +02:00
parent 03dbbd1352
commit a456b68b20
3 changed files with 24 additions and 27 deletions

View File

@@ -340,7 +340,7 @@ SkyBrowserModule::SkyBrowserModule()
);
global::callback::preSync->emplace_back([this]() {
for (ScreenSpaceSkyBrowser* browser : getSkyBrowsers()) {
for (ScreenSpaceSkyBrowser* browser : browsers) {
if (browser->getSkyTarget()) {
browser->getSkyTarget()->animateToCoord(global::windowDelegate->deltaTime());
}
@@ -387,6 +387,9 @@ void SkyBrowserModule::addRenderable(ScreenSpaceRenderable* object) {
renderables.push_back(object);
// Sort on z coordinate, objects closer to camera are in beginning of list
std::sort(renderables.begin(), renderables.end());
if (to_browser(object)) {
browsers.push_back(to_browser(object));
}
}
ScreenSpaceSkyBrowser* SkyBrowserModule::to_browser(ScreenSpaceRenderable* ptr) {
@@ -400,14 +403,8 @@ WWTDataHandler* SkyBrowserModule::getWWTDataHandler() {
return dataHandler;
}
std::vector<ScreenSpaceSkyBrowser*> SkyBrowserModule::getSkyBrowsers() {
std::vector<ScreenSpaceSkyBrowser*> browsers;
for (ScreenSpaceRenderable* renderable : renderables) {
if (to_browser(renderable)) {
browsers.push_back(to_browser(renderable));
}
}
return browsers;
std::vector<ScreenSpaceSkyBrowser*>* SkyBrowserModule::getSkyBrowsers() {
return &browsers;
}
void SkyBrowserModule::startRotation(glm::dvec2 coordsEnd) {
@@ -446,7 +443,6 @@ void SkyBrowserModule::rotateCamera(double deltaTime) {
void SkyBrowserModule::setSelectedBrowser(ScreenSpaceRenderable* ptr) {
ScreenSpaceSkyBrowser* browser = to_browser(ptr) ? to_browser(ptr) : to_target(ptr)->getSkyBrowser();
std::vector<ScreenSpaceSkyBrowser*> browsers = getSkyBrowsers();
auto it = std::find(browsers.begin(), browsers.end(), browser);
// Get index
selectedBrowser = std::distance(browsers.begin(), it);

View File

@@ -54,7 +54,7 @@ public:
glm::vec2 getMousePositionInScreenSpaceCoords(glm::vec2& mousePos);
void addRenderable(ScreenSpaceRenderable* object);
WWTDataHandler* getWWTDataHandler();
std::vector<ScreenSpaceSkyBrowser*> getSkyBrowsers();
std::vector<ScreenSpaceSkyBrowser*>* getSkyBrowsers();
void startRotation(glm::dvec2 coordsEnd);
void rotateCamera(double deltaTime);
void setSelectedBrowser(ScreenSpaceRenderable* ptr);
@@ -76,6 +76,7 @@ protected:
// Renderable vector and ptr to where mouse is
std::vector<ScreenSpaceRenderable*> renderables;
std::vector<ScreenSpaceSkyBrowser*> browsers;
ScreenSpaceRenderable* _mouseOnObject;
// Dragging
glm::vec2 startDragMousePos;

View File

@@ -37,7 +37,7 @@ namespace openspace::skybrowser::luascriptfunctions {
ghoul::lua::checkArgumentsAndThrow(L, 1, "lua::selectImage");
const int i = ghoul::lua::value<int>(L, 1);
SkyBrowserModule* module = global::moduleEngine->module<SkyBrowserModule>();
ScreenSpaceSkyBrowser* browser = module->getSkyBrowsers()[module->getSelectedBrowserIndex()];
ScreenSpaceSkyBrowser* browser = (*module->getSkyBrowsers())[module->getSelectedBrowserIndex()];
const ImageData& resultImage = module->getWWTDataHandler()->getLoadedImages()[i];
// Load image collection, if it isn't loaded already
@@ -106,10 +106,10 @@ namespace openspace::skybrowser::luascriptfunctions {
ghoul::lua::checkArgumentsAndThrow(L, 1, "lua::lockTarget");
const int i = ghoul::lua::value<int>(L, 1);
SkyBrowserModule* module = global::moduleEngine->module<SkyBrowserModule>();
std::vector<ScreenSpaceSkyBrowser*> browsers = module->getSkyBrowsers();
ScreenSpaceSkyTarget* target = browsers[i]->getSkyTarget();
if (i < browsers.size()) {
ScreenSpaceSkyTarget* target = browsers[i]->getSkyTarget();
std::vector<ScreenSpaceSkyBrowser*>* browsers = module->getSkyBrowsers();
ScreenSpaceSkyTarget* target = (*browsers)[i]->getSkyTarget();
if (i < browsers->size()) {
ScreenSpaceSkyTarget* target = (*browsers)[i]->getSkyTarget();
if (target) {
target->lock();
}
@@ -121,9 +121,9 @@ namespace openspace::skybrowser::luascriptfunctions {
ghoul::lua::checkArgumentsAndThrow(L, 1, "lua::unlockTarget");
const int i = ghoul::lua::value<int>(L, 1);
SkyBrowserModule* module = global::moduleEngine->module<SkyBrowserModule>();
std::vector<ScreenSpaceSkyBrowser*> browsers = module->getSkyBrowsers();
if (i < browsers.size()) {
ScreenSpaceSkyTarget* target = browsers[i]->getSkyTarget();
std::vector<ScreenSpaceSkyBrowser*>* browsers = module->getSkyBrowsers();
if (i < browsers->size()) {
ScreenSpaceSkyTarget* target = (*browsers)[i]->getSkyTarget();
if (target) {
target->unlock();
}
@@ -258,24 +258,24 @@ namespace openspace::skybrowser::luascriptfunctions {
lua_settable(L, -3);
// Pass data for all the browsers and the corresponding targets
std::vector<ScreenSpaceSkyBrowser*> browsers = module->getSkyBrowsers();
std::vector<ScreenSpaceSkyBrowser*>* browsers = module->getSkyBrowsers();
for (int i = 0; i < browsers.size(); i++) {
for (ScreenSpaceSkyBrowser* browser : *browsers) {
// Only add browsers that have an initialized target
ScreenSpaceSkyTarget* target = browsers[i]->getSkyTarget();
ScreenSpaceSkyTarget* target = browser->getSkyTarget();
if (target) {
glm::dvec2 celestialSpherical = target->getTargetDirectionCelestial();
glm::dvec3 celestialCart = skybrowser::sphericalToCartesian(celestialSpherical);
std::vector<double> celestialCartVec = { celestialCart.x, celestialCart.y, celestialCart.z };
// Convert color to vector so ghoul can read it
glm::ivec3 color = browsers[i]->_borderColor.value();
glm::ivec3 color = browser->_borderColor.value();
std::vector<int> colorVec = { color.r, color.g, color.b };
ghoul::lua::push(L, index);
index++;
lua_newtable(L);
// Push ("Key", value)
ghoul::lua::push(L, "FOV", browsers[i]->fieldOfView());
ghoul::lua::push(L, "FOV", browser->fieldOfView());
lua_settable(L, -3);
ghoul::lua::push(L, "CartesianDirection", celestialCartVec);
lua_settable(L, -3);
@@ -298,8 +298,8 @@ namespace openspace::skybrowser::luascriptfunctions {
ghoul::lua::checkArgumentsAndThrow(L, 1, "lua::adjustCamera");
const int i = ghoul::lua::value<int>(L, 1);
SkyBrowserModule* module = global::moduleEngine->module<SkyBrowserModule>();
if (module->getSkyBrowsers().size() > i) {
module->startRotation(module->getSkyBrowsers()[i]->getSkyTarget()->getTargetDirectionCelestial());
if (module->getSkyBrowsers()->size() > i) {
module->startRotation((*module->getSkyBrowsers())[i]->getSkyTarget()->getTargetDirectionCelestial());
}
return 0;
@@ -309,7 +309,7 @@ namespace openspace::skybrowser::luascriptfunctions {
ghoul::lua::checkArgumentsAndThrow(L, 1, "lua::setSelectedBrowser");
const int i = ghoul::lua::value<int>(L, 1);
SkyBrowserModule* module = global::moduleEngine->module<SkyBrowserModule>();
if (module->getSkyBrowsers().size() < i) {
if (module->getSkyBrowsers()->size() < i) {
module->setSelectedBrowser(i);
}
return 0;