77 lines
1.9 KiB
Java
77 lines
1.9 KiB
Java
package chess.view.DDDrender;
|
|
|
|
import static org.lwjgl.opengl.GL11.GL_UNSIGNED_INT;
|
|
|
|
import java.io.Closeable;
|
|
import java.io.IOException;
|
|
|
|
import org.joml.Matrix4f;
|
|
import org.joml.Vector3f;
|
|
import org.lwjgl.opengl.GL30;
|
|
|
|
import chess.view.DDDrender.opengl.FrameBuffer;
|
|
import chess.view.DDDrender.opengl.VertexArray;
|
|
import chess.view.DDDrender.shader.BoardShader;
|
|
import chess.view.DDDrender.shader.PieceShader;
|
|
import chess.view.DDDrender.shader.ShaderProgram;
|
|
|
|
public class Renderer implements Closeable {
|
|
private BoardShader boardShader;
|
|
private PieceShader pieceShader;
|
|
private FrameBuffer frameBuffer;
|
|
|
|
public Renderer() {
|
|
this.boardShader = new BoardShader();
|
|
this.pieceShader = new PieceShader();
|
|
}
|
|
|
|
public void Init(float windowWidth, float widowHeight) {
|
|
boardShader.LoadShader();
|
|
pieceShader.LoadShader();
|
|
|
|
this.frameBuffer = new FrameBuffer((int) windowWidth, (int) (widowHeight * 8.0f / 10.0f));
|
|
}
|
|
|
|
public void Update(Camera cam) {
|
|
this.boardShader.Start();
|
|
this.boardShader.SetCamMatrix(cam);
|
|
this.pieceShader.Start();
|
|
this.pieceShader.SetCamMatrix(cam);
|
|
}
|
|
|
|
public void Render(DDDModel model, Vector3f color, Matrix4f transform) {
|
|
this.pieceShader.Start();
|
|
this.pieceShader.setModelColor(color);
|
|
this.pieceShader.setModelTransform(transform);
|
|
Render(model);
|
|
}
|
|
|
|
public void Render(DDDModel model) {
|
|
for (int i = 0; i < model.getVaos().size(); i++) {
|
|
VertexArray vao = model.getVaos().get(i);
|
|
RenderVao(this.pieceShader, vao);
|
|
}
|
|
}
|
|
|
|
public void RenderVao(ShaderProgram shader, VertexArray vertexArray) {
|
|
shader.Start();
|
|
vertexArray.Bind();
|
|
GL30.glDrawElements(GL30.GL_TRIANGLES, vertexArray.GetVertexCount(), GL_UNSIGNED_INT, 0);
|
|
vertexArray.Unbind();
|
|
}
|
|
|
|
public FrameBuffer getFrameBuffer() {
|
|
return frameBuffer;
|
|
}
|
|
|
|
public BoardShader getBoardShader() {
|
|
return boardShader;
|
|
}
|
|
|
|
@Override
|
|
public void close() throws IOException {
|
|
this.boardShader.close();
|
|
this.pieceShader.close();
|
|
}
|
|
}
|