描画している部分をユーティリティクラスに移動する。
ユーティリティクラス。
レンダークラスに作成していたメソッドをこのクラスに移動。
package jp.mprog; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.FloatBuffer; import javax.microedition.khronos.opengles.GL10; public final class GraphicUtils { public static final int ONE_POINT_DATA_NUM = 3;//頂点を構成するデータの数(x,y,zの3つ) public static FloatBuffer getFloatBuffer(float [] array){ FloatBuffer floatBuffer; ByteBuffer bb = ByteBuffer.allocateDirect(array.length * 4); bb.order(ByteOrder.nativeOrder()); floatBuffer = bb.asFloatBuffer(); floatBuffer.put(array); floatBuffer.position(0); return floatBuffer; } /** * 正方形を描写 */ public static void drawSquare(GL10 gl,float x, float y, int red, int green, int blue, int alpha ){ final float [] squares = new float[]{ -0.5f + x, -0.5f + y, 0.0f, 0.5f + x, -0.5f + y, 0.0f, -0.5f + x, 0.5f + y, 0.0f, 0.5f + x, 0.5f + y, 0.0f, }; drawSquare(gl,squares,red, green, blue,alpha); } /** * 正方形を描写 */ public static void drawSquare(GL10 gl,float[] square, int red, int green, int blue, int alpha ){ FloatBuffer squareBuffer = getFloatBuffer(square); gl.glVertexPointer(ONE_POINT_DATA_NUM, GL10.GL_FLOAT, 0, squareBuffer);//描画する頂点配列を設定 gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);//頂点配列を有効にする。 gl.glColor4x(red, green, blue, alpha); final int POLYGON_NUM = 4; gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, POLYGON_NUM); } /** * 初期化処理 * @param gl */ public static void makeWorld(GL10 gl){ gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); //画面クリア gl.glMatrixMode(GL10.GL_PROJECTION); gl.glLoadIdentity(); gl.glOrthof(-1.0f, 1.0f, -1.5f, 1.5f, 0.5f, -0.5f);//0.0を中心とする座標系 gl.glClearColor(0.5f, 0.5f, 0.5f, 1.0f ); //画面クリアカラー設定(灰色) gl.glClear(GL10.GL_COLOR_BUFFER_BIT); //画面クリア } }
レンダークラスはこれだけに。
public class GLRenderer implements GLSurfaceView.Renderer { @Override public void onDrawFrame(GL10 gl) { GraphicUtils.makeWorld(gl); int one = 0x10000; GraphicUtils.drawSquare(gl, 0.5f, 0.0f, one, one, 0, one ); } @Override public void onSurfaceChanged(GL10 gl, int width, int height) { gl.glViewport(0, 0, width, height); } @Override public void onSurfaceCreated(GL10 gl, EGLConfig config) { } }