[DEV] tutorial 5 implementation
This commit is contained in:
parent
40d8e45bb7
commit
7c1f3508c4
@ -6,6 +6,7 @@ import renderEngine.DisplayManagerDraw;
|
||||
import renderEngine.Loader;
|
||||
import renderEngine.RawModel;
|
||||
import renderEngine.Renderer;
|
||||
import shaders.StaticShader;
|
||||
|
||||
/**
|
||||
* This class contains the main method and is used to test the engine.
|
||||
@ -27,8 +28,8 @@ public class MainGameLoop {
|
||||
DisplayManager manager = new DisplayManager();
|
||||
Loader loader = new Loader();
|
||||
Renderer renderer = new Renderer();
|
||||
|
||||
manager.init();
|
||||
StaticShader shader = new StaticShader();
|
||||
|
||||
float[] vertices = {
|
||||
-0.5f, 0.5f, 0f,//v0
|
||||
@ -48,11 +49,13 @@ public class MainGameLoop {
|
||||
@Override
|
||||
public void draw() {
|
||||
renderer.prepare();
|
||||
shader.start();
|
||||
renderer.render(model);
|
||||
shader.stop();
|
||||
}
|
||||
});
|
||||
manager.loop();
|
||||
|
||||
shader.cleanUp();
|
||||
loader.cleanUp();
|
||||
manager.unInit();
|
||||
}
|
||||
|
72
src/shaders/ShaderProgram.java
Normal file
72
src/shaders/ShaderProgram.java
Normal 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;
|
||||
}
|
||||
}
|
16
src/shaders/StaticShader.java
Normal file
16
src/shaders/StaticShader.java
Normal 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");
|
||||
}
|
||||
|
||||
}
|
10
src/shaders/fragmentShader.txt
Normal file
10
src/shaders/fragmentShader.txt
Normal file
@ -0,0 +1,10 @@
|
||||
#version 400 core
|
||||
|
||||
in vec3 colour;
|
||||
|
||||
out vec4 out_Color;
|
||||
|
||||
void main(void) {
|
||||
out_Color = vec4(colour, 1.0);
|
||||
}
|
||||
|
12
src/shaders/vertexShader.txt
Normal file
12
src/shaders/vertexShader.txt
Normal 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);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user