package tk.captainsplexx.Render.Gui;
import java.util.ArrayList;
import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL13;
import org.lwjgl.opengl.GL20;
import org.lwjgl.opengl.GL30;
import org.lwjgl.util.vector.Vector2f;
import tk.captainsplexx.Game.Core;
import tk.captainsplexx.Maths.Matrices;
import tk.captainsplexx.Model.Loader;
import tk.captainsplexx.Model.RawModel;
public class GuiRenderer {
private final RawModel quad;
private GuiShader shader;
public GuiRenderer(Loader loader){
this.shader = Core.getGame().getShaderHandler().getGuiShader();
float[] positions = {-1, 1, -1, -1, 1, 1, 1, -1};
quad = loader.loadVAO("quad", GL11.GL_TRIANGLE_STRIP, positions);
}
public void update(ArrayList<GuiTexture> guis){
shader.start();
GL30.glBindVertexArray(quad.getVaoID());
GL20.glEnableVertexAttribArray(0);
GL11.glEnable(GL11.GL_BLEND);
GL11.glDisable(GL11.GL_DEPTH_TEST);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
for (GuiTexture gui : guis){
Vector2f scaleVec2 = new Vector2f(gui.getScale().x, gui.getScale().y);
scaleVec2.x /= (float) Core.DISPLAY_WIDTH/(float) Core.DISPLAY_HEIGHT;
shader.loadTransformation(Matrices.createTransformationMatrix(gui.getPosition(), scaleVec2));
GL13.glActiveTexture(GL13.GL_TEXTURE0);
GL11.glBindTexture(GL11.GL_TEXTURE_2D, gui.getTexture());
GL11.glDrawArrays(quad.getDrawMethod(), 0, quad.getVertexCount());
}
GL11.glDisable(GL11.GL_BLEND);
GL11.glEnable(GL11.GL_DEPTH_TEST);
GL20.glDisableVertexAttribArray(0);
GL30.glBindVertexArray(0);
shader.stop();
}
}