summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore2
-rwxr-xr-xbin/build-shaders.js22
-rw-r--r--include/llmr/shader/shaders.hpp29
-rw-r--r--llmr.gyp37
-rw-r--r--src/shader/shader.cpp17
-rw-r--r--src/shader/shaders.cpp39
6 files changed, 48 insertions, 98 deletions
diff --git a/.gitignore b/.gitignore
index 944f7cde80..34e118fc53 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,3 +9,5 @@
/config.mk
/build
/node_modules
+/include/llmr/shader/shaders.hpp
+/src/shader/shaders.cpp
diff --git a/bin/build-shaders.js b/bin/build-shaders.js
index 78d2326eae..145df88064 100755
--- a/bin/build-shaders.js
+++ b/bin/build-shaders.js
@@ -7,7 +7,7 @@ var path = require('path');
var glsl;
try { glsl = require('glsl-optimizer'); } catch(err) {}
-module.exports = function() {
+module.exports = function(param) {
var name;
var shaders = {};
@@ -30,9 +30,21 @@ module.exports = function() {
// Optimize shader
if (glsl) {
- var compiler = new glsl.Compiler(glsl.TARGET_OPENGLES20);
+ var preamble = '';
+ var target = glsl.TARGET_OPENGL;
+ if (param == 'gles2') {
+ target = glsl.TARGET_OPENGLES20;
+ preamble = 'precision highp float;';
+ } else if (param == 'gles3') {
+ target = glsl.TARGET_OPENGLES30;
+ preamble = 'precision highp float;';
+ } else {
+ preamble = '#version 120';
+ }
+
+ var compiler = new glsl.Compiler(target);
for (name in shaders) {
- var vertex_shader = new glsl.Shader(compiler, glsl.VERTEX_SHADER, shaders[name].vertex);
+ var vertex_shader = new glsl.Shader(compiler, glsl.VERTEX_SHADER, preamble + '\n' + shaders[name].vertex);
if (vertex_shader.compiled()) {
shaders[name].vertex = vertex_shader.output();
} else {
@@ -41,7 +53,7 @@ module.exports = function() {
}
vertex_shader.dispose();
- var fragment_shader = new glsl.Shader(compiler, glsl.FRAGMENT_SHADER, shaders[name].fragment);
+ var fragment_shader = new glsl.Shader(compiler, glsl.FRAGMENT_SHADER, preamble + '\n' + shaders[name].fragment);
if (fragment_shader.compiled()) {
shaders[name].fragment = fragment_shader.output();
} else {
@@ -107,4 +119,4 @@ module.exports = function() {
};
-module.exports();
+module.exports(process.argv[2]);
diff --git a/include/llmr/shader/shaders.hpp b/include/llmr/shader/shaders.hpp
deleted file mode 100644
index 4f85a33028..0000000000
--- a/include/llmr/shader/shaders.hpp
+++ /dev/null
@@ -1,29 +0,0 @@
-// NOTE: DO NOT CHANGE THIS FILE. IT IS AUTOMATICALLY GENERATED.
-
-#ifndef LLMR_SHADER_SHADERS
-#define LLMR_SHADER_SHADERS
-
-namespace llmr {
-
-struct shader_source {
- const char *vertex;
- const char *fragment;
-};
-
-enum {
- LINE_SHADER,
- LINEJOIN_SHADER,
- OUTLINE_SHADER,
- PATTERN_SHADER,
- PLAIN_SHADER,
- POINT_SHADER,
- RASTER_SHADER,
- TEXT_SHADER,
- SHADER_COUNT
-};
-
-extern const shader_source shaders[SHADER_COUNT];
-
-}
-
-#endif
diff --git a/llmr.gyp b/llmr.gyp
index 55d4c774a0..46455fafc4 100644
--- a/llmr.gyp
+++ b/llmr.gyp
@@ -9,17 +9,6 @@
'type':'none',
'actions': [
{
- 'action_name': 'Build Shaders',
- 'inputs': [
- '<!@(find src -name "*.glsl")'
- ],
- 'outputs': [
- 'include/llmr/shader/shaders.hpp',
- 'src/shader/shaders.cpp'
- ],
- 'action': ['bin/build-shaders.js'],
- },
- {
'action_name': 'Build Stylesheet',
'inputs': [
'bin/style.js'
@@ -36,6 +25,19 @@
'target_name': 'llmr-x86',
'product_name': 'llmr-x86',
'type': 'static_library',
+ 'actions': [
+ {
+ 'action_name': 'Build Shaders',
+ 'inputs': [
+ '<!@(find src -name "*.glsl")'
+ ],
+ 'outputs': [
+ 'include/llmr/shader/shaders.hpp',
+ 'src/shader/shaders.cpp'
+ ],
+ 'action': ['bin/build-shaders.js gl'],
+ }
+ ],
'dependencies': [
'before_build_actions'
],
@@ -94,6 +96,19 @@
'target_name': 'llmr-ios',
'product_name': 'llmr-ios',
'type': 'static_library',
+ 'actions': [
+ {
+ 'action_name': 'Build Shaders',
+ 'inputs': [
+ '<!@(find src -name "*.glsl")'
+ ],
+ 'outputs': [
+ 'include/llmr/shader/shaders.hpp',
+ 'src/shader/shaders.cpp'
+ ],
+ 'action': ['bin/build-shaders.js gles2'],
+ }
+ ],
'dependencies': [
'before_build_actions'
],
diff --git a/src/shader/shader.cpp b/src/shader/shader.cpp
index 6dc5a9038a..5fe91e62f0 100644
--- a/src/shader/shader.cpp
+++ b/src/shader/shader.cpp
@@ -102,20 +102,9 @@ bool Shader::compileShader(GLuint *shader, GLenum type, const GLchar *source) {
GLint status;
*shader = glCreateShader(type);
-
-#if defined(GL_ES_VERSION_2_0)
- // Add OpenGL ES precision premable
- const GLchar *preamble = "precision highp float;\n\n";
-#else
- // Desktop GLSL
- const GLchar *preamble = "#version 120\n\n";
-#endif
-
- const GLchar *strings[] = { preamble, source };
- const GLint lengths[] = { (GLint)strlen(preamble), (GLint)strlen(source) };
-
-
- glShaderSource(*shader, 2, strings, lengths);
+ const GLchar *strings[] = { source };
+ const GLint lengths[] = { (GLint)strlen(source) };
+ glShaderSource(*shader, 1, strings, lengths);
glCompileShader(*shader);
diff --git a/src/shader/shaders.cpp b/src/shader/shaders.cpp
deleted file mode 100644
index 65dd4e0d4c..0000000000
--- a/src/shader/shaders.cpp
+++ /dev/null
@@ -1,39 +0,0 @@
-// NOTE: DO NOT CHANGE THIS FILE. IT IS AUTOMATICALLY GENERATED.
-#include <llmr/shader/shaders.hpp>
-
-using namespace llmr;
-
-const shader_source llmr::shaders[SHADER_COUNT] = {
- {
- "attribute vec2 a_pos;\nattribute vec2 a_extrude;\nuniform mat4 u_matrix;\nuniform mat4 u_exmatrix;\nuniform vec2 u_linewidth;\nvarying vec2 v_normal;\nvoid main ()\n{\n vec2 normal_1;\n vec2 tmpvar_2;\n tmpvar_2 = (vec2(mod (a_pos, 2.0)));\n normal_1.x = tmpvar_2.x;\n normal_1.y = sign((tmpvar_2.y - 0.5));\n v_normal = normal_1;\n vec4 tmpvar_3;\n tmpvar_3.zw = vec2(0.0, 0.0);\n tmpvar_3.xy = ((u_linewidth.x * a_extrude) * 0.015873);\n vec4 tmpvar_4;\n tmpvar_4.zw = vec2(0.0, 1.0);\n tmpvar_4.xy = floor((a_pos * 0.5));\n gl_Position = ((u_matrix * tmpvar_4) + (u_exmatrix * tmpvar_3));\n}\n\n",
- "uniform vec2 u_linewidth;\nuniform vec4 u_color;\nvarying vec2 v_normal;\nvoid main ()\n{\n float tmpvar_1;\n tmpvar_1 = (sqrt(dot (v_normal, v_normal)) * u_linewidth.x);\n gl_FragColor = (u_color * clamp (min (\n (tmpvar_1 - (u_linewidth.y - 1.0))\n , \n (u_linewidth.x - tmpvar_1)\n ), 0.0, 1.0));\n}\n\n",
- },
- {
- "attribute vec2 a_pos;\nuniform mat4 u_matrix;\nuniform vec2 u_world;\nuniform float u_size;\nvarying highp vec2 v_pos;\nvoid main ()\n{\n vec4 tmpvar_1;\n tmpvar_1.zw = vec2(0.0, 1.0);\n tmpvar_1.xy = floor((a_pos / 2.0));\n vec4 tmpvar_2;\n tmpvar_2 = (u_matrix * tmpvar_1);\n gl_Position = tmpvar_2;\n v_pos = ((tmpvar_2.xy + 1.0) * u_world);\n gl_PointSize = u_size;\n}\n\n",
- "uniform vec4 u_color;\nuniform vec2 u_linewidth;\nvarying vec2 v_pos;\nvoid main ()\n{\n highp float tmpvar_1;\n highp vec2 x_2;\n x_2 = (v_pos - gl_FragCoord.xy);\n tmpvar_1 = sqrt(dot (x_2, x_2));\n highp vec4 tmpvar_3;\n tmpvar_3 = (u_color * clamp (min (\n (tmpvar_1 - (u_linewidth.y - 1.0))\n , \n (u_linewidth.x - tmpvar_1)\n ), 0.0, 1.0));\n gl_FragColor = tmpvar_3;\n}\n\n",
- },
- {
- "attribute vec2 a_pos;\nuniform mat4 u_matrix;\nuniform vec2 u_world;\nvarying highp vec2 v_pos;\nvoid main ()\n{\n vec4 tmpvar_1;\n tmpvar_1.zw = vec2(0.0, 1.0);\n tmpvar_1.xy = a_pos;\n vec4 tmpvar_2;\n tmpvar_2 = (u_matrix * tmpvar_1);\n gl_Position = tmpvar_2;\n v_pos = (((tmpvar_2.xy + 1.0) / 2.0) * u_world);\n}\n\n",
- "uniform vec4 u_color;\nvarying vec2 v_pos;\nvoid main ()\n{\n highp vec2 x_1;\n x_1 = (v_pos - gl_FragCoord.xy);\n highp float tmpvar_2;\n tmpvar_2 = clamp (((\n sqrt(dot (x_1, x_1))\n - 1.0) / -1.0), 0.0, 1.0);\n highp vec4 tmpvar_3;\n tmpvar_3 = (u_color * (tmpvar_2 * (tmpvar_2 * \n (3.0 - (2.0 * tmpvar_2))\n )));\n gl_FragColor = tmpvar_3;\n}\n\n",
- },
- {
- "uniform mat4 u_matrix;\nattribute vec2 a_pos;\nvarying vec2 v_pos;\nvoid main ()\n{\n v_pos = a_pos;\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}\n\n",
- "uniform vec4 u_color;\nuniform vec2 u_offset;\nuniform vec2 u_pattern_size;\nuniform vec2 u_pattern_tl;\nuniform vec2 u_pattern_br;\nuniform float u_mix;\nuniform sampler2D u_image;\nvarying vec2 v_pos;\nvoid main ()\n{\n vec2 tmpvar_1;\n tmpvar_1 = (vec2(mod (((v_pos + u_offset) / u_pattern_size), 1.0)));\n lowp vec4 tmpvar_2;\n tmpvar_2 = mix (texture2D (u_image, mix (u_pattern_tl, u_pattern_br, tmpvar_1)), texture2D (u_image, mix (u_pattern_tl, u_pattern_br, (vec2(mod (\n (tmpvar_1 * 2.0)\n , 1.0))))), u_mix);\n lowp vec4 tmpvar_3;\n tmpvar_3 = (tmpvar_2 + (u_color * (1.0 - tmpvar_2.w)));\n gl_FragColor = tmpvar_3;\n}\n\n",
- },
- {
- "attribute vec2 a_pos;\nuniform mat4 u_matrix;\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}\n\n",
- "uniform vec4 u_color;\nvoid main ()\n{\n gl_FragColor = u_color;\n}\n\n",
- },
- {
- "attribute vec2 a_pos;\nuniform mat4 u_matrix;\nuniform float u_size;\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}\n\n",
- "uniform sampler2D u_image;\nuniform vec2 u_tl;\nuniform vec2 u_br;\nuniform vec4 u_color;\nvoid main ()\n{\n mediump vec2 tmpvar_1;\n tmpvar_1 = (((\n ((gl_PointCoord * 2.0) - 1.0)\n * 1.41421) / 2.0) + 0.5);\n mediump vec2 tmpvar_2;\n tmpvar_2 = mix (u_tl, u_br, tmpvar_1);\n lowp vec4 tmpvar_3;\n tmpvar_3 = texture2D (u_image, tmpvar_2);\n gl_FragColor = ((tmpvar_3 * (\n ((float((tmpvar_1.x >= 0.0)) * float((tmpvar_1.y >= 0.0))) * (1.0 - float((tmpvar_1.x >= 1.0))))\n * \n (1.0 - float((tmpvar_1.y >= 1.0)))\n )) * u_color);\n}\n\n",
- },
- {
- "uniform mat4 u_matrix;\nattribute vec2 a_pos;\nvarying vec2 v_pos;\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 v_pos = (a_pos / 4096.0);\n}\n\n",
- "uniform sampler2D u_image;\nuniform float u_opacity;\nvarying vec2 v_pos;\nvoid main ()\n{\n lowp vec4 tmpvar_1;\n tmpvar_1 = (texture2D (u_image, v_pos) * u_opacity);\n gl_FragColor = tmpvar_1;\n}\n\n",
- },
- {
- "attribute vec2 a_pos;\nattribute vec2 a_offset;\nattribute vec4 a_data1;\nattribute vec4 a_data2;\nuniform mat4 u_matrix;\nuniform mat4 u_exmatrix;\nuniform float u_angle;\nuniform float u_zoom;\nuniform float u_flip;\nuniform float u_fadedist;\nuniform float u_minfadezoom;\nuniform float u_maxfadezoom;\nuniform float u_fadezoom;\nuniform vec2 u_texsize;\nvarying vec2 v_tex;\nvarying float v_alpha;\nvoid main ()\n{\n float rev_1;\n rev_1 = 0.0;\n float tmpvar_2;\n tmpvar_2 = (float(mod ((a_data1.w + u_angle), 256.0)));\n if ((((u_flip > 0.0) && (tmpvar_2 >= 64.0)) && (tmpvar_2 < 192.0))) {\n rev_1 = 1.0;\n };\n float tmpvar_3;\n tmpvar_3 = (((2.0 - \n float((u_zoom >= a_data2.x))\n ) - (1.0 - \n float((u_zoom >= a_data2.y))\n )) + rev_1);\n float tmpvar_4;\n tmpvar_4 = clamp (((u_fadezoom - a_data1.z) / u_fadedist), 0.0, 1.0);\n if ((u_fadedist >= 0.0)) {\n v_alpha = tmpvar_4;\n } else {\n v_alpha = (1.0 - tmpvar_4);\n };\n if ((u_maxfadezoom < a_data1.z)) {\n v_alpha = 0.0;\n };\n if ((u_minfadezoom >= a_data1.z)) {\n v_alpha = 1.0;\n };\n vec4 tmpvar_5;\n tmpvar_5.zw = vec2(0.0, 1.0);\n tmpvar_5.xy = a_pos;\n vec4 tmpvar_6;\n tmpvar_6.w = 0.0;\n tmpvar_6.xy = (a_offset / 64.0);\n tmpvar_6.z = ((tmpvar_3 + float(\n (0.0 >= v_alpha)\n )) + ((1.0 - \n float((u_angle >= a_data2.z))\n ) * float(\n (u_angle >= a_data2.w)\n )));\n gl_Position = ((u_matrix * tmpvar_5) + (u_exmatrix * tmpvar_6));\n v_tex = ((a_data1.xy * 4.0) / u_texsize);\n}\n\n",
- "uniform sampler2D u_texture;\nuniform vec4 u_color;\nuniform float u_buffer;\nuniform float u_gamma;\nvarying vec2 v_tex;\nvarying float v_alpha;\nvoid main ()\n{\n float edge0_1;\n edge0_1 = (u_buffer - u_gamma);\n lowp float tmpvar_2;\n tmpvar_2 = clamp (((texture2D (u_texture, v_tex).w - edge0_1) / (\n (u_buffer + u_gamma)\n - edge0_1)), 0.0, 1.0);\n lowp vec4 tmpvar_3;\n tmpvar_3 = (u_color * ((tmpvar_2 * \n (tmpvar_2 * (3.0 - (2.0 * tmpvar_2)))\n ) * v_alpha));\n gl_FragColor = tmpvar_3;\n}\n\n",
- }
-};