(gl, vertexScript, fragScript)
| 4704 | } |
| 4705 | |
| 4706 | function createProgram(gl, vertexScript, fragScript) { |
| 4707 | var vertexShader = createShader(gl, vertexScript, gl.VERTEX_SHADER); |
| 4708 | var fragShader = createShader(gl, fragScript, gl.FRAGMENT_SHADER); |
| 4709 | |
| 4710 | var program = gl.createProgram(); |
| 4711 | gl.attachShader(program, vertexShader); |
| 4712 | gl.attachShader(program, fragShader); |
| 4713 | |
| 4714 | gl.linkProgram(program); |
| 4715 | |
| 4716 | var linked = gl.getProgramParameter(program, gl.LINK_STATUS); |
| 4717 | if (!linked) { |
| 4718 | var lastError = gl.getProgramInfoLog(program); |
| 4719 | error("Error in program linking: " + lastError); |
| 4720 | gl.deleteProgram(program); |
| 4721 | return null; |
| 4722 | } |
| 4723 | |
| 4724 | var positionLocation = gl.getAttribLocation(program, "a_position"); |
| 4725 | var texCoordLocation = gl.getAttribLocation(program, "a_texCoord"); |
| 4726 | |
| 4727 | var texCoordBuffer = gl.createBuffer(); |
| 4728 | gl.bindBuffer(gl.ARRAY_BUFFER, texCoordBuffer); |
| 4729 | 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); |
| 4730 | gl.enableVertexAttribArray(texCoordLocation); |
| 4731 | gl.vertexAttribPointer(texCoordLocation, 2, gl.FLOAT, false, 0, 0); |
| 4732 | |
| 4733 | // Create a buffer for the position of the rectangle corners. |
| 4734 | var buffer = gl.createBuffer(); |
| 4735 | gl.bindBuffer(gl.ARRAY_BUFFER, buffer); |
| 4736 | gl.enableVertexAttribArray(positionLocation); |
| 4737 | gl.vertexAttribPointer(positionLocation, 2, gl.FLOAT, false, 0, 0); |
| 4738 | |
| 4739 | return program; |
| 4740 | } |
| 4741 | |
| 4742 | function createShader(gl, script, type) { |
| 4743 | var shader = gl.createShader(type); |
nothing calls this directly
no test coverage detected