|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectjavax.media.nativewindow.ProxySurface
public abstract class ProxySurface
Nested Class Summary | |
---|---|
static interface |
ProxySurface.UpstreamSurfaceHook
Interface allowing upstream caller to pass lifecycle actions and size info to a ProxySurface instance. |
Field Summary | |
---|---|
static boolean |
DEBUG
|
int |
initialHeight
|
int |
initialWidth
|
static int |
INVISIBLE_WINDOW
Implementation specific bitvalue stating the upstream's NativeSurface is an invisible window, i.e. |
static int |
OWN_DEVICE
Implementation specific bitvalue stating the upstream's AbstractGraphicsDevice is owned by this ProxySurface . |
Fields inherited from interface javax.media.nativewindow.NativeSurface |
---|
LOCK_SUCCESS, LOCK_SURFACE_CHANGED, LOCK_SURFACE_NOT_READY, LOCK_SURFACE_UNLOCKED |
Method Summary | |
---|---|
void |
addSurfaceUpdatedListener(int index,
SurfaceUpdatedListener l)
Inserts the given SurfaceUpdatedListener at the
specified position in the list. |
void |
addSurfaceUpdatedListener(SurfaceUpdatedListener l)
Appends the given SurfaceUpdatedListener to the end of the list. |
void |
createNotify()
If a valid ProxySurface.UpstreamSurfaceHook instance is passed in the
constructor ,
ProxySurface.UpstreamSurfaceHook.create(ProxySurface) is being issued and the proxy surface/window handles shall be set. |
void |
destroyNotify()
If a valid ProxySurface.UpstreamSurfaceHook instance is passed in the
constructor ,
ProxySurface.UpstreamSurfaceHook.destroy(ProxySurface) is being issued and all fields are cleared. |
long |
getDisplayHandle()
Convenience: Get display handle from AbstractGraphicsConfiguration . |
AbstractGraphicsConfiguration |
getGraphicsConfiguration()
Returns the graphics configuration corresponding to this window. |
int |
getHeight()
Returns the height of the client area excluding insets (window decorations). |
int |
getImplBitfield()
|
int |
getScreenIndex()
Convenience: Get display handle from AbstractGraphicsConfiguration . |
abstract long |
getSurfaceHandle()
Returns the handle to the surface for this NativeSurface. |
Thread |
getSurfaceLockOwner()
Return the locking owner's Thread, or null if not locked. |
ProxySurface.UpstreamSurfaceHook |
getUpstreamSurfaceHook()
|
int |
getWidth()
Returns the width of the client area excluding insets (window decorations). |
boolean |
isSurfaceLockedByOtherThread()
Query if surface is locked by another thread, i.e. |
int |
lockSurface()
Lock the surface of this native window. |
void |
removeSurfaceUpdatedListener(SurfaceUpdatedListener l)
Remove the specified SurfaceUpdatedListener from the list. |
void |
setImplBitfield(int v)
|
abstract void |
setSurfaceHandle(long surfaceHandle)
Sets the surface handle which is created outside of this implementation. |
boolean |
surfaceSwap()
Provide a mechanism to utilize custom (pre-) swap surface code. |
void |
surfaceUpdated(Object updater,
NativeSurface ns,
long when)
Notification of a surface update event, eg. |
abstract String |
toString()
|
void |
unlockSurface()
Unlock the surface of this native window Shall not modify the surface handle, see NativeSurface.lockSurface() |
void |
validateSurfaceLocked()
|
Methods inherited from class java.lang.Object |
---|
equals, getClass, hashCode, notify, notifyAll, wait, wait, wait |
Field Detail |
---|
public static final boolean DEBUG
public static final int OWN_DEVICE
AbstractGraphicsDevice
is owned by this ProxySurface
.
setImplBitfield(int)
,
getImplBitfield()
,
Constant Field Valuespublic static final int INVISIBLE_WINDOW
NativeSurface
is an invisible window, i.e. maybe incomplete.
setImplBitfield(int)
,
getImplBitfield()
,
Constant Field Valuespublic final int initialWidth
public final int initialHeight
Method Detail |
---|
public final ProxySurface.UpstreamSurfaceHook getUpstreamSurfaceHook()
public void createNotify()
ProxySurface.UpstreamSurfaceHook
instance is passed in the
constructor
,
ProxySurface.UpstreamSurfaceHook.create(ProxySurface)
is being issued and the proxy surface/window handles shall be set.
public void destroyNotify()
ProxySurface.UpstreamSurfaceHook
instance is passed in the
constructor
,
ProxySurface.UpstreamSurfaceHook.destroy(ProxySurface)
is being issued and all fields are cleared.
public final long getDisplayHandle()
NativeSurface
getDisplayHandle
in interface NativeSurface
public final AbstractGraphicsConfiguration getGraphicsConfiguration()
NativeSurface
In case the implementation utilizes a delegation pattern to wrap abstract toolkits,
this method shall return the native AbstractGraphicsConfiguration
via AbstractGraphicsConfiguration.getNativeGraphicsConfiguration()
.
getGraphicsConfiguration
in interface NativeSurface
AbstractGraphicsConfiguration.getNativeGraphicsConfiguration()
,
javax.media.nativewindow.GraphicsConfigurationFactory#chooseGraphicsConfiguration(Capabilities, CapabilitiesChooser, AbstractGraphicsScreen)
public final int getScreenIndex()
NativeSurface
getScreenIndex
in interface NativeSurface
public abstract long getSurfaceHandle()
NativeSurface
The surface handle should be set/update by NativeSurface.lockSurface()
,
where NativeSurface.unlockSurface()
is not allowed to modify it.
After NativeSurface.unlockSurface()
it is no more guaranteed
that the surface handle is still valid.
The surface handle shall reflect the platform one
for all drawable surface operations, e.g. opengl, swap-buffer.
On X11 this returns an entity of type Window,
since there is no differentiation of surface and window there.
On Microsoft Windows this returns an entity of type HDC.
getSurfaceHandle
in interface NativeSurface
public abstract void setSurfaceHandle(long surfaceHandle)
MutableSurface
setSurfaceHandle
in interface MutableSurface
public final int getWidth()
NativeSurface
getWidth
in interface NativeSurface
public final int getHeight()
NativeSurface
getHeight
in interface NativeSurface
public boolean surfaceSwap()
NativeSurface
surfaceSwap
in interface NativeSurface
public void addSurfaceUpdatedListener(SurfaceUpdatedListener l)
NativeSurface
SurfaceUpdatedListener
to the end of the list.
addSurfaceUpdatedListener
in interface NativeSurface
public void addSurfaceUpdatedListener(int index, SurfaceUpdatedListener l) throws IndexOutOfBoundsException
NativeSurface
SurfaceUpdatedListener
at the
specified position in the list.
addSurfaceUpdatedListener
in interface NativeSurface
index
- Position where the listener will be inserted.
Should be within (0 <= index && index <= size()).
An index value of -1 is interpreted as the end of the list, size().l
- The listener object to be inserted
IndexOutOfBoundsException
- If the index is not within (0 <= index && index <= size()), or -1public void removeSurfaceUpdatedListener(SurfaceUpdatedListener l)
NativeSurface
SurfaceUpdatedListener
from the list.
removeSurfaceUpdatedListener
in interface NativeSurface
public void surfaceUpdated(Object updater, NativeSurface ns, long when)
SurfaceUpdatedListener
surfaceUpdated
in interface SurfaceUpdatedListener
updater
- is the caller object who updated the surface,
e.g. a JOGL GLDrawable.ns
- the updated NativeSurfacewhen
- the time in ms, when the surface was updatedpublic int lockSurface() throws NativeWindowException, RuntimeException
NativeSurface
The surface handle shall be valid after a successfull call,
ie return a value other than NativeSurface.LOCK_SURFACE_UNLOCKED
and NativeSurface.LOCK_SURFACE_NOT_READY
,
which is
boolean ok = lockSurface() > LOCK_SURFACE_NOT_READY;
The caller may need to take care of the result NativeSurface.LOCK_SURFACE_CHANGED
,
where the surface handle is valid but has changed.
This call is blocking until the surface has been locked or a timeout is reached. The latter will throw a runtime exception.
This call allows recursion from the same thread.
The implementation may want to aquire the
application level RecursiveLock
first before proceeding with a native surface lock.
The implementation shall also invoke AbstractGraphicsDevice.lock()
for the initial lock (recursive count zero).
lockSurface
in interface NativeSurface
NativeSurface.LOCK_SUCCESS
, NativeSurface.LOCK_SURFACE_CHANGED
or NativeSurface.LOCK_SURFACE_NOT_READY
.
NativeWindowException
- if native locking failed, maybe platform related
RuntimeException
- after timeout when waiting for the surface lockRecursiveLock
public final void unlockSurface()
NativeSurface
NativeSurface.lockSurface()
The implementation shall also invoke AbstractGraphicsDevice.unlock()
for the final unlock (recursive count zero).
The implementation shall be fail safe, i.e. tolerant in case the native resources are already released / unlocked. In this case the implementation shall simply ignore the call.
unlockSurface
in interface NativeSurface
NativeSurface.lockSurface()
,
RecursiveLock
public final void validateSurfaceLocked()
public final boolean isSurfaceLockedByOtherThread()
NativeSurface
final Thread o = getSurfaceLockOwner(); if( null != o && Thread.currentThread() != o ) { .. }
isSurfaceLockedByOtherThread
in interface NativeSurface
public final Thread getSurfaceLockOwner()
NativeSurface
getSurfaceLockOwner
in interface NativeSurface
public abstract String toString()
toString
in class Object
public int getImplBitfield()
public void setImplBitfield(int v)
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |