@@ -58,7 +58,6 @@ ResourceManager.prototype = {
5858 36057 : 'Incomplete Dimensions' ,
5959 36061 : 'Framebuffer Unsupported'
6060 } ;
61- alert ( 'Framebuffer incomplete. Framebuffer status: ' + errors [ complete ] ) ;
6261 throw new Error ( 'Framebuffer incomplete. Framebuffer status: ' + errors [ complete ] ) ;
6362 }
6463
@@ -86,7 +85,6 @@ ResourceManager.prototype = {
8685 case gl . ELEMENT_ARRAY_BUFFER :
8786 return new Resources . IndexBuffer ( gl , bufferObject ) ;
8887 default :
89- alert ( 'Invalid Buffer Target' ) ;
9088 throw new Error ( 'Invalid Buffer Target' ) ;
9189 }
9290
@@ -129,46 +127,65 @@ ResourceManager.prototype = {
129127 if ( ! ( shaderName in this . shaderCache ) )
130128 {
131129 var gl = this . gl ;
132- var program = gl . createProgram ( ) ;
133- var vertShader = gl . createShader ( gl . VERTEX_SHADER ) ;
134- var fragShader = gl . createShader ( gl . FRAGMENT_SHADER ) ;
130+ var program ;
131+ var vertShader ;
132+ var fragShader ;
133+ var status ;
135134 var error ;
136135 var shader ;
137136
137+ vertShader = gl . createShader ( gl . VERTEX_SHADER ) ;
138138 gl . shaderSource ( vertShader , shaderSources . vert ) ;
139- gl . shaderSource ( fragShader , shaderSources . frag ) ;
140-
141139 gl . compileShader ( vertShader ) ;
142- gl . compileShader ( fragShader ) ;
143140
144141 error = gl . getShaderInfoLog ( vertShader ) ;
142+ status = gl . getShaderParameter ( vertShader , gl . COMPILE_STATUS ) ;
145143
146- if ( error && error . length > 0 )
144+ if ( ! status && error && error . length > 0 )
147145 {
148- alert ( 'Vertex Shader Compilation Error.\n' + error ) ;
149- throw new Error ( 'Vertex Shader Compilation Error.\n' + error ) ;
146+ throw new Error ( 'Vertex Shader Compilation Error. Shader name: ' + shaderName + '.\n' + error + '\n\n Shader source:\n' + shaderSources . vert ) ;
150147 }
148+ else if ( error && error . length > 0 )
149+ {
150+ console . warn ( 'Vertex Shader Compilation Warning. Shader name: ' + shaderName + '.\n' + error + '\n\n Shader source:\n' + shaderSources . vert ) ;
151+ }
152+
153+ fragShader = gl . createShader ( gl . FRAGMENT_SHADER ) ;
154+ gl . shaderSource ( fragShader , shaderSources . frag ) ;
155+ gl . compileShader ( fragShader ) ;
151156
152157 error = gl . getShaderInfoLog ( fragShader ) ;
158+ status = gl . getShaderParameter ( fragShader , gl . COMPILE_STATUS ) ;
153159
154- if ( error && error . length > 0 )
160+ if ( ! status && error && error . length > 0 )
161+ {
162+ throw new Error ( 'Fragment Shader Compilation Error. Shader name: ' + shaderName + '.\n' + error + '\n\n Shader source:\n' + shaderSources . frag ) ;
163+ }
164+ else if ( error && error . length > 0 )
155165 {
156- alert ( 'Fragment Shader Compilation Error.\n' + error ) ;
157- throw new Error ( 'Fragment Shader Compilation Error.\n' + error ) ;
166+ console . warn ( 'Fragment Shader Compilation Warning. Shader name: ' + shaderName + '.\n' + error + '\n\n Shader source:\n' + shaderSources . frag ) ;
158167 }
159168
169+ program = gl . createProgram ( ) ;
160170 gl . attachShader ( program , vertShader ) ;
161171 gl . attachShader ( program , fragShader ) ;
162172 gl . linkProgram ( program ) ;
173+ gl . validateProgram ( program ) ;
163174
164175 error = gl . getProgramParameter ( program , gl . LINK_STATUS ) ;
165176
166177 if ( error === 0 )
167178 {
168179 error = gl . getProgramInfoLog ( program ) ;
169180
170- alert ( 'Program Linking Error.\n' + error ) ;
171- throw new Error ( 'Program Linking Error.\n' + error ) ;
181+ throw new Error ( 'Program Linking Error. Shader name: ' + shaderName + '.\n' + error ) ;
182+ }
183+
184+ error = gl . getProgramParameter ( program , gl . VALIDATE_STATUS ) ;
185+ if ( error === 0 )
186+ {
187+ error = gl . getProgramInfoLog ( program ) ;
188+ throw new Error ( 'Program Validation Error. Shader name: ' + shaderName + '.\n' + error ) ;
172189 }
173190
174191 shader = new Resources . Shader ( shaderName , gl , program , vertShader , fragShader ) ;
0 commit comments