| 62 | } |
| 63 | |
| 64 | void AbyssEngine::render() const { |
| 65 | ImGui_ImplSDLRenderer2_NewFrame(); |
| 66 | ImGui_ImplSDL2_NewFrame(); |
| 67 | |
| 68 | SDL_SetRenderDrawColor(_renderer.get(), 0, 0, 0, 255); |
| 69 | SDL_RenderClear(_renderer.get()); |
| 70 | |
| 71 | ImGui::NewFrame(); |
| 72 | if (_currentScene != nullptr) { |
| 73 | SDL_SetRenderTarget(_renderer.get(), _renderTexture.get()); |
| 74 | |
| 75 | if (_videoStream != nullptr) { |
| 76 | _videoStream->render(); |
| 77 | } else { |
| 78 | _currentScene->render(); |
| 79 | |
| 80 | if (_cursorImage != nullptr && _mouseState.isVisible() && _mouseOverGameWindow) { |
| 81 | int mx, my; |
| 82 | _mouseState.getPosition(mx, my); |
| 83 | _cursorImage->draw(0, mx + 1, my + 2); |
| 84 | } |
| 85 | } |
| 86 | |
| 87 | SDL_SetRenderTarget(_renderer.get(), nullptr); |
| 88 | SDL_RenderCopy(_renderer.get(), _renderTexture.get(), nullptr, &_renderRect); |
| 89 | } |
| 90 | |
| 91 | ImGui::Render(); |
| 92 | ImGui_ImplSDLRenderer2_RenderDrawData(ImGui::GetDrawData()); |
| 93 | |
| 94 | // Is the mouse over an ImGui window, or outside _renderRect? If so, show the cursor, otherwise hide it |
| 95 | if (ImGui::IsWindowHovered(ImGuiHoveredFlags_AnyWindow) || !_mouseOverGameWindow) { |
| 96 | SDL_ShowCursor(SDL_TRUE); |
| 97 | } else { |
| 98 | SDL_ShowCursor(SDL_FALSE); |
| 99 | } |
| 100 | |
| 101 | SDL_RenderPresent(_renderer.get()); |
| 102 | } |
| 103 | |
| 104 | void AbyssEngine::processEvents(const std::chrono::duration<double> deltaTime) { |
| 105 | const absl::btree_map<uint8_t, Enums::MouseButton> buttonMap = { |
nothing calls this directly
no test coverage detected