Class OffscreenCanvas

  • All Implemented Interfaces:
    ICanvas, INativeCanvas

    public class OffscreenCanvas
    extends Object
    implements ICanvas, INativeCanvas
    An ICanvas implementation able to render the chart in an offscreen canvas, meaning no frame or GUI is needed to get a chart. Subsequently, one will wish to generate chart images by calling:
     
     chart.screenshot();
     
     
    Note that the GLCapabilities are modified while an instance of OffscreenCanvas is modified.
    Author:
    Nils Hoffman, Martin Pernollet
    • Field Detail

      • view

        protected View view
      • offscreenDrawable

        protected com.jogamp.opengl.GLOffscreenAutoDrawable offscreenDrawable
      • capabilities

        protected com.jogamp.opengl.GLCapabilities capabilities
    • Constructor Detail

      • OffscreenCanvas

        public OffscreenCanvas​(IChartFactory factory,
                               Scene scene,
                               Quality quality,
                               com.jogamp.opengl.GLCapabilities capabilities,
                               int width,
                               int height)
    • Method Detail

      • initBuffer

        public void initBuffer​(com.jogamp.opengl.GLCapabilities capabilities,
                               int width,
                               int height)
        Initialize a GLOffscreenAutoDrawable to the desired dimensions Might be a GLPixelBuffer or GLFBODrawable depending on the provided GLCapabilities ({@link GLCapabilities#setPBuffer(true)} to enable PBuffer). Can be called several time to reset buffer dimensions.
        Parameters:
        capabilities - with a setOnscreen flag set to true, otherwise forced to true.
        width - image width
        height - image width
      • getCapabilities

        public com.jogamp.opengl.GLCapabilities getCapabilities()
      • setPixelScale

        public void setPixelScale​(float[] scale)
        Description copied from interface: ICanvas
        Defines pixel scale. On MacOS Retina displays, a X*Y chart uses a (X*2)*(Y*2) viewport. This makes some calculation based on viewport (such as Camera.screenToModel(IPainter, org.jzy3d.maths.Coord3d) output wrong result. When running on Retina display, those two options fixed buggy mouse selections on Retina:
        • setPixelScale(new float[]{0.5f,0.5f})
        • setPixelScale(new float[] { ScalableSurface.IDENTITY_PIXELSCALE, ScalableSurface.IDENTITY_PIXELSCALE })
          Specified by:
          setPixelScale in interface ICanvas
        • getPixelScale

          public Coord2d getPixelScale()
          Description copied from interface: ICanvas
          Provide pixel scale as feasible by the Hardware, OS, and JVM, independently of what was asked by ICanvas.setPixelScale(float[]). Hence the two functions may not be consistent together.
          Specified by:
          getPixelScale in interface ICanvas
        • getPixelScaleJVM

          public Coord2d getPixelScaleJVM()
          Description copied from interface: ICanvas
          Provide pixel scale as considered feasible by the JVM.
          Specified by:
          getPixelScaleJVM in interface ICanvas
        • getDrawable

          public com.jogamp.opengl.GLOffscreenAutoDrawable getDrawable()
          Description copied from interface: INativeCanvas
          Returns the GLDrawable associated with the canvas
          Specified by:
          getDrawable in interface INativeCanvas
        • dispose

          public void dispose()
          Description copied from interface: ICanvas
          Performs all required cleanup when destroying a Canvas.
          Specified by:
          dispose in interface ICanvas
        • forceRepaint

          public void forceRepaint()
          Description copied from interface: ICanvas
          Invoked when a user requires the Canvas to be repainted (e.g. a non 3d layer has changed).
          Specified by:
          forceRepaint in interface ICanvas
        • screenshot

          public com.jogamp.opengl.util.texture.TextureData screenshot()
          Description copied from interface: INativeCanvas
          Returns an image with the current renderer's size
          Specified by:
          screenshot in interface ICanvas
          Specified by:
          screenshot in interface INativeCanvas
        • getView

          public View getView()
          Provide a reference to the View that renders into this canvas.
          Specified by:
          getView in interface ICanvas
        • getRendererWidth

          public int getRendererWidth()
          Description copied from interface: ICanvas
          Returns the renderer's width, i.e. the display width.
          Specified by:
          getRendererWidth in interface ICanvas
        • getRendererHeight

          public int getRendererHeight()
          Description copied from interface: ICanvas
          Returns the renderer's height, i.e. the display height.
          Specified by:
          getRendererHeight in interface ICanvas
        • addMouseController

          public void addMouseController​(Object o)
          Description copied from interface: ICanvas
          A generic interface for mouse listener to remain Windowing toolkit independant. Implementation of this method should simply cast the input assuming it will correspond to canvas-compatible mouse listener.
          Specified by:
          addMouseController in interface ICanvas
        • addKeyController

          public void addKeyController​(Object o)
          Description copied from interface: ICanvas
          A generic interface for mouse listener to remain Windowing toolkit independant. Implementation of this method should simply cast the input assuming it will correspond to canvas-compatible mouse listener.
          Specified by:
          addKeyController in interface ICanvas
        • removeMouseController

          public void removeMouseController​(Object o)
          Description copied from interface: ICanvas
          A generic interface for key listener to remain Windowing toolkit independant. Implementation of this method should simply cast the input assuming it will correspond to canvas-compatible key listener.
          Specified by:
          removeMouseController in interface ICanvas
        • removeKeyController

          public void removeKeyController​(Object o)
          Description copied from interface: ICanvas
          A generic interface for key listener to remain Windowing toolkit independant. * Implementation of this method should simply cast the input assuming it will correspond to canvas-compatible key listener.
          Specified by:
          removeKeyController in interface ICanvas
        • firePixelScaleChanged

          protected void firePixelScaleChanged​(double pixelScaleX,
                                               double pixelScaleY)
        • isNative

          public boolean isNative()
          Description copied from interface: ICanvas
          Return true if the canvas renders GL with GPU, false if renders GL using CPU executed Java code.
          Specified by:
          isNative in interface ICanvas