Skip to content
Snippets Groups Projects
Select Git revision
  • 07e2095c68a5081b3c49d5e663ef3fc202465446
  • master default protected
2 results

intro.md

Blame
  • Forked from algorithmique / cours
    Source project has a limited visibility.
    cuon-utils.js 3.03 KiB
    // cuon-utils.js (c) 2012 kanda and matsuda
    /**
     * Create a program object and make current
     * @param gl GL context
     * @param vshader a vertex shader program (string)
     * @param fshader a fragment shader program (string)
     * @return true, if the program object was created and successfully made current 
     */
    function initShaders(gl, vshader, fshader) {
      var program = createProgram(gl, vshader, fshader);
      if (!program) {
        console.log('Failed to create program');
        return false;
      }
    
      gl.useProgram(program);
      gl.program = program;
    
      return true;
    }
    
    /**
     * Create the linked program object
     * @param gl GL context
     * @param vshader a vertex shader program (string)
     * @param fshader a fragment shader program (string)
     * @return created program object, or null if the creation has failed
     */
    function createProgram(gl, vshader, fshader) {
      // Create shader object
      var vertexShader = loadShader(gl, gl.VERTEX_SHADER, vshader);
      var fragmentShader = loadShader(gl, gl.FRAGMENT_SHADER, fshader);
      if (!vertexShader || !fragmentShader) {
        return null;
      }
    
      // Create a program object
      var program = gl.createProgram();
      if (!program) {
        return null;
      }
    
      // Attach the shader objects
      gl.attachShader(program, vertexShader);
      gl.attachShader(program, fragmentShader);
    
      // Link the program object
      gl.linkProgram(program);
    
      // Check the result of linking
      var linked = gl.getProgramParameter(program, gl.LINK_STATUS);
      if (!linked) {
        var error = gl.getProgramInfoLog(program);
        console.log('Failed to link program: ' + error);
        gl.deleteProgram(program);
        gl.deleteShader(fragmentShader);
        gl.deleteShader(vertexShader);
        return null;
      }
      return program;
    }
    
    /**
     * Create a shader object
     * @param gl GL context
     * @param type the type of the shader object to be created
     * @param source shader program (string)
     * @return created shader object, or null if the creation has failed.
     */
    function loadShader(gl, type, source) {
      // Create shader object
      var shader = gl.createShader(type);
      if (shader == null) {
        console.log('unable to create shader');
        return null;
      }
    
      // Set the shader program
      gl.shaderSource(shader, source);
    
      // Compile the shader
      gl.compileShader(shader);
    
      // Check the result of compilation
      var compiled = gl.getShaderParameter(shader, gl.COMPILE_STATUS);
      if (!compiled) {
        var error = gl.getShaderInfoLog(shader);
        console.log('Failed to compile shader: ' + error);
        gl.deleteShader(shader);
        return null;
      }
    
      return shader;
    }
    
    /** 
     * Initialize and get the rendering for WebglInstance
     * @param canvas <cavnas> element
     * @param opt_debug flag to initialize the context for debugging
     * @return the rendering context for WebglInstance
     */
    function getWebGLContext(canvas, opt_debug) {
      // Get the rendering context for WebglInstance
      var gl = WebGLUtils.setupWebGL(canvas);
      if (!gl) return null;
    
      // if opt_debug is explicitly false, create the context for debugging
      if (arguments.length < 2 || opt_debug) {
        gl = WebGLDebugUtils.makeDebugContext(gl);
      }
    
      return gl;
    }