package com.sun.prism.es2;
import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.nio.IntBuffer;
import com.sun.javafx.PlatformUtil;
import com.sun.prism.MeshView;
import com.sun.prism.PhongMaterial.MapType;
import com.sun.prism.Texture.WrapMode;
import com.sun.prism.impl.PrismSettings;
import com.sun.prism.paint.Color;
abstract class GLContext {
final static int GL_ZERO = 0;
final static int GL_ONE = 1;
final static int GL_SRC_COLOR = 2;
final static int GL_ONE_MINUS_SRC_COLOR = 3;
final static int GL_DST_COLOR = 4;
final static int GL_ONE_MINUS_DST_COLOR = 5;
final static int GL_SRC_ALPHA = 6;
final static int GL_ONE_MINUS_SRC_ALPHA = 7;
final static int GL_DST_ALPHA = 8;
final static int GL_ONE_MINUS_DST_ALPHA = 9;
final static int GL_CONSTANT_COLOR = 10;
final static int GL_ONE_MINUS_CONSTANT_COLOR = 11;
final static int GL_CONSTANT_ALPHA = 12;
final static int GL_ONE_MINUS_CONSTANT_ALPHA = 13;
final static int GL_SRC_ALPHA_SATURATE = 14;
final static int GL_FLOAT = 20;
final static int GL_UNSIGNED_BYTE = 21;
final static int GL_UNSIGNED_INT_8_8_8_8_REV = 22;
final static int GL_UNSIGNED_INT_8_8_8_8 = 23;
final static int GL_UNSIGNED_SHORT_8_8_APPLE = 24;
final static int GL_RGBA = 40;
final static int GL_BGRA = 41;
final static int GL_RGB = 42;
final static int GL_LUMINANCE = 43;
final static int GL_ALPHA = 44;
final static int GL_RGBA32F = 45;
final static int GL_YCBCR_422_APPLE = 46;
final static int GL_TEXTURE_2D = 50;
final static int GL_TEXTURE_BINDING_2D = 51;
final static int GL_NEAREST = 52;
final static int GL_LINEAR = 53;
final static int GL_NEAREST_MIPMAP_NEAREST = 54;
final static int GL_LINEAR_MIPMAP_LINEAR = 55;
final static int GL_UNPACK_ALIGNMENT = 60;
final static int GL_UNPACK_ROW_LENGTH = 61;
final static int GL_UNPACK_SKIP_PIXELS = 62;
final static int GL_UNPACK_SKIP_ROWS = 63;
final static int WRAPMODE_REPEAT = 100;
final static int WRAPMODE_CLAMP_TO_EDGE = 101;
final static int WRAPMODE_CLAMP_TO_BORDER = 102;
final static int GL_BACK = 110;
final static int GL_FRONT = 111;
final static int GL_NONE = 112;
final static int GL_MAX_FRAGMENT_UNIFORM_COMPONENTS = 120;
final static int GL_MAX_FRAGMENT_UNIFORM_VECTORS = 121;
final static int GL_MAX_TEXTURE_IMAGE_UNITS = 122;
final static int GL_MAX_TEXTURE_SIZE = 123;
final static int GL_MAX_VERTEX_ATTRIBS = 124;
final static int GL_MAX_VARYING_COMPONENTS = 125;
final static int GL_MAX_VARYING_VECTORS = 126;
final static int GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS = 127;
final static int GL_MAX_VERTEX_UNIFORM_COMPONENTS = 128;
final static int GL_MAX_VERTEX_UNIFORM_VECTORS = 129;
final static int MAPTYPE_DIFFUSE = MapType.DIFFUSE.ordinal();
final static int MAPTYPE_SPECULAR = MapType.SPECULAR.ordinal();
final static int MAPTYPE_BUMP = MapType.BUMP.ordinal();
final static int MAPTYPE_SELFILLUM = MapType.SELF_ILLUM.ordinal();
final static int NUM_MATRIX_ELEMENTS = 16;
long nativeCtxInfo;
private int maxTextureSize = -1;
private Boolean nonPowTwoExtAvailable;
private Boolean clampToZeroAvailable;
private int activeTexUnit;
private int[] boundTextures = new int[4];
private int viewportX, viewportY, viewportWidth, viewportHeight;
private boolean depthTest = false;
private boolean msaa = false;
private int maxSampleSize = -1;
private static final int FBO_ID_UNSET = -1;
private static final int FBO_ID_NOCACHE = -2;
private int nativeFBOID = PlatformUtil.isMac() || PlatformUtil.isIOS() ? FBO_ID_NOCACHE : FBO_ID_UNSET;
private static native void nActiveTexture(long nativeCtxInfo, int texUnit);
private static native void nBindFBO(long nativeCtxInfo, int nativeFBOID);
private static native void nBindTexture(long nativeCtxInfo, int texID);
private static native void nBlendFunc(int sFactor, int dFactor);
private static native void nClearBuffers(long nativeCtxInfo,
float red, float green, float blue, float alpha,
boolean clearColor, boolean clearDepth, boolean ignoreScissor);
private static native int nCompileShader(long nativeCtxInfo, String src,
boolean vertex);
private static native int nCreateDepthBuffer(long nativeCtxInfo, int width,
int height, int msaa);
private static native int nCreateRenderBuffer(long nativeCtxInfo, int width,
int height, int msaa);
private static native int nCreateFBO(long nativeCtxInfo, int texID);
private static native int nCreateProgram(long nativeCtxInfo,
int vertexShaderID, int[] fragmentShaderID,
int numAttrs, String[] attrs, int[] indexs);
private static native int nCreateTexture(long nativeCtxInfo, int width,
int height);
private static native void nDeleteRenderBuffer(long nativeCtxInfo, int rbID);
private static native void nDeleteFBO(long nativeCtxInfo, int fboID);
private static native void nDeleteShader(long nativeCtxInfo, int shadeID);
private static native void nDeleteTexture(long nativeCtxInfo, int tID);
private static native void nDisposeShaders(long nativeCtxInfo,
int pID, int vID, int[] fID);
private static native void nFinish();
private static native int nGenAndBindTexture();
private static native int nGetFBO();
private static native int nGetIntParam(int pname);
private static native int nGetMaxSampleSize();
private static native int nGetUniformLocation(long nativeCtxInfo,
int programID, String name);
private static native void nPixelStorei(int pname, int param);
private static native boolean nReadPixelsByte(long nativeCtxInfo, int length,
Buffer buffer, byte[] pixelArr, int x, int y, int w, int h);
private static native boolean nReadPixelsInt(long nativeCtxInfo, int length,
Buffer buffer, int[] pixelArr, int x, int y, int w, int h);
private static native void nScissorTest(long nativeCtxInfo, boolean enable,
int x, int y, int w, int h);
private static native void nSetDepthTest(long nativeCtxInfo, boolean depthTest);
private static native void nSetMSAA(long nativeCtxInfo, boolean msaa);
private static native void nTexParamsMinMax(int min, int max);
private static native boolean nTexImage2D0(int target, int level, int internalFormat,
int width, int height, int border, int format,
int type, Object pixels, int pixelsByteOffset, boolean useMipmap);
private static native boolean nTexImage2D1(int target, int level, int internalFormat,
int width, int height, int border, int format,
int type, Object pixels, int pixelsByteOffset, boolean useMipmap);
private static native void nTexSubImage2D0(int target, int level,
int xoffset, int yoffset, int width, int height, int format,
int type, Object pixels, int pixelsByteOffset);
private static native void nTexSubImage2D1(int target, int level,
int xoffset, int yoffset, int width, int height, int format,
int type, Object pixels, int pixelsByteOffset);
private static native void nUpdateViewport(long nativeCtxInfo, int x, int y,
int w, int h);
private static native void nUniform1f(long nativeCtxInfo, int location, float v0);
private static native void nUniform2f(long nativeCtxInfo, int location, float v0,
float v1);
private static native void nUniform3f(long nativeCtxInfo, int location, float v0,
float v1, float v2);
private static native void nUniform4f(long nativeCtxInfo, int location, float v0,
float v1, float v2, float v3);
private static native void nUniform4fv0(long nativeCtxInfo, int location, int count,
Object value, int valueByteOffset);
private static native void nUniform4fv1(long nativeCtxInfo, int location, int count,
Object value, int valueByteOffset);
private static native void nUniform1i(long nativeCtxInfo, int location, int v0);
private static native void nUniform2i(long nativeCtxInfo, int location, int v0,
int v1);
private static native void nUniform3i(long nativeCtxInfo, int location, int v0,
int v1, int v2);
private static native void nUniform4i(long nativeCtxInfo, int location, int v0,
int v1, int v2, int v3);
private static native void nUniform4iv0(long nativeCtxInfo, int location, int count,
Object value, int valueByteOffset);
private static native void nUniform4iv1(long nativeCtxInfo, int location, int count,
Object value, int valueByteOffset);
private static native void nUniformMatrix4fv(long nativeCtxInfo, int location,
boolean transpose, float values[]);
private static native void nUpdateFilterState(long nativeCtxInfo, int texID,
boolean linearFilter);
private static native void nUpdateWrapState(long nativeCtxInfo, int texID,
int wrapMode);
private static native void nUseProgram(long nativeCtxInfo, int pID);
private static native void nEnableVertexAttributes(long nativeCtxInfo);
private static native void nDisableVertexAttributes(long nativeCtxInfo);
private static native void nDrawIndexedQuads(long nativeCtxInfo, int numVertices,
float dataf[], byte datab[]);
private static native int nCreateIndexBuffer16(long nativeCtxInfo, short data[], int n);
private static native void nSetIndexBuffer(long nativeCtxInfo, int buffer);
private static native void nSetDeviceParametersFor2D(long nativeCtxInfo);
private static native void nSetDeviceParametersFor3D(long nativeCtxInfo);
private static native long nCreateES2Mesh(long nativeCtxInfo);
private static native void nReleaseES2Mesh(long nativeCtxInfo, long nativeHandle);
private static native boolean nBuildNativeGeometryShort(long nativeCtxInfo, long nativeHandle,
float[] vertexBuffer, int vertexBufferLength, short[] indexBuffer, int indexBufferLength);
private static native boolean nBuildNativeGeometryInt(long nativeCtxInfo, long nativeHandle,
float[] vertexBuffer, int vertexBufferLength, int[] indexBuffer, int indexBufferLength);
private static native long nCreateES2PhongMaterial(long nativeCtxInfo);
private static native void nReleaseES2PhongMaterial(long nativeCtxInfo, long nativeHandle);
private static native void nSetSolidColor(long nativeCtxInfo, long nativePhongMaterial,
float r, float g, float b, float a);
private static native void nSetMap(long nativeCtxInfo, long nativePhongMaterial,
int mapType, int texID);
private static native long nCreateES2MeshView(long nativeCtxInfo, long nativeMeshInfo);
private static native void nReleaseES2MeshView(long nativeCtxInfo, long nativeHandle);
private static native void nSetCullingMode(long nativeCtxInfo, long nativeMeshViewInfo,
int cullingMode);
private static native void nSetMaterial(long nativeCtxInfo, long nativeMeshViewInfo,
long nativePhongMaterialInfo);
private static native void nSetWireframe(long nativeCtxInfo, long nativeMeshViewInfo,
boolean wireframe);
private static native void nSetAmbientLight(long nativeCtxInfo, long nativeMeshViewInfo,
float r, float g, float b);
private static native void nSetPointLight(long nativeCtxInfo, long nativeMeshViewInfo,
int index, float x, float y, float z, float r, float g, float b, float w);
private static native void nRenderMeshView(long nativeCtxInfo, long nativeMeshViewInfo);
private static native void nBlit(long nativeCtxInfo, int srcFBO, int dstFBO,
int srcX0, int srcY0, int srcX1, int srcY1,
int dstX0, int dstY0, int dstX1, int dstY1);
void activeTexture(int texUnit) {
nActiveTexture(nativeCtxInfo, texUnit);
}
void bindFBO(int nativeFBOID) {
switch (this.nativeFBOID) {
case FBO_ID_UNSET:
this.nativeFBOID = nativeFBOID;
nBindFBO(nativeCtxInfo, nativeFBOID);
break;
case FBO_ID_NOCACHE:
nBindFBO(nativeCtxInfo, nativeFBOID);
break;
default:
if (this.nativeFBOID != nativeFBOID) {
nBindFBO(nativeCtxInfo, nativeFBOID);
this.nativeFBOID = nativeFBOID;
}
break;
}
}
void bindTexture(int texID) {
nBindTexture(nativeCtxInfo, texID);
}
void blendFunc(int sFactor, int dFactor) {
nBlendFunc(sFactor, dFactor);
}
boolean canCreateNonPowTwoTextures() {
if (nonPowTwoExtAvailable == null) {
nonPowTwoExtAvailable = PrismSettings.forcePow2
? Boolean.FALSE : ES2Pipeline.glFactory.isNPOTSupported();
}
return nonPowTwoExtAvailable.booleanValue();
}
boolean canClampToZero() {
if (clampToZeroAvailable == null) {
clampToZeroAvailable = PrismSettings.noClampToZero
? Boolean.FALSE
: ES2Pipeline.glFactory.isGL2();
}
return clampToZeroAvailable.booleanValue();
}
void clearBuffers(Color color, boolean clearColor,
boolean clearDepth, boolean ignoreScissor) {
float r = color.getRedPremult();
float g = color.getGreenPremult();
float b = color.getBluePremult();
float a = color.getAlpha();
nClearBuffers(nativeCtxInfo, r, g, b, a, clearColor, clearDepth,
ignoreScissor);
}
int compileShader(String shaderSource, boolean vertex) {
return nCompileShader(nativeCtxInfo, shaderSource, vertex);
}
int createDepthBuffer(int width, int height, int msaaSamples) {
return nCreateDepthBuffer(nativeCtxInfo, width, height, msaaSamples);
}
int createRenderBuffer(int width, int height, int msaaSamples) {
return nCreateRenderBuffer(nativeCtxInfo, width, height, msaaSamples);
}
int createFBO(int texID) {
if (nativeFBOID != FBO_ID_NOCACHE) {
nativeFBOID = FBO_ID_UNSET;
}
return nCreateFBO(nativeCtxInfo, texID);
}
int createProgram(int vertexShaderID, int[] fragmentShaderIDArr,
String[] attrs, int[] indexs) {
if (fragmentShaderIDArr == null) {
System.err.println("Error: fragmentShaderIDArr is null");
return 0;
}
boolean shaderSpecified = true;
for (int i = 0; i < fragmentShaderIDArr.length; i++) {
if (fragmentShaderIDArr[i] == 0) {
shaderSpecified = false;
break;
}
}
if (vertexShaderID == 0 || fragmentShaderIDArr.length == 0
|| !shaderSpecified) {
System.err.println("Both vertexShader and fragmentShader(s) must be specified");
}
if (attrs.length != indexs.length) {
System.err.println("attrs.length must be equal to index.length");
}
return nCreateProgram(nativeCtxInfo, vertexShaderID, fragmentShaderIDArr,
attrs.length, attrs, indexs);
}
int createTexture(int width, int height) {
return nCreateTexture(nativeCtxInfo, width, height);
}
void deleteRenderBuffer(int dbID) {
nDeleteRenderBuffer(nativeCtxInfo, dbID);
}
void deleteFBO(int fboID) {
nDeleteFBO(nativeCtxInfo, fboID);
}
void deleteShader(int shadeID) {
nDeleteShader(nativeCtxInfo, shadeID);
}
void blitFBO(int msaaFboID, int dstFboID,
int srcX0, int srcY0, int srcX1, int srcY1,
int dstX0, int dstY0, int dstX1, int dstY1)
{
nBlit(nativeCtxInfo, msaaFboID, dstFboID,
srcX0, srcY0, srcX1, srcY1,
dstX0, dstY0, dstX1, dstY1);
}
void deleteTexture(int tID) {
nDeleteTexture(nativeCtxInfo, tID);
}
void disposeShaders(int pID, int vID, int[] fID) {
nDisposeShaders(nativeCtxInfo, pID, vID, fID);
}
void finish() {
nFinish();
}
int genAndBindTexture() {
int texID = nGenAndBindTexture();
boundTextures[activeTexUnit] = texID;
return texID;
}
int getBoundFBO() {
switch (nativeFBOID) {
case FBO_ID_UNSET:
nativeFBOID = nGetFBO();
return nativeFBOID;
case FBO_ID_NOCACHE:
return nGetFBO();
default:
return nativeFBOID;
}
}
long getNativeCtxInfo() {
return nativeCtxInfo;
}
abstract long getNativeHandle();
int getActiveTextureUnit() {
return activeTexUnit;
}
void setActiveTextureUnit(int unit) {
activeTexture(unit);
activeTexUnit = unit;
}
void updateActiveTextureUnit(int unit) {
if (unit != getActiveTextureUnit()) {
setActiveTextureUnit(unit);
}
}
int getBoundTexture() {
return boundTextures[activeTexUnit];
}
int getBoundTexture(int unit) {
return boundTextures[unit];
}
int getNumBoundTexture() {
return boundTextures.length;
}
void setBoundTexture(int texid) {
bindTexture(texid);
boundTextures[activeTexUnit] = texid;
}
void updateBoundTexture(int texid) {
if (texid != getBoundTexture()) {
setBoundTexture(texid);
}
}
int getIntParam(int param) {
return nGetIntParam(param);
}
int getSampleSize() {
int maxSamples = getMaxSampleSize();
return maxSamples < 2 ? 0 : (maxSamples < 4 ? 2 : 4);
}
int getMaxSampleSize() {
if (maxSampleSize > -1) {
return maxSampleSize;
}
maxSampleSize = ES2Pipeline.msaa ? nGetMaxSampleSize() : 0;
return maxSampleSize;
}
int getMaxTextureSize() {
if (maxTextureSize > -1) {
return maxTextureSize;
}
return maxTextureSize = getIntParam(GLContext.GL_MAX_TEXTURE_SIZE);
}
int getUniformLocation(int programID, String name) {
return nGetUniformLocation(nativeCtxInfo, programID, name);
}
boolean isShaderCompilerSupported() {
return true;
}
abstract void makeCurrent(GLDrawable drawable);
void pixelStorei(int pname, int param) {
nPixelStorei(pname, param);
}
boolean readPixels(Buffer buffer, int x, int y, int w, int h) {
boolean res = false;
if (buffer instanceof ByteBuffer) {
ByteBuffer buf = (ByteBuffer) buffer;
byte[] arr = buf.hasArray() ? buf.array() : null;
int length = buf.capacity();
res = nReadPixelsByte(nativeCtxInfo, length, buffer, arr, x, y, w, h);
} else if (buffer instanceof IntBuffer) {
IntBuffer buf = (IntBuffer) buffer;
int[] arr = buf.hasArray() ? buf.array() : null;
int length = buf.capacity() * 4;
res = nReadPixelsInt(nativeCtxInfo, length, buffer, arr, x, y, w, h);
} else {
throw new IllegalArgumentException("readPixel: pixel's buffer type is not supported: "
+ buffer);
}
return res;
}
void scissorTest(boolean enable, int x, int y, int w, int h) {
nScissorTest(nativeCtxInfo, enable, x, y, w, h);
}
void setShaderProgram(int progid) {
nUseProgram(nativeCtxInfo, progid);
}
void texParamsMinMax(int pname, boolean useMipmap) {
int min = pname;
int max = pname;
if (useMipmap) {
min = (min == GLContext.GL_LINEAR) ? GLContext.GL_LINEAR_MIPMAP_LINEAR
: GLContext.GL_NEAREST_MIPMAP_NEAREST;
}
nTexParamsMinMax(min, max);
}
boolean texImage2D(int target, int level, int internalFormat,
int width, int height, int border, int format, int type,
java.nio.Buffer pixels, boolean useMipmap) {
boolean result;
boolean direct = BufferFactory.isDirect(pixels);
if (direct) {
result = nTexImage2D0(target, level, internalFormat, width, height, border, format,
type, pixels, BufferFactory.getDirectBufferByteOffset(pixels), useMipmap);
} else {
result = nTexImage2D1(target, level, internalFormat, width, height, border, format,
type, BufferFactory.getArray(pixels),
BufferFactory.getIndirectBufferByteOffset(pixels), useMipmap);
}
return result;
}
void texSubImage2D(int target, int level, int xoffset, int yoffset,
int width, int height, int format, int type, java.nio.Buffer pixels) {
boolean direct = BufferFactory.isDirect(pixels);
if (direct) {
nTexSubImage2D0(target, level, xoffset, yoffset, width, height,
format, type, pixels,
BufferFactory.getDirectBufferByteOffset(pixels));
} else {
nTexSubImage2D1(target, level, xoffset, yoffset, width, height,
format, type, BufferFactory.getArray(pixels),
BufferFactory.getIndirectBufferByteOffset(pixels));
}
}
void updateViewportAndDepthTest(int x, int y, int w, int h,
boolean depthTest) {
if (viewportX != x || viewportY != y || viewportWidth != w || viewportHeight != h) {
viewportX = x;
viewportY = y;
viewportWidth = w;
viewportHeight = h;
nUpdateViewport(nativeCtxInfo, x, y, w, h);
}
if (this.depthTest != depthTest) {
nSetDepthTest(nativeCtxInfo, depthTest);
this.depthTest = depthTest;
}
}
void updateMSAAState(boolean msaa) {
if (this.msaa != msaa) {
nSetMSAA(nativeCtxInfo, msaa);
this.msaa = msaa;
}
}
void updateFilterState(int texID, boolean linearFilter) {
nUpdateFilterState(nativeCtxInfo, texID, linearFilter);
}
void updateWrapState(int texID, WrapMode wrapMode) {
int wm;
switch (wrapMode) {
case REPEAT_SIMULATED:
case REPEAT:
wm = WRAPMODE_REPEAT;
break;
case CLAMP_TO_ZERO_SIMULATED:
case CLAMP_TO_EDGE_SIMULATED:
case CLAMP_TO_EDGE:
wm = WRAPMODE_CLAMP_TO_EDGE;
break;
case CLAMP_TO_ZERO:
wm = WRAPMODE_CLAMP_TO_BORDER;
break;
case CLAMP_NOT_NEEDED:
return;
default:
throw new InternalError("Unrecognized wrap mode: "+wrapMode);
}
nUpdateWrapState(nativeCtxInfo, texID, wm);
}
void uniform1f(int location, float v0) {
nUniform1f(nativeCtxInfo, location, v0);
}
void uniform2f(int location, float v0, float v1) {
nUniform2f(nativeCtxInfo, location, v0, v1);
}
void uniform3f(int location, float v0, float v1, float v2) {
nUniform3f(nativeCtxInfo, location, v0, v1, v2);
}
void uniform4f(int location, float v0, float v1, float v2, float v3) {
nUniform4f(nativeCtxInfo, location, v0, v1, v2, v3);
}
void uniform4fv(int location, int count, java.nio.FloatBuffer value) {
boolean direct = BufferFactory.isDirect(value);
if (direct) {
nUniform4fv0(nativeCtxInfo, location, count, value,
BufferFactory.getDirectBufferByteOffset(value));
} else {
nUniform4fv1(nativeCtxInfo, location, count, BufferFactory.getArray(value),
BufferFactory.getIndirectBufferByteOffset(value));
}
}
void uniform1i(int location, int v0) {
nUniform1i(nativeCtxInfo, location, v0);
}
void uniform2i(int location, int v0, int v1) {
nUniform2i(nativeCtxInfo, location, v0, v1);
}
void uniform3i(int location, int v0, int v1, int v2) {
nUniform3i(nativeCtxInfo, location, v0, v1, v2);
}
void uniform4i(int location, int v0, int v1, int v2, int v3) {
nUniform4i(nativeCtxInfo, location, v0, v1, v2, v3);
}
void uniform4iv(int location, int count, java.nio.IntBuffer value) {
boolean direct = BufferFactory.isDirect(value);
if (direct) {
nUniform4iv0(nativeCtxInfo, location, count, value,
BufferFactory.getDirectBufferByteOffset(value));
} else {
nUniform4iv1(nativeCtxInfo, location, count, BufferFactory.getArray(value),
BufferFactory.getIndirectBufferByteOffset(value));
}
}
void uniformMatrix4fv(int location, boolean transpose, float values[]) {
nUniformMatrix4fv(nativeCtxInfo, location, transpose, values);
}
void enableVertexAttributes() {
nEnableVertexAttributes(nativeCtxInfo);
}
void disableVertexAttributes() {
nDisableVertexAttributes(nativeCtxInfo);
}
void drawIndexedQuads(float coords[], byte colors[], int numVertices) {
nDrawIndexedQuads(nativeCtxInfo, numVertices, coords, colors);
}
int createIndexBuffer16(short data[]) {
return nCreateIndexBuffer16(nativeCtxInfo, data, data.length);
}
void setIndexBuffer(int ib) {
nSetIndexBuffer(nativeCtxInfo, ib);
}
void setDeviceParametersFor2D() {
nSetDeviceParametersFor2D(nativeCtxInfo);
}
void setDeviceParametersFor3D() {
nSetDeviceParametersFor3D(nativeCtxInfo);
}
long createES2Mesh() {
return nCreateES2Mesh(nativeCtxInfo);
}
void releaseES2Mesh(long nativeHandle) {
nReleaseES2Mesh(nativeCtxInfo, nativeHandle);
}
boolean buildNativeGeometry(long nativeHandle, float[] vertexBuffer,
int vertexBufferLength, short[] indexBuffer, int indexBufferLength) {
return nBuildNativeGeometryShort(nativeCtxInfo, nativeHandle,
vertexBuffer, vertexBufferLength, indexBuffer, indexBufferLength);
}
boolean buildNativeGeometry(long nativeHandle, float[] vertexBuffer,
int vertexBufferLength, int[] indexBuffer, int indexBufferLength) {
return nBuildNativeGeometryInt(nativeCtxInfo, nativeHandle, vertexBuffer,
vertexBufferLength, indexBuffer, indexBufferLength);
}
long createES2PhongMaterial() {
return nCreateES2PhongMaterial(nativeCtxInfo);
}
void releaseES2PhongMaterial(long nativeHandle) {
nReleaseES2PhongMaterial(nativeCtxInfo, nativeHandle);
}
void setSolidColor(long nativePhongMaterial, float r, float g, float b, float a) {
nSetSolidColor(nativeCtxInfo, nativePhongMaterial, r, g, b, a);
}
void setMap(long nativePhongMaterial, int mapType, int texID) {
nSetMap(nativeCtxInfo, nativePhongMaterial, mapType, texID);
}
long createES2MeshView(long nativeMeshInfo) {
return nCreateES2MeshView(nativeCtxInfo, nativeMeshInfo);
}
void releaseES2MeshView(long nativeHandle) {
nReleaseES2MeshView(nativeCtxInfo, nativeHandle);
}
void setCullingMode(long nativeMeshViewInfo, int cullMode) {
int cm;
if (cullMode == MeshView.CULL_NONE) {
cm = GL_NONE;
} else if (cullMode == MeshView.CULL_BACK) {
cm = GL_BACK;
} else if (cullMode == MeshView.CULL_FRONT) {
cm = GL_FRONT;
} else {
throw new IllegalArgumentException("illegal value for CullMode: " + cullMode);
}
nSetCullingMode(nativeCtxInfo, nativeMeshViewInfo, cm);
}
void setMaterial(long nativeMeshViewInfo, long nativePhongMaterialInfo) {
nSetMaterial(nativeCtxInfo, nativeMeshViewInfo, nativePhongMaterialInfo);
}
void setWireframe(long nativeMeshViewInfo, boolean wireframe) {
nSetWireframe(nativeCtxInfo, nativeMeshViewInfo, wireframe);
}
void setAmbientLight(long nativeMeshViewInfo, float r, float g, float b) {
nSetAmbientLight(nativeCtxInfo, nativeMeshViewInfo, r, g, b);
}
void setPointLight(long nativeMeshViewInfo, int index, float x, float y, float z, float r, float g, float b, float w) {
nSetPointLight(nativeCtxInfo, nativeMeshViewInfo, index, x, y, z, r, g, b, w);
}
void renderMeshView(long nativeMeshViewInfo) {
nRenderMeshView(nativeCtxInfo, nativeMeshViewInfo);
}
}