@@ -50,7 +50,6 @@
|
||||
'../platform/ios/MGLMapboxEvents.m',
|
||||
'../include/mbgl/ios/MGLMapView.h',
|
||||
'../include/mbgl/ios/MGLMapView+IBAdditions.h',
|
||||
'../include/mbgl/ios/MGLMapView+MGLCustomStyleLayerAdditions.h',
|
||||
'../platform/ios/MGLMapView.mm',
|
||||
'../include/mbgl/ios/MGLAccountManager.h',
|
||||
'../platform/ios/MGLAccountManager_Private.h',
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
#import "MGLMapView.h"
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
typedef void (^MGLCustomStyleLayerPreparationHandler)(void);
|
||||
|
||||
typedef void (^MGLCustomStyleLayerDrawingHandler)(CGSize size,
|
||||
CLLocationCoordinate2D centerCoordinate,
|
||||
double zoomLevel,
|
||||
CLLocationDirection direction,
|
||||
CGFloat pitch,
|
||||
CGFloat perspectiveSkew);
|
||||
|
||||
typedef void (^MGLCustomStyleLayerCompletionHandler)(void);
|
||||
|
||||
@interface MGLMapView (MGLCustomStyleLayerAdditions)
|
||||
|
||||
- (void)insertCustomStyleLayerWithIdentifier:(NSString *)identifier preparationHandler:(MGLCustomStyleLayerPreparationHandler)preparation drawingHandler:(MGLCustomStyleLayerDrawingHandler)drawing completionHandler:(MGLCustomStyleLayerCompletionHandler)completion belowStyleLayerWithIdentifier:(nullable NSString *)otherIdentifier;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
@@ -5,7 +5,6 @@
|
||||
#import "MGLGeometry.h"
|
||||
#import "MGLMapView.h"
|
||||
#import "MGLMapView+IBAdditions.h"
|
||||
#import "MGLMapView+MGLCustomStyleLayerAdditions.h"
|
||||
#import "MGLMultiPoint.h"
|
||||
#import "MGLOverlay.h"
|
||||
#import "MGLPointAnnotation.h"
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
#import <mbgl/util/default_styles.hpp>
|
||||
|
||||
#import <CoreLocation/CoreLocation.h>
|
||||
#import <OpenGLES/ES2/gl.h>
|
||||
|
||||
static UIColor *const kTintColor = [UIColor colorWithRed:0.120 green:0.550 blue:0.670 alpha:1.000];
|
||||
|
||||
@@ -151,7 +150,6 @@ static const CLLocationCoordinate2D WorldTourDestinations[] = {
|
||||
@"Add Test Shapes",
|
||||
@"Start World Tour",
|
||||
@"Remove Annotations",
|
||||
@"Insert Custom Style Layer",
|
||||
nil];
|
||||
|
||||
[sheet showFromBarButtonItem:self.navigationItem.leftBarButtonItem animated:YES];
|
||||
@@ -262,10 +260,6 @@ static const CLLocationCoordinate2D WorldTourDestinations[] = {
|
||||
{
|
||||
[self.mapView removeAnnotations:self.mapView.annotations];
|
||||
}
|
||||
else if (buttonIndex == actionSheet.firstOtherButtonIndex + 9)
|
||||
{
|
||||
[self insertCustomStyleLayer];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)parseFeaturesAddingCount:(NSUInteger)featuresCount
|
||||
@@ -308,59 +302,6 @@ static const CLLocationCoordinate2D WorldTourDestinations[] = {
|
||||
});
|
||||
}
|
||||
|
||||
- (void)insertCustomStyleLayer
|
||||
{
|
||||
static const GLchar *vertexShaderSource = "attribute vec2 a_pos; void main() { gl_Position = vec4(a_pos, 0, 1); }";
|
||||
static const GLchar *fragmentShaderSource = "void main() { gl_FragColor = vec4(0, 1, 0, 1); }";
|
||||
|
||||
__block GLuint program = 0;
|
||||
__block GLuint vertexShader = 0;
|
||||
__block GLuint fragmentShader = 0;
|
||||
__block GLuint buffer = 0;
|
||||
__block GLuint a_pos = 0;
|
||||
[self.mapView insertCustomStyleLayerWithIdentifier:@"mbx-custom" preparationHandler:^{
|
||||
program = glCreateProgram();
|
||||
vertexShader = glCreateShader(GL_VERTEX_SHADER);
|
||||
fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
|
||||
|
||||
glShaderSource(vertexShader, 1, &vertexShaderSource, nullptr);
|
||||
glCompileShader(vertexShader);
|
||||
glAttachShader(program, vertexShader);
|
||||
glShaderSource(fragmentShader, 1, &fragmentShaderSource, nullptr);
|
||||
glCompileShader(fragmentShader);
|
||||
glAttachShader(program, fragmentShader);
|
||||
glLinkProgram(program);
|
||||
a_pos = glGetAttribLocation(program, "a_pos");
|
||||
|
||||
GLfloat background[] = { -1,-1, 1,-1, -1,1, 1,1 };
|
||||
glGenBuffers(1, &buffer);
|
||||
glBindBuffer(GL_ARRAY_BUFFER, buffer);
|
||||
glBufferData(GL_ARRAY_BUFFER, 8 * sizeof(GLfloat), background, GL_STATIC_DRAW);
|
||||
} drawingHandler:^(__unused CGSize size,
|
||||
__unused CLLocationCoordinate2D centerCoordinate,
|
||||
__unused double zoomLevel,
|
||||
__unused CLLocationDirection direction,
|
||||
__unused CGFloat pitch,
|
||||
__unused CGFloat perspectiveSkew) {
|
||||
glUseProgram(program);
|
||||
glBindBuffer(GL_ARRAY_BUFFER, buffer);
|
||||
glEnableVertexAttribArray(a_pos);
|
||||
glVertexAttribPointer(a_pos, 2, GL_FLOAT, GL_FALSE, 0, NULL);
|
||||
glDisable(GL_STENCIL_TEST);
|
||||
glDisable(GL_DEPTH_TEST);
|
||||
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
|
||||
} completionHandler:^{
|
||||
if (program) {
|
||||
glDeleteBuffers(1, &buffer);
|
||||
glDetachShader(program, vertexShader);
|
||||
glDetachShader(program, fragmentShader);
|
||||
glDeleteShader(vertexShader);
|
||||
glDeleteShader(fragmentShader);
|
||||
glDeleteProgram(program);
|
||||
}
|
||||
} belowStyleLayerWithIdentifier:@"housenum-label"];
|
||||
}
|
||||
|
||||
- (void)handleLongPress:(UILongPressGestureRecognizer *)longPress
|
||||
{
|
||||
if (longPress.state == UIGestureRecognizerStateBegan)
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
#import "MGLMapView.h"
|
||||
#import "MGLMapView+IBAdditions.h"
|
||||
#import "MGLMapView+MGLCustomStyleLayerAdditions.h"
|
||||
|
||||
#import <mbgl/platform/log.hpp>
|
||||
#import <mbgl/platform/gl.hpp>
|
||||
@@ -3473,8 +3472,6 @@ class MBGLView : public mbgl::View
|
||||
|
||||
@end
|
||||
|
||||
#pragma mark - IBAdditions methods
|
||||
|
||||
@implementation MGLMapView (IBAdditions)
|
||||
|
||||
+ (NS_SET_OF(NSString *) *)keyPathsForValuesAffectingStyleURL__
|
||||
@@ -3613,66 +3610,3 @@ class MBGLView : public mbgl::View
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
#pragma mark - MGLCustomStyleLayerAdditions methods
|
||||
|
||||
class MGLCustomStyleLayerHandlers
|
||||
{
|
||||
public:
|
||||
MGLCustomStyleLayerHandlers(MGLCustomStyleLayerPreparationHandler p,
|
||||
MGLCustomStyleLayerDrawingHandler d,
|
||||
MGLCustomStyleLayerCompletionHandler f)
|
||||
: prepare(p), draw(d), finish(f) {}
|
||||
|
||||
MGLCustomStyleLayerPreparationHandler prepare;
|
||||
MGLCustomStyleLayerDrawingHandler draw;
|
||||
MGLCustomStyleLayerCompletionHandler finish;
|
||||
};
|
||||
|
||||
void MGLPrepareCustomStyleLayer(void *context)
|
||||
{
|
||||
MGLCustomStyleLayerPreparationHandler prepare = reinterpret_cast<MGLCustomStyleLayerHandlers *>(context)->prepare;
|
||||
if (prepare)
|
||||
{
|
||||
prepare();
|
||||
}
|
||||
}
|
||||
|
||||
void MGLDrawCustomStyleLayer(void *context, const mbgl::CustomLayerRenderParameters ¶ms)
|
||||
{
|
||||
CGSize size = CGSizeMake(params.width, params.height);
|
||||
CLLocationCoordinate2D centerCoordinate = CLLocationCoordinate2DMake(params.latitude, params.longitude);
|
||||
double zoomLevel = params.zoom;
|
||||
CLLocationDirection direction = mbgl::util::wrap(params.bearing, 0., 360.);
|
||||
CGFloat pitch = params.pitch;
|
||||
CGFloat perspectiveSkew = params.altitude;
|
||||
MGLCustomStyleLayerDrawingHandler draw = reinterpret_cast<MGLCustomStyleLayerHandlers *>(context)->draw;
|
||||
if (draw)
|
||||
{
|
||||
draw(size, centerCoordinate, zoomLevel, direction, pitch, perspectiveSkew);
|
||||
}
|
||||
}
|
||||
|
||||
void MGLFinishCustomStyleLayer(void *context)
|
||||
{
|
||||
MGLCustomStyleLayerHandlers *handlers = reinterpret_cast<MGLCustomStyleLayerHandlers *>(context);
|
||||
MGLCustomStyleLayerCompletionHandler finish = handlers->finish;
|
||||
if (finish)
|
||||
{
|
||||
finish();
|
||||
}
|
||||
delete handlers;
|
||||
}
|
||||
|
||||
@implementation MGLMapView (MGLCustomStyleLayerAdditions)
|
||||
|
||||
- (void)insertCustomStyleLayerWithIdentifier:(NSString *)identifier preparationHandler:(void (^)())preparation drawingHandler:(MGLCustomStyleLayerDrawingHandler)drawing completionHandler:(void (^)())completion belowStyleLayerWithIdentifier:(nullable NSString *)otherIdentifier
|
||||
{
|
||||
NSAssert(identifier, @"Style layer needs an identifier");
|
||||
MGLCustomStyleLayerHandlers *context = new MGLCustomStyleLayerHandlers(preparation, drawing, completion);
|
||||
_mbglMap->addCustomLayer(identifier.UTF8String, MGLPrepareCustomStyleLayer,
|
||||
MGLDrawCustomStyleLayer, MGLFinishCustomStyleLayer,
|
||||
context, otherIdentifier.UTF8String);
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
Reference in New Issue
Block a user