java.lang.Object
de.grogra.imp.awt.ViewComponentAdapter
de.grogra.gl.GLDisplay
- All Implemented Interfaces:
- ViewComponent,- RenderState,- ComponentWrapper,- Selectable,- Disposable,- ImageObserver,- Runnable,- EventListener,- javax.media.opengl.GLEventListener
public class GLDisplay
extends ViewComponentAdapter
implements javax.media.opengl.GLEventListener, RenderState, ImageObserver, Selectable
This class is responsible for drawing all visible objects in the GroIMP3D
 editor. It uses OpenGL to provide hardware accelerated drawing.
 
 To access OpenGL, the library JOGL has to be installed. JOGL is available
 from: https://jogl.dev.java.net/
 Download the jogl.jar (contains the Java API for JOGL) and the
 jogl-natives-*.jar (contains the native library for your system).
 When starting GroIMP, make sure that the jogl.jar is in your classpath
 and the libraries (.dll or .so) from the jogl-natives-*.jar are in your
 search path for system libraries.
 
 Making those files available can be done by calling GroIMP like this:
 \code
 (linux version)
 javaw -cp core.jar:jogl.jar -Djava.library.path=/usr/lib/jogl de.grogra.pf.boot.Main
 (windows version)
 javaw -cp core.jar;jogl.jar -Djava.library.path=c:\java\jogl de.grogra.pf.boot.Main
 \endcode
 
 OpenGL acts as a state machine. To provide a consistent state for every
 drawing function, some rules were created. There are state variables that
 are expected to have a certain value when a drawing function is entered.
 Those state variables are:
  - MatrixMode set to GL_MODELVIEW
  - ShadeModel set to GL_SMOOTH
  - GL_DEPTH_TEST enabled
  - GL_LIGHTING enabled
  - GL_TEXTURE_2D disabled
  - GL_CULL_FACE enabled
  - GL_COLOR_MATERIAL enabled
  - ColorMaterial is set to GL_FRONT_AND_BACK and GL_AMBIENT_AND_DIFFUSE
  - GL_NORMALIZE is enabled
  - PolygonMode is set to GL_FRONT_AND_BACK and GL_LINE
  - GL_ALPHA_TEST enabled
  - AlphaFunc set to GL_GREATER and 0.1f
  - GL_LIGHT_MODEL_TWO_SIDE is set to 0
 
 If a drawing function changes some of those state variables, it has to
 reset them to their previous value upon return.
 
 Other state variables are not expected to have a defined value when a
 drawing function is called. Those state variables are:
  - all texture related state for TEXTURE UNIT 0
  - the contents of the matrices MODELVIEW and TEXTURE
 
 All state variables not mentioned above should be reset to their default
 value as defined by OpenGL when they were changed.
 
 This class also provides an implementation of LOD (level of detail). For
 now lod is only applied to the sphere and frustum primitives. While the
 sphere uses the lod to select the appropriate display list, the frustum
 uses it to calculate the number of generated segments when drawing.
- Author:
- nmi
- 
Field SummaryFieldsModifier and TypeFieldDescriptionprotected intDisplay list number for supershapes.static final I18NBundlefinal Poolstatic final Typestatic final EnumerationTypeEnumeration of the available JOGL display mode (viewmode).Fields inherited from class de.grogra.imp.awt.ViewComponentAdapterDISPOSED, DISPOSING, RENDER_OVERLAY, RENDER_OVERLAY_FINISHED, RENDERED_IMAGE, RENDERING, RENDERING_OVERLAY, REPAINT_MASKFields inherited from interface java.awt.image.ImageObserverABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTHFields inherited from interface de.grogra.imp3d.RenderStateCURRENT_HIGHLIGHTFields inherited from interface de.grogra.imp.ViewComponentALL, CHANGED, MIN_USER_FLAG, SCENE, SELECTION, TOOLS
- 
Constructor SummaryConstructors
- 
Method SummaryModifier and TypeMethodDescriptionprotected voidvoiddisplay(javax.media.opengl.GLAutoDrawable d) voiddisplayChanged(javax.media.opengl.GLAutoDrawable d, boolean modeChanged, boolean deviceChanged) protected voidvoiddispose()voiddrawBox(float halfWidth, float halfLength, float height, Shader s, int highlight, boolean asWireframe, Matrix4d t) Draw a box from -axis to +axis using the transformation matrix t.voiddrawFrustum(float length, float baseRadius, float topRadius, boolean baseClosed, boolean topClosed, float scaleV, Shader s, int highlight, boolean asWireframe, Matrix4d t) Can be used to draw cylinders and the like.voiddrawFrustumIrregular(float length, int sectorCount, float[] baseRadii, float[] topRadii, boolean baseClosed, boolean topclosed, float scaleV, Shader s, int highlight, boolean asWireframe, Matrix4d t) voiddrawLamella(float halfWidth, float halfLength, float height, float a, float b, Shader s, int highlight, boolean asWireframe, Matrix4d t) voidConnect the two points with a line and apply the transformation matrix.voiddrawParallelogram(float length, Vector3f axis, float scaleU, float scaleV, Shader s, int highlight, boolean asWireframe, Matrix4d t) voidDraw an x/y plane.voidDraw a single point with the specified pixel size and color.voiddrawPointCloud(float[] locations, float pointSize, Tuple3f color, int highlight, Matrix4d t) Draw a set of points.voiddrawPolygons(Polygonizable pz, Object obj, boolean asNode, Shader s, int highlight, boolean asWireframe, Matrix4d t) voiddrawPrismRectangular(float y, float xPos, float xNeg, float zPos, float zNeg, int highlight, boolean asWireframe, Matrix4d t) voiddrawRectangle(int x, int y, int w, int h, Tuple3f color) Draw a rectangle from (x/y) to (x+w/y+h) with the specified color.voiddrawRectangle(com.sun.opengl.util.j2d.Overlay overlay, int x, int y, int w, int h, Tuple3f color) voiddrawSphere(float radius, Shader s, int highlight, boolean asWireframe, Matrix4d t) Draw a sphere with the specified radius around the origin (0/0/0).voiddrawSphereSegmentSolid(float radius, float theta1, float theta2, float phi, Shader s, int highlight, boolean asWireframe, Matrix4d t) Draw a sphere segment with the specified radius, theta1, theta2, and phi, around the origin (0/0/0).voiddrawString(int x, int y, String text, Font font, Tuple3f color) Draw a string with the selected font and color at location (x/y).voiddrawSupershape(float a, float b, float m1, float n11, float n12, float n13, float m2, float n21, float n22, float n23, Shader s, int highlight, boolean asWireframe, Matrix4d t) Draw a supershape around the origin (0/0/0).voiddrawTextBlock(String caption, Font font, float depth, Shader s, int highlight, boolean asWireframe, Matrix4d t) protected intdrawWithDisplayList(int index, javax.media.opengl.GL gl, int levels, float lod) floatestimateScaleAt(Tuple3f point) floatestimateScaleAt(Tuple3f point, Matrix4d t) Returns the size of an object of size 1.0 (in object coordinates) on the screen (in pixels).voidfillRectangle(int x, int y, int w, int h, Tuple3f color) Draw a filled rectangle from (x/y) to (x+w/y+h) with the specified color.intprotected ImageObserverReturns an observer which receives the information about the rendered image from aRenderer.getPool()booleangetWindowPos(Tuple3f origin, Tuple2f out) Computes the window coordinates in pixels of a location in the current object coordinates.booleanimageUpdate(Image img, int infoflags, int x, int y, int width, int height) This class implements the ImageObserver interface to be notified about changes of the background image.voidinit(javax.media.opengl.GLAutoDrawable d) Initialise opengl state and set default values.protected voidinitRender(int flags) Performs initialization tasks in preparation for rendering.voidinitView(View view, EventListener listener) Initializes this component.protected voidinvokeRender(int flags) Invoked to perform rendering.static booleanisExtensionSupported(javax.media.opengl.GL gl, String extension) voidmakeSnapshot(ObjectConsumer<? super RenderedImage> callback) Instructs the view component to create a snapshot.protected voidoptionValueChanged(String name, Object value) protected voidrender(int flags) Render the scene graph.voidreshape(javax.media.opengl.GLAutoDrawable d, int x, int y, int w, int h) voidupdateResolution(int r) Methods inherited from class de.grogra.imp.awt.ViewComponentAdaptercheckRepaint, checkRepaintWrapException, disposeRenderer, disposeView, getColor, getColor, getDisplayResolution, getFactory, getFontMetrics, getGlobalLOD, getIntColor, getInterruptedException, getOption, getRenderGraphState, getView, initFactory, installListeners, invokeRenderSync, isRenderingOverlay, render, render, renderUninterruptibly, repaint, run, toSelection, uninstallListenersMethods inherited from class java.lang.Objectclone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface de.grogra.imp3d.RenderStategetFontMetrics, getRenderGraphStateMethods inherited from interface de.grogra.pf.ui.edit.SelectabletoSelection
- 
Field Details- 
I18N
- 
VIEWMODE_TYPEEnumeration of the available JOGL display mode (viewmode). This is used by the configuration Dialog of OpenGL.
- 
pool
- 
dlSupershapeprotected int dlSupershapeDisplay list number for supershapes. There will be display lists generated for numbers dlSupershape to (dlSupershape + LOD_LEVELS - 1). A value of 0 for dlSupershape means, that no display list is available.
- 
RENDER_MODE
 
- 
- 
Constructor Details- 
GLDisplaypublic GLDisplay()
 
- 
- 
Method Details- 
getObserverForRendererDescription copied from class:ViewComponentAdapterReturns an observer which receives the information about the rendered image from aRenderer. The returned observer has to manage the drawing of the (partially) rendered image on the view component.- Specified by:
- getObserverForRendererin class- ViewComponentAdapter
- Returns:
- an observer receiving the image, or nullif this is not supported by this component
 
- 
imageUpdateThis class implements the ImageObserver interface to be notified about changes of the background image.- Specified by:
- imageUpdatein interface- ImageObserver
 
- 
makeSnapshotDescription copied from interface:ViewComponentInstructs the view component to create a snapshot. The created snapshot has to be delivered to the providedcallbackas an instance ofRenderedImage. This may happen asynchronously, i.e., in an arbitrary thread.- Specified by:
- makeSnapshotin interface- ViewComponent
- Parameters:
- callback- callback which asynchronously receives the snapshot
 
- 
initRenderprotected void initRender(int flags) Description copied from class:ViewComponentAdapterPerforms initialization tasks in preparation for rendering. This method is invoked byViewComponentAdapter.run()in thisViewComponent's own thread.- Specified by:
- initRenderin class- ViewComponentAdapter
- Parameters:
- flags- combination of bit masks
 
- 
invokeRenderprotected void invokeRender(int flags) Description copied from class:ViewComponentAdapterInvoked to perform rendering. This method is invoked byViewComponentAdapter.run()in thisViewComponent's own thread. Its sole task is to invokeViewComponentAdapter.invokeRenderSync(int)in the rendering thread (which may be thisViewComponent's thread, the AWT-thread, or another thread, depending on the implementation) in a write-protected context. The invocation has to be synchronously, i.e., if it is in another thread, the current thread has to wait untilViewComponentAdapter.invokeRenderSync(int)has completed.- Specified by:
- invokeRenderin class- ViewComponentAdapter
- Parameters:
- flags- the flags to pass to- ViewComponentAdapter.invokeRenderSync(int)
 
- 
displaypublic void display(javax.media.opengl.GLAutoDrawable d) - Specified by:
- displayin interface- javax.media.opengl.GLEventListener
 
- 
disposepublic void dispose()- Specified by:
- disposein interface- Disposable
- Overrides:
- disposein class- ViewComponentAdapter
 
- 
getComponent- Specified by:
- getComponentin interface- ComponentWrapper
 
- 
getView3D
- 
initViewDescription copied from interface:ViewComponentInitializes this component. This method sets theviewwithin which this view component is used to display the graph. It also sets an event listener. this has to be informed of mouse and keys events within the view component by implementations of this method.- Specified by:
- initViewin interface- ViewComponent
- Overrides:
- initViewin class- ViewComponentAdapter
- Parameters:
- view- the containing view
- listener- mouse and key events will be reported to this listener
 
- 
updateResolutionpublic void updateResolution(int r) - Specified by:
- updateResolutionin interface- ViewComponent
- Overrides:
- updateResolutionin class- ViewComponentAdapter
 
- 
renderRender the scene graph. This function will traverse the scene graph and render all objects of it. These steps are performed:
 - get GL
- if GL changed, delete textures
- clear the frame buffer
- draw background image (i.e. from povray)
- clear depth buffer
- set projection matrix
- check if the scene graph changed since last render, than remember that and perform an update of the light sources
- walk graph first time, visit every object, update lights if necessary
- if lights have changed, draw the scene again
- walk graph second time, visit highlighted objects
- disable lighting and depth buffer
- walk graph third time, visit tools (i.e. arrows to move objects)
- enable lighting and depth buffer
 - Specified by:
- renderin class- ViewComponentAdapter
- Parameters:
- flags- combination of bit masks
- Throws:
- InterruptedException- if the rendering has been interrupted
 
- 
displaySelectionBoxprotected void displaySelectionBox()
- 
clearSelectionBoxprotected void clearSelectionBox()
- 
initpublic void init(javax.media.opengl.GLAutoDrawable d) Initialise opengl state and set default values. All functions can assume those values being set upon call (i.e. MatrixMode as GL_MODELVIEW). If a function changes any of those values, it has to restore its state before calling another function or exiting.- Specified by:
- initin interface- javax.media.opengl.GLEventListener
 
- 
reshapepublic void reshape(javax.media.opengl.GLAutoDrawable d, int x, int y, int w, int h) - Specified by:
- reshapein interface- javax.media.opengl.GLEventListener
 
- 
displayChangedpublic void displayChanged(javax.media.opengl.GLAutoDrawable d, boolean modeChanged, boolean deviceChanged) - Specified by:
- displayChangedin interface- javax.media.opengl.GLEventListener
 
- 
getPool- Specified by:
- getPoolin interface- RenderState
 
- 
getCurrentShader- Specified by:
- getCurrentShaderin interface- RenderState
 
- 
getCurrentHighlightpublic int getCurrentHighlight()- Specified by:
- getCurrentHighlightin interface- RenderState
 
- 
estimateScaleAt- Specified by:
- estimateScaleAtin interface- RenderState
 
- 
estimateScaleAtReturns the size of an object of size 1.0 (in object coordinates) on the screen (in pixels).- Parameters:
- point-
- t-
- Returns:
 
- 
getWindowPosDescription copied from interface:RenderStateComputes the window coordinates in pixels of a location in the current object coordinates.- Specified by:
- getWindowPosin interface- RenderState
- Parameters:
- origin- a location in local object coordinates
- out- the computed window coordinates are placed in here
- Returns:
- trueiff the window coordinates are valid (i.e., the location is in the clipping region)
 
- 
drawBoxpublic void drawBox(float halfWidth, float halfLength, float height, Shader s, int highlight, boolean asWireframe, Matrix4d t) Draw a box from -axis to +axis using the transformation matrix t.- Specified by:
- drawBoxin interface- RenderState
- Parameters:
- halfWidth-
- halfLength-
- height-
- s-
- highlight-
- t-
- axis- defines size of box
 
- 
drawLamellapublic void drawLamella(float halfWidth, float halfLength, float height, float a, float b, Shader s, int highlight, boolean asWireframe, Matrix4d t) - Specified by:
- drawLamellain interface- RenderState
- Parameters:
- halfWidth-
- halfLength-
- height-
- a- amplitude
- b- frequency
- s-
- highlight-
- t-
 
- 
drawPointDraw a single point with the specified pixel size and color. Although OpenGL provides a function to draw points, the point is represented by a sphere, because some graphics cards/drivers seem to have problems setting the size for the point.- Specified by:
- drawPointin interface- RenderState
- Parameters:
- pixelSize- size of point on screen in pixels
 
- 
drawPointCloudpublic void drawPointCloud(float[] locations, float pointSize, Tuple3f color, int highlight, Matrix4d t) Description copied from interface:RenderStateDraw a set of points. The array locations contains a sequence of points given as triples of floats for x, y and z position of each point. If the same reference for the array location is passed in the implementation might assume that the contents of the array are the same as well. This is necessary for GLDisplay, for instance, to ensure a performant implementation. The class PointCloud ensures that this is the case.- Specified by:
- drawPointCloudin interface- RenderState
- Parameters:
- locations- array containing a sequence (x,y,z) of points
- pointSize- size of the point on screen
- color- color of the point
- highlight-
- t- transformation of the point cloud
 
- 
drawLineConnect the two points with a line and apply the transformation matrix.- Specified by:
- drawLinein interface- RenderState
 
- 
drawParallelogrampublic void drawParallelogram(float length, Vector3f axis, float scaleU, float scaleV, Shader s, int highlight, boolean asWireframe, Matrix4d t) - Specified by:
- drawParallelogramin interface- RenderState
 
- 
drawPlaneDraw an x/y plane.- Specified by:
- drawPlanein interface- RenderState
 
- 
drawSphereDraw a sphere with the specified radius around the origin (0/0/0).- Specified by:
- drawSpherein interface- RenderState
 
- 
drawSphereSegmentSolidpublic void drawSphereSegmentSolid(float radius, float theta1, float theta2, float phi, Shader s, int highlight, boolean asWireframe, Matrix4d t) Draw a sphere segment with the specified radius, theta1, theta2, and phi, around the origin (0/0/0).- Specified by:
- drawSphereSegmentSolidin interface- RenderState
 
- 
drawTextBlockpublic void drawTextBlock(String caption, Font font, float depth, Shader s, int highlight, boolean asWireframe, Matrix4d t) - Specified by:
- drawTextBlockin interface- RenderState
 
- 
drawSupershapepublic void drawSupershape(float a, float b, float m1, float n11, float n12, float n13, float m2, float n21, float n22, float n23, Shader s, int highlight, boolean asWireframe, Matrix4d t) Draw a supershape around the origin (0/0/0). An implementation of Johan Gielis's Superformula which was published in the American Journal of Botany 90(3): 333–338. 2003. INVITED SPECIAL PAPER A GENERIC GEOMETRIC TRANSFORMATION THAT UNIFIES A WIDE RANGE OF NATURAL AND ABSTRACT SHAPES- Specified by:
- drawSupershapein interface- RenderState
- Parameters:
- a- , b length of curves
- highlight-
- t- transformation of the point cloud
- m- , n shape parameters
- shader-
 
- 
drawFrustumpublic void drawFrustum(float length, float baseRadius, float topRadius, boolean baseClosed, boolean topClosed, float scaleV, Shader s, int highlight, boolean asWireframe, Matrix4d t) Can be used to draw cylinders and the like. The frustum has a cirle at the top and bottom, which are connected with a surface. The center of the bottom circle is (0/0/0), the center of the top circle is axis. Both circles are parallel to the x/y plane.- Specified by:
- drawFrustumin interface- RenderState
- Parameters:
- length-
- baseRadius-
- topRadius-
- baseClosed-
- topClosed-
- scaleV-
- s-
- highlight-
- t-
 
- 
drawWithDisplayListprotected int drawWithDisplayList(int index, javax.media.opengl.GL gl, int levels, float lod) 
- 
drawPolygonspublic void drawPolygons(Polygonizable pz, Object obj, boolean asNode, Shader s, int highlight, boolean asWireframe, Matrix4d t) - Specified by:
- drawPolygonsin interface- RenderState
- Parameters:
- pz-
- obj-
- asNode-
- s-
- highlight-
- t-
 
- 
drawRectangleDraw a rectangle from (x/y) to (x+w/y+h) with the specified color.- Specified by:
- drawRectanglein interface- RenderState
 
- 
drawRectanglepublic void drawRectangle(com.sun.opengl.util.j2d.Overlay overlay, int x, int y, int w, int h, Tuple3f color) 
- 
fillRectangleDraw a filled rectangle from (x/y) to (x+w/y+h) with the specified color.- Specified by:
- fillRectanglein interface- RenderState
 
- 
drawStringDraw a string with the selected font and color at location (x/y).- Specified by:
- drawStringin interface- RenderState
 
- 
optionValueChanged- Overrides:
- optionValueChangedin class- ViewComponentAdapter
 
- 
isExtensionSupported
- 
drawFrustumIrregularpublic void drawFrustumIrregular(float length, int sectorCount, float[] baseRadii, float[] topRadii, boolean baseClosed, boolean topclosed, float scaleV, Shader s, int highlight, boolean asWireframe, Matrix4d t) - Specified by:
- drawFrustumIrregularin interface- RenderState
 
- 
drawPrismRectangularpublic void drawPrismRectangular(float y, float xPos, float xNeg, float zPos, float zNeg, int highlight, boolean asWireframe, Matrix4d t) - Specified by:
- drawPrismRectangularin interface- RenderState
- Parameters:
- y-
- xPos-
- xNeg-
- zPos-
- zNeg-
- highlight-
- t-
 
 
-