(gl, vertexScript, fragScript)
| 12559 | } |
| 12560 | |
| 12561 | function createProgram(gl, vertexScript, fragScript) { |
| 12562 | var vertexShader = createShader(gl, vertexScript, gl.VERTEX_SHADER); |
| 12563 | var fragShader = createShader(gl, fragScript, gl.FRAGMENT_SHADER); |
| 12564 | |
| 12565 | var program = gl.createProgram(); |
| 12566 | gl.attachShader(program, vertexShader); |
| 12567 | gl.attachShader(program, fragShader); |
| 12568 | |
| 12569 | gl.linkProgram(program); |
| 12570 | |
| 12571 | var linked = gl.getProgramParameter(program, gl.LINK_STATUS); |
| 12572 | if (!linked) { |
| 12573 | var lastError = gl.getProgramInfoLog(program); |
| 12574 | error("Error in program linking: " + lastError); |
| 12575 | gl.deleteProgram(program); |
| 12576 | return null; |
| 12577 | } |
| 12578 | |
| 12579 | var positionLocation = gl.getAttribLocation(program, "a_position"); |
| 12580 | var texCoordLocation = gl.getAttribLocation(program, "a_texCoord"); |
| 12581 | |
| 12582 | var texCoordBuffer = gl.createBuffer(); |
| 12583 | gl.bindBuffer(gl.ARRAY_BUFFER, texCoordBuffer); |
| 12584 | gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.0, 1.0, 1.0]), gl.STATIC_DRAW); |
| 12585 | gl.enableVertexAttribArray(texCoordLocation); |
| 12586 | gl.vertexAttribPointer(texCoordLocation, 2, gl.FLOAT, false, 0, 0); |
| 12587 | |
| 12588 | // Create a buffer for the position of the rectangle corners. |
| 12589 | var buffer = gl.createBuffer(); |
| 12590 | gl.bindBuffer(gl.ARRAY_BUFFER, buffer); |
| 12591 | gl.enableVertexAttribArray(positionLocation); |
| 12592 | gl.vertexAttribPointer(positionLocation, 2, gl.FLOAT, false, 0, 0); |
| 12593 | |
| 12594 | return program; |
| 12595 | } |
| 12596 | |
| 12597 | function createShader(gl, script, type) { |
| 12598 | var shader = gl.createShader(type); |
nothing calls this directly
no test coverage detected