diff --git a/apps/OpenSpace/ext/sgct b/apps/OpenSpace/ext/sgct index 72536d99b2..df7c5414cc 160000 --- a/apps/OpenSpace/ext/sgct +++ b/apps/OpenSpace/ext/sgct @@ -1 +1 @@ -Subproject commit 72536d99b2bc463aeeec21c710cf8fd1b7a0a997 +Subproject commit df7c5414cc97783e0c32c212db746f49a83020a1 diff --git a/apps/OpenSpace/main.cpp b/apps/OpenSpace/main.cpp index de0052caf4..e7f534c60c 100644 --- a/apps/OpenSpace/main.cpp +++ b/apps/OpenSpace/main.cpp @@ -884,15 +884,6 @@ void setSgctDelegateFunctions() { sgct::ClusterManager::instance().setUseIgnoreSync(enabled); }; - sgctDelegate.clearAllWindows = [](const glm::vec4& clearColor) { - ZoneScoped - - for (const std::unique_ptr& window : Engine::instance().windows()) { - glClearColor(clearColor.r, clearColor.g, clearColor.b, clearColor.a); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glfwSwapBuffers(window->windowHandle()); - } - }; sgctDelegate.windowHasResized = []() { ZoneScoped @@ -925,26 +916,6 @@ void setSgctDelegateFunctions() { return sgct::Engine::getTime(); }; - sgctDelegate.mousePosition = []() { - ZoneScoped - - double xPos; - double yPos; - glfwGetCursorPos(currentWindow->windowHandle(), &xPos, &yPos); - return glm::vec2(xPos, yPos); - }; - sgctDelegate.mouseButtons = [](int maxNumber) { - ZoneScoped - - uint32_t result = 0; - for (int i = 0; i < maxNumber; ++i) { - bool button = (glfwGetMouseButton(currentWindow->windowHandle(), i) != 0); - if (button) { - result |= (1 << i); - } - } - return result; - }; sgctDelegate.currentWindowSize = []() { ZoneScoped @@ -980,12 +951,6 @@ void setSgctDelegateFunctions() { ); } }; - sgctDelegate.currentWindowResolution = []() { - ZoneScoped - - ivec2 dim = currentWindow->finalFBODimensions(); - return glm::ivec2(dim.x, dim.y); - }; sgctDelegate.currentDrawBufferResolution = []() { ZoneScoped @@ -1023,11 +988,6 @@ void setSgctDelegateFunctions() { vec2 scale = currentWindow->scale(); return glm::vec2(scale.x, scale.y); }; - sgctDelegate.currentNumberOfAaSamples = []() { - ZoneScoped - - return currentWindow->numberOfAASamples(); - }; sgctDelegate.hasGuiWindow = []() { ZoneScoped @@ -1048,21 +1008,6 @@ void setSgctDelegateFunctions() { return Engine::instance().isMaster(); }; - sgctDelegate.isUsingSwapGroups = []() { - ZoneScoped - - return Window::isUsingSwapGroups(); - }; - sgctDelegate.isSwapGroupMaster = []() { - ZoneScoped - - return Window::isSwapGroupMaster(); - }; - sgctDelegate.viewProjectionMatrix = []() { - ZoneScoped - - return currentModelViewProjectionMatrix; - }; sgctDelegate.modelMatrix = []() { ZoneScoped @@ -1073,31 +1018,6 @@ void setSgctDelegateFunctions() { Engine::instance().setNearAndFarClippingPlanes(nearPlane, farPlane); }; - sgctDelegate.setEyeSeparationDistance = [](float distance) { - ZoneScoped - - Engine::instance().setEyeSeparation(distance); - }; - //sgctDelegate.viewportPixelCoordinates = []() { - // ZoneScoped - - // if (!currentWindow|| !currentViewport) { - // return glm::ivec4(0); - // } - // else { - // const int* data = cur sgct::Engine::instance()->getCurrentViewportPixelCoords(); - // return glm::ivec4(data[0], data[2], data[1], data[3]); - // } - //}; - //sgctDelegate.sendMessageToExternalControl = [](const std::vector& message) { - // ZoneScoped - - // - // sgct::Engine::instance()->sendMessageToExternalControl( - // message.data(), - // static_cast(message.size()) - // ); - //}; sgctDelegate.isFisheyeRendering = []() { ZoneScoped diff --git a/include/openspace/engine/openspaceengine.h b/include/openspace/engine/openspaceengine.h index 2e076e82c4..abe5fe8687 100644 --- a/include/openspace/engine/openspaceengine.h +++ b/include/openspace/engine/openspaceengine.h @@ -120,6 +120,8 @@ private: bool _hasScheduledAssetLoading = false; std::string _scheduledAssetPathToLoad; + glm::vec2 _mousePosition; + //grabs json from each module to pass to the documentation engine. std::string _documentationJson; diff --git a/include/openspace/engine/windowdelegate.h b/include/openspace/engine/windowdelegate.h index 4dbbae6d95..0fd27ba589 100644 --- a/include/openspace/engine/windowdelegate.h +++ b/include/openspace/engine/windowdelegate.h @@ -40,8 +40,6 @@ struct WindowDelegate { void (*setSynchronization)(bool enabled) = [](bool) {}; - void (*clearAllWindows)(const glm::vec4& clearColor) = [](const glm::vec4&) {}; - bool (*windowHasResized)() = []() { return false; }; double (*averageDeltaTime)() = []() { return 0.0; }; @@ -56,47 +54,29 @@ struct WindowDelegate { double (*applicationTime)() = []() { return 0.0; }; - glm::vec2 (*mousePosition)() = []() { return glm::vec2(0.f); }; - - uint32_t (*mouseButtons)(int maxNumber) = [](int) { return uint32_t(0); }; - glm::ivec2 (*currentWindowSize)() = []() { return glm::ivec2(0); }; glm::ivec2 (*currentSubwindowSize)() = []() { return glm::ivec2(0); }; - glm::ivec2 (*currentWindowResolution)() = []() { return glm::ivec2(0); }; - glm::ivec2 (*currentDrawBufferResolution)() = []() { return glm::ivec2(0); }; glm::ivec2 (*currentViewportSize)() = []() { return glm::ivec2(0); }; glm::vec2 (*dpiScaling)() = []() { return glm::vec2(1.f); }; - int (*currentNumberOfAaSamples)() = []() { return 1; }; - bool (*hasGuiWindow)() = []() { return false; }; bool (*isGuiWindow)() = []() { return false; }; - bool (*isMaster)() = []() { return false; }; - - int (*clusterId)() = []() { return 0; }; - - bool (*isUsingSwapGroups)() = []() { return false; }; - - bool (*isSwapGroupMaster)() = []() { return false; }; - - glm::mat4 (*viewProjectionMatrix)() = []() { return glm::mat4(1.f); }; + bool (*isMaster)() = []() { return true; }; glm::mat4 (*modelMatrix)() = []() { return glm::mat4(1.f); }; void (*setNearFarClippingPlane)(float near, float far) = [](float, float) {}; - void (*setEyeSeparationDistance)(float distance) = [](float) {}; - bool (*isFisheyeRendering)() = []() { return false; }; - unsigned int(*takeScreenshot)(bool applyWarping) = [](bool) { return 0u; }; + unsigned int (*takeScreenshot)(bool applyWarping) = [](bool) { return 0u; }; void (*swapBuffer)() = []() {}; diff --git a/modules/imgui/imguimodule.cpp b/modules/imgui/imguimodule.cpp index 9066fe9859..a4a873c267 100644 --- a/modules/imgui/imguimodule.cpp +++ b/modules/imgui/imguimodule.cpp @@ -154,9 +154,6 @@ ImGUIModule::ImGUIModule() : OpenSpaceModule(Name) { global::callback::draw2D.emplace_back([&]() { ZoneScopedN("ImGUI") - // TODO emiax: Make sure this is only called for one of the eyes, in the case - // of side-by-side / top-bottom stereo. - WindowDelegate& delegate = global::windowDelegate; const bool showGui = delegate.hasGuiWindow() ? delegate.isGuiWindow() : true; if (delegate.isMaster() && showGui) { @@ -167,9 +164,6 @@ ImGUIModule::ImGUIModule() : OpenSpaceModule(Name) { return; } - glm::vec2 mousePosition = delegate.mousePosition(); - uint32_t mouseButtons = delegate.mouseButtons(2); - const double dt = std::max(delegate.averageDeltaTime(), 0.0); // We don't do any collection of immediate mode user interface, so it // is fine to open and close a frame immediately @@ -177,8 +171,8 @@ ImGUIModule::ImGUIModule() : OpenSpaceModule(Name) { static_cast(dt), glm::vec2(windowSize), resolution / windowSize, - mousePosition, - mouseButtons + _mousePosition, + _mouseButtons ); gui.endFrame(); @@ -217,10 +211,23 @@ ImGUIModule::ImGUIModule() : OpenSpaceModule(Name) { } ); + global::callback::mousePosition.emplace_back( + [&](double x, double y) { + _mousePosition = glm::vec2(static_cast(x), static_cast(y)); + } + ); + global::callback::mouseButton.emplace_back( [&](MouseButton button, MouseAction action, KeyModifier) -> bool { ZoneScopedN("ImGUI") + if (action == MouseAction::Press) { + _mouseButtons |= (1 << static_cast(button)); + } + else if (action == MouseAction::Release) { + _mouseButtons &= ~(1 << static_cast(button)); + } + // A list of all the windows that can show up by themselves if (gui.isEnabled() || gui._performance.isEnabled() || gui._sceneProperty.isEnabled()) diff --git a/modules/imgui/imguimodule.h b/modules/imgui/imguimodule.h index d106967c65..e08556ffa8 100644 --- a/modules/imgui/imguimodule.h +++ b/modules/imgui/imguimodule.h @@ -38,6 +38,10 @@ public: ImGUIModule(); gui::GUI gui; + +private: + glm::vec2 _mousePosition = glm::vec2(0.f); + uint32_t _mouseButtons = 0; }; } // namespace openspace diff --git a/modules/touch/src/win32_touch.cpp b/modules/touch/src/win32_touch.cpp index 10f517ae69..7ac553205b 100644 --- a/modules/touch/src/win32_touch.cpp +++ b/modules/touch/src/win32_touch.cpp @@ -180,15 +180,6 @@ Win32TouchHook::Win32TouchHook(void* nativeWindow) { return; } - // HACK: This hack is required as long as our GLFW version is based on the touch - // branch. There is no convenient way to set a GLFWBool (uint32_t) which sets the - // state of touch-to-mouseinput interpretation. It happens to be 116 bytes into an - // internal glfw struct... - uint32_t* HACKY_PTR = (uint32_t *)GetPropW(hWnd, L"GLFW"); - HACKY_PTR += 116/sizeof(uint32_t); - *HACKY_PTR = 1; - - // Test for touch: int value = GetSystemMetrics(SM_DIGITIZER); if ((value & NID_READY) == 0) { diff --git a/src/engine/openspaceengine.cpp b/src/engine/openspaceengine.cpp index e782b56c8d..979203a8f6 100644 --- a/src/engine/openspaceengine.cpp +++ b/src/engine/openspaceengine.cpp @@ -420,11 +420,6 @@ void OpenSpaceEngine::initializeGL() { rendering::helper::initialize(); - // clear the screen so the user doesn't have to see old buffer contents left on the - // graphics card - LDEBUG("Clearing all Windows"); - global::windowDelegate.clearAllWindows(glm::vec4(0.f, 0.f, 0.f, 1.f)); - LDEBUG("Adding system components"); // Detect and log OpenCL and OpenGL versions and available devices SysCap.addComponent( @@ -1378,10 +1373,7 @@ void OpenSpaceEngine::mouseButtonCallback(MouseButton button, // Check if the user clicked on one of the 'buttons' the RenderEngine is drawing if (action == MouseAction::Press) { - bool isConsumed = global::renderEngine.mouseActivationCallback( - global::windowDelegate.mousePosition() - ); - + bool isConsumed = global::renderEngine.mouseActivationCallback(_mousePosition); if (isConsumed) { return; } @@ -1401,6 +1393,8 @@ void OpenSpaceEngine::mousePositionCallback(double x, double y) { global::navigationHandler.mousePositionCallback(x, y); global::interactionMonitor.markInteraction(); + + _mousePosition = glm::vec2(static_cast(x), static_cast(y)); } void OpenSpaceEngine::mouseScrollWheelCallback(double posX, double posY) { @@ -1547,15 +1541,6 @@ scripting::LuaLibrary OpenSpaceEngine::luaLibrary() { "Returns whether the current OpenSpace instance is the master node of a " "cluster configuration. If this instance is not part of a cluster, this " "function also returns 'true'." - }, - { - "clusterId", - &luascriptfunctions::clusterId, - {}, - "", - "Returns the zero-based identifier for this OpenSpace instance in a " - "cluster configuration. If this instance is not part of a cluster, this " - "identifier is always 0." } }, { diff --git a/src/engine/openspaceengine_lua.inl b/src/engine/openspaceengine_lua.inl index 8980499883..db0a9a70fa 100644 --- a/src/engine/openspaceengine_lua.inl +++ b/src/engine/openspaceengine_lua.inl @@ -272,10 +272,4 @@ int isMaster(lua_State* L) { return 1; } -int clusterId(lua_State* L) { - ghoul::lua::checkArgumentsAndThrow(L, 0, "lua::clusterId"); - ghoul::lua::push(L, global::windowDelegate.clusterId()); - return 1; -} - } // namespace openspace::luascriptfunctions