Rev 194 |
Blame |
Compare with Previous |
Last modification |
View Log
| RSS feed
package com.gebauz.Bauzoid.graphics.texture;
import com.gebauz.Bauzoid.graphics.Graphics;
import com.gebauz.Bauzoid.graphics.GraphicsObject;
import android.opengl.GLES20;
/** Texture base class. */
public class Texture
extends GraphicsObject
{
/** Filtering Mode. */
public enum Filter
{
NEAREST,
LINEAR
};
/** Texture Wrap Mode. */
public enum WrapMode
{
CLAMP_TO_EDGE,
REPEAT
};
protected int mTextureID =
0;
protected Filter mMinFilter =
Filter.
LINEAR;
protected Filter mMagFilter =
Filter.
LINEAR;
protected WrapMode mWrapModeS = WrapMode.
CLAMP_TO_EDGE;
protected WrapMode mWrapModeT = WrapMode.
CLAMP_TO_EDGE;
public int width =
0;
public int height =
0;
protected static int[] TEXID =
new int[1];
/** Constructor. */
public Texture
(Graphics graphics
)
{
super(graphics
);
}
/** Create basic texture ID - no actual texture data yet. */
public void createTexture
()
{
GLES20.
glGenTextures(1, TEXID,
0);
mTextureID = TEXID
[0];
setFiltering
(mMinFilter, mMagFilter
);
setWrapMode
(mWrapModeS, mWrapModeT
);
}
/** Destroy Opengl Texture resource. */
public void destroyTexture
()
{
if (mTextureID
!=
0)
{
TEXID
[0] = mTextureID
;
GLES20.
glDeleteTextures(1, TEXID,
0);
mTextureID =
0;
}
}
/** Bind the texture. */
public void bind
(int textureStage
)
{
getGraphics
().
renderStates.
getTextureStage(textureStage
).
bindTexture(this);
}
/** Unbind the texture.
* Theoretically this is not really related to this texture at all - it just unbinds
* any texture from textureStage.
*/
public void unbind
(int textureStage
)
{
getGraphics
().
renderStates.
getTextureStage(textureStage
).
bindTexture(null);
}
/** Get the OpenGL Texture ID. */
public final int getHandle
()
{
return mTextureID
;
}
/** Set filter mode. */
public final void setFiltering
(Filter minFilter,
Filter magFilter
)
{
bind
(0);
mMinFilter = minFilter
;
switch (mMinFilter
)
{
case NEAREST:
GLES20.
glTexParameterf(GLES20.
GL_TEXTURE_2D, GLES20.
GL_TEXTURE_MIN_FILTER, GLES20.
GL_NEAREST);
break;
case LINEAR:
GLES20.
glTexParameterf(GLES20.
GL_TEXTURE_2D, GLES20.
GL_TEXTURE_MIN_FILTER, GLES20.
GL_LINEAR);
break;
}
mMagFilter = magFilter
;
switch (mMagFilter
)
{
case NEAREST:
GLES20.
glTexParameterf(GLES20.
GL_TEXTURE_2D, GLES20.
GL_TEXTURE_MAG_FILTER, GLES20.
GL_NEAREST);
break;
case LINEAR:
GLES20.
glTexParameterf(GLES20.
GL_TEXTURE_2D, GLES20.
GL_TEXTURE_MAG_FILTER, GLES20.
GL_LINEAR);
break;
}
}
/** Get the minification filter. */
public final Filter getMinFilter
()
{
return mMinFilter
;
}
/** Get the magnification filter. */
public final Filter getMagFilter
()
{
return mMagFilter
;
}
/** Set wrap mode. */
public final void setWrapMode
(WrapMode wrapModeS, WrapMode wrapModeT
)
{
bind
(0);
mWrapModeS = wrapModeS
;
switch (mWrapModeS
)
{
case CLAMP_TO_EDGE:
GLES20.
glTexParameterf(GLES20.
GL_TEXTURE_2D, GLES20.
GL_TEXTURE_WRAP_S, GLES20.
GL_CLAMP_TO_EDGE);
break;
case REPEAT:
GLES20.
glTexParameterf(GLES20.
GL_TEXTURE_2D, GLES20.
GL_TEXTURE_WRAP_S, GLES20.
GL_REPEAT);
break;
}
mWrapModeT = wrapModeT
;
switch (mWrapModeT
)
{
case CLAMP_TO_EDGE:
GLES20.
glTexParameterf(GLES20.
GL_TEXTURE_2D, GLES20.
GL_TEXTURE_WRAP_T, GLES20.
GL_CLAMP_TO_EDGE);
break;
case REPEAT:
GLES20.
glTexParameterf(GLES20.
GL_TEXTURE_2D, GLES20.
GL_TEXTURE_WRAP_T, GLES20.
GL_REPEAT);
break;
}
}
/** Get the S-axis wrap mode. */
public final WrapMode getWrapModeS
()
{
return mWrapModeS
;
}
/** Get the T-axis wrap mode. */
public final WrapMode getWrapModeT
()
{
return mWrapModeT
;
}
}