Package panamagl.canvas.swt
Class GLCanvasSWT
java.lang.Object
org.eclipse.swt.widgets.Widget
org.eclipse.swt.widgets.Control
org.eclipse.swt.widgets.Scrollable
org.eclipse.swt.widgets.Composite
org.eclipse.swt.widgets.Canvas
panamagl.canvas.swt.GLCanvasSWT
- All Implemented Interfaces:
org.eclipse.swt.graphics.Drawable,panamagl.canvas.GLCanvas
public class GLCanvasSWT
extends org.eclipse.swt.widgets.Canvas
implements panamagl.canvas.GLCanvas
An SWT
Canvas that renders OpenGL offscreen via FBO and paints the result as an image.
Unlike GLCanvasSWT_direct which uses SWT's native GLCanvas with a real GL context, this
canvas uses the OffscreenRenderer pipeline (FBO rendering + pixel readback) consistent
with the Swing and JavaFX offscreen canvases.
The rendering pipeline is:
display()triggersOffscreenRenderer.onDisplay(panamagl.canvas.GLCanvas, panamagl.GLEventListener)ThreadRedirect_SWTroutes to the appropriate thread- FBO render +
FBOReader_SWT.read(panamagl.offscreen.FBO, panamagl.opengl.GL)produces aSWTImage setScreenshot(panamagl.Image<?>)stores the image and callsControl.redraw()- SWT Paint event draws the
ImageDatato screen viaGC
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprotected classTheGLCanvasSWT.ResizeHandlerwill trigger rendering on the main macOS thread and then trigger repaint by the thread selected byThreadRedirectattached to theOffscreenRenderer.Nested classes/interfaces inherited from interface panamagl.canvas.GLCanvas
panamagl.canvas.GLCanvas.Flip -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected org.eclipse.swt.graphics.Colorprotected panamagl.performance.RenderCounterprotected panamagl.factory.PanamaGLFactoryprotected panamagl.canvas.GLCanvas.Flipprotected panamagl.GLEventListenerprotected panamagl.offscreen.OffscreenRendererprotected SWTImageprotected AtomicBooleanFields inherited from class org.eclipse.swt.widgets.Composite
embeddedHandleFields inherited from class org.eclipse.swt.widgets.Widget
handle -
Constructor Summary
ConstructorsConstructorDescriptionGLCanvasSWT(org.eclipse.swt.widgets.Composite parent, int style, panamagl.factory.PanamaGLFactory factory) -
Method Summary
Modifier and TypeMethodDescriptionvoiddisplay()panamagl.opengl.GLContextpanamagl.offscreen.FBOgetFBO()panamagl.canvas.GLCanvas.FlipgetFlip()panamagl.opengl.GLgetGL()panamagl.GLEventListenerintpanamagl.performance.RenderCounterpanamagl.offscreen.OffscreenRendererpanamagl.Image<?> intgetWidth()booleanbooleanprotected voidpaintComponentNow(org.eclipse.swt.widgets.Display display, org.eclipse.swt.graphics.GC gc) Render GL image and stop counting elapsed time for rendering (started atdisplay()).voidrepaint()voidsetFBO(panamagl.offscreen.FBO fbo) voidsetFlip(panamagl.canvas.GLCanvas.Flip flip) voidsetGLEventListener(panamagl.GLEventListener listener) Does not call display().voidsetOffscreenRenderer(panamagl.offscreen.OffscreenRenderer offscreen) protected voidsetRendering(boolean value) voidsetScreenshot(panamagl.Image<?> image) Update the image to be displayed.Methods inherited from class org.eclipse.swt.widgets.Canvas
drawBackground, getCaret, getIME, scroll, setCaret, setFont, setIMEMethods inherited from class org.eclipse.swt.widgets.Composite
changed, checkSubclass, drawBackground, getBackgroundMode, getChildren, getLayout, getLayoutDeferred, getTabList, isLayoutDeferred, layout, layout, layout, layout, layout, setBackgroundMode, setFocus, setLayout, setLayoutDeferred, setTabList, toStringMethods inherited from class org.eclipse.swt.widgets.Scrollable
computeTrim, getClientArea, getHorizontalBar, getScrollbarsMode, getVerticalBar, setScrollbarsModeMethods inherited from class org.eclipse.swt.widgets.Control
addControlListener, addDragDetectListener, addFocusListener, addGestureListener, addHelpListener, addKeyListener, addMenuDetectListener, addMouseListener, addMouseMoveListener, addMouseTrackListener, addMouseWheelListener, addPaintListener, addTouchListener, addTraverseListener, computeSize, computeSize, dragDetect, dragDetect, forceFocus, getAccessible, getBackground, getBackgroundImage, getBorderWidth, getBounds, getCursor, getDragDetect, getEnabled, getFont, getForeground, getLayoutData, getLocation, getMenu, getMonitor, getOrientation, getParent, getRegion, getShell, getSize, getTextDirection, getToolTipText, getTouchEnabled, getVisible, internal_dispose_GC, internal_new_GC, isAutoScalable, isEnabled, isFocusControl, isReparentable, isVisible, moveAbove, moveBelow, pack, pack, print, redraw, redraw, removeControlListener, removeDragDetectListener, removeFocusListener, removeGestureListener, removeHelpListener, removeKeyListener, removeMenuDetectListener, removeMouseListener, removeMouseMoveListener, removeMouseTrackListener, removeMouseWheelListener, removePaintListener, removeTouchListener, removeTraverseListener, requestLayout, setBackground, setBackgroundImage, setBounds, setBounds, setCapture, setCursor, setDragDetect, setEnabled, setForeground, setLayoutData, setLocation, setLocation, setMenu, setOrientation, setParent, setRedraw, setRegion, setSize, setSize, setTextDirection, setToolTipText, setTouchEnabled, setVisible, toControl, toControl, toDisplay, toDisplay, traverse, traverse, traverse, updateMethods inherited from class org.eclipse.swt.widgets.Widget
addDisposeListener, addListener, addTypedListener, checkWidget, dispose, getData, getData, getDisplay, getListeners, getStyle, getTypedListeners, isAutoDirection, isDisposed, isListening, notifyListeners, removeDisposeListener, removeListener, removeListener, removeTypedListener, reskin, setData, setDataMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface panamagl.canvas.GLCanvas
isVisible
-
Field Details
-
factory
protected panamagl.factory.PanamaGLFactory factory -
listener
protected panamagl.GLEventListener listener -
offscreen
protected panamagl.offscreen.OffscreenRenderer offscreen -
out
-
counter
protected panamagl.performance.RenderCounter counter -
rendering
-
flip
protected panamagl.canvas.GLCanvas.Flip flip -
color
protected org.eclipse.swt.graphics.Color color
-
-
Constructor Details
-
GLCanvasSWT
public GLCanvasSWT(org.eclipse.swt.widgets.Composite parent, int style, panamagl.factory.PanamaGLFactory factory)
-
-
Method Details
-
paintComponentNow
protected void paintComponentNow(org.eclipse.swt.widgets.Display display, org.eclipse.swt.graphics.GC gc) Render GL image and stop counting elapsed time for rendering (started atdisplay()). Equivalent to GLCanvasSwing.paintComponent(..) -
display
public void display()- Specified by:
displayin interfacepanamagl.canvas.GLCanvas
-
isInitialized
public boolean isInitialized()- Specified by:
isInitializedin interfacepanamagl.canvas.GLCanvas
-
isRendering
public boolean isRendering()- Specified by:
isRenderingin interfacepanamagl.canvas.GLCanvas
-
setRendering
protected void setRendering(boolean value) -
getGLEventListener
public panamagl.GLEventListener getGLEventListener()- Specified by:
getGLEventListenerin interfacepanamagl.canvas.GLCanvas
-
setGLEventListener
public void setGLEventListener(panamagl.GLEventListener listener) Does not call display(). Should be called explicitely.- Specified by:
setGLEventListenerin interfacepanamagl.canvas.GLCanvas
-
getGL
public panamagl.opengl.GL getGL()- Specified by:
getGLin interfacepanamagl.canvas.GLCanvas
-
getContext
public panamagl.opengl.GLContext getContext()- Specified by:
getContextin interfacepanamagl.canvas.GLCanvas
-
getMonitoring
public panamagl.performance.RenderCounter getMonitoring()- Specified by:
getMonitoringin interfacepanamagl.canvas.GLCanvas
-
getWidth
public int getWidth()- Specified by:
getWidthin interfacepanamagl.canvas.GLCanvas
-
getHeight
public int getHeight()- Specified by:
getHeightin interfacepanamagl.canvas.GLCanvas
-
repaint
public void repaint()- Specified by:
repaintin interfacepanamagl.canvas.GLCanvas
-
setScreenshot
public void setScreenshot(panamagl.Image<?> image) Update the image to be displayed. Should not be used by anything else than offscreen rendering. TODO : make method name clearer and visibility hidden?- Specified by:
setScreenshotin interfacepanamagl.canvas.GLCanvas
-
getScreenshot
public panamagl.Image<?> getScreenshot()- Specified by:
getScreenshotin interfacepanamagl.canvas.GLCanvas
-
getOffscreenRenderer
public panamagl.offscreen.OffscreenRenderer getOffscreenRenderer()- Specified by:
getOffscreenRendererin interfacepanamagl.canvas.GLCanvas
-
setOffscreenRenderer
public void setOffscreenRenderer(panamagl.offscreen.OffscreenRenderer offscreen) - Specified by:
setOffscreenRendererin interfacepanamagl.canvas.GLCanvas
-
getFlip
public panamagl.canvas.GLCanvas.Flip getFlip()- Specified by:
getFlipin interfacepanamagl.canvas.GLCanvas
-
setFlip
public void setFlip(panamagl.canvas.GLCanvas.Flip flip) - Specified by:
setFlipin interfacepanamagl.canvas.GLCanvas
-
getFBO
public panamagl.offscreen.FBO getFBO() -
setFBO
public void setFBO(panamagl.offscreen.FBO fbo)
-