[DEV] tutorial 5 implementation

This commit is contained in:
Edouard DUPIN 2020-04-18 00:42:13 +02:00
parent 40d8e45bb7
commit 7c1f3508c4
5 changed files with 115 additions and 2 deletions

View File

@ -6,6 +6,7 @@ import renderEngine.DisplayManagerDraw;
import renderEngine.Loader; import renderEngine.Loader;
import renderEngine.RawModel; import renderEngine.RawModel;
import renderEngine.Renderer; import renderEngine.Renderer;
import shaders.StaticShader;
/** /**
* This class contains the main method and is used to test the engine. * This class contains the main method and is used to test the engine.
@ -27,8 +28,8 @@ public class MainGameLoop {
DisplayManager manager = new DisplayManager(); DisplayManager manager = new DisplayManager();
Loader loader = new Loader(); Loader loader = new Loader();
Renderer renderer = new Renderer(); Renderer renderer = new Renderer();
manager.init(); manager.init();
StaticShader shader = new StaticShader();
float[] vertices = { float[] vertices = {
-0.5f, 0.5f, 0f,//v0 -0.5f, 0.5f, 0f,//v0
@ -48,11 +49,13 @@ public class MainGameLoop {
@Override @Override
public void draw() { public void draw() {
renderer.prepare(); renderer.prepare();
shader.start();
renderer.render(model); renderer.render(model);
shader.stop();
} }
}); });
manager.loop(); manager.loop();
shader.cleanUp();
loader.cleanUp(); loader.cleanUp();
manager.unInit(); manager.unInit();
} }

View File

@ -0,0 +1,72 @@
package shaders;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL20;
public abstract class ShaderProgram {
private int programID;
private int vertexShaderID;
private int fragmentShaderID;
public ShaderProgram (String vertexFile, String fragmentFile) {
vertexShaderID = loadShader(vertexFile, GL20.GL_VERTEX_SHADER);
fragmentShaderID = loadShader(fragmentFile, GL20.GL_FRAGMENT_SHADER);
programID = GL20.glCreateProgram();
GL20.glAttachShader(programID, vertexShaderID);
GL20.glAttachShader(programID, fragmentShaderID);
GL20.glLinkProgram(programID);
GL20.glValidateProgram(programID);
bindAttributes();
}
public void start() {
GL20.glUseProgram(programID);
}
public void stop() {
GL20.glUseProgram(0);
}
public void cleanUp() {
stop();
GL20.glDetachShader(programID, vertexShaderID);
GL20.glDetachShader(programID, fragmentShaderID);
GL20.glDeleteShader(vertexShaderID);
GL20.glDeleteShader(fragmentShaderID);
GL20.glDeleteProgram(programID);
}
protected abstract void bindAttributes();
protected void bindAttribute(int attribute, String variableName) {
GL20.glBindAttribLocation(programID, attribute, variableName);
}
private static int loadShader(String file, int type) {
StringBuilder shaderSource = new StringBuilder();
try {
BufferedReader reader = new BufferedReader(new FileReader(file));
String line;
while((line = reader.readLine()) != null) {
shaderSource.append(line).append("\n");
}
reader.close();
} catch(IOException e) {
System.err.println("Could not read the file!");
e.printStackTrace();
System.exit(-1);
}
int shaderID = GL20.glCreateShader(type);
GL20.glShaderSource(shaderID, shaderSource);
GL20.glCompileShader(shaderID);
if (GL20.glGetShaderi(shaderID, GL20.GL_COMPILE_STATUS) == GL11.GL_FALSE) {
System.out.println(GL20.glGetShaderInfoLog(shaderID, 500));
System.out.println("Could not compile the shader");
System.exit(-1);
}
return shaderID;
}
}

View File

@ -0,0 +1,16 @@
package shaders;
public class StaticShader extends ShaderProgram {
private static final String VERTEX_FILE = "src/shaders/vertexShader.txt";
private static final String FRAGMENT_FILE = "src/shaders/fragmentShader.txt";
public StaticShader() {
super(VERTEX_FILE, FRAGMENT_FILE);
}
@Override
protected void bindAttributes() {
super.bindAttribute(0, "position");
}
}

View File

@ -0,0 +1,10 @@
#version 400 core
in vec3 colour;
out vec4 out_Color;
void main(void) {
out_Color = vec4(colour, 1.0);
}

View File

@ -0,0 +1,12 @@
#version 400 core
in vec3 position;
out vec3 colour;
void main(void) {
gl_Position = vec4(position, 1.0);
colour = vec3(position.x+0.5, 1.0, position.y+0.5);
}