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 booleanprotected panamagl.GLEventListenerprotected panamagl.offscreen.OffscreenRendererprotected SWTImageprotected PixelScaleSupportSWTprotected 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 TypeMethodDescriptionvoidaddPixelScaleListener(panamagl.canvas.PixelScaleListener l) voiddisplay()panamagl.opengl.GLContextpanamagl.offscreen.FBOgetFBO()panamagl.canvas.GLCanvas.FlipgetFlip()panamagl.opengl.GLgetGL()panamagl.GLEventListenerintpanamagl.performance.RenderCounterpanamagl.offscreen.OffscreenRendererintintpanamagl.canvas.PixelScaleTest/diagnostics access to the pixel-scale support.panamagl.Image<?> intgetWidth()booleanbooleanbooleanprotected voidRe-resize the FBO with new physical dimensions when the pixel scale changes.protected 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()).voidremovePixelScaleListener(panamagl.canvas.PixelScaleListener l) voidrepaint()voidsetFBO(panamagl.offscreen.FBO fbo) voidsetFlip(panamagl.canvas.GLCanvas.Flip flip) voidsetGLEventListener(panamagl.GLEventListener listener) Does not call display().voidsetHiDPIEnabled(boolean enabled) 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 -
pixelScaleSupport
-
hiDPIEnabled
protected volatile boolean hiDPIEnabled
-
-
Constructor Details
-
GLCanvasSWT
public GLCanvasSWT(org.eclipse.swt.widgets.Composite parent, int style, panamagl.factory.PanamaGLFactory factory)
-
-
Method Details
-
onPixelScaleChanged
protected void onPixelScaleChanged()Re-resize the FBO with new physical dimensions when the pixel scale changes. -
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) -
getPixelScale
public panamagl.canvas.PixelScale getPixelScale()- Specified by:
getPixelScalein interfacepanamagl.canvas.GLCanvas
-
getPhysicalWidth
public int getPhysicalWidth()- Specified by:
getPhysicalWidthin interfacepanamagl.canvas.GLCanvas
-
getPhysicalHeight
public int getPhysicalHeight()- Specified by:
getPhysicalHeightin interfacepanamagl.canvas.GLCanvas
-
addPixelScaleListener
public void addPixelScaleListener(panamagl.canvas.PixelScaleListener l) - Specified by:
addPixelScaleListenerin interfacepanamagl.canvas.GLCanvas
-
removePixelScaleListener
public void removePixelScaleListener(panamagl.canvas.PixelScaleListener l) - Specified by:
removePixelScaleListenerin interfacepanamagl.canvas.GLCanvas
-
isHiDPIEnabled
public boolean isHiDPIEnabled()- Specified by:
isHiDPIEnabledin interfacepanamagl.canvas.GLCanvas
-
setHiDPIEnabled
public void setHiDPIEnabled(boolean enabled) - Specified by:
setHiDPIEnabledin interfacepanamagl.canvas.GLCanvas
-
getPixelScaleSupport
Test/diagnostics access to the pixel-scale support.
-