| 1097 | } |
| 1098 | |
| 1099 | _initShader(shader) { |
| 1100 | const gl = this.GL; |
| 1101 | |
| 1102 | const vertShader = gl.createShader(gl.VERTEX_SHADER); |
| 1103 | gl.shaderSource(vertShader, shader.vertSrc()); |
| 1104 | gl.compileShader(vertShader); |
| 1105 | if (!gl.getShaderParameter(vertShader, gl.COMPILE_STATUS)) { |
| 1106 | throw new Error(`Yikes! An error occurred compiling the vertex shader: ${ |
| 1107 | gl.getShaderInfoLog(vertShader) |
| 1108 | } in:\n\n${shader.vertSrc()}`); |
| 1109 | } |
| 1110 | |
| 1111 | const fragShader = gl.createShader(gl.FRAGMENT_SHADER); |
| 1112 | gl.shaderSource(fragShader, shader.fragSrc()); |
| 1113 | gl.compileShader(fragShader); |
| 1114 | if (!gl.getShaderParameter(fragShader, gl.COMPILE_STATUS)) { |
| 1115 | throw new Error(`Darn! An error occurred compiling the fragment shader: ${ |
| 1116 | gl.getShaderInfoLog(fragShader) |
| 1117 | }`); |
| 1118 | } |
| 1119 | |
| 1120 | const program = gl.createProgram(); |
| 1121 | gl.attachShader(program, vertShader); |
| 1122 | gl.attachShader(program, fragShader); |
| 1123 | gl.linkProgram(program); |
| 1124 | |
| 1125 | if (!gl.getProgramParameter(program, gl.LINK_STATUS)) { |
| 1126 | throw new Error( |
| 1127 | `Snap! Error linking shader program: ${gl.getProgramInfoLog(program)}` |
| 1128 | ); |
| 1129 | } |
| 1130 | |
| 1131 | shader._compiled = true; |
| 1132 | shader._glProgram = program; |
| 1133 | shader._vertShader = vertShader; |
| 1134 | shader._fragShader = fragShader; |
| 1135 | } |
| 1136 | |
| 1137 | _finalizeShader() {} |
| 1138 | |