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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
|
/*
private static boolean useJavaMipmapCode = true;
static {
AccessController.doPrivileged(new PrivilegedAction() {
public Object run() {
String val = System.getProperty("jogl.glu.nojava");
if (val != null && !val.toLowerCase().equals("false")) {
useJavaMipmapCode = false;
}
return null;
}
});
}
*/
/**
* Instantiates a new OpenGL Utility Library object. A GLU object may
* be instantiated at any point in the application and is not
* inherently tied to any particular OpenGL context; however, the GLU
* object may only be used when an OpenGL context is current on the
* current thread. Attempts to call most of the methods in the GLU
* library when no OpenGL context is current will cause an exception
* to be thrown.
*
* <P>
*
* The returned GLU object is not guaranteed to be thread-safe and
* should only be used from one thread at a time. Multiple GLU objects
* may be instantiated to be used from different threads
* simultaneously.
*/
public GLUgl2es1()
{
super();
}
public void destroy() {
super.destroy();
}
//----------------------------------------------------------------------
// Utility routines
//
public static final GL2ES1 getCurrentGL2ES1() throws GLException {
GLContext curContext = GLContext.getCurrent();
if (curContext == null) {
throw new GLException("No OpenGL context current on this thread");
}
return curContext.getGL().getGL2ES1();
}
/*
public String gluErrorString(int errorCode) {
return Error.gluErrorString(errorCode);
}
*/
/* extName is an extension name.
* extString is a string of extensions separated by blank(s). There may or
* may not be leading or trailing blank(s) in extString.
* This works in cases of extensions being prefixes of another like
* GL_EXT_texture and GL_EXT_texture3D.
* Returns true if extName is found otherwise it returns false.
*/
/*
public boolean gluCheckExtension(java.lang.String extName, java.lang.String extString) {
return Registry.gluCheckExtension(extName, extString);
}
*/
/*
public String gluGetString(int name) {
return Registry.gluGetString(name);
}
*/
//----------------------------------------------------------------------
// Mipmap and image scaling functionality
protected static boolean availableMipmap = false;
protected static boolean checkedMipmap = false;
protected static final void validateMipmap() {
if(!checkedMipmap) {
availableMipmap = NWReflection.isClassAvailable("com.sun.opengl.impl.glu.mipmap.Mipmap");
checkedMipmap = true;
}
if(!availableMipmap) {
throw new GLException("Mipmap not available");
}
}
private final java.nio.ByteBuffer copyToByteBuffer(java.nio.Buffer buf) {
if (buf instanceof java.nio.ByteBuffer) {
if (buf.position() == 0) {
return (java.nio.ByteBuffer) buf;
}
return BufferUtil.copyByteBuffer((java.nio.ByteBuffer) buf);
} else if (buf instanceof java.nio.ShortBuffer) {
return BufferUtil.copyShortBufferAsByteBuffer((java.nio.ShortBuffer) buf);
} else if (buf instanceof java.nio.IntBuffer) {
return BufferUtil.copyIntBufferAsByteBuffer((java.nio.IntBuffer) buf);
} else if (buf instanceof java.nio.FloatBuffer) {
return BufferUtil.copyFloatBufferAsByteBuffer((java.nio.FloatBuffer) buf);
} else {
throw new IllegalArgumentException("Unsupported buffer type (must be one of byte, short, int, or float)");
}
}
/**
* Optional, throws GLException if not available in profile
*/
public final int gluScaleImage( int format, int widthin, int heightin,
int typein, java.nio.Buffer datain, int widthout, int heightout,
int typeout, java.nio.Buffer dataout ) {
validateMipmap();
java.nio.ByteBuffer in = null;
java.nio.ByteBuffer out = null;
in = copyToByteBuffer(datain);
if( dataout instanceof java.nio.ByteBuffer ) {
out = (java.nio.ByteBuffer)dataout;
} else if( dataout instanceof java.nio.ShortBuffer ) {
out = BufferUtil.newByteBuffer(dataout.remaining() * BufferUtil.SIZEOF_SHORT);
} else if ( dataout instanceof java.nio.IntBuffer ) {
out = BufferUtil.newByteBuffer(dataout.remaining() * BufferUtil.SIZEOF_INT);
} else if ( dataout instanceof java.nio.FloatBuffer ) {
out = BufferUtil.newByteBuffer(dataout.remaining() * BufferUtil.SIZEOF_FLOAT);
} else {
throw new IllegalArgumentException("Unsupported destination buffer type (must be byte, short, int, or float)");
}
int errno = Mipmap.gluScaleImage( getCurrentGL2ES1(), format, widthin, heightin, typein, in,
widthout, heightout, typeout, out );
if( errno == 0 ) {
out.rewind();
if (out != dataout) {
if( dataout instanceof java.nio.ShortBuffer ) {
((java.nio.ShortBuffer) dataout).put(out.asShortBuffer());
} else if( dataout instanceof java.nio.IntBuffer ) {
((java.nio.IntBuffer) dataout).put(out.asIntBuffer());
} else if( dataout instanceof java.nio.FloatBuffer ) {
((java.nio.FloatBuffer) dataout).put(out.asFloatBuffer());
} else {
throw new RuntimeException("Should not reach here");
}
}
}
return( errno );
}
/**
* Optional, throws GLException if not available in profile
*/
public final int gluBuild1DMipmapLevels( int target, int internalFormat, int width,
int format, int type, int userLevel, int baseLevel, int maxLevel,
java.nio.Buffer data ) {
validateMipmap();
java.nio.ByteBuffer buffer = copyToByteBuffer(data);
return( Mipmap.gluBuild1DMipmapLevels( getCurrentGL2ES1(), target, internalFormat, width,
format, type, userLevel, baseLevel, maxLevel, buffer ) );
}
/**
* Optional, throws GLException if not available in profile
*/
public final int gluBuild1DMipmaps( int target, int internalFormat, int width,
int format, int type, java.nio.Buffer data ) {
validateMipmap();
java.nio.ByteBuffer buffer = copyToByteBuffer(data);
return( Mipmap.gluBuild1DMipmaps( getCurrentGL2ES1(), target, internalFormat, width, format,
type, buffer ) );
}
/**
* Optional, throws GLException if not available in profile
*/
public final int gluBuild2DMipmapLevels( int target, int internalFormat, int width,
int height, int format, int type, int userLevel, int baseLevel,
int maxLevel, java.nio.Buffer data ) {
validateMipmap();
// While the code below handles other data types, it doesn't handle non-ByteBuffers
data = copyToByteBuffer(data);
return( Mipmap.gluBuild2DMipmapLevels( getCurrentGL2ES1(), target, internalFormat, width,
height, format, type, userLevel, baseLevel, maxLevel, data ) );
}
/**
* Optional, throws GLException if not available in profile
*/
public final int gluBuild2DMipmaps( int target, int internalFormat, int width,
int height, int format, int type, java.nio.Buffer data ) {
validateMipmap();
// While the code below handles other data types, it doesn't handle non-ByteBuffers
data = copyToByteBuffer(data);
return( Mipmap.gluBuild2DMipmaps( getCurrentGL2ES1(), target, internalFormat, width, height,
format, type, data) );
}
/**
* Optional, throws GLException if not available in profile
*/
public final int gluBuild3DMipmapLevels( int target, int internalFormat, int width,
int height, int depth, int format, int type, int userLevel, int baseLevel,
int maxLevel, java.nio.Buffer data) {
validateMipmap();
java.nio.ByteBuffer buffer = copyToByteBuffer(data);
return( Mipmap.gluBuild3DMipmapLevels( getCurrentGL2ES1(), target, internalFormat, width,
height, depth, format, type, userLevel, baseLevel, maxLevel, buffer) );
}
/**
* Optional, throws GLException if not available in profile
*/
public final int gluBuild3DMipmaps( int target, int internalFormat, int width,
int height, int depth, int format, int type, java.nio.Buffer data ) {
validateMipmap();
java.nio.ByteBuffer buffer = copyToByteBuffer(data);
return( Mipmap.gluBuild3DMipmaps( getCurrentGL2ES1(), target, internalFormat, width, height,
depth, format, type, buffer ) );
}
//----------------------------------------------------------------------
// GLUProcAddressTable handling
//
/*
private static GLUProcAddressTable gluProcAddressTable;
private static volatile boolean gluLibraryLoaded;
private static GLUProcAddressTable getGLUProcAddressTable() {
if (!gluLibraryLoaded) {
loadGLULibrary();
}
if (gluProcAddressTable == null) {
GLUProcAddressTable tmp = new GLUProcAddressTable();
GLProcAddressHelper.resetProcAddressTable(tmp, GLDrawableFactoryImpl.getFactoryImpl());
gluProcAddressTable = tmp;
}
return gluProcAddressTable;
}
private static synchronized void loadGLULibrary() {
if (!gluLibraryLoaded) {
GLDrawableFactoryImpl.getFactoryImpl().loadGLULibrary();
gluLibraryLoaded = true;
}
}
*/
|