Advertisement
Guest User

Untitled

a guest
Nov 21st, 2014
182
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
HTML 5.23 KB | None | 0 0
  1. <!DOCTYPE html>
  2. <html lang="en">
  3.     <head>
  4.         <meta charset="utf-8" />
  5.         <title>Clear "canvas"</title>
  6.     </head>
  7.     <body onload="main()">
  8.         <canvas id="webglCanvas" width="400" height="400">
  9.             Please use a browser that supports "canvas"
  10.         </canvas>
  11.         <div>
  12.             Texture: <select id="textureSelector">
  13.                 <option value="sky.jpg">Sky</option>
  14.                 <option value="lion.png">Lion</option>
  15.                 <option value="pattern.jpg">Pattern</option>
  16.             </select>
  17.         </div>
  18.         <script src="sylvester.js"></script>
  19.         <script src="glUtils.js"></script>
  20.         <script src="webgl-utils.js"></script>
  21.         <script src="webgl-debug.js"></script>
  22.         <script src="cuon-utils.js"></script>
  23.         <script>
  24.             // Vertex shader program
  25.             var VSHADER_SOURCE =
  26.                 'attribute vec3 a_Position;\n' +
  27.                 'attribute vec2 a_TexCoord;\n' +               
  28.                 'varying vec2 v_TexCoord;\n' +
  29.                 'void main() {\n' +
  30.                 ' gl_Position = vec4(a_Position, 1.0);\n' +
  31.                 ' v_TexCoord = a_TexCoord;\n' +
  32.                 '}\n';
  33.            
  34.             // Fragment shader program
  35.             var FSHADER_SOURCE =
  36.                 'precision highp float;\n' +
  37.                 'uniform sampler2D u_Sampler;\n' +
  38.                 'varying vec2 v_TexCoord;\n' +
  39.                 'void main() {\n' +
  40.                 ' gl_FragColor = texture2D(u_Sampler, vec2(v_TexCoord.s, v_TexCoord.t));\n' +
  41.                 '}\n';
  42.            
  43.             // Global gl variable
  44.             var gl;
  45.            
  46.             // Global shader variables
  47.             var a_Position;
  48.             var a_TexCoord;
  49.            
  50.             // Global buffers
  51.             var verticesBuffer;
  52.             var triangleFacesBuffer;
  53.             var textureCoordBuffer;
  54.            
  55.             // Global texture
  56.             var texture;
  57.            
  58.            
  59.             function main() {          
  60.                 // Get the rendering context for WebGL
  61.                
  62.                 initializeWebGL();
  63.                 initializeShaders();
  64.                 initializeBuffers();
  65.                
  66.                 //   Initialize html elements and set all events
  67.                
  68.                 // Image selector
  69.                 var imageSel = document.getElementById("textureSelector");
  70.                 imageSel.onchange = function(){loadImage(imageSel)};
  71.             }
  72.            
  73.             function initializeWebGL() {
  74.                 // Get the rendering context for WebGL
  75.                 var canvas = document.getElementById("webglCanvas");
  76.                 gl = canvas.getContext("webgl");
  77.                 if (!gl) {
  78.                     console.log('Failed to get the rendering context for WebGL');
  79.                     return;
  80.                 }
  81.                
  82.                 // Clear and init canvas
  83.                 gl.clearColor(0.0, 0.0, 0.0, 1.0);
  84.                 gl.enable(gl.DEPTH_TEST);
  85.                 gl.depthFunc(gl.LEQUAL);
  86.                 gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
  87.             }
  88.            
  89.             function initializeShaders() {
  90.                 // Initialize shaders through cuon-utils.js
  91.                 if (!initShaders(gl, VSHADER_SOURCE, FSHADER_SOURCE)) {
  92.                     console.log("Failed to initialize shaders.");
  93.                     return null;
  94.                 }
  95.                
  96.                 // Fetch and enable shader attributes
  97.                 a_Position = gl.getAttribLocation(gl.program, "a_Position");
  98.                 gl.enableVertexAttribArray(a_Position);
  99.                
  100.                 a_TexCoord = gl.getAttribLocation(gl.program, "a_TexCoord");
  101.                 gl.enableVertexAttribArray(a_TexCoord);
  102.             }
  103.            
  104.             function initializeBuffers() {
  105.                 // Vertex positional data
  106.                 var vertices = [
  107.                     1.0,  1.0,  //Top right corner
  108.                     -1.0, 1.0,  //Top left corner
  109.                     1.0,  -1.0, //Bottom right corner
  110.                     -1.0, -1.0  //Bottom left corner
  111.                 ];
  112.            
  113.                 verticesBuffer = gl.createBuffer();
  114.                 gl.bindBuffer(gl.ARRAY_BUFFER, verticesBuffer);
  115.                 gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);
  116.                
  117.                
  118.                 // Texture positional data         
  119.                 var textureCoords = [
  120.                     0.0,  0.0,  //Bottom left corner
  121.                     1.0,  0.0,  //Bottom right corner
  122.                     1.0,  1.0,  //Top right corner
  123.                     0.0,  1.0   //Top left corner
  124.                 ];
  125.  
  126.                 textureCoordBuffer  = gl.createBuffer();
  127.                 gl.bindBuffer(gl.ARRAY_BUFFER, textureCoordBuffer );
  128.                 gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(textureCoords), gl.STATIC_DRAW);
  129.                
  130.                 var triangleFaces = [0, 1, 2];
  131.  
  132.                 triangleFacesBuffer  = gl.createBuffer();
  133.                 gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, triangleFacesBuffer );
  134.                 gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array(triangleFaces), gl.STATIC_DRAW);
  135.             }
  136.            
  137.             function render() {
  138.                 // Clear canvas
  139.                 gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);       
  140.                
  141.                 // Activate and bind texture
  142.                 gl.activeTexture(gl.TEXTURE0);
  143.                 gl.bindTexture(gl.TEXTURE_2D, texture);
  144.                 gl.uniform1i(gl.getUniformLocation(gl.program, "u_Sampler"), 0);
  145.                
  146.                 // Bind and point vertex data buffer to a_Position
  147.                 gl.bindBuffer(gl.ARRAY_BUFFER, verticesBuffer);
  148.                 gl.vertexAttribPointer(a_Position, 2, gl.FLOAT, false, 0, 0);
  149.                
  150.                 // Bind triangle faces data
  151.                 gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, triangleFacesBuffer);
  152.                
  153.                 // Draw elements
  154.                 gl.drawElements(gl.TRIANGLES, 3, gl.UNSIGNED_SHORT, 0);
  155.             }
  156.  
  157.            
  158.             // Texture functions
  159.  
  160.             function loadImage(imageSelector) {
  161.                 texture = gl.createTexture();
  162.                 var image = new Image();
  163.                 image.onload = loadTexture(gl, image);
  164.                 image.src = imageSelector.value;
  165.             }
  166.            
  167.             function loadTexture(gl, image) {
  168.                 gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true);
  169.                 gl.activeTexture(gl.TEXTURE0);
  170.                 gl.bindTexture(gl.TEXTURE_2D, texture);
  171.                 gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGB, gl.RGB, gl.UNSIGNED_BYTE, image);
  172.                 gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
  173.                 gl.bindTexture(gl.TEXTURE_2D, null);
  174.                
  175.                 render();
  176.             }
  177.         </script>
  178.     </body>
  179. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement