(gl, vertexScript, fragScript)
| 4770 | } |
| 4771 | |
| 4772 | function createProgram(gl, vertexScript, fragScript) { |
| 4773 | var vertexShader = createShader(gl, vertexScript, gl.VERTEX_SHADER); |
| 4774 | var fragShader = createShader(gl, fragScript, gl.FRAGMENT_SHADER); |
| 4775 | |
| 4776 | var program = gl.createProgram(); |
| 4777 | gl.attachShader(program, vertexShader); |
| 4778 | gl.attachShader(program, fragShader); |
| 4779 | |
| 4780 | gl.linkProgram(program); |
| 4781 | |
| 4782 | var linked = gl.getProgramParameter(program, gl.LINK_STATUS); |
| 4783 | if (!linked) { |
| 4784 | var lastError = gl.getProgramInfoLog(program); |
| 4785 | error("Error in program linking: " + lastError); |
| 4786 | gl.deleteProgram(program); |
| 4787 | return null; |
| 4788 | } |
| 4789 | |
| 4790 | var positionLocation = gl.getAttribLocation(program, "a_position"); |
| 4791 | var texCoordLocation = gl.getAttribLocation(program, "a_texCoord"); |
| 4792 | |
| 4793 | var texCoordBuffer = gl.createBuffer(); |
| 4794 | gl.bindBuffer(gl.ARRAY_BUFFER, texCoordBuffer); |
| 4795 | 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); |
| 4796 | gl.enableVertexAttribArray(texCoordLocation); |
| 4797 | gl.vertexAttribPointer(texCoordLocation, 2, gl.FLOAT, false, 0, 0); |
| 4798 | |
| 4799 | // Create a buffer for the position of the rectangle corners. |
| 4800 | var buffer = gl.createBuffer(); |
| 4801 | gl.bindBuffer(gl.ARRAY_BUFFER, buffer); |
| 4802 | gl.enableVertexAttribArray(positionLocation); |
| 4803 | gl.vertexAttribPointer(positionLocation, 2, gl.FLOAT, false, 0, 0); |
| 4804 | |
| 4805 | return program; |
| 4806 | } |
| 4807 | |
| 4808 | function createShader(gl, script, type) { |
| 4809 | var shader = gl.createShader(type); |
nothing calls this directly
no test coverage detected