package com.gebauz.libGDXtest;
import java.io.IOException;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL20;
import com.gebauz.Bauzoid.app.Consts;
import com.gebauz.Bauzoid.app.Game;
import com.gebauz.Bauzoid.gamestates.BaseGameState;
import com.gebauz.Bauzoid.graphics.model.Geometry;
import com.gebauz.Bauzoid.graphics.model.Model;
import com.gebauz.Bauzoid.graphics.model.ModelUtil;
import com.gebauz.Bauzoid.graphics.model.SimpleGeometry;
import com.gebauz.Bauzoid.graphics.shader.ShaderProgram;
import com.gebauz.Bauzoid.graphics.shader.ShaderUtil;
import com.gebauz.Bauzoid.math.Matrix4;
public class TestState
extends BaseGameState
{
private Matrix4 mProjection
;
private Matrix4 mView
;
private Matrix4 mModel
;
private Model mTestModel =
null;
private float mAngle = 0.0f
;
private SimpleGeometry mTestMesh =
null;
private ShaderProgram mShaderProgram
;
public TestState
(Game game
)
{
super(game
);
setFading
(false,
false);
}
@
Override
public void init
()
{
//create shader program
String vertexShader =
"uniform mat4 uMVPMatrix; \n" +
"attribute vec4 vPosition; \n" +
"attribute vec4 vColor; \n" +
"varying vec4 v_color; \n" +
"void main() \n" +
"{ \n" +
" gl_Position = uMVPMatrix * vPosition; \n" +
" v_color = vColor; \n" +
"} \n";
String fragmentShader =
"#ifdef GL_ES \n"+
"precision mediump float; \n"+
"#endif \n"+
"varying vec4 v_color; \n"+
"void main() \n"+
"{ \n"+
" gl_FragColor = v_color; \n"+
"} \n";
mShaderProgram = ShaderUtil.
createShaderFromString(getGame
().
getGraphics(), vertexShader, fragmentShader
);
try
{
mTestModel = ModelUtil.
createModelFromFile(getGame
().
getGraphics(), Gdx.
files.
internal("data/conifer.model"));
mTestModel.
upload();
}
catch (IOException e
)
{
Gdx.
app.
log("GBZ",
"exception");
}
float[] verts =
new float[]
{
1.5f, -3.5f,
0,
3.5f, 3.5f,
0,
7.5f, -3.5f,
0
};
float[] colors =
new float[]
{
1.0f, 0.5f, 0.75f, 1.0f,
0.3f, 0.75f, 1.0f, 1.0f,
0.3f, 0.75f, 0.5f, 1.0f,
};
mTestMesh =
new SimpleGeometry
(getGraphics
(), Geometry.
PrimitiveType.
TRIANGLES);
mTestMesh.
setPositions(verts
);
mTestMesh.
setColors(colors
);
}
@
Override
public void exit
()
{
}
@
Override
public void update
(float deltaTime
)
{
mAngle += 90.0f
* (deltaTime
);
}
@
Override
public void render
()
{
int w = getGame
().
getGraphics().
getWidth();
int h = getGame
().
getGraphics().
getHeight();
Gdx.
gl20.
glViewport(0,
0, w, h
);
float ratio =
(float)w /
(float)h
;
mModel = Matrix4.
createRotationY(mAngle
);
mProjection = Matrix4.
createPerspective(45.0f, ratio, 1.0f, 300.0f
);
mView = Matrix4.
createLookAt(0,
5, -10.0f, 0.0f, 2.0f, 0.0f, 0.0f, 1.0f, 0.0f
);
Gdx.
gl20.
glClearColor(0.0f, 0.3f, 0.5f, 0.0f
);
Gdx.
gl20.
glClear(GL20.
GL_COLOR_BUFFER_BIT | GL20.
GL_DEPTH_BUFFER_BIT);
/* Matrix4 mvpMatrix = Matrix4.multiply(mModel, mView);
mvpMatrix = Matrix4.multiply(mvpMatrix, mProjection);
getRenderStates().modelViewProjection = mvpMatrix;*/
getRenderStates
().
model = mModel
;
getRenderStates
().
view = mView
;
getRenderStates
().
projection = mProjection
;
if (mTestModel
!=
null)
{
mTestModel.
render();
mShaderProgram.
activate();
getRenderStates
().
culling.
setEnabled(false);
getRenderStates
().
activate();
mTestMesh.
render();
getRenderStates
().
deactivate();
mShaderProgram.
deactivate();
}
int error = Gdx.
gl.
glGetError();
if (error
!= GL20.
GL_NO_ERROR)
{
Gdx.
app.
log(Consts.
LOG_TAG,
"gl error: " + error
);
}
}
}