Ajout du rectangle dans les primitives ajout de la gestion de l'EBO dans scene et VertexArray.
Mode Wireframe avec le touche space. Gestion des inputs dans la classe Input
This commit is contained in:
parent
b5d18197ff
commit
e4c1c80e4a
@ -14,7 +14,6 @@ import org.lwjgl.opengl.GL;
|
||||
|
||||
import static org.lwjgl.glfw.GLFW.*;
|
||||
import static org.lwjgl.opengl.GL11.*;
|
||||
import static org.lwjgl.opengl.GL13.*;
|
||||
import static org.lwjgl.system.MemoryUtil.*;
|
||||
|
||||
public class Engine {
|
||||
@ -52,6 +51,7 @@ public class Engine {
|
||||
glfwSetWindowPos(this.window, (vidmode.width() - width)/2, (vidmode.height() - height)/2);
|
||||
|
||||
glfwSetKeyCallback(window, new Input());
|
||||
glfwSetInputMode(window, GLFW_STICKY_KEYS, GLFW_TRUE);
|
||||
|
||||
// Contexte = zone cible des rendus
|
||||
glfwMakeContextCurrent(this.window);
|
||||
@ -63,18 +63,10 @@ public class Engine {
|
||||
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
|
||||
System.out.println("OpenGL: " + glGetString(GL_VERSION));
|
||||
|
||||
this.scene = new Scene("shaders/vert.vert", "shaders/frag.frag", Primitive.triangle);
|
||||
this.scene = new Scene("shaders/vert.vert", "shaders/frag.frag", Primitive.rectangle, Primitive.rectangle_indices);
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
TODO gérer les input dans une autre classe
|
||||
*/
|
||||
private void processInput(){
|
||||
if(glfwGetKey(this.window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
|
||||
glfwSetWindowShouldClose(this.window, true);
|
||||
}
|
||||
|
||||
private void update(){
|
||||
glfwPollEvents();
|
||||
}
|
||||
@ -91,7 +83,6 @@ public class Engine {
|
||||
public void run(){
|
||||
init();
|
||||
while(running){
|
||||
processInput();
|
||||
update();
|
||||
render();
|
||||
if(glfwWindowShouldClose(window)) running = false;
|
||||
@ -102,7 +93,7 @@ public class Engine {
|
||||
Est appelé à chaque modification de la taille de la fenêtre, et modifie la taille de la zone de rendu
|
||||
pour quelle corresponde à la taille de la fenêtre
|
||||
*/
|
||||
private static GLFWFramebufferSizeCallback resizeWindow = new GLFWFramebufferSizeCallback(){
|
||||
private static final GLFWFramebufferSizeCallback resizeWindow = new GLFWFramebufferSizeCallback(){
|
||||
@Override
|
||||
public void invoke(long window, int width, int height){
|
||||
glViewport(0,0,width,height);
|
||||
|
@ -3,6 +3,9 @@ package engine;
|
||||
import org.lwjgl.glfw.GLFW;
|
||||
import org.lwjgl.glfw.GLFWKeyCallback;
|
||||
|
||||
import static org.lwjgl.glfw.GLFW.*;
|
||||
import static org.lwjgl.opengl.GL11.*;
|
||||
|
||||
public class Input extends GLFWKeyCallback {
|
||||
|
||||
public static boolean[] keys = new boolean[65536];
|
||||
@ -10,5 +13,10 @@ public class Input extends GLFWKeyCallback {
|
||||
@Override
|
||||
public void invoke(long window, int key, int scancode, int action, int mods) {
|
||||
keys[key] = action != GLFW.GLFW_RELEASE;
|
||||
if(key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)
|
||||
glfwSetWindowShouldClose(window, true);
|
||||
else if(key == GLFW_KEY_SPACE && action == GLFW_PRESS) //Switch to wireframe
|
||||
if (glGetInteger(GL_POLYGON_MODE) == GL_FILL) glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
|
||||
else glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
|
||||
}
|
||||
}
|
||||
|
@ -8,4 +8,20 @@ public class Primitive {
|
||||
-0.5f, -0.5f, 0.0f,
|
||||
};
|
||||
|
||||
public static byte[] triangle_indices = new byte[]{
|
||||
0, 1, 2
|
||||
};
|
||||
|
||||
public static float[] rectangle = new float[] {
|
||||
0.5f, 0.5f, 0.0f, // top right
|
||||
0.5f, -0.5f, 0.0f, // bottom right
|
||||
-0.5f, -0.5f, 0.0f, // bottom left
|
||||
-0.5f, 0.5f, 0.0f // top left
|
||||
};
|
||||
|
||||
public static byte[] rectangle_indices = new byte[] {
|
||||
0, 1, 3,
|
||||
1, 2, 3
|
||||
};
|
||||
|
||||
}
|
||||
|
@ -3,14 +3,16 @@ package engine;
|
||||
public class Scene {
|
||||
|
||||
float[] vertices;
|
||||
byte[] indices;
|
||||
|
||||
VertexArray vertexArray;
|
||||
Shader shader;
|
||||
|
||||
public Scene(String vertPath, String fragPath, float[] vertices){
|
||||
public Scene(String vertPath, String fragPath, float[] vertices, byte[] indices){
|
||||
this.vertices = vertices;
|
||||
this.indices = indices;
|
||||
this.shader = new Shader(vertPath, fragPath);
|
||||
this.vertexArray = new VertexArray(this.vertices);
|
||||
this.vertexArray = new VertexArray(this.vertices, this.indices);
|
||||
}
|
||||
|
||||
public void render(){
|
||||
|
@ -6,22 +6,26 @@ import static org.lwjgl.opengl.GL30.*;
|
||||
|
||||
public class VertexArray {
|
||||
|
||||
private int VAO ,VBO;
|
||||
private int VAO ,VBO, EBO;
|
||||
private int count;
|
||||
|
||||
public VertexArray(float[] vertices){
|
||||
public VertexArray(float[] vertices, byte[] indices){
|
||||
count = indices.length;
|
||||
// VERTEX ARRAY OBJECT
|
||||
VAO = glGenVertexArrays();
|
||||
glBindVertexArray(VAO);
|
||||
|
||||
// VERTEX BUFFER OBJECT
|
||||
VBO = glGenBuffers();
|
||||
glBindVertexArray(VAO);
|
||||
|
||||
glBindBuffer(GL_ARRAY_BUFFER, VBO);
|
||||
glBufferData(GL_ARRAY_BUFFER, BufferUtils.createFloatBuffer(vertices), GL_STATIC_DRAW);
|
||||
|
||||
glVertexAttribPointer(0, 3, GL_FLOAT, false, 0, 0);
|
||||
glEnableVertexAttribArray(0);
|
||||
|
||||
EBO = glGenBuffers();
|
||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
|
||||
glBufferData(GL_ELEMENT_ARRAY_BUFFER, BufferUtils.createByteBuffer(indices), GL_STATIC_DRAW);
|
||||
|
||||
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
||||
glBindVertexArray(0);
|
||||
|
||||
@ -36,7 +40,7 @@ public class VertexArray {
|
||||
}
|
||||
|
||||
public void draw(){
|
||||
glDrawArrays(GL_TRIANGLES, 0, 3);
|
||||
glDrawElements(GL_TRIANGLES, count, GL_UNSIGNED_BYTE, 0);
|
||||
}
|
||||
|
||||
public void render(){
|
||||
|
Loading…
x
Reference in New Issue
Block a user