How to explicitly free an MGraphics instance?


    Dec 13 2012 | 1:15 pm
    Hi list,
    With the example code below I am loading (large) Jitter matrices and rendering these with mgraphics within jsui. My issue is, I can't find a way to free the MGraphics instance created by the mginstance function - every time i call it Max's active memory allocation increases until it crashes.
    How can I explicitly call a release on this MG instance (a kind of equivalent to the freepeer() method for jitter matrices)? I could not find a clue in the docs or DG's tutorials.
    Any tip or orientation would be much appreciated.
    Best, Frédéric
    mgraphics.init(); mgraphics.relative_coords = 0; mgraphics.autofill = 0;
    var inputMatrix = new JitterMatrix(); var mg; var outImage = null; var width = (box.rect[2] - box.rect[0]); // clips to 2048 var height = (box.rect[3] - box.rect[1]); // clips to 2048
    function load(val) // jxf.jit file as input { inputMatrix.read(val); }
    function mginstance() { mg = new MGraphics(width, height);
    mg.image_surface_draw(inputMatrix.name); outImage = new Image(mg);
    bang(); }
    function bang() { mgraphics.redraw(); }
    function paint() { mgraphics.image_surface_draw(outImage); }

    • Dec 14 2012 | 2:01 pm
      Ok, my problem was badly stated - I am now getting my matrix directly into an Image object without creating an MG instance for that purpose (appropriate code below for those interested). I had got confused (mainly) by the fact that the .fromnamedmatrix method on Image does not work for float32 matrices but only for 4 plane char, which I should have guessed earlier.
      Best, Frédéric
      mgraphics.init(); mgraphics.relative_coords = 0; mgraphics.autofill = 0;
      var inputMatrix = new JitterMatrix(); var outImage = new Image();
      function importmatrix(val) { inputMatrix.read(val); // must be 4 plane char outImage.fromnamedmatrix(inputMatrix.name); bang(); }
      function bang() { mgraphics.redraw(); }
      function paint() { mgraphics.image_surface_draw(outImage); }