@@ -62,22 +62,35 @@ ShaderBase.strings.fragColorFunction = [
62
62
'}'
63
63
] . join ( '\n' ) ;
64
64
65
- var moveExtension = function ( str ) {
65
+ var processShader = function ( str ) {
66
66
// move extension enable/require to the top of file
67
+ var extensions = '' ;
67
68
var matches = str . match ( / ^ \s * ( # e x t e n s i o n ) .* / gm) ;
68
- if ( ! matches ) return str ;
69
- var extMap = { } ;
70
- var exts = '' ;
71
-
72
- for ( var i = 0 , nb = matches . length ; i < nb ; ++ i ) {
73
- var ext = matches [ i ] . substr ( matches [ i ] . indexOf ( '#extension' ) ) ;
74
- str = str . replace ( matches [ i ] , '' ) ;
75
- if ( extMap [ ext ] )
76
- continue ;
77
- extMap [ ext ] = true ;
78
- exts += ext + '\n' ;
69
+ if ( matches ) {
70
+ var extMap = { } ;
71
+
72
+ for ( var i = 0 , nb = matches . length ; i < nb ; ++ i ) {
73
+ var ext = matches [ i ] . substr ( matches [ i ] . indexOf ( '#extension' ) ) ;
74
+ str = str . replace ( matches [ i ] , '' ) ;
75
+ if ( extMap [ ext ] )
76
+ continue ;
77
+ extMap [ ext ] = true ;
78
+ extensions += ext + '\n' ;
79
+ }
79
80
}
80
- str = exts + str ;
81
+
82
+ var version = '' ;
83
+ if ( str . indexOf ( '#version' ) === - 1 ) {
84
+ version += '#version 100\n' ;
85
+ }
86
+
87
+ var precision = '' ;
88
+ var regPrecision = / p r e c i s i o n \s + ( h i g h | l o w | m e d i u m ) p \s + f l o a t / ;
89
+ if ( ! regPrecision . test ( str ) ) {
90
+ precision += '#ifdef GL_FRAGMENT_PRECISION_HIGH\n precision highp float;\n#else\n precision mediump float;\n#endif\n' ;
91
+ }
92
+
93
+ str = version + extensions + precision + str ;
81
94
return str ;
82
95
} ;
83
96
@@ -89,11 +102,11 @@ ShaderBase.getOrCreate = function (gl) {
89
102
var fname = '\n#define SHADER_NAME ' + this . fragmentName + '\n' ;
90
103
91
104
var vShader = gl . createShader ( gl . VERTEX_SHADER ) ;
92
- gl . shaderSource ( vShader , moveExtension ( this . vertex + vname ) ) ;
105
+ gl . shaderSource ( vShader , processShader ( this . vertex + vname ) ) ;
93
106
gl . compileShader ( vShader ) ;
94
107
95
108
var fShader = gl . createShader ( gl . FRAGMENT_SHADER ) ;
96
- gl . shaderSource ( fShader , moveExtension ( this . fragment + fname ) ) ;
109
+ gl . shaderSource ( fShader , processShader ( this . fragment + fname ) ) ;
97
110
gl . compileShader ( fShader ) ;
98
111
99
112
var program = this . program = gl . createProgram ( ) ;
0 commit comments