public class BufferObject {
private final int dimension = 2;
private int drawMode;
private ArrayList<float[]> floatArray;
private ArrayList<float[]> floatTexture;
private boolean hasTexture;
private boolean hasColor;
public BufferObject(){
floatArray = new ArrayList<float[]>();
floatTexture = new ArrayList<float[]>();
hasTexture = false;
hasColor = false;
}
public void setDrawMode(int mode){
drawMode = mode;
}
public void setTexturePart(float texWidth, float texHeight, int nPartsX, int nPartsY, int partX, int partY){
hasTexture = true;
floatTexture.add(new float[]{texWidth/nPartsX*partX, (texHeight/nPartsY*partY)+(texHeight/nPartsY)});
floatTexture.add(new float[]{texWidth/nPartsX*partX, texHeight/nPartsY*partY});
floatTexture.add(new float[]{(texWidth/nPartsX*partX)+(texWidth/nPartsX), texHeight/nPartsY*partY});
floatTexture.add(new float[]{(texWidth/nPartsX*partX)+(texWidth/nPartsX), (texHeight/nPartsY*partY)+(texHeight/nPartsY)});
}
public void setTextureMax(float texWidth, float texHeight){
hasTexture = true;
floatTexture.add(new float[]{0.0f, 0.0f});
floatTexture.add(new float[]{texWidth, 0.0f});
floatTexture.add(new float[]{texWidth, texHeight});
floatTexture.add(new float[]{0.0f, texHeight});
}
public void putTexCoord(float x, float y){
hasTexture = true;
floatTexture.add(new float[]{x, y});
}
public void putCoord(float[] coord){
floatArray.add(coord);
}
public void putCoord(float x, float y){
floatArray.add(new float[]{x, y});
}
public void drawObject(){
FloatBuffer buffer = BufferUtils.createFloatBuffer((floatArray.size()*dimension));
FloatBuffer textureBuffer = BufferUtils.createFloatBuffer((floatTexture.size()*2));
for(int i=0;i<=floatArray.size()-1;i++){
buffer.put(floatArray.get(i));
}
buffer.flip();
for(int i=0;i<=floatTexture.size()-1;i++){
textureBuffer.put(floatTexture.get(i));
}
textureBuffer.flip();
int texId = glGenBuffers();
int bufferId = glGenBuffers();
if(hasTexture){
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glBindBuffer(GL_ARRAY_BUFFER, texId);
glBufferData(GL_ARRAY_BUFFER, textureBuffer, GL_STATIC_DRAW);
glTexCoordPointer(2, GL_FLOAT, 0, 0L);
}
glBindBuffer(GL_ARRAY_BUFFER, bufferId);
glBufferData(GL_ARRAY_BUFFER, buffer, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glEnableClientState(GL_VERTEX_ARRAY);
glBindBuffer(GL_ARRAY_BUFFER, bufferId);
glVertexPointer(dimension, GL_FLOAT, 0, 0L);
glDrawArrays(drawMode, 0, floatArray.size());
glBindBuffer(GL_ARRAY_BUFFER, 0);
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glDeleteBuffers(bufferId);
glDeleteBuffers(texId);
}
}