[ios][macos] rendering interface changes
This commit is contained in:
committed by
Ivo van Dongen
parent
b97cc980e0
commit
b6d56ad634
67
platform/darwin/src/MGLRendererFrontend.h
Normal file
67
platform/darwin/src/MGLRendererFrontend.h
Normal file
@@ -0,0 +1,67 @@
|
||||
#include <mbgl/renderer/renderer.hpp>
|
||||
#include <mbgl/renderer/renderer_frontend.hpp>
|
||||
#include <mbgl/util/async_task.hpp>
|
||||
#include <mbgl/util/optional.hpp>
|
||||
|
||||
|
||||
/**
|
||||
The RenderFrontend is passed to the Map to facilitate rendering in a platform
|
||||
dependent way.
|
||||
*/
|
||||
class MGLRenderFrontend : public mbgl::RendererFrontend
|
||||
{
|
||||
public:
|
||||
MGLRenderFrontend(std::unique_ptr<mbgl::Renderer> renderer_, MGLMapView* nativeView_, mbgl::View* mbglView_, bool async = false)
|
||||
: renderer(std::move(renderer_))
|
||||
, nativeView(nativeView_)
|
||||
, mbglView(mbglView_) {
|
||||
|
||||
if (async) {
|
||||
asyncInvalidate.emplace([&]() {
|
||||
[nativeView setNeedsGLDisplay];
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
void reset() override {
|
||||
if (renderer) {
|
||||
renderer.reset();
|
||||
}
|
||||
}
|
||||
|
||||
void update(std::shared_ptr<mbgl::UpdateParameters> updateParameters_) override {
|
||||
updateParameters = std::move(updateParameters_);
|
||||
if (asyncInvalidate) {
|
||||
asyncInvalidate->send();
|
||||
} else {
|
||||
[nativeView setNeedsGLDisplay];
|
||||
}
|
||||
}
|
||||
|
||||
void setObserver(mbgl::RendererObserver& observer) override {
|
||||
if (!renderer) return;
|
||||
renderer->setObserver(&observer);
|
||||
}
|
||||
|
||||
void render() {
|
||||
if (!renderer || !updateParameters) return;
|
||||
|
||||
renderer->render(*mbglView, *updateParameters);
|
||||
}
|
||||
|
||||
mbgl::Renderer* getRenderer() {
|
||||
return renderer.get();
|
||||
}
|
||||
|
||||
void onLowMemory() {
|
||||
if (!renderer) return;
|
||||
renderer->onLowMemory();
|
||||
}
|
||||
|
||||
private:
|
||||
std::unique_ptr<mbgl::Renderer> renderer;
|
||||
__weak MGLMapView *nativeView = nullptr;
|
||||
mbgl::View *mbglView = nullptr;
|
||||
std::shared_ptr<mbgl::UpdateParameters> updateParameters;
|
||||
mbgl::optional<mbgl::util::AsyncTask> asyncInvalidate;
|
||||
};
|
||||
@@ -11,6 +11,7 @@
|
||||
|
||||
#include <mbgl/map/map.hpp>
|
||||
#include <mbgl/style/sources/geojson_source.hpp>
|
||||
#include <mbgl/renderer/renderer.hpp>
|
||||
|
||||
const MGLShapeSourceOption MGLShapeSourceOptionClustered = @"MGLShapeSourceOptionClustered";
|
||||
const MGLShapeSourceOption MGLShapeSourceOptionClusterRadius = @"MGLShapeSourceOptionClusterRadius";
|
||||
@@ -98,7 +99,7 @@ const MGLShapeSourceOption MGLShapeSourceOptionSimplificationTolerance = @"MGLSh
|
||||
|
||||
std::vector<mbgl::Feature> features;
|
||||
if (self.style) {
|
||||
features = self.style.mapView.mbglMap->querySourceFeatures(self.rawSource->getID(), { {}, optionalFilter });
|
||||
features = self.style.mapView.renderer->querySourceFeatures(self.rawSource->getID(), { {}, optionalFilter });
|
||||
}
|
||||
return MGLFeaturesFromMBGLFeatures(features);
|
||||
}
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
|
||||
#include <mbgl/map/map.hpp>
|
||||
#include <mbgl/style/sources/vector_source.hpp>
|
||||
#include <mbgl/renderer/renderer.hpp>
|
||||
|
||||
@interface MGLVectorSource ()
|
||||
|
||||
@@ -64,7 +65,7 @@
|
||||
|
||||
std::vector<mbgl::Feature> features;
|
||||
if (self.style) {
|
||||
features = self.style.mapView.mbglMap->querySourceFeatures(self.rawSource->getID(), { optionalSourceLayerIDs, optionalFilter });
|
||||
features = self.style.mapView.renderer->querySourceFeatures(self.rawSource->getID(), { optionalSourceLayerIDs, optionalFilter });
|
||||
}
|
||||
return MGLFeaturesFromMBGLFeatures(features);
|
||||
}
|
||||
|
||||
@@ -213,6 +213,7 @@
|
||||
7E016D861D9E890300A29A21 /* MGLPolygon+MGLAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 7E016D831D9E890300A29A21 /* MGLPolygon+MGLAdditions.m */; };
|
||||
7E016D871D9E890300A29A21 /* MGLPolygon+MGLAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 7E016D831D9E890300A29A21 /* MGLPolygon+MGLAdditions.m */; };
|
||||
920A3E5D1E6F995200C16EFC /* MGLSourceQueryTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 920A3E5C1E6F995200C16EFC /* MGLSourceQueryTests.m */; };
|
||||
92F2C3ED1F0E3C3A00268EC0 /* MGLRendererFrontend.h in Headers */ = {isa = PBXBuildFile; fileRef = 92F2C3EC1F0E3C3A00268EC0 /* MGLRendererFrontend.h */; };
|
||||
960D0C361ECF5AAF008E151F /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 960D0C351ECF5AAF008E151F /* Images.xcassets */; };
|
||||
960D0C371ECF5AAF008E151F /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 960D0C351ECF5AAF008E151F /* Images.xcassets */; };
|
||||
9620BB381E69FE1700705A1D /* MGLSDKUpdateChecker.h in Headers */ = {isa = PBXBuildFile; fileRef = 9620BB361E69FE1700705A1D /* MGLSDKUpdateChecker.h */; };
|
||||
@@ -683,6 +684,7 @@
|
||||
7E016D821D9E890300A29A21 /* MGLPolygon+MGLAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "MGLPolygon+MGLAdditions.h"; sourceTree = "<group>"; };
|
||||
7E016D831D9E890300A29A21 /* MGLPolygon+MGLAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "MGLPolygon+MGLAdditions.m"; sourceTree = "<group>"; };
|
||||
920A3E5C1E6F995200C16EFC /* MGLSourceQueryTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MGLSourceQueryTests.m; path = ../../darwin/test/MGLSourceQueryTests.m; sourceTree = "<group>"; };
|
||||
92F2C3EC1F0E3C3A00268EC0 /* MGLRendererFrontend.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLRendererFrontend.h; sourceTree = "<group>"; };
|
||||
960D0C351ECF5AAF008E151F /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = "<group>"; };
|
||||
9620BB361E69FE1700705A1D /* MGLSDKUpdateChecker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLSDKUpdateChecker.h; sourceTree = "<group>"; };
|
||||
9620BB371E69FE1700705A1D /* MGLSDKUpdateChecker.mm */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 4; path = MGLSDKUpdateChecker.mm; sourceTree = "<group>"; };
|
||||
@@ -1335,6 +1337,7 @@
|
||||
DA8848031CBAFA6200AB86E3 /* MGLMapCamera.mm */,
|
||||
DD0902A41DB18F1B00C5BDCE /* MGLNetworkConfiguration.h */,
|
||||
DD0902A21DB18DE700C5BDCE /* MGLNetworkConfiguration.m */,
|
||||
92F2C3EC1F0E3C3A00268EC0 /* MGLRendererFrontend.h */,
|
||||
DA8847EC1CBAFA5100AB86E3 /* MGLStyle.h */,
|
||||
35E0CFE51D3E501500188327 /* MGLStyle_Private.h */,
|
||||
DA88480F1CBAFA6200AB86E3 /* MGLStyle.mm */,
|
||||
@@ -1689,6 +1692,7 @@
|
||||
35D3A1E61E9BE7EB002B38EE /* MGLScaleBar.h in Headers */,
|
||||
DA8848311CBAFA6200AB86E3 /* NSString+MGLAdditions.h in Headers */,
|
||||
353933F81D3FB79F003F57D7 /* MGLLineStyleLayer.h in Headers */,
|
||||
92F2C3ED1F0E3C3A00268EC0 /* MGLRendererFrontend.h in Headers */,
|
||||
DAAF722D1DA903C700312FA4 /* MGLStyleValue_Private.h in Headers */,
|
||||
071BBB031EE76146001FB02A /* MGLImageSource.h in Headers */,
|
||||
DA8847F41CBAFA5100AB86E3 /* MGLOfflinePack.h in Headers */,
|
||||
@@ -1789,6 +1793,7 @@
|
||||
DABFB8621CBE99E500D62B32 /* MGLOfflinePack.h in Headers */,
|
||||
DAD1656D1CF41981001FF4B9 /* MGLFeature.h in Headers */,
|
||||
DA17BE311CC4BDAA00402C41 /* MGLMapView_Private.h in Headers */,
|
||||
92F2C3EE1F0E3DC600268EC0 /* MGLRendererFrontend.h in Headers */,
|
||||
DABFB86C1CBE99E500D62B32 /* MGLTypes.h in Headers */,
|
||||
DABFB8691CBE99E500D62B32 /* MGLShape.h in Headers */,
|
||||
9620BB391E69FE1700705A1D /* MGLSDKUpdateChecker.h in Headers */,
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
#include <mbgl/util/default_thread_pool.hpp>
|
||||
#include <mbgl/storage/default_file_source.hpp>
|
||||
#include <mbgl/storage/network_status.hpp>
|
||||
#include <mbgl/renderer/renderer.hpp>
|
||||
#include <mbgl/style/style.hpp>
|
||||
#include <mbgl/style/image.hpp>
|
||||
#include <mbgl/style/transition_options.hpp>
|
||||
@@ -40,6 +41,7 @@
|
||||
#import "MGLMultiPoint_Private.h"
|
||||
#import "MGLOfflineStorage_Private.h"
|
||||
#import "MGLFoundation_Private.h"
|
||||
#import "MGLRendererFrontend.h"
|
||||
|
||||
#import "NSBundle+MGLAdditions.h"
|
||||
#import "NSDate+MGLAdditions.h"
|
||||
@@ -278,6 +280,8 @@ public:
|
||||
{
|
||||
mbgl::Map *_mbglMap;
|
||||
MBGLView *_mbglView;
|
||||
std::unique_ptr<MGLRenderFrontend> _rendererFrontend;
|
||||
|
||||
std::shared_ptr<mbgl::ThreadPool> _mbglThreadPool;
|
||||
|
||||
BOOL _opaque;
|
||||
@@ -410,6 +414,11 @@ public:
|
||||
return _mbglMap;
|
||||
}
|
||||
|
||||
- (mbgl::Renderer *)renderer
|
||||
{
|
||||
return _rendererFrontend->getRenderer();
|
||||
}
|
||||
|
||||
- (void)commonInit
|
||||
{
|
||||
_isTargetingInterfaceBuilder = NSProcessInfo.processInfo.mgl_isInterfaceBuilderDesignablesAgent;
|
||||
@@ -444,7 +453,10 @@ public:
|
||||
mbgl::DefaultFileSource *mbglFileSource = [MGLOfflineStorage sharedOfflineStorage].mbglFileSource;
|
||||
const float scaleFactor = [UIScreen instancesRespondToSelector:@selector(nativeScale)] ? [[UIScreen mainScreen] nativeScale] : [[UIScreen mainScreen] scale];
|
||||
_mbglThreadPool = mbgl::sharedThreadPool();
|
||||
_mbglMap = new mbgl::Map(*_mbglView, *_mbglView, self.size, scaleFactor, *mbglFileSource, *_mbglThreadPool, mbgl::MapMode::Continuous, mbgl::GLContextMode::Unique, mbgl::ConstrainMode::None, mbgl::ViewportMode::Default);
|
||||
|
||||
auto renderer = std::make_unique<mbgl::Renderer>(*_mbglView, scaleFactor, *mbglFileSource, *_mbglThreadPool, mbgl::GLContextMode::Unique);
|
||||
_rendererFrontend = std::make_unique<MGLRenderFrontend>(std::move(renderer), self, _mbglView);
|
||||
_mbglMap = new mbgl::Map(*_rendererFrontend, *_mbglView, self.size, scaleFactor, *mbglFileSource, *_mbglThreadPool, mbgl::MapMode::Continuous, mbgl::ConstrainMode::None, mbgl::ViewportMode::Default);
|
||||
|
||||
// start paused if in IB
|
||||
if (_isTargetingInterfaceBuilder || background) {
|
||||
@@ -758,7 +770,7 @@ public:
|
||||
{
|
||||
MGLAssertIsMainThread();
|
||||
|
||||
_mbglMap->onLowMemory();
|
||||
_rendererFrontend->onLowMemory();
|
||||
}
|
||||
|
||||
#pragma mark - Layout -
|
||||
@@ -810,12 +822,9 @@ public:
|
||||
// This is the delegate of the GLKView object's display call.
|
||||
- (void)glkView:(__unused GLKView *)view drawInRect:(__unused CGRect)rect
|
||||
{
|
||||
if ( ! self.dormant)
|
||||
if ( ! self.dormant || ! _rendererFrontend)
|
||||
{
|
||||
// The OpenGL implementation automatically enables the OpenGL context for us.
|
||||
mbgl::BackendScope scope { *_mbglView, mbgl::BackendScope::ScopeType::Implicit };
|
||||
|
||||
_mbglMap->render(*_mbglView);
|
||||
_rendererFrontend->render();
|
||||
|
||||
[self updateUserLocationAnnotationView];
|
||||
}
|
||||
@@ -2139,7 +2148,7 @@ public:
|
||||
|
||||
- (void)emptyMemoryCache
|
||||
{
|
||||
_mbglMap->onLowMemory();
|
||||
_rendererFrontend->onLowMemory();
|
||||
}
|
||||
|
||||
- (void)setZoomEnabled:(BOOL)zoomEnabled
|
||||
@@ -3707,7 +3716,7 @@ public:
|
||||
/// Returns the tags of the annotations coincident with the given rectangle.
|
||||
- (std::vector<MGLAnnotationTag>)annotationTagsInRect:(CGRect)rect
|
||||
{
|
||||
return _mbglMap->queryPointAnnotations({
|
||||
return _rendererFrontend->getRenderer()->queryPointAnnotations({
|
||||
{ CGRectGetMinX(rect), CGRectGetMinY(rect) },
|
||||
{ CGRectGetMaxX(rect), CGRectGetMaxY(rect) },
|
||||
});
|
||||
@@ -4707,7 +4716,7 @@ public:
|
||||
optionalFilter = predicate.mgl_filter;
|
||||
}
|
||||
|
||||
std::vector<mbgl::Feature> features = _mbglMap->queryRenderedFeatures(screenCoordinate, { optionalLayerIDs, optionalFilter });
|
||||
std::vector<mbgl::Feature> features = _rendererFrontend->getRenderer()->queryRenderedFeatures(screenCoordinate, { optionalLayerIDs, optionalFilter });
|
||||
return MGLFeaturesFromMBGLFeatures(features);
|
||||
}
|
||||
|
||||
@@ -4740,7 +4749,7 @@ public:
|
||||
optionalFilter = predicate.mgl_filter;
|
||||
}
|
||||
|
||||
std::vector<mbgl::Feature> features = _mbglMap->queryRenderedFeatures(screenBox, { optionalLayerIDs, optionalFilter });
|
||||
std::vector<mbgl::Feature> features = _rendererFrontend->getRenderer()->queryRenderedFeatures(screenBox, { optionalLayerIDs, optionalFilter });
|
||||
return MGLFeaturesFromMBGLFeatures(features);
|
||||
}
|
||||
|
||||
@@ -5519,10 +5528,9 @@ public:
|
||||
|
||||
return reinterpret_cast<mbgl::gl::ProcAddress>(symbol);
|
||||
}
|
||||
|
||||
void invalidate() override
|
||||
{
|
||||
[nativeView setNeedsGLDisplay];
|
||||
|
||||
mbgl::BackendScope::ScopeType getScopeType() const override {
|
||||
return mbgl::BackendScope::ScopeType::Implicit;
|
||||
}
|
||||
|
||||
void activate() override
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
namespace mbgl {
|
||||
class Map;
|
||||
class Renderer;
|
||||
}
|
||||
|
||||
/// Minimum size of an annotation’s accessibility element.
|
||||
@@ -17,6 +18,8 @@ extern const CGSize MGLAnnotationAccessibilityElementMinimumSize;
|
||||
|
||||
- (mbgl::Map *)mbglMap;
|
||||
|
||||
- (mbgl::Renderer *)renderer;
|
||||
|
||||
/** Returns whether the map view is currently loading or processing any assets required to render the map */
|
||||
- (BOOL)isFullyLoaded;
|
||||
|
||||
|
||||
@@ -80,6 +80,7 @@
|
||||
558DE7A71E56161C00C7916D /* MGLFoundation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 558DE7A51E56161C00C7916D /* MGLFoundation.mm */; };
|
||||
55E2AD111E5B0A6900E8C587 /* MGLOfflineStorageTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 55E2AD101E5B0A6900E8C587 /* MGLOfflineStorageTests.mm */; };
|
||||
920A3E591E6F859D00C16EFC /* MGLSourceQueryTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 920A3E581E6F859D00C16EFC /* MGLSourceQueryTests.m */; };
|
||||
92F2C3EB1F0E3A1900268EC0 /* MGLRendererFrontend.h in Headers */ = {isa = PBXBuildFile; fileRef = 92F2C3EA1F0E3A1900268EC0 /* MGLRendererFrontend.h */; };
|
||||
96E027311E57C9A7004B8E66 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 96E027331E57C9A7004B8E66 /* Localizable.strings */; };
|
||||
DA00FC8A1D5EEAC3009AABC8 /* MGLAttributionInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = DA00FC881D5EEAC3009AABC8 /* MGLAttributionInfo.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
DA00FC8B1D5EEAC3009AABC8 /* MGLAttributionInfo.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA00FC891D5EEAC3009AABC8 /* MGLAttributionInfo.mm */; };
|
||||
@@ -351,6 +352,7 @@
|
||||
55E2AD101E5B0A6900E8C587 /* MGLOfflineStorageTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = MGLOfflineStorageTests.mm; path = ../../darwin/test/MGLOfflineStorageTests.mm; sourceTree = "<group>"; };
|
||||
55FE0E8D1D100A0900FD240B /* config.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = config.xcconfig; path = ../../build/macos/config.xcconfig; sourceTree = "<group>"; };
|
||||
920A3E581E6F859D00C16EFC /* MGLSourceQueryTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGLSourceQueryTests.m; sourceTree = "<group>"; };
|
||||
92F2C3EA1F0E3A1900268EC0 /* MGLRendererFrontend.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLRendererFrontend.h; sourceTree = "<group>"; };
|
||||
966091701E5BBFF700A9A03B /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||
966091711E5BBFF900A9A03B /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||
966091721E5BBFFA00A9A03B /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = uk; path = uk.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||
@@ -1046,6 +1048,7 @@
|
||||
DAE6C36E1CC31E2A00DB3429 /* MGLMapCamera.mm */,
|
||||
DD0902B01DB1AC6400C5BDCE /* MGLNetworkConfiguration.h */,
|
||||
DD0902AF1DB1AC6400C5BDCE /* MGLNetworkConfiguration.m */,
|
||||
92F2C3EA1F0E3A1900268EC0 /* MGLRendererFrontend.h */,
|
||||
DAE6C3571CC31E0400DB3429 /* MGLStyle.h */,
|
||||
3537CA731D3F93A600380318 /* MGLStyle_Private.h */,
|
||||
DAE6C37A1CC31E2A00DB3429 /* MGLStyle.mm */,
|
||||
@@ -1151,6 +1154,7 @@
|
||||
DAE6C3621CC31E0400DB3429 /* MGLOverlay.h in Headers */,
|
||||
DAE6C3651CC31E0400DB3429 /* MGLPolyline.h in Headers */,
|
||||
DAE6C39A1CC31E2A00DB3429 /* NSProcessInfo+MGLAdditions.h in Headers */,
|
||||
92F2C3EB1F0E3A1900268EC0 /* MGLRendererFrontend.h in Headers */,
|
||||
DA8F258B1D51CA540010E6B5 /* MGLLineStyleLayer.h in Headers */,
|
||||
35C6DF841E214C0400ACA483 /* MGLDistanceFormatter.h in Headers */,
|
||||
DA8F25B21D51CB270010E6B5 /* NSValue+MGLStyleAttributeAdditions.h in Headers */,
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#import "MGLCompassCell.h"
|
||||
#import "MGLOpenGLLayer.h"
|
||||
#import "MGLStyle.h"
|
||||
#import "MGLRendererFrontend.h"
|
||||
|
||||
#import "MGLAnnotationImage_Private.h"
|
||||
#import "MGLAttributionInfo_Private.h"
|
||||
@@ -32,6 +33,7 @@
|
||||
#import <mbgl/map/backend.hpp>
|
||||
#import <mbgl/map/backend_scope.hpp>
|
||||
#import <mbgl/style/image.hpp>
|
||||
#import <mbgl/renderer/renderer.hpp>
|
||||
#import <mbgl/storage/default_file_source.hpp>
|
||||
#import <mbgl/storage/network_status.hpp>
|
||||
#import <mbgl/math/wrap.hpp>
|
||||
@@ -155,6 +157,7 @@ public:
|
||||
/// Cross-platform map view controller.
|
||||
mbgl::Map *_mbglMap;
|
||||
MGLMapViewImpl *_mbglView;
|
||||
std::unique_ptr<MGLRenderFrontend> _rendererFrontend;
|
||||
std::shared_ptr<mbgl::ThreadPool> _mbglThreadPool;
|
||||
|
||||
NSPanGestureRecognizer *_panGestureRecognizer;
|
||||
@@ -270,7 +273,10 @@ public:
|
||||
mbgl::DefaultFileSource* mbglFileSource = [MGLOfflineStorage sharedOfflineStorage].mbglFileSource;
|
||||
|
||||
_mbglThreadPool = mbgl::sharedThreadPool();
|
||||
_mbglMap = new mbgl::Map(*_mbglView, *_mbglView, self.size, [NSScreen mainScreen].backingScaleFactor, *mbglFileSource, *_mbglThreadPool, mbgl::MapMode::Continuous, mbgl::GLContextMode::Unique, mbgl::ConstrainMode::None, mbgl::ViewportMode::Default);
|
||||
|
||||
auto renderer = std::make_unique<mbgl::Renderer>(*_mbglView, [NSScreen mainScreen].backingScaleFactor, *mbglFileSource, *_mbglThreadPool, mbgl::GLContextMode::Unique);
|
||||
_rendererFrontend = std::make_unique<MGLRenderFrontend>(std::move(renderer), self, _mbglView, true);
|
||||
_mbglMap = new mbgl::Map(*_rendererFrontend, *_mbglView, self.size, [NSScreen mainScreen].backingScaleFactor, *mbglFileSource, *_mbglThreadPool, mbgl::MapMode::Continuous, mbgl::ConstrainMode::None, mbgl::ViewportMode::Default);
|
||||
|
||||
// Install the OpenGL layer. Interface Builder’s synchronous drawing means
|
||||
// we can’t display a map, so don’t even bother to have a map layer.
|
||||
@@ -642,6 +648,10 @@ public:
|
||||
return _mbglMap;
|
||||
}
|
||||
|
||||
- (mbgl::Renderer *)renderer {
|
||||
return _rendererFrontend->getRenderer();
|
||||
}
|
||||
|
||||
#pragma mark View hierarchy and drawing
|
||||
|
||||
- (void)viewWillMoveToWindow:(NSWindow *)newWindow {
|
||||
@@ -769,11 +779,8 @@ public:
|
||||
}
|
||||
|
||||
- (void)renderSync {
|
||||
if (!self.dormant) {
|
||||
// The OpenGL implementation automatically enables the OpenGL context for us.
|
||||
mbgl::BackendScope scope { *_mbglView, mbgl::BackendScope::ScopeType::Implicit };
|
||||
|
||||
_mbglMap->render(*_mbglView);
|
||||
if (!self.dormant && _rendererFrontend) {
|
||||
_rendererFrontend->render();
|
||||
|
||||
if (_isPrinting) {
|
||||
_isPrinting = NO;
|
||||
@@ -2123,7 +2130,7 @@ public:
|
||||
/// Returns the tags of the annotations coincident with the given rectangle.
|
||||
- (std::vector<MGLAnnotationTag>)annotationTagsInRect:(NSRect)rect {
|
||||
// Cocoa origin is at the lower-left corner.
|
||||
return _mbglMap->queryPointAnnotations({
|
||||
return self.renderer->queryPointAnnotations({
|
||||
{ NSMinX(rect), NSHeight(self.bounds) - NSMaxY(rect) },
|
||||
{ NSMaxX(rect), NSHeight(self.bounds) - NSMinY(rect) },
|
||||
});
|
||||
@@ -2544,7 +2551,7 @@ public:
|
||||
optionalFilter = predicate.mgl_filter;
|
||||
}
|
||||
|
||||
std::vector<mbgl::Feature> features = _mbglMap->queryRenderedFeatures(screenCoordinate, { optionalLayerIDs, optionalFilter });
|
||||
std::vector<mbgl::Feature> features = _rendererFrontend->getRenderer()->queryRenderedFeatures(screenCoordinate, { optionalLayerIDs, optionalFilter });
|
||||
return MGLFeaturesFromMBGLFeatures(features);
|
||||
}
|
||||
|
||||
@@ -2578,7 +2585,7 @@ public:
|
||||
optionalFilter = predicate.mgl_filter;
|
||||
}
|
||||
|
||||
std::vector<mbgl::Feature> features = _mbglMap->queryRenderedFeatures(screenBox, { optionalLayerIDs, optionalFilter });
|
||||
std::vector<mbgl::Feature> features = _rendererFrontend->getRenderer()->queryRenderedFeatures(screenBox, { optionalLayerIDs, optionalFilter });
|
||||
return MGLFeaturesFromMBGLFeatures(features);
|
||||
}
|
||||
|
||||
@@ -2758,8 +2765,7 @@ public:
|
||||
/// Adapter responsible for bridging calls from mbgl to MGLMapView and Cocoa.
|
||||
class MGLMapViewImpl : public mbgl::View, public mbgl::Backend, public mbgl::MapObserver {
|
||||
public:
|
||||
MGLMapViewImpl(MGLMapView *nativeView_)
|
||||
: nativeView(nativeView_) {}
|
||||
MGLMapViewImpl(MGLMapView *nativeView_) : nativeView(nativeView_) {}
|
||||
|
||||
void onCameraWillChange(mbgl::MapObserver::CameraChangeMode mode) override {
|
||||
bool animated = mode == mbgl::MapObserver::CameraChangeMode::Animated;
|
||||
@@ -2850,10 +2856,6 @@ public:
|
||||
return reinterpret_cast<mbgl::gl::ProcAddress>(symbol);
|
||||
}
|
||||
|
||||
void invalidate() override {
|
||||
[nativeView setNeedsGLDisplay];
|
||||
}
|
||||
|
||||
void activate() override {
|
||||
if (activationCount++) {
|
||||
return;
|
||||
@@ -2876,6 +2878,10 @@ public:
|
||||
assumeFramebufferBinding(fbo);
|
||||
assumeViewport(0, 0, nativeView.framebufferSize);
|
||||
}
|
||||
|
||||
mbgl::BackendScope::ScopeType getScopeType() const override {
|
||||
return mbgl::BackendScope::ScopeType::Implicit;
|
||||
}
|
||||
|
||||
void bind() override {
|
||||
setFramebufferBinding(fbo);
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
namespace mbgl {
|
||||
class Map;
|
||||
class Renderer;
|
||||
}
|
||||
|
||||
@interface MGLMapView (Private)
|
||||
@@ -29,4 +30,6 @@ namespace mbgl {
|
||||
|
||||
- (mbgl::Map *)mbglMap;
|
||||
|
||||
- (mbgl::Renderer *)renderer;
|
||||
|
||||
@end
|
||||
|
||||
Reference in New Issue
Block a user