|
j3d.org Aviatrix3D | ||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectorg.j3d.aviatrix3d.surface.StereoAWTSurface
Implementation of the most drawable surface, supporting stereo rendering capabilities.
This implementation of DrawableSurface renders to a normal GLCanvas instance and provides pBuffer support as needed. Stereo support is provided based on the underlying hardware capabilities in combination with the user requested features.
In implementing the alternate frame mode rendering, there's some odd artifacts/bugs in the rendering process. What seems to be happening is if we draw left and then right on the same canvas one after the other, the left one always gets drawn, and the right one is drawn, with the left cleared very quickly. The effect is that the right image is very prominent, but the left is almost not seen at all.
So, for now the implementation uses an internal flag to draw to alternate eyes on each alternate call to display() from the external rendering thread. This really slows the renderer down from a frame rate perspective, so make sure your rendering cycle time is halved if you are using that to control frame rate.
Field Summary |
Fields inherited from interface org.j3d.aviatrix3d.DrawableSurface |
ALTERNATE_FRAME_STEREO, NO_STEREO, QUAD_BUFFER_STEREO, TWO_CANVAS_STEREO |
Constructor Summary | |
StereoAWTSurface(net.java.games.jogl.GLCapabilities caps)
Construct a surface that requires the given set of capabilities. |
Method Summary | |
void |
checkForExtension(java.lang.String glExtensionString)
Add an extension string to check for at startup. |
void |
display(net.java.games.jogl.GLDrawable drawable)
Not used in this implementation |
void |
displayChanged(net.java.games.jogl.GLDrawable drawable,
boolean modeChanged,
boolean deviceChanged)
Not used in this implementation |
void |
dispose()
Instruct this surface that you have finished with the resources needed and to dispose all rendering resources. |
void |
draw()
Instruct the surface to draw the collected set of nodes now. |
void |
getCenterEyeInSurface(javax.vecmath.Point3f position)
Get the Center Eye position in surface coordinates. |
void |
getPixelLocationInSurface(float x,
float y,
javax.vecmath.Point3f position)
Convert a pixel location to surface coordinates. |
float |
getStereoEyeSeparation()
Get the current eye separation value - always returns 0. |
int |
getStereoRenderingPolicy()
Get the current stereo rendering policy in use. |
java.lang.Object |
getSurfaceObject()
Get the underlying object that this surface is rendered to. |
void |
getSurfaceToVWorld(javax.vecmath.Matrix4f matrix)
Get the surface to VWorld transformation matrix. |
void |
init(net.java.games.jogl.GLDrawable drawable)
Called by the drawable immediately after the OpenGL context is initialized; the GLContext has already been made current when this method is called. |
boolean |
isQuadStereoAvailable()
Check to see whether this surface supports Quad buffer stereo rendering. |
boolean |
isStereoAvailable()
Check to see whether this surface supports stereo rendering. |
void |
queueDeletedObject(DeletableSceneGraphObject obj)
An object has been detected as being deleted (no internal or external references to it left) and it needs to be cleaned up. |
void |
queueShaderRequests(ShaderSceneGraphObject[] initList,
int numInit,
ShaderSceneGraphObject[] logList,
int numLog)
Queue up a collection of shader objects for processing on the next frame. |
void |
reshape(net.java.games.jogl.GLDrawable drawable,
int x,
int y,
int width,
int height)
Not used in this implementation |
void |
resychronizeRenderTarget()
Resynchronise the stereo rendering to be the next frame as the left eye view. |
void |
setClearColor(float r,
float g,
float b,
float a)
Set the background colour that this surface should be cleared to before the drawing step. |
void |
setDrawableObjects(RenderInstructions[] commands,
int numValid)
Update the list of items to be rendered to the current list. |
void |
setRenderControlThread(java.lang.Thread th)
Tell the surface to use the given thread as the rendering control thread. |
void |
setStereoEyeSeparation(float sep)
Set the eye separation value when rendering stereo. |
void |
setStereoRenderingPolicy(int policy)
Set the rendering policy used when handling stereo. |
void |
swap()
Swap the buffers now if the surface supports multiple buffer drawing. |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Constructor Detail |
public StereoAWTSurface(net.java.games.jogl.GLCapabilities caps)
caps
- A set of required capabilities for this canvas.Method Detail |
public boolean isStereoAvailable()
isStereoAvailable
in interface DrawableSurface
public boolean isQuadStereoAvailable()
As this is not known until after initialisation, this method will return false until it can determine whether or not stereo is available.
isQuadStereoAvailable
in interface DrawableSurface
public void setStereoEyeSeparation(float sep)
setStereoEyeSeparation
in interface DrawableSurface
sep
- The amount of eye separationpublic float getStereoEyeSeparation()
getStereoEyeSeparation
in interface DrawableSurface
public void setStereoRenderingPolicy(int policy)
setStereoRenderingPolicy
in interface DrawableSurface
policy
- The policy to currently use
java.lang.IllegalArgumentException
- The policy type is not one of the legal
selections.public int getStereoRenderingPolicy()
NO_STEREO
.
getStereoRenderingPolicy
in interface DrawableSurface
public void queueDeletedObject(DeletableSceneGraphObject obj)
cleanup()
method called and then the
reference to it should be discarded.
queueDeletedObject
in interface DrawableSurface
obj
- The instance to be queued for deletionpublic void queueShaderRequests(ShaderSceneGraphObject[] initList, int numInit, ShaderSceneGraphObject[] logList, int numLog)
queueShaderRequests
in interface DrawableSurface
initList
- The shaders needing initialisationnumInit
- The number of shaders needing initialisationlogList
- The shaders needing log fetchingnumLog
- The number of shaders needing log fetchingpublic void setClearColor(float r, float g, float b, float a)
setClearColor
in interface DrawableSurface
r
- The red component of the background clear colourg
- The green component of the background clear colourb
- The blue component of the background clear coloura
- The alpha component of the background clear colourpublic void setDrawableObjects(RenderInstructions[] commands, int numValid)
setDrawableObjects
in interface DrawableSurface
commands
- The list of drawable surfaces to rendernumValid
- The number of valid items in the arraypublic void draw()
draw
in interface DrawableSurface
public void swap()
swap
in interface DrawableSurface
public java.lang.Object getSurfaceObject()
getSurfaceObject
in interface DrawableSurface
public void getSurfaceToVWorld(javax.vecmath.Matrix4f matrix)
getSurfaceToVWorld
in interface DrawableSurface
matrix
- The matrix instance to copy intopublic void getPixelLocationInSurface(float x, float y, javax.vecmath.Point3f position)
getPixelLocationInSurface
in interface DrawableSurface
x
- The X coordinatey
- The Y coordinateposition
- The converted position. It must be preallocated.public void getCenterEyeInSurface(javax.vecmath.Point3f position)
getCenterEyeInSurface
in interface DrawableSurface
position
- The current eye position. It must be preallocated.public void dispose()
dispose
in interface DrawableSurface
public void setRenderControlThread(java.lang.Thread th)
setRenderControlThread
in interface DrawableSurface
th
- The render control thread instance to use or nullpublic void init(net.java.games.jogl.GLDrawable drawable)
init
in interface net.java.games.jogl.GLEventListener
drawable
- The display context to render topublic void reshape(net.java.games.jogl.GLDrawable drawable, int x, int y, int width, int height)
reshape
in interface net.java.games.jogl.GLEventListener
drawable
- The display context to render topublic void displayChanged(net.java.games.jogl.GLDrawable drawable, boolean modeChanged, boolean deviceChanged)
displayChanged
in interface net.java.games.jogl.GLEventListener
drawable
- The display context to render topublic void display(net.java.games.jogl.GLDrawable drawable)
display
in interface net.java.games.jogl.GLEventListener
drawable
- The display context to render topublic void resychronizeRenderTarget()
public void checkForExtension(java.lang.String glExtensionString)
glExtensionString
- String to check for being valid
|
j3d.org Aviatrix3D | ||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |