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