Class EmulGLCanvas
java.lang.Object
java.awt.Component
java.awt.Canvas
jgl.wt.awt.GLCanvas
org.jzy3d.plot3d.rendering.canvas.EmulGLCanvas
- All Implemented Interfaces:
ImageObserver, MenuContainer, Serializable, Accessible, IMonitorable, ICanvas, IScreenCanvas
This canvas allows rendering charts with jGL as OpenGL backend which perform in CPU.
The below schema depicts how this canvas does painting :


- Author:
- Martin Pernollet
- See Also:
-
Nested Class Summary
Nested classes/interfaces inherited from class Canvas
Canvas.AccessibleAWTCanvasNested classes/interfaces inherited from class Component
Component.AccessibleAWTComponent, Component.BaselineResizeBehavior, Component.BltBufferStrategy, Component.FlipBufferStrategy -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected IAnimatorprotected List<ICanvasListener> protected booleanset to TRUE to show in console events of the component (to debug GLUT)protected ExecutorServiceprotected AWTImageExporterprotected AtomicBooleanprotected doubleprotected Monitorprotected EmulGLPainterprotected intprotected Fontprotected booleanset to TRUE to overlay performance info on top left cornerprotected TicTocstatic final booleanSpecify actual way of forcing repaint if true : manual if false : trigger component.resize event to force resize + view.render + glFlush + swap imageprotected ViewFields inherited from class Component
accessibleContext, BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENTFields inherited from interface ICanvas
ALLOW_WATCH_PIXEL_SCALE, LAST_RENDER_TIME_UNDEFINEDFields inherited from interface ImageObserver
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH -
Constructor Summary
ConstructorsConstructorDescriptionEmulGLCanvas(IChartFactory factory, Scene scene, Quality quality) Initialize a canvas for rendering 3D -
Method Summary
Modifier and TypeMethodDescriptionvoidvoidaddCanvasListener(ICanvasListener listener) voidvoidprotected voidvoiddisplay()voiddispose()voiddoMotion(int x, int y) Handle mouse events emitted by GLUT.voiddoRender()Triggers an atomic rendering of a frame, measure rendering performance and update the status of rendering (active or not).voiddoReshape(int w, int h) Handle resize events emitted by GLUT.protected voidfirePixelScaleChanged(double pixelScaleX, double pixelScaleY) voidCan be used to update image if camera has changed position.getLabel()doubleintintgetView()protected voidinit(int width, int height) Equivalent to registering a Renderer3d in native canvas.protected voidinitGLUT(int width, int height) Configure GLUT callback which yield to the below flow diagram
protected voidinitView()booleanbooleanisNative()booleanprotected voidmonitorRenderingTime(Monitor monitor, double mili) voidThis overrides theGLCanvashenceCanvasmethods to copy the image of the 3D scene as generated whileGL.glFlush().protected voidpaintProfileInfo(BufferedImage glImage) Render profile on top of an image (probably the image of the GL scene) previously collected whilePainting profile info is synchronized on the profile info list to ensure it is not modified while drawing (which occurs if synchronization is disabled).invalid @link
{@link EmulGLCanvas#doRender().voidvoidprintCallTrace(int from, String filterLine) Print stack but drops any class.method name not containing the filter (in case it is not null)protected voidvoidprotected voidprofile(double mili) protected voidDraw a 2d text at the given positionprotected voidvoidremoveCanvasListener(ICanvasListener listener) voidvoidprotected voidvoidscreenshot(File file) voidsetDebugEvents(boolean debugEvents) voidsetExporter(AWTImageExporter exporter) voidsetPixelScale(float[] scale) voidsetProfileDisplayMethod(boolean profileDisplayMethod) protected booleanprotected voidRegisterEmulGLPainter.Methods inherited from class GLCanvas
getGL, getGLU, getGLUT, getPixelScaleFromG2D, glut_enable_events, setGL, updateMethods inherited from class Canvas
addNotify, createBufferStrategy, createBufferStrategy, getAccessibleContext, getBufferStrategyMethods inherited from class Component
action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, addPropertyChangeListener, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, bounds, checkImage, checkImage, coalesceEvents, contains, contains, createImage, createImage, createVolatileImage, createVolatileImage, deliverEvent, disable, disableEvents, dispatchEvent, doLayout, enable, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getAlignmentX, getAlignmentY, getBackground, getBaseline, getBaselineResizeBehavior, getBounds, getBounds, getColorModel, getComponentAt, getComponentAt, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeys, getFocusTraversalKeysEnabled, getFont, getFontMetrics, getForeground, getGraphics, getGraphicsConfiguration, getHeight, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getListeners, getLocale, getLocation, getLocation, getLocationOnScreen, getMaximumSize, getMinimumSize, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPeer, getPreferredSize, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getSize, getToolkit, getTreeLock, getWidth, getX, getY, gotFocus, handleEvent, hasFocus, hide, imageUpdate, inside, invalidate, isBackgroundSet, isCursorSet, isDisplayable, isDoubleBuffered, isEnabled, isFocusable, isFocusCycleRoot, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isOpaque, isPreferredSizeSet, isShowing, isValid, isVisible, keyDown, keyUp, layout, list, list, list, list, list, locate, location, lostFocus, minimumSize, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, paramString, postEvent, preferredSize, prepareImage, prepareImage, print, printAll, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processKeyEvent, processMouseEvent, processMouseMotionEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removeNotify, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, repaint, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, reshape, resize, resize, revalidate, setBackground, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setEnabled, setFocusable, setFocusTraversalKeys, setFocusTraversalKeysEnabled, setFont, setForeground, setIgnoreRepaint, setLocale, setLocation, setLocation, setMaximumSize, setMinimumSize, setName, setPreferredSize, setSize, setSize, setVisible, show, show, size, toString, transferFocus, transferFocusBackward, transferFocusUpCycle, validateMethods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface ICanvas
setPixelScale
-
Field Details
-
TO_BE_CHOOSEN_REPAINT_WITH_FLUSH
public static final boolean TO_BE_CHOOSEN_REPAINT_WITH_FLUSHSpecify actual way of forcing repaint- if true : manual
- if false : trigger component.resize event to force resize + view.render + glFlush + swap image
- See Also:
-
view
-
painter
-
animator
-
canvasListeners
-
isRenderingFlag
-
debugEvents
protected boolean debugEventsset to TRUE to show in console events of the component (to debug GLUT) -
profileDisplayMethod
protected boolean profileDisplayMethodset to TRUE to overlay performance info on top left corner -
profileDisplayTimer
-
profileDisplayFont
-
profileDisplayCount
protected int profileDisplayCount -
profileInfo
-
monitor
-
exporter
-
executor
-
lastRenderingTimeMs
protected double lastRenderingTimeMs
-
-
Constructor Details
-
EmulGLCanvas
Initialize a canvas for rendering 3D
-
-
Method Details
-
processEvent
- Overrides:
processEventin classGLCanvas
-
shouldPrintEvent
-
init
protected void init(int width, int height) Equivalent to registering a Renderer3d in native canvas. -
initView
protected void initView() -
initGLUT
protected void initGLUT(int width, int height) Configure GLUT callback which yield to the below flow diagram
-
paint
This overrides theGLCanvashenceCanvasmethods to copy the image of the 3D scene as generated whileGL.glFlush(). It is called when the application needs to paint the canvas, which assume a rendering has already been process bydoRender()which produce an image that the canvas can use for fast pixel swap.doRender()on its side is triggered whenGLUTthinks it is relevant. This may occur becauseEmulGLCanvastriggered aevent.invalid reference
ComponentEvent.COMPONENT_RESIZED -
display
public void display()- Specified by:
displayin interfaceIScreenCanvas
-
forceRepaint
public void forceRepaint()Can be used to update image if camera has changed position. (usually called byView.shoot()) Warning if this is invoked by a thread external to AWT, this may redraw GL while GL is already used by AWT, which would turn GL into an inconsistent state.- Specified by:
forceRepaintin interfaceICanvas- Overrides:
forceRepaintin classGLCanvas
-
doRender
public void doRender()Triggers an atomic rendering of a frame, measure rendering performance and update the status of rendering (active or not). This method is callback registered in withGLUT.glutDisplayFunc(Consumer)which will be called when OpenGL need to update display. OpenGL updates as soon as the component that GLUT listen to (which is thisEmulGLCanvastriggers aevent. Performance measurement can be seen on screen ifinvalid reference
ComponentEvent.COMPONENT_RESIZEDsetProfileDisplayMethod(boolean)was set to true OR can be collected by aMonitordefined byadd(Monitor). This method is synchronized to prevent multiple concurrent calls to doDisplay which might make jGL get crazy with GL state consistency : GL states must be consistent during a complete rendering pass, and should not be modified by a second rendering pass in the middle of the first one. Consistency may be on drawing a complete geometry in appropriate order (glBegin, glVertex, glEnd) or in the way OpenGL 1.0 fixed pipeline is cleanly handled. In addition, the display method has aisRenderingFlagso that external components may known that the canvas is currently rendering or not. This allows ignoring a rendering query in case the canvas is not ready for working. This is different from making use ofsynchronized(which lead to a queue of calls to be resolved) in that one may simply not append work to do according to the status of the canvas. -
printCallTrace
public void printCallTrace() -
printCallTrace
Print stack but drops any class.method name not containing the filter (in case it is not null) -
getLastRenderingTimeMs
public double getLastRenderingTimeMs()- Specified by:
getLastRenderingTimeMsin interfaceICanvas
-
getIsRenderingFlag
-
doReshape
public void doReshape(int w, int h) Handle resize events emitted by GLUT.GLUT.processComponentEvent(ComponentEvent)is calling reshape handler (this method) THEN the display handler (} andinvalid @link
{@link #doDisplay()), so this method will only inform {@link GLUTViewthat window size changed. -
doMotion
public void doMotion(int x, int y) Handle mouse events emitted by GLUT. Most probably not registered as mouse already handled by Jzy3D. -
screenshot
- Specified by:
screenshotin interfaceICanvas
-
screenshot
- Specified by:
screenshotin interfaceICanvas- Throws:
IOException
-
updatePainterWithGL
protected void updatePainterWithGL()RegisterEmulGLPainter. -
getView
-
getRendererWidth
public int getRendererWidth()- Specified by:
getRendererWidthin interfaceICanvas
-
getRendererHeight
public int getRendererHeight()- Specified by:
getRendererHeightin interfaceICanvas
-
getDimension
- Specified by:
getDimensionin interfaceICanvas
-
dispose
-
setPixelScale
public void setPixelScale(float[] scale) - Specified by:
setPixelScalein interfaceICanvas
-
getPixelScale
- Specified by:
getPixelScalein interfaceICanvas
-
getPixelScaleJVM
- Specified by:
getPixelScaleJVMin interfaceICanvas
-
getAnimation
- Specified by:
getAnimationin interfaceIScreenCanvas
-
addMouseController
- Specified by:
addMouseControllerin interfaceICanvas
-
removeMouseController
- Specified by:
removeMouseControllerin interfaceICanvas
-
addKeyController
- Specified by:
addKeyControllerin interfaceICanvas
-
removeKeyController
- Specified by:
removeKeyControllerin interfaceICanvas
-
addCanvasListener
- Specified by:
addCanvasListenerin interfaceICanvas
-
removeCanvasListener
- Specified by:
removeCanvasListenerin interfaceICanvas
-
getCanvasListeners
- Specified by:
getCanvasListenersin interfaceICanvas
-
firePixelScaleChanged
protected void firePixelScaleChanged(double pixelScaleX, double pixelScaleY) -
getDebugInfo
- Specified by:
getDebugInfoin interfaceICanvas
-
paintProfileInfo
Render profile on top of an image (probably the image of the GL scene) previously collected whilePainting profile info is synchronized on the profile info list to ensure it is not modified while drawing (which occurs if synchronization is disabled). Despite we did not observed any lag due to such rendering, it is important to keep in mind that displaying profile information requires a synchronized access to this info list which is on the other side synchronized to protect exporting rendering info of the last call toinvalid @link
{@link EmulGLCanvas#doRender().doRender(). -
profile
protected void profile(double mili) -
profile
-
profileClear
protected void profileClear() -
isDebugEvents
public boolean isDebugEvents() -
setDebugEvents
public void setDebugEvents(boolean debugEvents) -
isProfileDisplayMethod
public boolean isProfileDisplayMethod() -
setProfileDisplayMethod
public void setProfileDisplayMethod(boolean profileDisplayMethod) -
checkAlphaChannelOfColorBuffer
-
printCountGLBegin
protected void printCountGLBegin() -
resetCountGLBegin
protected void resetCountGLBegin() -
getFullname
- Specified by:
getFullnamein interfaceIMonitorable
-
getLabel
- Specified by:
getLabelin interfaceIMonitorable
-
add
- Specified by:
addin interfaceIMonitorable
-
monitorRenderingTime
-
getExporter
-
setExporter
-
isNative
-