Texture.java
package com.Diamond.gl05;
import android.opengl.GLES32;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.opengl.GLUtils;
import java.io.InputStream;
import java.io.IOException;
public class Texture {
private int mTextureID;
private int mMinFilter;
private int mMagFilter;
private int mWrapS;
private int mWrapT;
private int mType;
private int mIndex;
public Texture(String path,int type,int index) {
mTextureID = genTexture();
mType = type;
mIndex = index;
mMinFilter = GLES32.GL_NEAREST;
mMagFilter = GLES32.GL_NEAREST;
mWrapS = GLES32.GL_REPEAT;
mWrapT = GLES32.GL_REPEAT;
texParameter(mType,new int[]{mMinFilter,mMagFilter,mWrapS,mWrapT});
Bitmap bitmap = BitmapFactory.decodeFile(path);
texImage(mType,bitmap);
bitmap.recycle();
}
public Texture(String path,int type,int index,int[] parameters) {
mTextureID = genTexture();
mType = type;
mIndex = index;
mMinFilter = parameters[0];
mMagFilter = parameters[1];
mWrapS = parameters[2];
mWrapT = parameters[3];
GLES32.glBindTexture(mType,mTextureID);
texParameter(mType,parameters);
Bitmap bitmap = BitmapFactory.decodeFile(path);
texImage(mType,bitmap);
bitmap.recycle();
}
public Texture(InputStream is,int type,int index) {
mTextureID = genTexture();
mType = type;
mIndex = index;
mMinFilter = GLES32.GL_NEAREST;
mMagFilter = GLES32.GL_NEAREST;
mWrapS = GLES32.GL_REPEAT;
mWrapT = GLES32.GL_REPEAT;
GLES32.glBindTexture(mType,mTextureID);
texParameter(mType,new int[]{mMinFilter,mMagFilter,mWrapS,mWrapT});
Bitmap bitmap = BitmapFactory.decodeStream(is);
texImage(mType,bitmap);
bitmap.recycle();
}
public Texture(InputStream is,int type,int index,int[] parameters) {
mTextureID = genTexture();
mType = type;
mIndex = index;
mMinFilter = parameters[0];
mMagFilter = parameters[1];
mWrapS = parameters[2];
mWrapT = parameters[3];
GLES32.glBindTexture(mType,mTextureID);
texParameter(mType,parameters);
Bitmap bitmap = BitmapFactory.decodeStream(is);
texImage(mType,bitmap);
bitmap.recycle();
}
public static void texParameter(int type,int[] parameters) {
GLES32.glTexParameterf(type,GLES32.GL_TEXTURE_MIN_FILTER,parameters[0]);
GLES32.glTexParameterf(type,GLES32.GL_TEXTURE_MAG_FILTER,parameters[1]);
GLES32.glTexParameterf(type,GLES32.GL_TEXTURE_WRAP_S,parameters[2]);
GLES32.glTexParameterf(type,GLES32.GL_TEXTURE_WRAP_T,parameters[3]);
}
public static void texImage(int type,Bitmap bitmap) {
switch(type) {
case GLES32.GL_TEXTURE_2D:
GLUtils.texImage2D(GLES32.GL_TEXTURE_2D,0,bitmap,0);
break;
}
}
public static int genTexture() {
int[] texture = new int[1];
GLES32.glGenTextures(1,texture,0);
return texture[0];
}
public Texture activeTexture() {
GLES32.glActiveTexture(GLES32.GL_TEXTURE0 + mIndex);
return this;
}
public Texture bindTexture() {
GLES32.glBindTexture(mType,mTextureID);
return this;
}
}