Blame |
Last modification |
View Log
| RSS feed
package com.gebauz.pingK.common.framework;
import java.io.IOException;
import java.io.InputStream;
import javax.microedition.khronos.opengles.GL10;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.opengl.GLUtils;
public class Texture
extends Resource
{
public enum Filter
{
NEAREST,
LINEAR
};
public enum WrapMode
{
CLAMP_TO_EDGE,
REPEAT
};
protected int mTextureID =
0;
private int mResourceID = -
1;
public int width
;
public int height
;
private Filter mMinFilter =
Filter.
LINEAR;
private Filter mMagFilter =
Filter.
LINEAR;
private WrapMode mWrapModeS = WrapMode.
CLAMP_TO_EDGE;
private WrapMode mWrapModeT = WrapMode.
CLAMP_TO_EDGE;
public Texture
()
{
}
public void recreate
()
{
if (mResourceID
!= -
1)
{
loadTexture
(mResourceID
);
}
}
public void loadTexture
(int resourceID
)
{
Resources resources = ResourceManager.
getResources();
InputStream is = resources.
openRawResource(resourceID
);
Bitmap bitmap =
null;
try
{
bitmap = BitmapFactory.
decodeStream(is
);
}
finally
{
try
{
is.
close();
is =
null;
}
catch (IOException e
)
{
}
}
width = bitmap.
getWidth();
height = bitmap.
getHeight();
mResourceID = resourceID
;
createTexture
();
GLUtils.
texImage2D(GL10.
GL_TEXTURE_2D,
0, bitmap,
0);
bitmap.
recycle();
}
public void createTexture
()
{
GL10 gl = GLUtil.
getGL();
int textures
[] =
new int[1];
gl.
glGenTextures(1, textures,
0);
mTextureID = textures
[0];
setFiltering
(mMinFilter, mMagFilter
);
setWrapMode
(mWrapModeS, mWrapModeT
);
}
public void bind
()
{
GL10 gl = GLUtil.
getGL();
gl.
glBindTexture(GL10.
GL_TEXTURE_2D, mTextureID
);
}
public void unbind
()
{
GL10 gl = GLUtil.
getGL();
gl.
glBindTexture(GL10.
GL_TEXTURE_2D,
0);
}
public final int getHandle
()
{
return mTextureID
;
}
public void setFiltering
(Filter minFilter,
Filter magFilter
)
{
bind
();
GL10 gl = GLUtil.
getGL();
mMinFilter = minFilter
;
switch (mMinFilter
)
{
case NEAREST:
gl.
glTexParameterf(GL10.
GL_TEXTURE_2D, GL10.
GL_TEXTURE_MIN_FILTER, GL10.
GL_NEAREST);
break;
case LINEAR:
gl.
glTexParameterf(GL10.
GL_TEXTURE_2D, GL10.
GL_TEXTURE_MIN_FILTER, GL10.
GL_LINEAR);
break;
}
mMagFilter = magFilter
;
switch (mMagFilter
)
{
case NEAREST:
gl.
glTexParameterf(GL10.
GL_TEXTURE_2D, GL10.
GL_TEXTURE_MAG_FILTER, GL10.
GL_NEAREST);
break;
case LINEAR:
gl.
glTexParameterf(GL10.
GL_TEXTURE_2D, GL10.
GL_TEXTURE_MAG_FILTER, GL10.
GL_LINEAR);
break;
}
}
public void setWrapMode
(WrapMode wrapModeS, WrapMode wrapModeT
)
{
bind
();
GL10 gl = GLUtil.
getGL();
mWrapModeS = wrapModeS
;
switch (mWrapModeS
)
{
case CLAMP_TO_EDGE:
gl.
glTexParameterf(GL10.
GL_TEXTURE_2D, GL10.
GL_TEXTURE_WRAP_S, GL10.
GL_CLAMP_TO_EDGE);
break;
case REPEAT:
gl.
glTexParameterf(GL10.
GL_TEXTURE_2D, GL10.
GL_TEXTURE_WRAP_S, GL10.
GL_REPEAT);
break;
}
mWrapModeT = wrapModeT
;
switch (mWrapModeT
)
{
case CLAMP_TO_EDGE:
gl.
glTexParameterf(GL10.
GL_TEXTURE_2D, GL10.
GL_TEXTURE_WRAP_T, GL10.
GL_CLAMP_TO_EDGE);
break;
case REPEAT:
gl.
glTexParameterf(GL10.
GL_TEXTURE_2D, GL10.
GL_TEXTURE_WRAP_T, GL10.
GL_REPEAT);
break;
}
}
}