blob: 42c6e100e11cb90f2e1da85d0a18aaa993d9c5fe (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
package jogamp.opengl.egl;
import javax.media.nativewindow.NativeSurface;
import javax.media.nativewindow.ProxySurface;
import javax.media.opengl.GLException;
import com.jogamp.nativewindow.egl.EGLGraphicsDevice;
public class EGLUpstreamSurfaceHook implements ProxySurface.UpstreamSurfaceHook {
private final NativeSurface upstreamSurface;
public EGLUpstreamSurfaceHook(NativeSurface upstream) {
upstreamSurface = upstream;
}
public final NativeSurface getUpstreamSurface() { return upstreamSurface; }
@Override
public final void create(ProxySurface surface) {
if(upstreamSurface instanceof ProxySurface) {
((ProxySurface)upstreamSurface).createNotify();
if(NativeSurface.LOCK_SURFACE_NOT_READY >= upstreamSurface.lockSurface()) {
throw new GLException("Could not lock: "+upstreamSurface);
}
}
final EGLGraphicsDevice eglDevice = (EGLGraphicsDevice) surface.getGraphicsConfiguration().getScreen().getDevice();
eglDevice.open();
}
@Override
public final void destroy(ProxySurface surface) {
final EGLGraphicsDevice eglDevice = (EGLGraphicsDevice) surface.getGraphicsConfiguration().getScreen().getDevice();
eglDevice.close();
if(upstreamSurface instanceof ProxySurface) {
upstreamSurface.unlockSurface();
((ProxySurface)upstreamSurface).destroyNotify();
}
}
@Override
public final int getWidth(ProxySurface s) {
return upstreamSurface.getWidth();
}
@Override
public final int getHeight(ProxySurface s) {
return upstreamSurface.getHeight();
}
@Override
public String toString() {
final String us_s = null != upstreamSurface ? ( upstreamSurface.getClass().getName() + ": " + upstreamSurface ) : "nil";
return "EGLUpstreamSurfaceHook[upstream: "+us_s+"]";
}
}
|