Toggle navigation
Sign Up
Log In
Explore
Works
Folders
Tools
Collections
Artists
Groups
Groups
Topics
Tasks
Tasks
Jobs
Teams
Jobs
Recommendation
More Effects...
JS
"use strict"; var canvas = null; var gl = null; var lastUpdate = null; var timer = 0.0; var time = null; var resolutionLocation = null; var vertexShader = null; var fragmentShader = null; var stats = new Stats(); var initialize = function initialize() { //initializeStats(); initialize3DCanvas(); initializeShaders(); initializeProgram(); initializeModel(); initializeResize(); animate(); }; var initializeStats = function initializeStats() { stats.showPanel(0); document.body.appendChild(stats.domElement); }; var initialize3DCanvas = function initialize3DCanvas() { canvas = document.getElementById("canvas"); gl = canvas.getContext("webgl") || canvas.getContext('experimental-webgl'); if (gl) { gl.viewport(0, 0, canvas.width, canvas.height); gl.enable(gl.DEPTH_TEST); gl.depthFunc(gl.LEQUAL); gl.clearColor(1.0, 1.0, 1.0, 1.0); gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); } }; var initializeModel = function initializeModel() { // create rectangle var buffer = gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER, buffer); gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([-1.0, -1.0, 1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -1.0, 1.0, 1.0]), gl.STATIC_DRAW); // vertex data var positionLocation = gl.getAttribLocation(program, "a_position"); gl.enableVertexAttribArray(positionLocation); gl.vertexAttribPointer(positionLocation, 2, gl.FLOAT, false, 0, 0); // passing resolution to the shader resolutionLocation = gl.getUniformLocation(program, "u_resolution"); gl.uniform2f(resolutionLocation, canvas.width, canvas.height); //init time time = gl.getUniformLocation(program, "time"); lastUpdate = new Date().getTime(); }; var createShader = function createShader(gl, source, type) { var shader = gl.createShader(type); source = document.getElementById(source).text; gl.shaderSource(shader, source); gl.compileShader(shader); return shader; }; var initializeShaders = function initializeShaders() { vertexShader = createShader(gl, 'vert-shader', gl.VERTEX_SHADER); fragmentShader = createShader(gl, 'frag-shader', gl.FRAGMENT_SHADER); }; var program = null; var initializeProgram = function initializeProgram() { program = gl.createProgram(); gl.attachShader(program, vertexShader); gl.attachShader(program, fragmentShader); gl.linkProgram(program); gl.useProgram(program); if (!gl.getProgramParameter(program, gl.LINK_STATUS)) { var info = gl.getProgramInfoLog(program); throw "Could not compile WebGL program. \n\n" + info; } else { gl.useProgram(program); } }; var animate = function animate() { stats.begin(); var currentTime = new Date().getTime(); var timeSinceLastUpdate = currentTime - lastUpdate; lastUpdate = currentTime; render(timeSinceLastUpdate); stats.end(); window.requestAnimationFrame(animate); }; var render = function render(timeDelta) { timer += timeDelta ? timeDelta / 1000 : 0.05; gl.uniform1fv(time, [timer]); gl.drawArrays(gl.TRIANGLES, 0, 6); }; var initializeResize = function initializeResize() { var height = document.body.clientHeight; var width = document.body.clientWidth; canvas.width = width * window.devicePixelRatio; canvas.height = height * window.devicePixelRatio; canvas.style.width = width + "px"; canvas.style.height = height + "px"; gl.viewport(0, 0, canvas.width, canvas.height); gl.uniform2f(resolutionLocation, canvas.width, canvas.height); }; window.onresize = function () { initializeResize(); }; initialize();
CSS
html, body { width: 100%; height: 100%; margin: 0; overflow: hidden; } #canvas { position: absolute; width: 100%; height: 100%; top: 0; bottom: 0; left: 0; right: 0; }
HTML
Join Effecthub.com
Working with Global Gaming Artists and Developers!
Login
Sign Up
Or Login with Your Email Address:
Email
Password
Remember
Or Sign Up with Your Email Address:
Your Email
This field must contain a valid email
Set Password
Password should be at least 1 character
Stay informed via email