• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*******************************************************************************
2  * Copyright 2011 See AUTHORS file.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *   http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  ******************************************************************************/
16 
17 package com.badlogic.gdx.backends.lwjgl3;
18 
19 import java.nio.Buffer;
20 import java.nio.ByteBuffer;
21 import java.nio.DoubleBuffer;
22 import java.nio.FloatBuffer;
23 import java.nio.IntBuffer;
24 import java.nio.LongBuffer;
25 import java.nio.ShortBuffer;
26 
27 import org.lwjgl.opengl.GL11;
28 import org.lwjgl.opengl.GL12;
29 import org.lwjgl.opengl.GL15;
30 import org.lwjgl.opengl.GL20;
31 import org.lwjgl.opengl.GL21;
32 import org.lwjgl.opengl.GL30;
33 import org.lwjgl.opengl.GL31;
34 import org.lwjgl.opengl.GL32;
35 import org.lwjgl.opengl.GL33;
36 import org.lwjgl.opengl.GL40;
37 import org.lwjgl.opengl.GL41;
38 import org.lwjgl.opengl.GL43;
39 
40 import com.badlogic.gdx.utils.GdxRuntimeException;
41 
42 class Lwjgl3GL30 extends Lwjgl3GL20 implements com.badlogic.gdx.graphics.GL30 {
43 	@Override
glReadBuffer(int mode)44 	public void glReadBuffer (int mode) {
45 		GL11.glReadBuffer(mode);
46 	}
47 
48 	@Override
glDrawRangeElements(int mode, int start, int end, int count, int type, Buffer indices)49 	public void glDrawRangeElements (int mode, int start, int end, int count, int type, Buffer indices) {
50 		if(indices instanceof ByteBuffer) GL12.glDrawRangeElements(mode, start, end, (ByteBuffer)indices);
51 		else if(indices instanceof ShortBuffer) GL12.glDrawRangeElements(mode, start, end, (ShortBuffer)indices);
52 		else if(indices instanceof IntBuffer) GL12.glDrawRangeElements(mode, start, end, (IntBuffer)indices);
53 		else throw new GdxRuntimeException("indices must be byte, short or int buffer");
54 	}
55 
56 	@Override
glDrawRangeElements(int mode, int start, int end, int count, int type, int offset)57 	public void glDrawRangeElements (int mode, int start, int end, int count, int type, int offset) {
58 		GL12.glDrawRangeElements(mode, start, end, count, type, offset);
59 	}
60 
61 	@Override
glTexImage3D(int target, int level, int internalformat, int width, int height, int depth, int border, int format, int type, Buffer pixels)62 	public void glTexImage3D (int target, int level, int internalformat, int width, int height, int depth, int border, int format,
63 			int type, Buffer pixels) {
64 		if (pixels == null)
65 			GL12.glTexImage3D(target, level, internalformat, width, height, depth, border, format, type, (ByteBuffer)null);
66 		else if (pixels instanceof ByteBuffer)
67 			GL12.glTexImage3D(target, level, internalformat, width, height, depth, border, format, type, (ByteBuffer)pixels);
68 		else if (pixels instanceof ShortBuffer)
69 			GL12.glTexImage3D(target, level, internalformat, width, height, depth, border, format, type, (ShortBuffer)pixels);
70 		else if (pixels instanceof IntBuffer)
71 			GL12.glTexImage3D(target, level, internalformat, width, height, depth, border, format, type, (IntBuffer)pixels);
72 		else if (pixels instanceof FloatBuffer)
73 			GL12.glTexImage3D(target, level, internalformat, width, height, depth, border, format, type, (FloatBuffer)pixels);
74 		else if (pixels instanceof DoubleBuffer)
75 			GL12.glTexImage3D(target, level, internalformat, width, height, depth, border, format, type, (DoubleBuffer)pixels);
76 		else
77 			throw new GdxRuntimeException("Can't use " + pixels.getClass().getName()
78 					+ " with this method. Use ByteBuffer, ShortBuffer, IntBuffer, FloatBuffer or DoubleBuffer instead. Blame LWJGL");
79 	}
80 
81 	@Override
glTexImage3D(int target, int level, int internalformat, int width, int height, int depth, int border, int format, int type, int offset)82 	public void glTexImage3D (int target, int level, int internalformat, int width, int height, int depth, int border, int format,
83 		int type, int offset) {
84 		GL12.glTexImage3D(target, level, internalformat, width, height, depth, border, format, type, offset);
85 	}
86 
87 	@Override
glTexSubImage3D(int target, int level, int xoffset, int yoffset, int zoffset, int width, int height, int depth, int format, int type, Buffer pixels)88 	public void glTexSubImage3D (int target, int level, int xoffset, int yoffset, int zoffset, int width, int height, int depth,
89 			int format, int type, Buffer pixels) {
90 		if (pixels instanceof ByteBuffer)
91 			GL12.glTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, (ByteBuffer)pixels);
92 		else if (pixels instanceof ShortBuffer)
93 			GL12.glTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, (ShortBuffer)pixels);
94 		else if (pixels instanceof IntBuffer)
95 			GL12.glTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, (IntBuffer)pixels);
96 		else if (pixels instanceof FloatBuffer)
97 			GL12.glTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, (FloatBuffer)pixels);
98 		else if (pixels instanceof DoubleBuffer)
99 			GL12.glTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, (DoubleBuffer)pixels);
100 		else
101 			throw new GdxRuntimeException("Can't use " + pixels.getClass().getName()
102 					+ " with this method. Use ByteBuffer, ShortBuffer, IntBuffer, FloatBuffer or DoubleBuffer instead. Blame LWJGL");
103 	}
104 
105 	@Override
glTexSubImage3D(int target, int level, int xoffset, int yoffset, int zoffset, int width, int height, int depth, int format, int type, int offset)106 	public void glTexSubImage3D (int target, int level, int xoffset, int yoffset, int zoffset, int width, int height, int depth,
107 		int format, int type, int offset) {
108 		GL12.glTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, offset);
109 	}
110 
111 	@Override
glCopyTexSubImage3D(int target, int level, int xoffset, int yoffset, int zoffset, int x, int y, int width, int height)112 	public void glCopyTexSubImage3D (int target, int level, int xoffset, int yoffset, int zoffset, int x, int y, int width,
113 		int height) {
114 		GL12.glCopyTexSubImage3D(target, level, xoffset, yoffset, zoffset, x, y, width, height);
115 	}
116 
117 	@Override
glGenQueries(int n, int[] ids, int offset)118 	public void glGenQueries (int n, int[] ids, int offset) {
119 		for(int i = offset; i < offset + n; i++) {
120 			ids[i] = GL15.glGenQueries();
121 		}
122 	}
123 
124 	@Override
glGenQueries(int n, IntBuffer ids)125 	public void glGenQueries (int n, IntBuffer ids) {
126 		for(int i = 0; i < n; i++) {
127 			ids.put(GL15.glGenQueries());
128 		}
129 	}
130 
131 	@Override
glDeleteQueries(int n, int[] ids, int offset)132 	public void glDeleteQueries (int n, int[] ids, int offset) {
133 		for(int i = offset; i < offset + n; i++) {
134 			GL15.glDeleteQueries(ids[i]);
135 		}
136 	}
137 
138 	@Override
glDeleteQueries(int n, IntBuffer ids)139 	public void glDeleteQueries (int n, IntBuffer ids) {
140 		for(int i = 0; i < n; i++) {
141 			GL15.glDeleteQueries(ids.get());
142 		}
143 	}
144 
145 	@Override
glIsQuery(int id)146 	public boolean glIsQuery (int id) {
147 		return GL15.glIsQuery(id);
148 	}
149 
150 	@Override
glBeginQuery(int target, int id)151 	public void glBeginQuery (int target, int id) {
152 		GL15.glBeginQuery(target, id);
153 	}
154 
155 	@Override
glEndQuery(int target)156 	public void glEndQuery (int target) {
157 		GL15.glEndQuery(target);
158 	}
159 
160 	@Override
glGetQueryiv(int target, int pname, IntBuffer params)161 	public void glGetQueryiv (int target, int pname, IntBuffer params) {
162 		GL15.glGetQueryiv(target, pname, params);
163 	}
164 
165 	@Override
glGetQueryObjectuiv(int id, int pname, IntBuffer params)166 	public void glGetQueryObjectuiv (int id, int pname, IntBuffer params) {
167 		GL15.glGetQueryObjectuiv(id, pname, params);
168 	}
169 
170 	@Override
glUnmapBuffer(int target)171 	public boolean glUnmapBuffer (int target) {
172 		return GL15.glUnmapBuffer(target);
173 	}
174 
175 	@Override
glGetBufferPointerv(int target, int pname)176 	public Buffer glGetBufferPointerv (int target, int pname) {
177 		// FIXME glGetBufferPointerv needs a proper translation
178 		// return GL15.glGetBufferPointer(target, pname);
179 		throw new UnsupportedOperationException("Not implemented");
180 	}
181 
182 	@Override
glDrawBuffers(int n, IntBuffer bufs)183 	public void glDrawBuffers (int n, IntBuffer bufs) {
184 		GL20.glDrawBuffers(bufs);
185 	}
186 
187 	@Override
glUniformMatrix2x3fv(int location, int count, boolean transpose, FloatBuffer value)188 	public void glUniformMatrix2x3fv (int location, int count, boolean transpose, FloatBuffer value) {
189 		GL21.glUniformMatrix2x3fv(location, transpose, value);
190 	}
191 
192 	@Override
glUniformMatrix3x2fv(int location, int count, boolean transpose, FloatBuffer value)193 	public void glUniformMatrix3x2fv (int location, int count, boolean transpose, FloatBuffer value) {
194 		GL21.glUniformMatrix3x2fv(location, transpose, value);
195 	}
196 
197 	@Override
glUniformMatrix2x4fv(int location, int count, boolean transpose, FloatBuffer value)198 	public void glUniformMatrix2x4fv (int location, int count, boolean transpose, FloatBuffer value) {
199 		GL21.glUniformMatrix2x4fv(location, transpose, value);
200 	}
201 
202 	@Override
glUniformMatrix4x2fv(int location, int count, boolean transpose, FloatBuffer value)203 	public void glUniformMatrix4x2fv (int location, int count, boolean transpose, FloatBuffer value) {
204 		GL21.glUniformMatrix4x2fv(location, transpose, value);
205 	}
206 
207 	@Override
glUniformMatrix3x4fv(int location, int count, boolean transpose, FloatBuffer value)208 	public void glUniformMatrix3x4fv (int location, int count, boolean transpose, FloatBuffer value) {
209 		GL21.glUniformMatrix3x4fv(location, transpose, value);
210 	}
211 
212 
213 	@Override
glUniformMatrix4x3fv(int location, int count, boolean transpose, FloatBuffer value)214 	public void glUniformMatrix4x3fv (int location, int count, boolean transpose, FloatBuffer value) {
215 		GL21.glUniformMatrix4x3fv(location, transpose, value);
216 	}
217 
218 	@Override
glBlitFramebuffer(int srcX0, int srcY0, int srcX1, int srcY1, int dstX0, int dstY0, int dstX1, int dstY1, int mask, int filter)219 	public void glBlitFramebuffer (int srcX0, int srcY0, int srcX1, int srcY1, int dstX0, int dstY0, int dstX1, int dstY1,
220 		int mask, int filter) {
221 		GL30.glBlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
222 	}
223 
224 	@Override
glBindFramebuffer(int target, int framebuffer)225 	public void glBindFramebuffer (int target, int framebuffer) {
226 		GL30.glBindFramebuffer(target, framebuffer);
227 	}
228 
229 	@Override
glBindRenderbuffer(int target, int renderbuffer)230 	public void glBindRenderbuffer (int target, int renderbuffer) {
231 		GL30.glBindRenderbuffer(target, renderbuffer);
232 	}
233 
234 	@Override
glCheckFramebufferStatus(int target)235 	public int glCheckFramebufferStatus (int target) {
236 		return GL30.glCheckFramebufferStatus(target);
237 	}
238 
239 	@Override
glDeleteFramebuffers(int n, IntBuffer framebuffers)240 	public void glDeleteFramebuffers (int n, IntBuffer framebuffers) {
241 		GL30.glDeleteFramebuffers(framebuffers);
242 	}
243 
244 	@Override
glDeleteFramebuffer(int framebuffer)245 	public void glDeleteFramebuffer (int framebuffer) {
246 		GL30.glDeleteFramebuffers(framebuffer);
247 	}
248 
249 	@Override
glDeleteRenderbuffers(int n, IntBuffer renderbuffers)250 	public void glDeleteRenderbuffers (int n, IntBuffer renderbuffers) {
251 		GL30.glDeleteRenderbuffers(renderbuffers);
252 	}
253 
254 	@Override
glDeleteRenderbuffer(int renderbuffer)255 	public void glDeleteRenderbuffer (int renderbuffer) {
256 		GL30.glDeleteRenderbuffers(renderbuffer);
257 	}
258 
259 	@Override
glGenerateMipmap(int target)260 	public void glGenerateMipmap (int target) {
261 		GL30.glGenerateMipmap(target);
262 	}
263 
264 	@Override
glGenFramebuffers(int n, IntBuffer framebuffers)265 	public void glGenFramebuffers (int n, IntBuffer framebuffers) {
266 		GL30.glGenFramebuffers(framebuffers);
267 	}
268 
269 	@Override
glGenFramebuffer()270 	public int glGenFramebuffer () {
271 		return GL30.glGenFramebuffers();
272 	}
273 
274 	@Override
glGenRenderbuffers(int n, IntBuffer renderbuffers)275 	public void glGenRenderbuffers (int n, IntBuffer renderbuffers) {
276 		GL30.glGenRenderbuffers(renderbuffers);
277 	}
278 
279 	@Override
glGenRenderbuffer()280 	public int glGenRenderbuffer () {
281 		return GL30.glGenRenderbuffers();
282 	}
283 
284 	@Override
glGetRenderbufferParameteriv(int target, int pname, IntBuffer params)285 	public void glGetRenderbufferParameteriv (int target, int pname, IntBuffer params) {
286 		GL30.glGetRenderbufferParameteriv(target, pname, params);
287 	}
288 
289 	@Override
glIsFramebuffer(int framebuffer)290 	public boolean glIsFramebuffer (int framebuffer) {
291 		return GL30.glIsFramebuffer(framebuffer);
292 	}
293 
294 	@Override
glIsRenderbuffer(int renderbuffer)295 	public boolean glIsRenderbuffer (int renderbuffer) {
296 		return GL30.glIsRenderbuffer(renderbuffer);
297 	}
298 
299 	@Override
glRenderbufferStorage(int target, int internalformat, int width, int height)300 	public void glRenderbufferStorage (int target, int internalformat, int width, int height) {
301 		GL30.glRenderbufferStorage(target, internalformat, width, height);
302 	}
303 
304 	@Override
glRenderbufferStorageMultisample(int target, int samples, int internalformat, int width, int height)305 	public void glRenderbufferStorageMultisample (int target, int samples, int internalformat, int width, int height) {
306 		GL30.glRenderbufferStorageMultisample(target, samples, internalformat, width, height);
307 	}
308 
309 	@Override
glFramebufferTexture2D(int target, int attachment, int textarget, int texture, int level)310 	public void glFramebufferTexture2D (int target, int attachment, int textarget, int texture, int level) {
311 		GL30.glFramebufferTexture2D(target, attachment, textarget, texture, level);
312 	}
313 
314 	@Override
glFramebufferRenderbuffer(int target, int attachment, int renderbuffertarget, int renderbuffer)315 	public void glFramebufferRenderbuffer (int target, int attachment, int renderbuffertarget, int renderbuffer) {
316 		GL30.glFramebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer);
317 	}
318 
319 	@Override
glFramebufferTextureLayer(int target, int attachment, int texture, int level, int layer)320 	public void glFramebufferTextureLayer (int target, int attachment, int texture, int level, int layer) {
321 		GL30.glFramebufferTextureLayer(target, attachment, texture, level, layer);
322 	}
323 
324 	@Override
glFlushMappedBufferRange(int target, int offset, int length)325 	public void glFlushMappedBufferRange (int target, int offset, int length) {
326 		GL30.glFlushMappedBufferRange(target, offset, length);
327 	}
328 
329 	@Override
glBindVertexArray(int array)330 	public void glBindVertexArray (int array) {
331 		GL30.glBindVertexArray(array);
332 	}
333 
334 	@Override
glDeleteVertexArrays(int n, int[] arrays, int offset)335 	public void glDeleteVertexArrays (int n, int[] arrays, int offset) {
336 		for(int i = offset; i < offset + n; i++) {
337 			GL30.glDeleteVertexArrays(arrays[i]);
338 		}
339 	}
340 
341 	@Override
glDeleteVertexArrays(int n, IntBuffer arrays)342 	public void glDeleteVertexArrays (int n, IntBuffer arrays) {
343 		GL30.glDeleteVertexArrays(arrays);
344 	}
345 
346 	@Override
glGenVertexArrays(int n, int[] arrays, int offset)347 	public void glGenVertexArrays (int n, int[] arrays, int offset) {
348 		for(int i = offset; i < offset + n; i++) {
349 			arrays[i] = GL30.glGenVertexArrays();
350 		}
351 	}
352 
353 	@Override
glGenVertexArrays(int n, IntBuffer arrays)354 	public void glGenVertexArrays (int n, IntBuffer arrays) {
355 		GL30.glGenVertexArrays(arrays);
356 	}
357 
358 	@Override
glIsVertexArray(int array)359 	public boolean glIsVertexArray (int array) {
360 		return GL30.glIsVertexArray(array);
361 	}
362 
363 	@Override
glBeginTransformFeedback(int primitiveMode)364 	public void glBeginTransformFeedback (int primitiveMode) {
365 		GL30.glBeginTransformFeedback(primitiveMode);
366 	}
367 
368 	@Override
glEndTransformFeedback()369 	public void glEndTransformFeedback () {
370 		GL30.glEndTransformFeedback();
371 	}
372 
373 	@Override
glBindBufferRange(int target, int index, int buffer, int offset, int size)374 	public void glBindBufferRange (int target, int index, int buffer, int offset, int size) {
375 		GL30.glBindBufferRange(target, index, buffer, offset, size);
376 	}
377 
378 	@Override
glBindBufferBase(int target, int index, int buffer)379 	public void glBindBufferBase (int target, int index, int buffer) {
380 		GL30.glBindBufferBase(target, index, buffer);
381 	}
382 
383 	@Override
glTransformFeedbackVaryings(int program, String[] varyings, int bufferMode)384 	public void glTransformFeedbackVaryings (int program, String[] varyings, int bufferMode) {
385 		GL30.glTransformFeedbackVaryings(program, varyings, bufferMode);
386 	}
387 
388 	@Override
glVertexAttribIPointer(int index, int size, int type, int stride, int offset)389 	public void glVertexAttribIPointer (int index, int size, int type, int stride, int offset) {
390 		GL30.glVertexAttribIPointer(index, size, type, stride, offset);
391 	}
392 
393 	@Override
glGetVertexAttribIiv(int index, int pname, IntBuffer params)394 	public void glGetVertexAttribIiv (int index, int pname, IntBuffer params) {
395 		GL30.glGetVertexAttribIiv(index, pname, params);
396 	}
397 
398 	@Override
glGetVertexAttribIuiv(int index, int pname, IntBuffer params)399 	public void glGetVertexAttribIuiv (int index, int pname, IntBuffer params) {
400 		GL30.glGetVertexAttribIuiv(index, pname, params);
401 	}
402 
403 	@Override
glVertexAttribI4i(int index, int x, int y, int z, int w)404 	public void glVertexAttribI4i (int index, int x, int y, int z, int w) {
405 		GL30.glVertexAttribI4i(index, x, y, z, w);
406 	}
407 
408 	@Override
glVertexAttribI4ui(int index, int x, int y, int z, int w)409 	public void glVertexAttribI4ui (int index, int x, int y, int z, int w) {
410 		GL30.glVertexAttribI4ui(index, x, y, z, w);
411 	}
412 
413 	@Override
glGetUniformuiv(int program, int location, IntBuffer params)414 	public void glGetUniformuiv (int program, int location, IntBuffer params) {
415 		GL30.glGetUniformuiv(program, location, params);
416 	}
417 
418 	@Override
glGetFragDataLocation(int program, String name)419 	public int glGetFragDataLocation (int program, String name) {
420 		return GL30.glGetFragDataLocation(program, name);
421 	}
422 
423 	@Override
glUniform1uiv(int location, int count, IntBuffer value)424 	public void glUniform1uiv (int location, int count, IntBuffer value) {
425 		GL30.glUniform1uiv(location, value);
426 	}
427 
428 	@Override
glUniform3uiv(int location, int count, IntBuffer value)429 	public void glUniform3uiv (int location, int count, IntBuffer value) {
430 		GL30.glUniform3uiv(location, value);
431 	}
432 
433 	@Override
glUniform4uiv(int location, int count, IntBuffer value)434 	public void glUniform4uiv (int location, int count, IntBuffer value) {
435 		GL30.glUniform4uiv(location, value);
436 	}
437 
438 	@Override
glClearBufferiv(int buffer, int drawbuffer, IntBuffer value)439 	public void glClearBufferiv (int buffer, int drawbuffer, IntBuffer value) {
440 		GL30.glClearBufferiv(buffer, drawbuffer, value);
441 	}
442 
443 	@Override
glClearBufferuiv(int buffer, int drawbuffer, IntBuffer value)444 	public void glClearBufferuiv (int buffer, int drawbuffer, IntBuffer value) {
445 		GL30.glClearBufferuiv(buffer, drawbuffer, value);
446 	}
447 
448 	@Override
glClearBufferfv(int buffer, int drawbuffer, FloatBuffer value)449 	public void glClearBufferfv (int buffer, int drawbuffer, FloatBuffer value) {
450 		GL30.glClearBufferfv(buffer, drawbuffer, value);
451 	}
452 
453 	@Override
glClearBufferfi(int buffer, int drawbuffer, float depth, int stencil)454 	public void glClearBufferfi (int buffer, int drawbuffer, float depth, int stencil) {
455 		GL30.glClearBufferfi(buffer, drawbuffer, depth, stencil);
456 	}
457 
458 	@Override
glGetStringi(int name, int index)459 	public String glGetStringi (int name, int index) {
460 		return GL30.glGetStringi(name, index);
461 	}
462 
463 	@Override
glCopyBufferSubData(int readTarget, int writeTarget, int readOffset, int writeOffset, int size)464 	public void glCopyBufferSubData (int readTarget, int writeTarget, int readOffset, int writeOffset, int size) {
465 		GL31.glCopyBufferSubData(readTarget, writeTarget, readOffset, writeOffset, size);
466 	}
467 
468 	@Override
glGetUniformIndices(int program, String[] uniformNames, IntBuffer uniformIndices)469 	public void glGetUniformIndices (int program, String[] uniformNames, IntBuffer uniformIndices) {
470 		GL31.glGetUniformIndices(program, uniformNames, uniformIndices);
471 	}
472 
473 	@Override
glGetActiveUniformsiv(int program, int uniformCount, IntBuffer uniformIndices, int pname, IntBuffer params)474 	public void glGetActiveUniformsiv (int program, int uniformCount, IntBuffer uniformIndices, int pname, IntBuffer params) {
475 		GL31.glGetActiveUniformsiv(program, uniformIndices, pname, params);
476 	}
477 
478 	@Override
glGetUniformBlockIndex(int program, String uniformBlockName)479 	public int glGetUniformBlockIndex (int program, String uniformBlockName) {
480 		return GL31.glGetUniformBlockIndex(program, uniformBlockName);
481 	}
482 
483 	@Override
glGetActiveUniformBlockiv(int program, int uniformBlockIndex, int pname, IntBuffer params)484 	public void glGetActiveUniformBlockiv (int program, int uniformBlockIndex, int pname, IntBuffer params) {
485 		params.put(GL31.glGetActiveUniformBlocki(program, uniformBlockIndex, pname));
486 	}
487 
488 	@Override
glGetActiveUniformBlockName(int program, int uniformBlockIndex, Buffer length, Buffer uniformBlockName)489 	public void glGetActiveUniformBlockName (int program, int uniformBlockIndex, Buffer length, Buffer uniformBlockName) {
490 		GL31.glGetActiveUniformBlockName(program, uniformBlockIndex, (IntBuffer)length, (ByteBuffer)uniformBlockName);
491 	}
492 
493 	@Override
glGetActiveUniformBlockName(int program, int uniformBlockIndex)494 	public String glGetActiveUniformBlockName (int program, int uniformBlockIndex) {
495 		return GL31.glGetActiveUniformBlockName(program, uniformBlockIndex, 1024);
496 	}
497 
498 	@Override
glUniformBlockBinding(int program, int uniformBlockIndex, int uniformBlockBinding)499 	public void glUniformBlockBinding (int program, int uniformBlockIndex, int uniformBlockBinding) {
500 		GL31.glUniformBlockBinding(program, uniformBlockIndex, uniformBlockBinding);
501 	}
502 
503 	@Override
glDrawArraysInstanced(int mode, int first, int count, int instanceCount)504 	public void glDrawArraysInstanced (int mode, int first, int count, int instanceCount) {
505 		GL31.glDrawArraysInstanced(mode, first, count, instanceCount);
506 	}
507 
508 	@Override
glDrawElementsInstanced(int mode, int count, int type, int indicesOffset, int instanceCount)509 	public void glDrawElementsInstanced (int mode, int count, int type, int indicesOffset, int instanceCount) {
510 		GL31.glDrawElementsInstanced(mode, count, type, indicesOffset, instanceCount);
511 
512 	}
513 
514 	@Override
glGetInteger64v(int pname, LongBuffer params)515 	public void glGetInteger64v (int pname, LongBuffer params) {
516 		GL32.glGetInteger64v(pname, params);
517 	}
518 
519 	@Override
glGetBufferParameteri64v(int target, int pname, LongBuffer params)520 	public void glGetBufferParameteri64v (int target, int pname, LongBuffer params) {
521 		params.put(GL32.glGetBufferParameteri64(target, pname));
522 	}
523 
524 	@Override
glGenSamplers(int count, int[] samplers, int offset)525 	public void glGenSamplers (int count, int[] samplers, int offset) {
526 		for(int i = offset; i < offset + count; i++) {
527 			samplers[i] = GL33.glGenSamplers();
528 		}
529 	}
530 
531 	@Override
glGenSamplers(int count, IntBuffer samplers)532 	public void glGenSamplers (int count, IntBuffer samplers) {
533 		GL33.glGenSamplers(samplers);
534 	}
535 
536 	@Override
glDeleteSamplers(int count, int[] samplers, int offset)537 	public void glDeleteSamplers (int count, int[] samplers, int offset) {
538 		for(int i = offset; i < offset + count; i++) {
539 			GL33.glDeleteSamplers(samplers[i]);
540 		}
541 	}
542 
543 	@Override
glDeleteSamplers(int count, IntBuffer samplers)544 	public void glDeleteSamplers (int count, IntBuffer samplers) {
545 		GL33.glDeleteSamplers(samplers);
546 	}
547 
548 	@Override
glIsSampler(int sampler)549 	public boolean glIsSampler (int sampler) {
550 		return GL33.glIsSampler(sampler);
551 	}
552 
553 	@Override
glBindSampler(int unit, int sampler)554 	public void glBindSampler (int unit, int sampler) {
555 		GL33.glBindSampler(unit, sampler);
556 	}
557 
558 	@Override
glSamplerParameteri(int sampler, int pname, int param)559 	public void glSamplerParameteri (int sampler, int pname, int param) {
560 		GL33.glSamplerParameteri(sampler, pname, param);
561 	}
562 
563 	@Override
glSamplerParameteriv(int sampler, int pname, IntBuffer param)564 	public void glSamplerParameteriv (int sampler, int pname, IntBuffer param) {
565 		GL33.glSamplerParameteriv(sampler, pname, param);
566 	}
567 
568 	@Override
glSamplerParameterf(int sampler, int pname, float param)569 	public void glSamplerParameterf (int sampler, int pname, float param) {
570 		GL33.glSamplerParameterf(sampler, pname, param);
571 	}
572 
573 	@Override
glSamplerParameterfv(int sampler, int pname, FloatBuffer param)574 	public void glSamplerParameterfv (int sampler, int pname, FloatBuffer param) {
575 		GL33.glSamplerParameterfv(sampler, pname, param);
576 	}
577 
578 	@Override
glGetSamplerParameteriv(int sampler, int pname, IntBuffer params)579 	public void glGetSamplerParameteriv (int sampler, int pname, IntBuffer params) {
580 		GL33.glGetSamplerParameterIiv(sampler, pname, params);
581 	}
582 
583 	@Override
glGetSamplerParameterfv(int sampler, int pname, FloatBuffer params)584 	public void glGetSamplerParameterfv (int sampler, int pname, FloatBuffer params) {
585 		GL33.glGetSamplerParameterfv(sampler, pname, params);
586 	}
587 
588 	@Override
glVertexAttribDivisor(int index, int divisor)589 	public void glVertexAttribDivisor (int index, int divisor) {
590 		GL33.glVertexAttribDivisor(index, divisor);
591 	}
592 
593 	@Override
glBindTransformFeedback(int target, int id)594 	public void glBindTransformFeedback (int target, int id) {
595 		GL40.glBindTransformFeedback(target, id);
596 	}
597 
598 	@Override
glDeleteTransformFeedbacks(int n, int[] ids, int offset)599 	public void glDeleteTransformFeedbacks (int n, int[] ids, int offset) {
600 		for(int i = offset; i < offset + n; i++) {
601 			GL40.glDeleteTransformFeedbacks(ids[i]);
602 		}
603 	}
604 
605 	@Override
glDeleteTransformFeedbacks(int n, IntBuffer ids)606 	public void glDeleteTransformFeedbacks (int n, IntBuffer ids) {
607 		GL40.glDeleteTransformFeedbacks(ids);
608 	}
609 
610 	@Override
glGenTransformFeedbacks(int n, int[] ids, int offset)611 	public void glGenTransformFeedbacks (int n, int[] ids, int offset) {
612 		for(int i = offset; i < offset + n; i++) {
613 			ids[i] = GL40.glGenTransformFeedbacks();
614 		}
615 	}
616 
617 	@Override
glGenTransformFeedbacks(int n, IntBuffer ids)618 	public void glGenTransformFeedbacks (int n, IntBuffer ids) {
619 		GL40.glGenTransformFeedbacks(ids);
620 	}
621 
622 	@Override
glIsTransformFeedback(int id)623 	public boolean glIsTransformFeedback (int id) {
624 		return GL40.glIsTransformFeedback(id);
625 	}
626 
627 	@Override
glPauseTransformFeedback()628 	public void glPauseTransformFeedback () {
629 		GL40.glPauseTransformFeedback();
630 	}
631 
632 	@Override
glResumeTransformFeedback()633 	public void glResumeTransformFeedback () {
634 		GL40.glResumeTransformFeedback();
635 	}
636 
637 	@Override
glProgramParameteri(int program, int pname, int value)638 	public void glProgramParameteri (int program, int pname, int value) {
639 		GL41.glProgramParameteri(program, pname, value);
640 	}
641 
642 	@Override
glInvalidateFramebuffer(int target, int numAttachments, IntBuffer attachments)643 	public void glInvalidateFramebuffer (int target, int numAttachments, IntBuffer attachments) {
644 		GL43.glInvalidateFramebuffer(target, attachments);
645 	}
646 
647 	@Override
glInvalidateSubFramebuffer(int target, int numAttachments, IntBuffer attachments, int x, int y, int width, int height)648 	public void glInvalidateSubFramebuffer (int target, int numAttachments, IntBuffer attachments, int x, int y, int width,
649 		int height) {
650 		GL43.glInvalidateSubFramebuffer(target, attachments, x, y, width, height);
651 	}
652 }
653