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(); } }