Changeset 20584


Ignore:
Timestamp:
04/30/16 12:16:16 (9 years ago)
Author:
dlcheng
Message:

CHG (javascript): Resolving framerate issues.

Location:
issm/trunk-jpl/src/m/plot
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/m/plot/plot_manager.js

    r20579 r20584  
    1010        checkplotoptions(md,options);
    1111        //get data to be displayed
    12         var data=options.getfieldvalue('data');
    13        
    14         //TODO: Move into webgl.js?
    15         function initCanvas() {
    16                 //standard plot: initialize open Gl for each canvas, if needed:
    17                 var canvas = $('<div><canvas id="'+options.getfieldvalue('canvasid')+'" width="'+options.getfieldvalue('canvassize',480)+'" height="'+options.getfieldvalue('canvassize',480)+'"></canvas></div>)')
    18                 canvas.css({'height':String(options.getfieldvalue('canvassize',480)+'px')});
    19                 if ($('#'+options.getfieldvalue('canvasid')).length == 0) {
    20                         canvas.appendTo('body');
    21                 }
    22                 canvas=document.getElementById(options.getfieldvalue('canvasid'));
    23                 //Initialize the buffer structure when first data is drawn to mesh:
    24                 canvas.requestDrawing = false;
    25                 var gl = canvas.gl;
    26                 if (!canvas.hasOwnProperty("nodes")) {
    27                         canvas.nodes = {};
    28                         canvas.datalength = 0;
    29                         canvas.requestDrawing = true;
    30                         //Initialize the GL context:
    31                         gl = initWebGL(canvas,options);
    32                         if (!gl) {
    33                                 throw Error("plotmodel error message: could not initialize open Gl!");
    34                         }
    35                         canvas.gl = gl;
    36                 }
    37                 canvas.nodes["data"+String(++canvas.datalength)] = Node(gl,options);
    38                 return canvas;
    39         }
    40         var canvas = initCanvas();
     12        var data = options.getfieldvalue('data');
     13        var canvas = initCanvas(options);
     14        var gl = canvas.gl;
     15        //TODO: each plot_ should add their node to the canvas.node array
    4116
    4217        //figure out if this is a special plot
  • issm/trunk-jpl/src/m/plot/plot_mesh.js

    r20579 r20584  
    135135        node["arrays"] = [vertices, colors, indices];
    136136        node["buffers"] = initBuffers(gl, node["arrays"]);
    137         if (canvas.requestDrawing)      draw(gl,options,canvas);
    138137}
  • issm/trunk-jpl/src/m/plot/plot_overlay.js

    r20579 r20584  
    164164        /*Initalize buffers: */
    165165        node["arrays"] = [vertices, texcoords, indices];
    166         node["buffers"] = initBuffers(gl,node["arrays"]);
    167         if (canvas.requestDrawing)      draw(gl,options,canvas);
     166        node["buffers"] = initBuffers(gl,node["arrays"]);       
    168167}
  • issm/trunk-jpl/src/m/plot/plot_quiver.js

    r20565 r20584  
    105105                       
    106106                        xyz2 = vec3.fromValues(vx[i], vy[i], 0.0);
    107                         magnitude = 100.0; //mesh resolution
     107                        magnitude = 100000.0; //mesh resolution
    108108                        vec3.normalize(direction, xyz2);
    109109                        vec3.scale(direction, direction, magnitude);
     
    128128        node["arrays"] = [vertices, colors];
    129129        node["buffers"] = initBuffers(gl, node["arrays"]);
    130         if (canvas.requestDrawing)      draw(gl,options,canvas);
    131130}
  • issm/trunk-jpl/src/m/plot/plot_unit.js

    r20579 r20584  
    273273                        throw Error(sprintf("%s%i%s\n",'case ',datatype,' not supported'));
    274274        }
    275        
    276         if (canvas.requestDrawing) draw(gl,options,canvas);
    277275}
  • issm/trunk-jpl/src/m/plot/plotmodel.js

    r19929 r20584  
    3434        //go through subplots
    3535        if (numberofplots){
    36                 //Clear all canvas nodes
     36                //Reinitialize all canvases
    3737                for (var i=0;i<numberofplots;i++){
    38                         var canvas=document.getElementById(options.list[i].getfieldvalue('canvasid'));
    39                         if (canvas && canvas.nodes) {
    40                                 delete canvas.nodes;
    41                         }
     38                        document.getElementById(options.list[i].getfieldvalue('canvasid')).initialized = false;
    4239                }
    4340                //Go through all data plottable and close window if an error occurs
  • issm/trunk-jpl/src/m/plot/webgl.js

    r20566 r20584  
    11/*This is where we have all our webgl relevant functionality for the plotting routines: */
    2 //{{{ GL Initialization
     2//{{{ Canvas Initialization
     3function initCanvas(options) {
     4        //Initialize open Gl for each canvas, if needed:
     5        var canvas=document.getElementById(options.getfieldvalue('canvasid'));
     6        if (!canvas) {
     7                canvas = $('<div><canvas id="'+options.getfieldvalue('canvasid')+'" width="'+options.getfieldvalue('canvassize',480)+'" height="'+options.getfieldvalue('canvassize',480)+'"></canvas></div>)')
     8                canvas.css({'height':String(options.getfieldvalue('canvassize',480)+'px')});
     9                canvas.appendTo('body');
     10        }
     11        if (!canvas.initialized) {
     12                canvas.gl = initWebGL(canvas,options);
     13                canvas.nodes = {};
     14                canvas.datalength = 0;
     15                if (canvas.drawHandler) window.cancelAnimationFrame(canvas.drawHandler);
     16                draw(canvas,options);
     17                canvas.initialized = true;
     18        }
     19        canvas.nodes["data"+String(++canvas.datalength)] = Node(canvas.gl,options);
     20        return canvas;
     21}
    322function initWebGL(canvas,options) { //{{{
    4         gl = null;
     23        var gl;
    524
    625        try {
     
    1332        if (!gl) {
    1433                alert("Unable to initialize WebGL. Your browser may not support it.");
    15                 gl = null;
    1634        }
    1735               
     
    3452        // Add context state variables
    3553        //TODO:Group variables in objects for organization and naming
     54        canvas.gl = gl;
    3655        canvas.zoomBounds = options.getfieldvalue('zoombounds',[0.001,100.0]);
    3756        canvas.zoomFactor = clamp(options.getfieldvalue('zoomfactor',1.0), canvas.zoomBounds[0], canvas.zoomBounds[1]);
     
    408427        //Apply projection matrix to get camera matrix
    409428        mat4.multiply(canvas.cameraMatrix, pMatrix, vMatrix);
    410 //      canvas.cameraMatrix = mat4.create();
    411429}//}}}
    412 function drawSceneGraphNode(gl,canvas,node) { //{{{
     430function drawSceneGraphNode(canvas,node) { //{{{
    413431        if (!node["enabled"]) {
    414432                return;
     
    419437                }
    420438        }
     439        var gl = canvas.gl;
    421440        bindAttributes(gl, node["shader"], node["buffers"]);
    422441        var mvpMatrix = mat4.create();
     
    458477        }
    459478} //}}}
    460 function draw(gl,options,canvas,nodes) { //{{{
     479function draw(canvas,options) { //{{{
     480        if (!canvas.nodes) {
     481                canvas.drawHandler = window.requestAnimationFrame(function(time) {draw(canvas,options)});
     482                return;
     483        }
    461484        // Ensure canvas and gl viewport sizes are the same
    462485        var displayWidth  = canvas.clientWidth;
     
    465488                canvas.width  = displayWidth;
    466489                canvas.height = displayHeight;
    467                 gl.viewport(0, 0, canvas.width, canvas.height);
     490                canvas.gl.viewport(0, 0, canvas.width, canvas.height);
    468491        }
    469492       
     
    473496
    474497        // Set clear color to black, fully opaque
    475         var backgroundcolor=new RGBColor(options.getfieldvalue('backgroundcolor','lightcyan'));
     498        var gl = canvas.gl;
     499        var backgroundcolor = new RGBColor(options.getfieldvalue('backgroundcolor','lightcyan'));
    476500        if(backgroundcolor.ok){
    477501                gl.clearColor(backgroundcolor.r/255.0, backgroundcolor.g/255.0, backgroundcolor.b/255.0, 1.0);
     
    483507        for (var node in nodes) {
    484508                if (nodes[node]["texture"] && !nodes[node]["texture"]["isLoaded"]) {
    485                         window.requestAnimationFrame(function(time) {draw(gl,options,canvas,nodes)});
     509                        canvas.drawHandler = window.requestAnimationFrame(function(time) {draw(canvas,options)});
    486510                        return;
    487511                }
     
    489513        // Else, clear the color as well as the depth buffer for new frame
    490514        gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
    491 
    492         window.requestAnimationFrame(function(time) {draw(gl,options,canvas,nodes)});
    493515       
    494516        updateCameraMatrix(canvas);
     
    498520                for (var node in nodes) {
    499521                        if (nodes[node]["drawOrder"] == i) {
    500                                 drawSceneGraphNode(gl, canvas, nodes[node]);
    501                         }
    502                 }
    503         }
     522                                drawSceneGraphNode(canvas,nodes[node]);
     523                        }
     524                }
     525        }
     526        canvas.drawHandler = window.requestAnimationFrame(function(time) {draw(canvas,options)});
    504527} //}}}
    505528//}}}
Note: See TracChangeset for help on using the changeset viewer.