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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
|
public GLImpl(GLContextImpl context) {
this._context = context;
}
public boolean isFunctionAvailable(String glFunctionName) {
return _context.isFunctionAvailable(glFunctionName);
}
public boolean isExtensionAvailable(String glExtensionName) {
return _context.isExtensionAvailable(glExtensionName);
}
private GLContextImpl _context;
/**
* Provides platform-independent access to the wglAllocateMemoryNV /
* glXAllocateMemoryNV extension.
*/
public java.nio.ByteBuffer glAllocateMemoryNV(int arg0, float arg1, float arg2, float arg3) {
return _context.glAllocateMemoryNV(arg0, arg1, arg2, arg3);
}
public void setSwapInterval(int interval) {
_context.setSwapInterval(interval);
}
public Object getPlatformGLExtensions() {
return _context.getPlatformGLExtensions();
}
// Attempt to return the same ByteBuffer object from glMapBufferARB if
// the vertex buffer object's base address and size haven't changed
private static class ARBVBOKey {
private long addr;
private int capacity;
ARBVBOKey(long addr, int capacity) {
this.addr = addr;
this.capacity = capacity;
}
public int hashCode() {
return (int) addr;
}
public boolean equals(Object o) {
if ((o == null) || (!(o instanceof ARBVBOKey))) {
return false;
}
ARBVBOKey other = (ARBVBOKey) o;
return ((addr == other.addr) && (capacity == other.capacity));
}
}
private Map/*<ARBVBOKey, ByteBuffer>*/ arbVBOCache = new HashMap();
/** Entry point to C language function: <br> <code> LPVOID glMapBuffer(GLenum target, GLenum access); </code> */
public java.nio.ByteBuffer glMapBuffer(int target, int access) {
final long __addr_ = _context.getGLProcAddressTable()._addressof_glMapBuffer;
if (__addr_ == 0) {
throw new GLException("Method \"glMapBuffer\" not available");
}
int[] sz = new int[1];
glGetBufferParameteriv(target, GL_BUFFER_SIZE_ARB, sz, 0);
long addr;
addr = dispatch_glMapBuffer(target, access, __addr_);
if (addr == 0 || sz[0] == 0) {
return null;
}
ARBVBOKey key = new ARBVBOKey(addr, sz[0]);
ByteBuffer _res = (ByteBuffer) arbVBOCache.get(key);
if (_res == null) {
_res = InternalBufferUtils.newDirectByteBuffer(addr, sz[0]);
_res.order(ByteOrder.nativeOrder());
arbVBOCache.put(key, _res);
}
return _res;
}
/** Entry point to C language function: <br> <code> LPVOID glMapBufferARB(GLenum target, GLenum access); </code> */
public java.nio.ByteBuffer glMapBufferARB(int target, int access) {
final long __addr_ = _context.getGLProcAddressTable()._addressof_glMapBufferARB;
if (__addr_ == 0) {
throw new GLException("Method \"glMapBufferARB\" not available");
}
int[] sz = new int[1];
glGetBufferParameterivARB(target, GL_BUFFER_SIZE_ARB, sz, 0);
long addr;
addr = dispatch_glMapBufferARB(target, access, __addr_);
if (addr == 0 || sz[0] == 0) {
return null;
}
ARBVBOKey key = new ARBVBOKey(addr, sz[0]);
ByteBuffer _res = (ByteBuffer) arbVBOCache.get(key);
if (_res == null) {
_res = InternalBufferUtils.newDirectByteBuffer(addr, sz[0]);
_res.order(ByteOrder.nativeOrder());
arbVBOCache.put(key, _res);
}
return _res;
}
/** Encapsulates function pointer for OpenGL function <br>: <code> LPVOID glMapBuffer(GLenum target, GLenum access); </code> */
native private long dispatch_glMapBuffer(int target, int access, long glProcAddress);
/** Encapsulates function pointer for OpenGL function <br>: <code> LPVOID glMapBufferARB(GLenum target, GLenum access); </code> */
native private long dispatch_glMapBufferARB(int target, int access, long glProcAddress);
|