Buffer checking code
This commit is contained in:
parent
ecc62164e8
commit
e2f13953d2
|
@ -126,51 +126,51 @@ public abstract class ARBImaging {
|
|||
public static final int GL_MINMAX_SINK = 0x8030;
|
||||
|
||||
public static void glColorTable(int target, int internalFormat, int width, int format, int type, ByteBuffer data) {
|
||||
// TODO: check buffer size valid
|
||||
BufferChecks.checkBuffer(data, 256);
|
||||
nglColorTable(target, internalFormat, width, format, type, data, data.position());
|
||||
}
|
||||
public static void glColorTable(int target, int internalFormat, int width, int format, int type, FloatBuffer data) {
|
||||
// TODO: check buffer size valid
|
||||
BufferChecks.checkBuffer(data, 256);
|
||||
nglColorTable(target, internalFormat, width, format, type, data, data.position() << 2);
|
||||
}
|
||||
private static native void nglColorTable(int target, int internalFormat, int width, int format, int type, Buffer data, int data_offset);
|
||||
public static void glColorSubTable(int target, int start, int count, int format, int type, ByteBuffer data) {
|
||||
// TODO: check buffer size valid
|
||||
BufferChecks.checkBuffer(data, 256);
|
||||
nglColorSubTable(target, start, count, format, type, data, data.position());
|
||||
}
|
||||
public static void glColorSubTable(int target, int start, int count, int format, int type, FloatBuffer data) {
|
||||
// TODO: check buffer size valid
|
||||
BufferChecks.checkBuffer(data, 256);
|
||||
nglColorSubTable(target, start, count, format, type, data, data.position() << 2);
|
||||
}
|
||||
private static native void nglColorSubTable(int target, int start, int count, int format, int type, Buffer data, int data_offset);
|
||||
public static void glColorTableParameter(int target, int pname, IntBuffer params) {
|
||||
// TODO: check buffer size valid
|
||||
BufferChecks.checkBuffer(params);
|
||||
nglColorTableParameteriv(target, pname, params, params.position());
|
||||
}
|
||||
private static native void nglColorTableParameteriv(int target, int pname, IntBuffer params, int data_offset);
|
||||
public static void glColorTableParameter(int target, int pname, FloatBuffer params) {
|
||||
// TODO: check buffer size valid
|
||||
BufferChecks.checkBuffer(params);
|
||||
nglColorTableParameterfv(target, pname, params, params.position());
|
||||
}
|
||||
private static native void nglColorTableParameterfv(int target, int pname, FloatBuffer params, int data_offset);
|
||||
public static native void glCopyColorSubTable(int target, int start, int x, int y, int width);
|
||||
public static native void glCopyColorTable(int target, int internalformat, int x, int y, int width);
|
||||
public static void glGetColorTable(int target, int format, int type, ByteBuffer data) {
|
||||
// TODO: check buffer size valid
|
||||
BufferChecks.checkBuffer(data, 256);
|
||||
nglGetColorTable(target, format, type, data, data.position());
|
||||
}
|
||||
public static void glGetColorTable(int target, int format, int type, FloatBuffer data) {
|
||||
// TODO: check buffer size valid
|
||||
BufferChecks.checkBuffer(data, 256);
|
||||
nglGetColorTable(target, format, type, data, data.position());
|
||||
}
|
||||
private static native void nglGetColorTable(int target, int format, int type, Buffer data, int data_offset);
|
||||
public static void glGetColorTableParameter(int target, int pname, IntBuffer params) {
|
||||
// TODO: check buffer size valid
|
||||
BufferChecks.checkBuffer(params);
|
||||
nglGetColorTableParameteriv(target, pname, params, params.position());
|
||||
}
|
||||
private static native void nglGetColorTableParameteriv(int target, int pname, IntBuffer params, int params_offset);
|
||||
public static void glGetColorTableParameter(int target, int pname, FloatBuffer params) {
|
||||
// TODO: check buffer size valid
|
||||
BufferChecks.checkBuffer(params);
|
||||
nglGetColorTableParameterfv(target, pname, params, params.position());
|
||||
}
|
||||
private static native void nglGetColorTableParameterfv(int target, int pname, FloatBuffer params, int params_offset);
|
||||
|
@ -179,24 +179,24 @@ public abstract class ARBImaging {
|
|||
public static native void glHistogram(int target, int width, int internalformat, boolean sink);
|
||||
public static native void glResetHistogram(int target);
|
||||
public static void glGetHistogram(int target, boolean reset, int format, int type, ByteBuffer values) {
|
||||
// TODO: check buffer size valid
|
||||
BufferChecks.checkBuffer(values, 256);
|
||||
nglGetHistogram(target, reset, format, type, values, values.position());
|
||||
}
|
||||
public static void glGetHistogram(int target, boolean reset, int format, int type, ShortBuffer values) {
|
||||
// TODO: check buffer size valid
|
||||
BufferChecks.checkBuffer(values, 256);
|
||||
nglGetHistogram(target, reset, format, type, values, values.position() << 1);
|
||||
}
|
||||
public static void glGetHistogram(int target, boolean reset, int format, int type, IntBuffer values) {
|
||||
// TODO: check buffer size valid
|
||||
BufferChecks.checkBuffer(values, 256);
|
||||
nglGetHistogram(target, reset, format, type, values, values.position() << 2);
|
||||
}
|
||||
public static void glGetHistogram(int target, boolean reset, int format, int type, FloatBuffer values) {
|
||||
// TODO: check buffer size valid
|
||||
BufferChecks.checkBuffer(values, 256);
|
||||
nglGetHistogram(target, reset, format, type, values, values.position() << 2);
|
||||
}
|
||||
private static native void nglGetHistogram(int target, boolean reset, int format, int type, Buffer values, int values_offset);
|
||||
public static void glGetHistogramParameter(int target, int pname, FloatBuffer params) {
|
||||
BufferChecks.checkBuffer(params);
|
||||
BufferChecks.checkBuffer(params, 256);
|
||||
nglGetHistogramParameterfv(target, pname, params, params.position());
|
||||
}
|
||||
private static native void nglGetHistogramParameterfv(int target, int pname, FloatBuffer params, int params_offset);
|
||||
|
@ -235,23 +235,47 @@ public abstract class ARBImaging {
|
|||
}
|
||||
private static native void nglGetMinmaxParameteriv(int target, int pname, IntBuffer params, int params_offset);
|
||||
public static void glConvolutionFilter1D(int target, int internalformat, int width, int format, int type, ByteBuffer image) {
|
||||
// TODO: check buffer size valid
|
||||
if (image.remaining() < BufferChecks.calculateImageStorage(format, type, width, 1, 1)) {
|
||||
throw new BufferUnderflowException();
|
||||
}
|
||||
nglConvolutionFilter1D(target, internalformat, width, format, type, image, image.position());
|
||||
}
|
||||
public static void glConvolutionFilter1D(int target, int internalformat, int width, int format, int type, ShortBuffer image) {
|
||||
// TODO: check buffer size valid
|
||||
if (image.remaining() * 2 < BufferChecks.calculateImageStorage(format, type, width, 1, 1)) {
|
||||
throw new BufferUnderflowException();
|
||||
}
|
||||
nglConvolutionFilter1D(target, internalformat, width, format, type, image, image.position());
|
||||
}
|
||||
public static void glConvolutionFilter1D(int target, int internalformat, int width, int format, int type, IntBuffer image) {
|
||||
// TODO: check buffer size valid
|
||||
if (image.remaining() * 4 < BufferChecks.calculateImageStorage(format, type, width, 1, 1)) {
|
||||
throw new BufferUnderflowException();
|
||||
}
|
||||
nglConvolutionFilter1D(target, internalformat, width, format, type, image, image.position());
|
||||
}
|
||||
public static void glConvolutionFilter1D(int target, int internalformat, int width, int format, int type, FloatBuffer image) {
|
||||
// TODO: check buffer size valid
|
||||
if (image.remaining() * 4 < BufferChecks.calculateImageStorage(format, type, width, 1, 1)) {
|
||||
throw new BufferUnderflowException();
|
||||
}
|
||||
nglConvolutionFilter1D(target, internalformat, width, format, type, image, image.position());
|
||||
}
|
||||
private static native void nglConvolutionFilter1D(int target, int internalformat, int width, int format, int type, Buffer image, int image_offset);
|
||||
public static void glConvolutionFilter2D(int target, int internalformat, int width, int height, int format, int type, Buffer image) {
|
||||
public static void glConvolutionFilter2D(int target, int internalformat, int width, int height, int format, int type, ByteBuffer image) {
|
||||
if (image.remaining() < BufferChecks.calculateImageStorage(format, type, width, height, 1)) {
|
||||
throw new BufferUnderflowException();
|
||||
}
|
||||
nglConvolutionFilter2D(target, internalformat, width, height, format, type, image, image.position());
|
||||
}
|
||||
public static void glConvolutionFilter2D(int target, int internalformat, int width, int height, int format, int type, ShortBuffer image) {
|
||||
if (image.remaining() * 2 < BufferChecks.calculateImageStorage(format, type, width, height, 1)) {
|
||||
throw new BufferUnderflowException();
|
||||
}
|
||||
nglConvolutionFilter2D(target, internalformat, width, height, format, type, image, image.position() <<1);
|
||||
}
|
||||
public static void glConvolutionFilter2D(int target, int internalformat, int width, int height, int format, int type, IntBuffer image) {
|
||||
if (image.remaining() * 4 < BufferChecks.calculateImageStorage(format, type, width, height, 1)) {
|
||||
throw new BufferUnderflowException();
|
||||
}
|
||||
nglConvolutionFilter2D(target, internalformat, width, height, format, type, image, image.position() << 2);
|
||||
}
|
||||
private static native void nglConvolutionFilter2D(int target, int internalformat, int width, int height, int format, int type, Buffer image, int image_offset);
|
||||
public static native void glConvolutionParameterf(int target, int pname, float params);
|
||||
|
@ -286,12 +310,12 @@ public abstract class ARBImaging {
|
|||
}
|
||||
private static native void nglGetConvolutionFilter(int target, int format, int type, Buffer image, int image_offset);
|
||||
public static void glGetConvolutionParameter(int target, int pname, FloatBuffer params) {
|
||||
// TODO: check buffer size valid
|
||||
BufferChecks.checkBuffer(params);
|
||||
nglGetConvolutionParameterfv(target, pname, params, params.position());
|
||||
}
|
||||
private static native void nglGetConvolutionParameterfv(int target, int pname, FloatBuffer params, int params_offset);
|
||||
public static void glGetConvolutionParameter(int target, int pname, IntBuffer params) {
|
||||
// TODO: check buffer size valid
|
||||
BufferChecks.checkBuffer(params);
|
||||
nglGetConvolutionParameteriv(target, pname, params, params.position());
|
||||
}
|
||||
private static native void nglGetConvolutionParameteriv(int target, int pname, IntBuffer params, int params_offset);
|
||||
|
|
|
@ -48,13 +48,13 @@ public class ARBTransposeMatrix {
|
|||
public static final int GL_TRANSPOSE_COLOR_MATRIX_ARB = 0x84E6;
|
||||
|
||||
public static void glLoadTransposeMatrixARB(FloatBuffer pfMtx) {
|
||||
BufferChecks.checkBuffer(pfMtx);
|
||||
BufferChecks.checkBuffer(pfMtx, 16);
|
||||
nglLoadTransposeMatrixfARB(pfMtx, pfMtx.position());
|
||||
}
|
||||
private static native void nglLoadTransposeMatrixfARB(FloatBuffer pfMtx, int pfMtx_offset);
|
||||
|
||||
public static void glMultTransposeMatrixfARB(FloatBuffer pfMtx) {
|
||||
BufferChecks.checkBuffer(pfMtx);
|
||||
BufferChecks.checkBuffer(pfMtx, 16);
|
||||
nglMultTransposeMatrixfARB(pfMtx, pfMtx.position());
|
||||
}
|
||||
private static native void nglMultTransposeMatrixfARB(FloatBuffer pfMtx, int pfMtx_offset);
|
||||
|
|
|
@ -48,45 +48,41 @@ class BufferChecks {
|
|||
/** Static methods only! */
|
||||
private BufferChecks() {
|
||||
}
|
||||
/** The minimum size we'll allow for glGet* operations */
|
||||
private static final int MIN_BUFFER_SIZE = 16;
|
||||
|
||||
/**
|
||||
* The minimum size we'll allow for "large" glGet* operations that can
|
||||
* return lots of data, eg. glGetPixelMap
|
||||
* Default buffer size for most buffer checks.
|
||||
*/
|
||||
private static final int MIN_LARGE_BUFFER_SIZE = 256;
|
||||
private static final int DEFAULT_BUFFER_SIZE = 4;
|
||||
|
||||
/**
|
||||
* Helper method to ensure a buffer is big enough to receive data from a
|
||||
* glGet* operation.
|
||||
*
|
||||
* @param buf
|
||||
* The buffer to check
|
||||
* @param size
|
||||
* The minimum buffer size
|
||||
* @throws BufferOverflowException
|
||||
*/
|
||||
static void checkBuffer(Buffer buf, int size) {
|
||||
if (buf.remaining() < size) {
|
||||
throw new BufferOverflowException();
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Helper method to ensure a buffer is big enough to receive data from a
|
||||
* glGet* operation. To avoid unnecessarily complex buffer size checking
|
||||
* we've just set the bar artificially high and insist that any receiving
|
||||
* buffer has at least 16 remaining().
|
||||
* buffer has at least 4 remaining().
|
||||
*
|
||||
* @param buf
|
||||
* The buffer to check
|
||||
* @throws BufferOverflowException
|
||||
*/
|
||||
static void checkBuffer(Buffer buf) {
|
||||
if (buf.remaining() < MIN_BUFFER_SIZE) {
|
||||
// TODO: I don't think the default MIN_BUFFER_SIZE should be used for other than glGet*
|
||||
// Others, like glTexEnvf, should use their individual buffer max size (like 4)
|
||||
// throw new BufferOverflowException();
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Helper method to ensure a buffer is big enough to receive data from a
|
||||
* "large" glGet* operation. To avoid unnecessarily complex buffer size
|
||||
* checking we've just set the bar artificially high and insist that any
|
||||
* receiving buffer has at least 256 remaining().
|
||||
*
|
||||
* @param buf
|
||||
* The buffer to check
|
||||
* @throws BufferOverflowException
|
||||
*/
|
||||
static void checkLargeBuffer(Buffer buf) {
|
||||
if (buf.remaining() < MIN_LARGE_BUFFER_SIZE) {
|
||||
throw new BufferOverflowException();
|
||||
}
|
||||
checkBuffer(buf, DEFAULT_BUFFER_SIZE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper method to ensure that vertex buffer objects are disabled. If they
|
||||
* are enabled, we'll throw an OpenGLException
|
||||
|
|
|
@ -862,17 +862,17 @@ public abstract class GL11 {
|
|||
private static native void nglFeedbackBuffer(int size, int type, FloatBuffer buffer, int buffer_offset);
|
||||
|
||||
public static void glGetPixelMap(int map, FloatBuffer values) {
|
||||
BufferChecks.checkLargeBuffer(values);
|
||||
BufferChecks.checkBuffer(values, 256);
|
||||
nglGetPixelMapfv(map, values, values.position());
|
||||
}
|
||||
private static native void nglGetPixelMapfv(int map, FloatBuffer values, int values_offset);
|
||||
public static void glGetPixelMap(int map, IntBuffer values) {
|
||||
BufferChecks.checkLargeBuffer(values);
|
||||
BufferChecks.checkBuffer(values, 256);
|
||||
nglGetPixelMapuiv(map, values, values.position());
|
||||
}
|
||||
private static native void nglGetPixelMapuiv(int map, IntBuffer values, int values_offset);
|
||||
public static void glGetPixelMap(int map, ShortBuffer values) {
|
||||
BufferChecks.checkLargeBuffer(values);
|
||||
BufferChecks.checkBuffer(values, 256);
|
||||
nglGetPixelMapusv(map, values, values.position());
|
||||
}
|
||||
private static native void nglGetPixelMapusv(int map, ShortBuffer values, int values_offset);
|
||||
|
@ -887,11 +887,11 @@ public abstract class GL11 {
|
|||
}
|
||||
private static native void nglGetMaterialiv(int face, int pname, IntBuffer params, int params_offset);
|
||||
public static void glGetMap(int target, int query, FloatBuffer v) {
|
||||
BufferChecks.checkLargeBuffer(v);
|
||||
BufferChecks.checkBuffer(v, 256);
|
||||
nglGetMapfv(target, query, v, v.position());
|
||||
}
|
||||
public static void glGetMap(int target, int query, IntBuffer v) {
|
||||
BufferChecks.checkLargeBuffer(v);
|
||||
BufferChecks.checkBuffer(v, 256);
|
||||
nglGetMapiv(target, query, v, v.position());
|
||||
}
|
||||
private static native void nglGetMapfv(int target, int query, FloatBuffer v, int v_offset);
|
||||
|
@ -913,22 +913,22 @@ public abstract class GL11 {
|
|||
}
|
||||
private static native void nglGetClipPlane(int plane, DoubleBuffer equation, int equation_offset);
|
||||
public static void glGetBoolean(int pname, ByteBuffer params) {
|
||||
BufferChecks.checkBuffer(params);
|
||||
BufferChecks.checkBuffer(params, 16);
|
||||
nglGetBooleanv(pname, params, params.position());
|
||||
}
|
||||
private static native void nglGetBooleanv(int pname, ByteBuffer params, int params_offset);
|
||||
public static void glGetDouble(int pname, DoubleBuffer params) {
|
||||
BufferChecks.checkBuffer(params);
|
||||
BufferChecks.checkBuffer(params, 16);
|
||||
nglGetDoublev(pname, params, params.position());
|
||||
}
|
||||
private static native void nglGetDoublev(int pname, DoubleBuffer params, int params_offset);
|
||||
public static void glGetFloat(int pname, FloatBuffer params) {
|
||||
BufferChecks.checkBuffer(params);
|
||||
BufferChecks.checkBuffer(params, 16);
|
||||
nglGetFloatv(pname, params, params.position());
|
||||
}
|
||||
private static native void nglGetFloatv(int pname, FloatBuffer params, int params_offset);
|
||||
public static void glGetInteger(int pname, IntBuffer params) {
|
||||
BufferChecks.checkBuffer(params);
|
||||
BufferChecks.checkBuffer(params, 16);
|
||||
nglGetIntegerv(pname, params, params.position());
|
||||
}
|
||||
private static native void nglGetIntegerv(int pname, IntBuffer params, int params_offset);
|
||||
|
@ -1054,11 +1054,7 @@ public abstract class GL11 {
|
|||
|
||||
public static native String glGetString(int name);
|
||||
public static void glGetPolygonStipple(ByteBuffer mask) {
|
||||
// TODO: check buffer size valid. This is a bit more fiddly than you might think;
|
||||
// it looks like a 32x32 byte array but it might not be according to the spec :/
|
||||
if (mask.remaining() < 32 * 32) {
|
||||
throw new BufferOverflowException();
|
||||
}
|
||||
BufferChecks.checkBuffer(mask, 1024);
|
||||
nglGetPolygonStipple(mask, mask.position());
|
||||
}
|
||||
private static native void nglGetPolygonStipple(ByteBuffer mask, int mask_offset);
|
||||
|
@ -1090,7 +1086,7 @@ public abstract class GL11 {
|
|||
public static native void glLogicOp(int opcode);
|
||||
public static native void glLoadName(int name);
|
||||
public static void glLoadMatrix(FloatBuffer m) {
|
||||
BufferChecks.checkBuffer(m);
|
||||
BufferChecks.checkBuffer(m, 16);
|
||||
nglLoadMatrixf(m, m.position());
|
||||
}
|
||||
private static native void nglLoadMatrixf(FloatBuffer m, int m_offset);
|
||||
|
@ -1125,10 +1121,7 @@ public abstract class GL11 {
|
|||
public static native boolean glIsTexture(int texture);
|
||||
public static native void glMatrixMode(int mode);
|
||||
public static void glPolygonStipple(ByteBuffer mask) {
|
||||
// TODO: check buffer size valid (again, possibly more complicated than it first appears)
|
||||
if (mask.remaining() < 32 * 32) {
|
||||
throw new BufferUnderflowException();
|
||||
}
|
||||
BufferChecks.checkBuffer(mask, 1024);
|
||||
nglPolygonStipple(mask, mask.position());
|
||||
}
|
||||
private static native void nglPolygonStipple(ByteBuffer mask, int mask_offset);
|
||||
|
@ -1178,7 +1171,7 @@ public abstract class GL11 {
|
|||
public static native void glNewList(int list, int mode);
|
||||
public static native void glEndList();
|
||||
public static void glMultMatrixf(FloatBuffer m) {
|
||||
BufferChecks.checkBuffer(m);
|
||||
BufferChecks.checkBuffer(m, 16);
|
||||
nglMultMatrixf(m, m.position());
|
||||
}
|
||||
private static native void nglMultMatrixf(FloatBuffer m, int m_offset);
|
||||
|
|
|
@ -247,12 +247,12 @@ public abstract class GL13 extends GL12 {
|
|||
public static native void glMultiTexCoord3f(int target, float s, float t, float r);
|
||||
public static native void glMultiTexCoord4f(int target, float s, float t, float r, float q);
|
||||
public static void glLoadTransposeMatrix(FloatBuffer m) {
|
||||
BufferChecks.checkBuffer(m);
|
||||
BufferChecks.checkBuffer(m, 16);
|
||||
nglLoadTransposeMatrixf(m, m.position());
|
||||
}
|
||||
private static native void nglLoadTransposeMatrixf(FloatBuffer m, int m_offset);
|
||||
public static void glMultTransposeMatrix(FloatBuffer m) {
|
||||
BufferChecks.checkBuffer(m);
|
||||
BufferChecks.checkBuffer(m, 16);
|
||||
nglMultTransposeMatrixf(m, m.position());
|
||||
}
|
||||
private static native void nglMultTransposeMatrixf(FloatBuffer m, int m_offset);
|
||||
|
|
|
@ -40,7 +40,7 @@ package org.lwjgl.opengl;
|
|||
|
||||
import java.nio.*;
|
||||
|
||||
public class GL15 extends GL14 {
|
||||
public abstract class GL15 extends GL14 {
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
// ---------------------- ARB_vertex_buffer_object ----------------------
|
||||
|
@ -205,7 +205,7 @@ public class GL15 extends GL14 {
|
|||
public static native boolean glUnmapBuffer(int target);
|
||||
|
||||
public static void glGetBufferParameter(int target, int pname, IntBuffer params) {
|
||||
// TODO:check buffer size
|
||||
BufferChecks.checkBuffer(params);
|
||||
nglGetBufferParameteriv(target, pname, params, params.position());
|
||||
}
|
||||
|
||||
|
@ -274,7 +274,7 @@ public class GL15 extends GL14 {
|
|||
|
||||
// ---------------------------
|
||||
public static void glGetQueryObjecti(int id, int pname, IntBuffer params) {
|
||||
// TODO: check buffer size
|
||||
BufferChecks.checkBuffer(params);
|
||||
nglGetQueryObjectiv(id, pname, params, params.position());
|
||||
}
|
||||
|
||||
|
@ -286,7 +286,7 @@ public class GL15 extends GL14 {
|
|||
|
||||
// ---------------------------
|
||||
public static void glGetQueryObjectui(int id, int pname, IntBuffer params) {
|
||||
// TODO: check buffer size
|
||||
BufferChecks.checkBuffer(params);
|
||||
nglGetQueryObjectuiv(id, pname, params, params.position());
|
||||
}
|
||||
|
||||
|
|
|
@ -70,12 +70,12 @@ public class NVEvaluators {
|
|||
public static final int GL_MAX_RATIONAL_EVAL_ORDER_NV = 0x86D7;
|
||||
|
||||
public static void glGetMapControlPointsNV(int target, int index, int type, int ustride, int vstride, boolean packed, FloatBuffer pPoints) {
|
||||
BufferChecks.checkLargeBuffer(pPoints);
|
||||
// TODO:Check buffer size
|
||||
nglGetMapControlPointsNV(target, index, type, ustride, vstride, packed, pPoints, pPoints.position()<<2);
|
||||
}
|
||||
private static native void nglGetMapControlPointsNV(int target, int index, int type, int ustride, int vstride, boolean packed, Buffer pPoints, int pPoints_offset);
|
||||
public static void glMapControlPointsNV(int target, int index, int type, int ustride, int vstride, int uorder, int vorder, boolean packed, FloatBuffer pPoints) {
|
||||
BufferChecks.checkLargeBuffer(pPoints);
|
||||
// TODO:Check buffer size
|
||||
nglMapControlPointsNV(target, index, type, ustride, vstride, uorder, vorder, packed, pPoints, pPoints.position()<<2);
|
||||
}
|
||||
private static native void nglMapControlPointsNV(int target, int index, int type, int ustride, int vstride, int uorder, int vorder, boolean packed, Buffer pPoints, int pPoints_offset);
|
||||
|
|
Loading…
Reference in New Issue