diff options
-rw-r--r-- | .gitignore | 2 | ||||
-rwxr-xr-x | bin/build-shaders.js | 22 | ||||
-rw-r--r-- | include/llmr/shader/shaders.hpp | 29 | ||||
-rw-r--r-- | llmr.gyp | 37 | ||||
-rw-r--r-- | src/shader/shader.cpp | 17 | ||||
-rw-r--r-- | src/shader/shaders.cpp | 39 |
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 @@ -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", - } -}; |