Class OffscreenCanvas

java.lang.Object
org.jzy3d.plot3d.rendering.canvas.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 Details

    • view

      protected View view
    • renderer

      protected Renderer3d renderer
    • offscreenDrawable

      protected com.jogamp.opengl.GLOffscreenAutoDrawable offscreenDrawable
    • capabilities

      protected com.jogamp.opengl.GLCapabilities capabilities
    • canvasListeners

      protected List<ICanvasListener> canvasListeners
  • Constructor Details

    • OffscreenCanvas

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

    • 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 (
      invalid @link
      {@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
    • resize

      public void resize(int width, int height)
    • getCapabilities

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

      public double getLastRenderingTimeMs()
      Specified by:
      getLastRenderingTimeMs in interface ICanvas
    • 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
      • screenshot

        public void screenshot(File file) throws IOException
        Specified by:
        screenshot in interface ICanvas
        Throws:
        IOException
      • 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
      • getRenderer

        public Renderer3d getRenderer()
        Specified by:
        getRenderer in interface INativeCanvas
      • getDimension

        public Dimension getDimension()
        Specified by:
        getDimension in interface ICanvas
      • getDebugInfo

        public String getDebugInfo()
        Specified by:
        getDebugInfo 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
      • addCanvasListener

        public void addCanvasListener(ICanvasListener listener)
        Specified by:
        addCanvasListener in interface ICanvas
      • removeCanvasListener

        public void removeCanvasListener(ICanvasListener listener)
        Specified by:
        removeCanvasListener in interface ICanvas
      • getCanvasListeners

        public List<ICanvasListener> getCanvasListeners()
        Specified by:
        getCanvasListeners 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