(gl, vertexScript, fragScript)
| 4752 | } |
| 4753 | |
| 4754 | function createProgram(gl, vertexScript, fragScript) { |
| 4755 | var vertexShader = createShader(gl, vertexScript, gl.VERTEX_SHADER); |
| 4756 | var fragShader = createShader(gl, fragScript, gl.FRAGMENT_SHADER); |
| 4757 | |
| 4758 | var program = gl.createProgram(); |
| 4759 | gl.attachShader(program, vertexShader); |
| 4760 | gl.attachShader(program, fragShader); |
| 4761 | |
| 4762 | gl.linkProgram(program); |
| 4763 | |
| 4764 | var linked = gl.getProgramParameter(program, gl.LINK_STATUS); |
| 4765 | if (!linked) { |
| 4766 | var lastError = gl.getProgramInfoLog(program); |
| 4767 | error("Error in program linking: " + lastError); |
| 4768 | gl.deleteProgram(program); |
| 4769 | return null; |
| 4770 | } |
| 4771 | |
| 4772 | var positionLocation = gl.getAttribLocation(program, "a_position"); |
| 4773 | var texCoordLocation = gl.getAttribLocation(program, "a_texCoord"); |
| 4774 | |
| 4775 | var texCoordBuffer = gl.createBuffer(); |
| 4776 | gl.bindBuffer(gl.ARRAY_BUFFER, texCoordBuffer); |
| 4777 | 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); |
| 4778 | gl.enableVertexAttribArray(texCoordLocation); |
| 4779 | gl.vertexAttribPointer(texCoordLocation, 2, gl.FLOAT, false, 0, 0); |
| 4780 | |
| 4781 | // Create a buffer for the position of the rectangle corners. |
| 4782 | var buffer = gl.createBuffer(); |
| 4783 | gl.bindBuffer(gl.ARRAY_BUFFER, buffer); |
| 4784 | gl.enableVertexAttribArray(positionLocation); |
| 4785 | gl.vertexAttribPointer(positionLocation, 2, gl.FLOAT, false, 0, 0); |
| 4786 | |
| 4787 | return program; |
| 4788 | } |
| 4789 | |
| 4790 | function createShader(gl, script, type) { |
| 4791 | var shader = gl.createShader(type); |
nothing calls this directly
no test coverage detected