SrinjoySS01

Untitled

Oct 28th, 2020
106
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. package me.srinjoy.engine;
  2.  
  3. import org.lwjgl.BufferUtils;
  4.  
  5. import java.nio.FloatBuffer;
  6. import java.nio.IntBuffer;
  7.  
  8. import static org.lwjgl.opengl.GL20.*;
  9. import static org.lwjgl.opengl.GL30.glBindVertexArray;
  10. import static org.lwjgl.opengl.GL30.glGenVertexArrays;
  11.  
  12. public class LevelEditorScene extends Scene {
  13.     private final String vertexShaderSrc =
  14.             "    #version 330\n" +
  15.             "    layout (location=0) in vec3 aPos;\n" +
  16.             "    layout (location=1) in vec4 aColour;\n" +
  17.             "\n" +
  18.             "    out vec4 fColour;\n" +
  19.             "\n" +
  20.             "    void main(){\n" +
  21.             "        fColour = aColour;\n" +
  22.             "        gl_Position = vec4(aPos, 1.0);\n" +
  23.             "    }";
  24.     private final String fragmentShaderSrc =
  25.             "    #version 330\n" +
  26.             "    in vec4 fColour;\n" +
  27.             "    out vec4 colour;\n" +
  28.             "    void main(){\n" +
  29.             "        colour = fColour;\n" +
  30.             "    }";
  31.     private int vertexID, fragmentID, shadersProgram;
  32.     private float[] vertexArray = {
  33.             /*
  34.                 1   2
  35.                 3   0
  36.              */
  37.             // position            // colour
  38.             0.5f, -0.5f, 0.0f,     1.0f, 0.0f, 0.0f, 1.0f, // Bottom right  0
  39.            -0.5f,  0.5f, 0.0f,     0.0f, 1.0f, 0.0f, 1.0f, // Top left      1
  40.             0.5f,  0.5f, 0.0f,     0.0f, 0.0f, 1.0f, 1.0f, // Top right     2
  41.            -0.5f, -0.5f, 0.0f,     1.0f, 1.0f, 0.0f, 1.0f, // Bottom left   3
  42.     };
  43.     // Must be in counter-clockwise order
  44.     private int[] elementArray = {
  45.             2, 1, 0, // Top right triangle
  46.             0, 1, 3, // Bottom left triangle
  47.     };
  48.     private int vaoID, vboID, eboID;
  49.  
  50.     @Override
  51.     public void init() {
  52.         //compile and link shaders
  53.         //load and compile vertex shader
  54.         vertexID = glCreateShader(GL_VERTEX_SHADER);
  55.         //pass shader source to gpu
  56.         glShaderSource(vertexID, vertexShaderSrc);
  57.         glCompileShader(vertexID);
  58.         int success = glGetShaderi(vertexID, GL_COMPILE_STATUS);
  59.         if (success == GL_FALSE){
  60.             int length = glGetShaderi(vertexID, GL_INFO_LOG_LENGTH);
  61.             System.out.println("ERROR: 'defaultShader.glsl'\n\tVertexShader compilation failed.");
  62.             System.out.println(glGetShaderInfoLog(vertexID, length));
  63.             assert false : "";
  64.         }
  65.         //load and compile fragment shader
  66.         fragmentID = glCreateShader(GL_FRAGMENT_SHADER);
  67.         //pass shader source to gpu
  68.         glShaderSource(fragmentID, fragmentShaderSrc);
  69.         glCompileShader(fragmentID);
  70.         success = glGetShaderi(fragmentID, GL_COMPILE_STATUS);
  71.         if (success == GL_FALSE){
  72.             int length = glGetShaderi(fragmentID, GL_INFO_LOG_LENGTH);
  73.             System.out.println("ERROR: 'defaultShader.glsl'\n\tFragmentShader compilation failed.");
  74.             System.out.println(glGetShaderInfoLog(fragmentID, length));
  75.             assert false : "";
  76.         }
  77.         //link shaders and check for errors
  78.         shadersProgram = glCreateProgram();
  79.         glAttachShader(shadersProgram, vertexID);
  80.         glAttachShader(shadersProgram, fragmentID);
  81.         glLinkProgram(shadersProgram);
  82.  
  83.         //check for linking error
  84.         success = glGetProgrami(shadersProgram, GL_LINK_STATUS);
  85.         if (success == GL_FALSE){
  86.             int length = glGetProgrami(shadersProgram, GL_INFO_LOG_LENGTH);
  87.             System.out.println("ERROR: 'defaultShader.glsl'\n\tLinking of shaders failed.");
  88.             System.out.println(glGetProgramInfoLog(fragmentID, length));
  89.             assert false : "";
  90.         }
  91.         // Generate VAO, VBO, EBO buffer objects and send to GPU
  92.         vaoID = glGenVertexArrays();
  93.         glBindVertexArray(vaoID);
  94.  
  95.         // create float buffer of vertices
  96.         FloatBuffer vertexBuffer = BufferUtils.createFloatBuffer(vertexArray.length);
  97.         vertexBuffer.put(vertexArray).flip();
  98.  
  99.         // create VBO upload vertex buffer
  100.         vboID = glGenBuffers();
  101.         glBindBuffer(GL_ARRAY_BUFFER, vboID);
  102.         glBufferData(GL_ARRAY_BUFFER, vertexBuffer, GL_STATIC_DRAW);
  103.  
  104.         // create indices and upload
  105.         IntBuffer elementBuffer = BufferUtils.createIntBuffer(elementArray.length);
  106.         elementBuffer.put(elementArray).flip();
  107.  
  108.         eboID = glGenBuffers();
  109.         glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, eboID);
  110.         glBufferData(GL_ELEMENT_ARRAY_BUFFER, elementBuffer, GL_STATIC_DRAW);
  111.  
  112.         // add vertex attribute pointers
  113.         int positionSize = 3;
  114.         int colourSize = 4;
  115.         int floatSizeBytes = 4;
  116.         int vertexSizeBytes = (positionSize + colourSize) * floatSizeBytes;
  117.         glVertexAttribPointer(0, positionSize, GL_FLOAT, false, vertexSizeBytes, 0);
  118.         glEnableVertexAttribArray(0);
  119.         glVertexAttribPointer(1, colourSize, GL_FLOAT, false, vertexSizeBytes, positionSize * vertexSizeBytes);
  120.         glEnableVertexAttribArray(1);
  121.     }
  122.  
  123.     public LevelEditorScene() {
  124.  
  125.     }
  126.  
  127.     @Override
  128.     public void update(float dt) {
  129.         // Bind shader program
  130.         glUseProgram(shadersProgram);
  131.         // Bind VAO
  132.         glBindVertexArray(vaoID);
  133.         // enable vertex attribute pointers
  134.         glEnableVertexAttribArray(0);
  135.         glEnableVertexAttribArray(1);
  136.  
  137.         glDrawElements(GL_TRIANGLES, elementArray.length, GL_UNSIGNED_INT, 0);
  138.  
  139.         // unbind
  140.         glDisableVertexAttribArray(0);
  141.         glDisableVertexAttribArray(1);
  142.         glBindVertexArray(0);
  143.         glUseProgram(0);
  144.  
  145.     }
  146. }
  147.  
RAW Paste Data