| 30 | } |
| 31 | |
| 32 | static Viewport* allocate() |
| 33 | { |
| 34 | // Find a free viewport, it is considered unused when width is set to 0. |
| 35 | auto itFree = std::ranges::find(_viewports, 0, &Viewport::width); |
| 36 | if (itFree != std::ranges::end(_viewports)) |
| 37 | { |
| 38 | return &(*itFree); |
| 39 | } |
| 40 | |
| 41 | // Allocate a new viewport. |
| 42 | if (_viewports.size() < _viewports.capacity()) |
| 43 | { |
| 44 | _viewports.emplace_back(); |
| 45 | return &_viewports.back(); |
| 46 | } |
| 47 | |
| 48 | Logging::warn("No free viewports are available, reached max of {}", kMaxViewports); |
| 49 | return nullptr; |
| 50 | } |
| 51 | |
| 52 | void destroy(Viewport* vp) |
| 53 | { |