summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKonstantin Käfer <mail@kkaefer.com>2014-05-19 11:13:22 +0200
committerKonstantin Käfer <mail@kkaefer.com>2014-05-19 11:13:22 +0200
commit898c6d6714bcbd1a8600deca1437a59f3c33f10e (patch)
treeba579763c5db564d8e77c2da55a281872cabacf6 /src
parent13575330f7d32630f6dbf4244405c46b453152fe (diff)
downloadqtlocation-mapboxgl-898c6d6714bcbd1a8600deca1437a59f3c33f10e.tar.gz
fix for retina screens
Diffstat (limited to 'src')
-rw-r--r--src/geometry/sprite_atlas.cpp4
-rw-r--r--src/renderer/painter_icon.cpp2
-rw-r--r--src/shader/icon.vertex.glsl3
-rw-r--r--src/shader/icon_shader.cpp9
-rw-r--r--src/shader/shaders_gl.cpp2
-rw-r--r--src/shader/shaders_gles2.cpp2
6 files changed, 16 insertions, 6 deletions
diff --git a/src/geometry/sprite_atlas.cpp b/src/geometry/sprite_atlas.cpp
index 80212c1dfb..4c6f518786 100644
--- a/src/geometry/sprite_atlas.cpp
+++ b/src/geometry/sprite_atlas.cpp
@@ -83,7 +83,7 @@ Rect<SpriteAtlas::dimension> SpriteAtlas::getIcon(const int size, const std::str
const int img_offset_y = (rect.y + buffer) * pixelRatio;
uint32_t *sprite_img = reinterpret_cast<uint32_t *>(data);
- const float blur = 1.5f / size;
+ const float blur = 1.0f / size / pixelRatio;
const uint8_t r = 0x7F;
const uint8_t g = 0x7F;
@@ -220,7 +220,7 @@ void SpriteAtlas::bind(bool linear) {
data // const GLvoid * data
);
- platform::show_color_debug_image("Sprite Atlas", data, width * pixelRatio, height * pixelRatio);
+ platform::show_color_debug_image("Sprite Atlas", data, width, height, width * pixelRatio, height * pixelRatio);
dirty = false;
}
diff --git a/src/renderer/painter_icon.cpp b/src/renderer/painter_icon.cpp
index 53d775a176..b5f4964e6a 100644
--- a/src/renderer/painter_icon.cpp
+++ b/src/renderer/painter_icon.cpp
@@ -32,7 +32,7 @@ void Painter::renderIcon(IconBucket& bucket, const std::string& layer_name, cons
iconShader->setMatrix(vtxMatrix);
iconShader->setColor(color);
iconShader->setImage(0);
-
+ iconShader->setRatio(map.getState().getPixelRatio());
iconShader->setDimension({{
spriteAtlas.getTextureWidth(),
spriteAtlas.getTextureHeight(),
diff --git a/src/shader/icon.vertex.glsl b/src/shader/icon.vertex.glsl
index 51b378f3fd..d0ffe4b33e 100644
--- a/src/shader/icon.vertex.glsl
+++ b/src/shader/icon.vertex.glsl
@@ -3,11 +3,12 @@ attribute vec2 a_tex;
uniform mat4 u_matrix;
uniform float u_size;
+uniform float u_ratio;
varying vec2 v_tex;
void main() {
gl_Position = u_matrix * vec4(a_pos, 0, 1);
gl_PointSize = u_size;
- v_tex = a_tex;
+ v_tex = a_tex * u_ratio;
}
diff --git a/src/shader/icon_shader.cpp b/src/shader/icon_shader.cpp
index f991d1f39a..c656eb3338 100644
--- a/src/shader/icon_shader.cpp
+++ b/src/shader/icon_shader.cpp
@@ -22,12 +22,14 @@ IconShader::IconShader()
u_matrix = glGetUniformLocation(program, "u_matrix");
u_color = glGetUniformLocation(program, "u_color");
u_size = glGetUniformLocation(program, "u_size");
+ u_ratio = glGetUniformLocation(program, "u_ratio");
u_dimension = glGetUniformLocation(program, "u_dimension");
// fprintf(stderr, "IconShader:\n");
// fprintf(stderr, " - u_matrix: %d\n", u_matrix);
// fprintf(stderr, " - u_color: %d\n", u_color);
// fprintf(stderr, " - u_size: %d\n", u_size);
+ // fprintf(stderr, " - u_ratio: %d\n", u_ratio);
// fprintf(stderr, " - u_dimension: %d\n", u_dimension);
// fprintf(stderr, " - u_image: %d\n", u_image);
}
@@ -61,6 +63,13 @@ void IconShader::setSize(float new_size) {
}
}
+void IconShader::setRatio(float new_ratio) {
+ if (ratio != new_ratio) {
+ glUniform1f(u_ratio, new_ratio);
+ ratio = new_ratio;
+ }
+}
+
void IconShader::setDimension(const std::array<float, 2>& new_dimension) {
if (dimension != new_dimension) {
glUniform2fv(u_dimension, 1, new_dimension.data());
diff --git a/src/shader/shaders_gl.cpp b/src/shader/shaders_gl.cpp
index 8473296f22..29cbc0eadf 100644
--- a/src/shader/shaders_gl.cpp
+++ b/src/shader/shaders_gl.cpp
@@ -11,7 +11,7 @@ const shader_source llmr::shaders[SHADER_COUNT] = {
"#version 120\nuniform vec4 u_color;\nuniform float u_blur;\nvoid main ()\n{\n vec2 x_1;\n x_1 = (gl_PointCoord - 0.5);\n float tmpvar_2;\n tmpvar_2 = clamp (((\n sqrt(dot (x_1, x_1))\n - 0.5) / (\n (0.5 - u_blur)\n - 0.5)), 0.0, 1.0);\n gl_FragColor = (u_color * (tmpvar_2 * (tmpvar_2 * \n (3.0 - (2.0 * tmpvar_2))\n )));\n}\n\n",
},
{
- "#version 120\nattribute vec2 a_pos;\nattribute vec2 a_tex;\nuniform mat4 u_matrix;\nuniform float u_size;\nvarying vec2 v_tex;\nvoid main ()\n{\n vec4 tmpvar_1;\n tmpvar_1.zw = vec2(0.0, 1.0);\n tmpvar_1.xy = a_pos;\n gl_Position = (u_matrix * tmpvar_1);\n gl_PointSize = u_size;\n v_tex = a_tex;\n}\n\n",
+ "#version 120\nattribute vec2 a_pos;\nattribute vec2 a_tex;\nuniform mat4 u_matrix;\nuniform float u_size;\nuniform float u_ratio;\nvarying vec2 v_tex;\nvoid main ()\n{\n vec4 tmpvar_1;\n tmpvar_1.zw = vec2(0.0, 1.0);\n tmpvar_1.xy = a_pos;\n gl_Position = (u_matrix * tmpvar_1);\n gl_PointSize = u_size;\n v_tex = (a_tex * u_ratio);\n}\n\n",
"#version 120\nuniform sampler2D u_image;\nuniform vec2 u_dimension;\nuniform float u_size;\nvarying vec2 v_tex;\nvoid main ()\n{\n gl_FragColor = texture2D (u_image, ((v_tex + (\n (gl_PointCoord - 0.5)\n * u_size)) / u_dimension));\n}\n\n",
},
{
diff --git a/src/shader/shaders_gles2.cpp b/src/shader/shaders_gles2.cpp
index db78f46570..f19edf5406 100644
--- a/src/shader/shaders_gles2.cpp
+++ b/src/shader/shaders_gles2.cpp
@@ -11,7 +11,7 @@ const shader_source llmr::shaders[SHADER_COUNT] = {
"precision highp float;\nuniform vec4 u_color;\nuniform float u_blur;\nvoid main ()\n{\n mediump vec2 x_1;\n x_1 = (gl_PointCoord - 0.5);\n mediump float tmpvar_2;\n tmpvar_2 = clamp (((\n sqrt(dot (x_1, x_1))\n - 0.5) / (\n (0.5 - u_blur)\n - 0.5)), 0.0, 1.0);\n gl_FragColor = (u_color * (tmpvar_2 * (tmpvar_2 * \n (3.0 - (2.0 * tmpvar_2))\n )));\n}\n\n",
},
{
- "precision highp float;\nattribute vec2 a_pos;\nattribute vec2 a_tex;\nuniform mat4 u_matrix;\nuniform float u_size;\nvarying vec2 v_tex;\nvoid main ()\n{\n vec4 tmpvar_1;\n tmpvar_1.zw = vec2(0.0, 1.0);\n tmpvar_1.xy = a_pos;\n gl_Position = (u_matrix * tmpvar_1);\n gl_PointSize = u_size;\n v_tex = a_tex;\n}\n\n",
+ "precision highp float;\nattribute vec2 a_pos;\nattribute vec2 a_tex;\nuniform mat4 u_matrix;\nuniform float u_size;\nuniform float u_ratio;\nvarying vec2 v_tex;\nvoid main ()\n{\n vec4 tmpvar_1;\n tmpvar_1.zw = vec2(0.0, 1.0);\n tmpvar_1.xy = a_pos;\n gl_Position = (u_matrix * tmpvar_1);\n gl_PointSize = u_size;\n v_tex = (a_tex * u_ratio);\n}\n\n",
"precision highp float;\nuniform sampler2D u_image;\nuniform vec2 u_dimension;\nuniform float u_size;\nvarying vec2 v_tex;\nvoid main ()\n{\n mediump vec2 tmpvar_1;\n tmpvar_1 = ((v_tex + (\n (gl_PointCoord - 0.5)\n * u_size)) / u_dimension);\n lowp vec4 tmpvar_2;\n tmpvar_2 = texture2D (u_image, tmpvar_1);\n gl_FragColor = tmpvar_2;\n}\n\n",
},
{