package edu.union;
import java.nio.FloatBuffer;
import javax.microedition.khronos.opengles.GL10;
import javax.microedition.khronos.opengles.GL11Ext;
public class BitmapFont {
int font_tex;
FloatBuffer fontTex;
FloatBuffer face;
public BitmapFont(int texture) {
this.font_tex = texture;
float width = 1f/16f;
float height = width;
float[] fontTexCoords = new float[16*16*8];
int ix = 0;
for (int row = 1; row <= 16; ++row) {
for(int col = 1; col <= 16; ++col) {
fontTexCoords[ix++] = col*width;
fontTexCoords[ix++] = 1-row*height + 0.01f;
fontTexCoords[ix++] = col*width;
fontTexCoords[ix++] = 1-(row-1)*height - 0.01f;
fontTexCoords[ix++] = (col-1)*width;
fontTexCoords[ix++] = 1-row*height + 0.01f;
fontTexCoords[ix++] = (col-1)*width;
fontTexCoords[ix++] = 1-(row-1)*height - 0.01f;
}
}
fontTex = GLTutorialBase.makeFloatBuffer(fontTexCoords);
float faceVerts[] = new float[] {
0.5f, -0.5f, 0.5f,
0.5f, 0.5f, 0.5f,
-0.5f, -0.5f, 0.5f,
-0.5f, 0.5f, 0.5f,
};
face = GLTutorialBase.makeFloatBuffer(faceVerts);
}
public void draw(GL10 gl, String str) {
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, face);
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glEnable(GL10.GL_TEXTURE_2D);
gl.glBindTexture(GL10.GL_TEXTURE_2D, font_tex);
gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
char[] chars = str.toCharArray();
gl.glTranslatef(-chars.length*0.5f, 0, 0);
for (int i = 0; i < chars.length; ++i) {
fontTex.position(chars[i]*8);
gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, fontTex);
gl.glColor4f(1.0f, 1, 1, 1.0f);
gl.glNormal3f(0,0,1);
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4);
gl.glTranslatef(1f, 0, 0);
}
}
}