public class

GLES20Fix

extends Object
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 = false;
		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();
			}
		} 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
	// ===========================================================
}