package org.andengine.opengl;
import org.andengine.util.exception.AndEngineRuntimeException;
import org.andengine.util.system.SystemUtils;
import android.opengl.GLES20;
import android.os.Build;
/**
* (c) Zynga 2011
*
* @author Nicolas Gramlich <ngramlich@zynga.com>
* @since 17:44:43 - 04.09.2011
*/
public class GLES20Fix {
// ===========================================================
// Constants
// ===========================================================
private static boolean NATIVE_LIB_LOADED;
/** Android issue 8931. */
private static final boolean WORKAROUND_MISSING_GLES20_METHODS;
static {
boolean loadLibrarySuccess;
try {
System.loadLibrary("andengine");
loadLibrarySuccess = true;
} catch (final UnsatisfiedLinkError e) {
loadLibrarySuccess = false;
}
NATIVE_LIB_LOADED = loadLibrarySuccess;
if(SystemUtils.isAndroidVersionOrLower(Build.VERSION_CODES.FROYO)) {
if(loadLibrarySuccess) {
WORKAROUND_MISSING_GLES20_METHODS = true;
} else {
throw new AndEngineRuntimeException("Inherently incompatible device detected.");
}
} else {
WORKAROUND_MISSING_GLES20_METHODS = false;
}
}
// ===========================================================
// Fields
// ===========================================================
// ===========================================================
// Constructors
// ===========================================================
private GLES20Fix() {
}
// ===========================================================
// Getter & Setter
// ===========================================================
// ===========================================================
// Methods for/from SuperClass/Interfaces
// ===========================================================
// ===========================================================
// Methods
// ===========================================================
public static native void glVertexAttribPointer(final int pIndex, final int pSize, final int pType, final boolean pNormalized, final int pStride, final int pOffset);
public static native void glDrawElements(final int pMode, final int pCount, final int pType, final int pOffset);
public static void glVertexAttribPointerFix(final int pIndex, final int pSize, final int pType, final boolean pNormalized, final int pStride, final int pOffset) {
if(GLES20Fix.WORKAROUND_MISSING_GLES20_METHODS) {
GLES20Fix.glVertexAttribPointerFix(pIndex, pSize, pType, pNormalized, pStride, pOffset);
} else {
GLES20.glVertexAttribPointer(pIndex, pSize, pType, pNormalized, pStride, pOffset);
}
}
public static void glDrawElementsFix(final int pMode, final int pCount, final int pType, final int pOffset) {
if(GLES20Fix.WORKAROUND_MISSING_GLES20_METHODS) {
GLES20Fix.glDrawElements(pMode, pCount, pType, pOffset);
} else {
GLES20.glDrawElements(pMode, pCount, pType, pOffset);
}
}
// ===========================================================
// Inner and Anonymous Classes
// ===========================================================
}