diff options
author | Konstantin Käfer <mail@kkaefer.com> | 2018-05-03 21:48:58 +0200 |
---|---|---|
committer | Jordan Kiley <jmkiley@users.noreply.github.com> | 2018-05-03 12:48:58 -0700 |
commit | f6da3ba9be27ff9b279730603c517c4cb5e57007 (patch) | |
tree | 4c2474ac55af5a9eb1b2263b680176dfdd5943eb /platform/darwin/app | |
parent | 844a8244097c18ae12e9c14baaaaad8a2f7ef436 (diff) | |
download | qtlocation-mapboxgl-f6da3ba9be27ff9b279730603c517c4cb5e57007.tar.gz |
iOS: Add custom layer example to debugging app (#7734)
Diffstat (limited to 'platform/darwin/app')
-rw-r--r-- | platform/darwin/app/LimeGreenStyleLayer.h | 5 | ||||
-rw-r--r-- | platform/darwin/app/LimeGreenStyleLayer.m | 58 |
2 files changed, 63 insertions, 0 deletions
diff --git a/platform/darwin/app/LimeGreenStyleLayer.h b/platform/darwin/app/LimeGreenStyleLayer.h new file mode 100644 index 0000000000..35480963a4 --- /dev/null +++ b/platform/darwin/app/LimeGreenStyleLayer.h @@ -0,0 +1,5 @@ +#import <Mapbox/Mapbox.h> + +@interface LimeGreenStyleLayer : MGLOpenGLStyleLayer + +@end diff --git a/platform/darwin/app/LimeGreenStyleLayer.m b/platform/darwin/app/LimeGreenStyleLayer.m new file mode 100644 index 0000000000..98e96381b6 --- /dev/null +++ b/platform/darwin/app/LimeGreenStyleLayer.m @@ -0,0 +1,58 @@ +#import "LimeGreenStyleLayer.h" +@import GLKit; + +@implementation LimeGreenStyleLayer { + GLuint _program; + GLuint _vertexShader; + GLuint _fragmentShader; + GLuint _buffer; + GLuint _aPos; +} + +- (void)didMoveToMapView:(MGLMapView *)mapView { + static const GLchar *vertexShaderSource = "attribute vec2 a_pos; void main() { gl_Position = vec4(a_pos, 1, 1); }"; + static const GLchar *fragmentShaderSource = "void main() { gl_FragColor = vec4(0, 0.5, 0, 0.5); }"; + + _program = glCreateProgram(); + _vertexShader = glCreateShader(GL_VERTEX_SHADER); + _fragmentShader = glCreateShader(GL_FRAGMENT_SHADER); + + glShaderSource(_vertexShader, 1, &vertexShaderSource, NULL); + glCompileShader(_vertexShader); + glAttachShader(_program, _vertexShader); + glShaderSource(_fragmentShader, 1, &fragmentShaderSource, NULL); + glCompileShader(_fragmentShader); + glAttachShader(_program, _fragmentShader); + glLinkProgram(_program); + _aPos = glGetAttribLocation(_program, "a_pos"); + + GLfloat triangle[] = { 0, 0.5, 0.5, -0.5, -0.5, -0.5 }; + glGenBuffers(1, &_buffer); + glBindBuffer(GL_ARRAY_BUFFER, _buffer); + glBufferData(GL_ARRAY_BUFFER, 6 * sizeof(GLfloat), triangle, GL_STATIC_DRAW); +} + +- (void)drawInMapView:(MGLMapView *)mapView withContext:(MGLStyleLayerDrawingContext)context { + glUseProgram(_program); + glBindBuffer(GL_ARRAY_BUFFER, _buffer); + glEnableVertexAttribArray(_aPos); + glVertexAttribPointer(_aPos, 2, GL_FLOAT, GL_FALSE, 0, NULL); + glDisable(GL_STENCIL_TEST); + glDisable(GL_DEPTH_TEST); + glDrawArrays(GL_TRIANGLE_STRIP, 0, 3); +} + +- (void)willMoveFromMapView:(MGLMapView *)mapView { + if (!_program) { + return; + } + + glDeleteBuffers(1, &_buffer); + glDetachShader(_program, _vertexShader); + glDetachShader(_program, _fragmentShader); + glDeleteShader(_vertexShader); + glDeleteShader(_fragmentShader); + glDeleteProgram(_program); +} + +@end |