JSFiddle - React, Tailwind, and code Playground
HTML
<script src="https://www.dropbox.com/s/m6ydli04zmndnk7/sylvester.js?dl=1"></script>
<script src="https://www.dropbox.com/s/p5396sbgfrs3js8/glUtils.js?dl=1"></script>
<script src="sylvester.js" type="text/javascript"></script>
<script src="glUtils.js" type="text/javascript"></script>
<script id="shader-fs" type="x-shader/x-fragment">
varying highp vec2 vTextureCoord;
uniform sampler2D uSampler;
void main(void)
{
gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.s, vTextureCoord.t));
}
</script>
<script id="shader-vs" type="x-shader/x-vertex">
attribute vec3 aVertexPosition;
attribute vec2 aTextureCoord;
uniform mat4 uMVMatrix;
uniform mat4 uPMatrix;
varying highp vec2 vTextureCoord;
void main(void)
{
gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);
vTextureCoord = aTextureCoord;
}
</script>
<body onload="start()">
<canvas id="glCanvas" width="500" height="500">
</canvas>
</body>
</html>
JavaScript
var gl;
var squareVerticesBuffer;
var squareVerticesColorBuffer;
var coinVerticesIndexBuffer;
var mvMatrix;
var shaderProgram;
var vertexPositionAttribute;
var perspectiveMatrix;
var N_vertices = 0;
var N_indices = 0;
var coinImage;
var coinTexture;
var coinVerticesTextureCoordBuffer;
var textureCoordAttribute;
var rotation = 0.0;
var lastSquareUpdateTime = 0;
function initWebGL(canvas)
{
gl = null;
gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl');
return gl;
}
function initShaders()
{
var fragmentShader = getShader(gl, 'shader-fs');
var vertexShader = getShader(gl, 'shader-vs');
shaderProgram = gl.createProgram();
gl.attachShader(shaderProgram, vertexShader);
gl.attachShader(shaderProgram, fragmentShader);
gl.linkProgram(shaderProgram);
if (!gl.getProgramParameter(shaderProgram, gl.LINK_STATUS)) {
alert("Unable to initialize the shader program: " + gl.getProgramInfoLog(shaderProgram));
}
gl.useProgram(shaderProgram);
vertexPositionAttribute = gl.getAttribLocation(shaderProgram, 'aVertexPosition');
gl.enableVertexAttribArray(vertexPositionAttribute);
textureCoordAttribute = gl.getAttribLocation(shaderProgram, 'aTextureCoord');
gl.enableVertexAttribArray(textureCoordAttribute);
}
function getShader(gl, id, type)
{
var shaderScript, theSource, currentChild, shader;
shaderScript = document.getElementById(id);
if(!shaderScript) return null;
theSource = shaderScript.text;
if(!type)
{
if(shaderScript.type == 'x-shader/x-fragment')
{
type = gl.FRAGMENT_SHADER;
}
else if(shaderScript.type == 'x-shader/x-vertex')
{
type = gl.VERTEX_SHADER;
}
else
{
return null;
}
}
shader = gl.createShader(type);
gl.shaderSource(shader, theSource);
gl.compileShader(shader);
//TODO: check for...