diff options
author | John Firebaugh <john.firebaugh@gmail.com> | 2014-09-05 11:52:23 -0700 |
---|---|---|
committer | John Firebaugh <john.firebaugh@gmail.com> | 2014-09-05 13:23:14 -0700 |
commit | 9d5f02ccaa051a0f3459f6fc94df807338fa2552 (patch) | |
tree | 0b13c6913c61aa01e928983a0e33f1a0bd197ad4 | |
parent | 7b9ad022a904110eb15260b2cbf56e6f6b8a03cf (diff) | |
download | qtlocation-mapboxgl-9d5f02ccaa051a0f3459f6fc94df807338fa2552.tar.gz |
Match js shaders
The only non-incidental change is to revert portions
of d5b4c116 and 3a9a9043.
See https://github.com/mapbox/mapbox-gl-native/commit/d5b4c1162dab706d6f56881e3f72baa003ad8ac7#commitcomment-7668050
-rw-r--r-- | include/mbgl/shader/linepattern_shader.hpp | 2 | ||||
-rw-r--r-- | include/mbgl/shader/sdf_shader.hpp | 9 | ||||
-rw-r--r-- | src/geometry/text_buffer.cpp | 9 | ||||
-rw-r--r-- | src/shader/dot.fragment.glsl | 4 | ||||
-rw-r--r-- | src/shader/dot.vertex.glsl | 4 | ||||
-rw-r--r-- | src/shader/gaussian.fragment.glsl | 5 | ||||
-rw-r--r-- | src/shader/gaussian.vertex.glsl | 2 | ||||
-rw-r--r-- | src/shader/icon.fragment.glsl | 2 | ||||
-rw-r--r-- | src/shader/icon.vertex.glsl | 2 | ||||
-rw-r--r-- | src/shader/line.vertex.glsl | 4 | ||||
-rw-r--r-- | src/shader/linepattern.vertex.glsl | 6 | ||||
-rw-r--r-- | src/shader/raster.fragment.glsl | 6 | ||||
-rw-r--r-- | src/shader/sdf.vertex.glsl | 20 | ||||
-rw-r--r-- | src/shader/sdf_shader.cpp | 37 |
14 files changed, 68 insertions, 44 deletions
diff --git a/include/mbgl/shader/linepattern_shader.hpp b/include/mbgl/shader/linepattern_shader.hpp index bd22c99a19..bf85940b8a 100644 --- a/include/mbgl/shader/linepattern_shader.hpp +++ b/include/mbgl/shader/linepattern_shader.hpp @@ -12,7 +12,7 @@ public: void bind(char *offset); - UniformMatrix<4> u_matrix = {"u_posmatrix", *this}; + UniformMatrix<4> u_matrix = {"u_matrix", *this}; UniformMatrix<4> u_exmatrix = {"u_exmatrix", *this}; Uniform<std::array<float, 2>> u_linewidth = {"u_linewidth", *this}; Uniform<std::array<float, 2>> u_pattern_size = {"u_pattern_size", *this}; diff --git a/include/mbgl/shader/sdf_shader.hpp b/include/mbgl/shader/sdf_shader.hpp index 85104e2f96..ba1937d3c3 100644 --- a/include/mbgl/shader/sdf_shader.hpp +++ b/include/mbgl/shader/sdf_shader.hpp @@ -29,8 +29,13 @@ public: private: int32_t a_pos = -1; int32_t a_offset = -1; - int32_t a_data1 = -1; - int32_t a_data2 = -1; + int32_t a_tex = -1; + int32_t a_angle = -1; + int32_t a_minzoom = -1; + int32_t a_maxzoom = -1; + int32_t a_rangeend = -1; + int32_t a_rangestart = -1; + int32_t a_labelminzoom = -1; }; } diff --git a/src/geometry/text_buffer.cpp b/src/geometry/text_buffer.cpp index cb30101839..b4b609b705 100644 --- a/src/geometry/text_buffer.cpp +++ b/src/geometry/text_buffer.cpp @@ -19,15 +19,12 @@ size_t TextVertexBuffer::add(int16_t x, int16_t y, float ox, float oy, uint16_t shorts[3] = std::round(oy * 64); uint8_t *ubytes = static_cast<uint8_t *>(data); - // a_data1 ubytes[8] = tx / 4; ubytes[9] = ty / 4; ubytes[10] = labelminzoom * 10; - ubytes[11] = (int16_t)std::round(angle * angleFactor) % 256; - - // a_data2 - ubytes[12] = minzoom * 10; // 1/10 zoom levels: z16 == 160. - ubytes[13] = std::fmin(maxzoom, 25) * 10; // 1/10 zoom levels: z16 == 160. + ubytes[11] = minzoom * 10; // 1/10 zoom levels: z16 == 160. + ubytes[12] = fmin(maxzoom, 25) * 10; // 1/10 zoom levels: z16 == 160. + ubytes[13] = (int16_t)round(angle * angleFactor) % 256; ubytes[14] = util::max((int16_t)std::round(range[0] * angleFactor), (int16_t)0) % 256; ubytes[15] = util::min((int16_t)std::round(range[1] * angleFactor), (int16_t)255) % 256; diff --git a/src/shader/dot.fragment.glsl b/src/shader/dot.fragment.glsl index 3f1d5a234a..6d998b5611 100644 --- a/src/shader/dot.fragment.glsl +++ b/src/shader/dot.fragment.glsl @@ -2,8 +2,8 @@ uniform vec4 u_color; uniform float u_blur; void main() { - float dist = length(gl_PointCoord - 0.5); - float t = smoothstep(0.5, 0.5 - u_blur, dist); + float dist = length(gl_PointCoord - 0.5); + float t = smoothstep(0.5, 0.5 - u_blur, dist); gl_FragColor = u_color * t; } diff --git a/src/shader/dot.vertex.glsl b/src/shader/dot.vertex.glsl index a0d64c33b1..5310ae745e 100644 --- a/src/shader/dot.vertex.glsl +++ b/src/shader/dot.vertex.glsl @@ -1,8 +1,8 @@ -attribute vec2 a_pos; - uniform mat4 u_matrix; uniform float u_size; +attribute vec2 a_pos; + void main(void) { gl_Position = u_matrix * vec4(a_pos, 0, 1); gl_PointSize = u_size; diff --git a/src/shader/gaussian.fragment.glsl b/src/shader/gaussian.fragment.glsl index e29afc0a82..ee8406e9e1 100644 --- a/src/shader/gaussian.fragment.glsl +++ b/src/shader/gaussian.fragment.glsl @@ -2,11 +2,10 @@ uniform sampler2D u_image; varying vec2 v_coords[3]; -void main() -{ +void main() { vec4 sum = vec4(0.0); sum += texture2D(u_image, v_coords[0]) * 0.40261994689424746; sum += texture2D(u_image, v_coords[1]) * 0.2986900265528763; sum += texture2D(u_image, v_coords[2]) * 0.2986900265528763; gl_FragColor = sum; -}
\ No newline at end of file +} diff --git a/src/shader/gaussian.vertex.glsl b/src/shader/gaussian.vertex.glsl index 320d48f23d..26a8394204 100644 --- a/src/shader/gaussian.vertex.glsl +++ b/src/shader/gaussian.vertex.glsl @@ -8,7 +8,7 @@ varying vec2 v_coords[3]; void main() { gl_Position = u_matrix * vec4(a_pos, 0, 1); - vec2 tex = (gl_Position.xy + 1.0) / 2.0; + vec2 tex = gl_Position.xy / 2.0 + 0.5; v_coords[0] = tex; v_coords[1] = tex + u_offset * 1.1824255238063563; v_coords[2] = tex - u_offset * 1.1824255238063563; diff --git a/src/shader/icon.fragment.glsl b/src/shader/icon.fragment.glsl index 6e8130ef1e..45b56793eb 100644 --- a/src/shader/icon.fragment.glsl +++ b/src/shader/icon.fragment.glsl @@ -4,7 +4,5 @@ varying vec2 v_tex; varying float v_alpha; void main() { - // Note: We don't need to premultiply here as the image we use is already - // premultiplied in the sprite atlas. gl_FragColor = texture2D(u_texture, v_tex) * v_alpha; } diff --git a/src/shader/icon.vertex.glsl b/src/shader/icon.vertex.glsl index f8d94a2639..8c69c40410 100644 --- a/src/shader/icon.vertex.glsl +++ b/src/shader/icon.vertex.glsl @@ -9,7 +9,7 @@ attribute float a_rangestart; attribute float a_labelminzoom; -// posmatrix is for the vertex position, exmatrix is for rotating and projecting +// matrix is for the vertex position, exmatrix is for rotating and projecting // the extrusion vector. uniform mat4 u_matrix; uniform mat4 u_exmatrix; diff --git a/src/shader/line.vertex.glsl b/src/shader/line.vertex.glsl index 14be3c4ebb..1d8e687c95 100644 --- a/src/shader/line.vertex.glsl +++ b/src/shader/line.vertex.glsl @@ -10,7 +10,7 @@ attribute vec2 a_pos; attribute vec2 a_extrude; attribute float a_linesofar; -// posmatrix is for the vertex position, exmatrix is for rotating and projecting +// matrix is for the vertex position, exmatrix is for rotating and projecting // the extrusion vector. uniform mat4 u_matrix; uniform mat4 u_exmatrix; @@ -42,4 +42,4 @@ void main() { // tile's zoom level. gl_Position = u_matrix * vec4(floor(a_pos * 0.5), 0.0, 1.0) + u_exmatrix * dist; v_linesofar = a_linesofar * u_ratio; -}
\ No newline at end of file +} diff --git a/src/shader/linepattern.vertex.glsl b/src/shader/linepattern.vertex.glsl index ec48b2f6d9..4600ebf65b 100644 --- a/src/shader/linepattern.vertex.glsl +++ b/src/shader/linepattern.vertex.glsl @@ -9,9 +9,9 @@ attribute vec2 a_pos; attribute vec2 a_extrude; attribute float a_linesofar; -// posmatrix is for the vertex position, exmatrix is for rotating and projecting +// matrix is for the vertex position, exmatrix is for rotating and projecting // the extrusion vector. -uniform mat4 u_posmatrix; +uniform mat4 u_matrix; uniform mat4 u_exmatrix; // shared @@ -49,7 +49,7 @@ void main() { // model/view matrix. Add the extrusion vector *after* the model/view matrix // because we're extruding the line in pixel space, regardless of the current // tile's zoom level. - gl_Position = u_posmatrix * vec4(floor(a_pos / 2.0), 0.0, 1.0) + u_exmatrix * vec4(dist, z, 0.0); + gl_Position = u_matrix * vec4(floor(a_pos / 2.0), 0.0, 1.0) + u_exmatrix * vec4(dist, z, 0.0); v_linesofar = a_linesofar;// * u_ratio; diff --git a/src/shader/raster.fragment.glsl b/src/shader/raster.fragment.glsl index d56a5b5901..333de76dc1 100644 --- a/src/shader/raster.fragment.glsl +++ b/src/shader/raster.fragment.glsl @@ -17,9 +17,9 @@ void main() { // spin rgb = vec3( - dot(rgb, u_spin_weights.xyz), - dot(rgb, u_spin_weights.zxy), - dot(rgb, u_spin_weights.yzx)); + dot(rgb, u_spin_weights.xyz), + dot(rgb, u_spin_weights.zxy), + dot(rgb, u_spin_weights.yzx)); // saturation float average = (color.r + color.g + color.b) / 3.0; diff --git a/src/shader/sdf.vertex.glsl b/src/shader/sdf.vertex.glsl index 86cbec98ed..1d6dc012b5 100644 --- a/src/shader/sdf.vertex.glsl +++ b/src/shader/sdf.vertex.glsl @@ -1,10 +1,15 @@ attribute vec2 a_pos; attribute vec2 a_offset; -attribute vec4 a_data1; -attribute vec4 a_data2; +attribute vec2 a_tex; +attribute float a_angle; +attribute float a_minzoom; +attribute float a_maxzoom; +attribute float a_rangeend; +attribute float a_rangestart; +attribute float a_labelminzoom; -// posmatrix is for the vertex position, exmatrix is for rotating and projecting +// matrix is for the vertex position, exmatrix is for rotating and projecting // the extrusion vector. uniform mat4 u_matrix; uniform mat4 u_exmatrix; @@ -22,11 +27,6 @@ varying vec2 v_tex; varying float v_alpha; void main() { - vec2 a_tex = a_data1.xy; - float a_labelminzoom = a_data1[2]; - float a_angle = a_data1[3]; - vec2 a_zoom = a_data2.st; - vec2 a_range = a_data2.pq; float rev = 0.0; @@ -40,7 +40,7 @@ void main() { // of the view plane so that the triangle gets clipped. This makes it easier // for us to create degenerate triangle strips. // u_zoom is the current zoom level adjusted for the change in font size - float z = 2.0 - step(a_zoom[0], u_zoom) - (1.0 - step(a_zoom[1], u_zoom)) + rev; + float z = 2.0 - step(a_minzoom, u_zoom) - (1.0 - step(a_maxzoom, u_zoom)) + rev; // fade out labels float alpha = clamp((u_fadezoom - a_labelminzoom) / u_fadedist, 0.0, 1.0); @@ -62,7 +62,7 @@ void main() { // all the angles are 0..256 representing 0..2PI // hide if (angle >= a_rangeend && angle < rangestart) - z += step(a_range[0], u_angle) * (1.0 - step(a_range[1], u_angle)); + z += step(a_rangeend, u_angle) * (1.0 - step(a_rangestart, u_angle)); gl_Position = u_matrix * vec4(a_pos, 0, 1) + u_exmatrix * vec4(a_offset / 64.0, z, 0); v_tex = a_tex * 4.0 / u_texsize; diff --git a/src/shader/sdf_shader.cpp b/src/shader/sdf_shader.cpp index 3fd52f511e..e5c0e88fd8 100644 --- a/src/shader/sdf_shader.cpp +++ b/src/shader/sdf_shader.cpp @@ -19,8 +19,13 @@ SDFShader::SDFShader() a_pos = glGetAttribLocation(program, "a_pos"); a_offset = glGetAttribLocation(program, "a_offset"); - a_data1 = glGetAttribLocation(program, "a_data1"); - a_data2 = glGetAttribLocation(program, "a_data2"); + a_tex = glGetAttribLocation(program, "a_tex"); + a_angle = glGetAttribLocation(program, "a_angle"); + a_minzoom = glGetAttribLocation(program, "a_minzoom"); + a_maxzoom = glGetAttribLocation(program, "a_maxzoom"); + a_rangeend = glGetAttribLocation(program, "a_rangeend"); + a_rangestart = glGetAttribLocation(program, "a_rangestart"); + a_labelminzoom = glGetAttribLocation(program, "a_labelminzoom"); } void SDFShader::bind(char *offset) { @@ -30,9 +35,29 @@ void SDFShader::bind(char *offset) { glEnableVertexAttribArray(a_offset); glVertexAttribPointer(a_offset, 2, GL_SHORT, false, 16, offset + 4); - glEnableVertexAttribArray(a_data1); - glVertexAttribPointer(a_data1, 4, GL_UNSIGNED_BYTE, false, 16, offset + 8); + glEnableVertexAttribArray(a_tex); + glVertexAttribPointer(a_tex, 2, GL_UNSIGNED_BYTE, false, 16, offset + 8); - glEnableVertexAttribArray(a_data2); - glVertexAttribPointer(a_data2, 4, GL_UNSIGNED_BYTE, false, 16, offset + 12); + glEnableVertexAttribArray(a_labelminzoom); + glVertexAttribPointer(a_labelminzoom, 1, GL_UNSIGNED_BYTE, false, 16, + offset + 10); + + glEnableVertexAttribArray(a_minzoom); + glVertexAttribPointer(a_minzoom, 1, GL_UNSIGNED_BYTE, false, 16, + offset + 11); + + glEnableVertexAttribArray(a_maxzoom); + glVertexAttribPointer(a_maxzoom, 1, GL_UNSIGNED_BYTE, false, 16, + offset + 12); + + glEnableVertexAttribArray(a_angle); + glVertexAttribPointer(a_angle, 1, GL_UNSIGNED_BYTE, false, 16, offset + 13); + + glEnableVertexAttribArray(a_rangeend); + glVertexAttribPointer(a_rangeend, 1, GL_UNSIGNED_BYTE, false, 16, + offset + 14); + + glEnableVertexAttribArray(a_rangestart); + glVertexAttribPointer(a_rangestart, 1, GL_UNSIGNED_BYTE, false, 16, + offset + 15); } |