Entire project
This commit is contained in:
commit
cba41886e5
69 changed files with 3982 additions and 0 deletions
101
src/com/gnarly/engine/shaders/Shader.java
Normal file
101
src/com/gnarly/engine/shaders/Shader.java
Normal file
|
@ -0,0 +1,101 @@
|
|||
package com.gnarly.engine.shaders;
|
||||
|
||||
import static org.lwjgl.opengl.GL20.GL_COMPILE_STATUS;
|
||||
import static org.lwjgl.opengl.GL20.GL_FRAGMENT_SHADER;
|
||||
import static org.lwjgl.opengl.GL20.GL_VERTEX_SHADER;
|
||||
import static org.lwjgl.opengl.GL20.glAttachShader;
|
||||
import static org.lwjgl.opengl.GL20.glCompileShader;
|
||||
import static org.lwjgl.opengl.GL20.glCreateProgram;
|
||||
import static org.lwjgl.opengl.GL20.glCreateShader;
|
||||
import static org.lwjgl.opengl.GL20.glDeleteProgram;
|
||||
import static org.lwjgl.opengl.GL20.glDeleteShader;
|
||||
import static org.lwjgl.opengl.GL20.glDetachShader;
|
||||
import static org.lwjgl.opengl.GL20.glGetShaderInfoLog;
|
||||
import static org.lwjgl.opengl.GL20.glGetShaderi;
|
||||
import static org.lwjgl.opengl.GL20.glGetUniformLocation;
|
||||
import static org.lwjgl.opengl.GL20.glLinkProgram;
|
||||
import static org.lwjgl.opengl.GL20.glShaderSource;
|
||||
import static org.lwjgl.opengl.GL20.glUniformMatrix4fv;
|
||||
import static org.lwjgl.opengl.GL20.glUseProgram;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
import java.io.FileReader;
|
||||
import java.io.IOException;
|
||||
|
||||
import org.joml.Matrix4f;
|
||||
|
||||
public abstract class Shader {
|
||||
|
||||
public static Shader2c SHADER2C;
|
||||
public static Shader2t SHADER2T;
|
||||
public static Shader2cs SHADER2TM;
|
||||
|
||||
protected int program;
|
||||
|
||||
protected int mvpLoc;
|
||||
|
||||
protected Shader(String vertPath, String fragPath) {
|
||||
program = glCreateProgram();
|
||||
|
||||
int vert = loadShader(vertPath, GL_VERTEX_SHADER);
|
||||
int frag = loadShader(fragPath, GL_FRAGMENT_SHADER);
|
||||
|
||||
glAttachShader(program, vert);
|
||||
glAttachShader(program, frag);
|
||||
|
||||
glLinkProgram(program);
|
||||
|
||||
glDetachShader(program, vert);
|
||||
glDetachShader(program, frag);
|
||||
|
||||
glDeleteShader(vert);
|
||||
glDeleteShader(frag);
|
||||
|
||||
mvpLoc = glGetUniformLocation(program, "mvp");
|
||||
}
|
||||
|
||||
private int loadShader(String path, int type) {
|
||||
StringBuilder file = new StringBuilder();
|
||||
try {
|
||||
BufferedReader reader = new BufferedReader(new FileReader(new File(path)));
|
||||
String line;
|
||||
while((line = reader.readLine()) != null)
|
||||
file.append(line + '\n');
|
||||
reader.close();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
String source = file.toString();
|
||||
int shader = glCreateShader(type);
|
||||
glShaderSource(shader, source);
|
||||
glCompileShader(shader);
|
||||
if(glGetShaderi(shader, GL_COMPILE_STATUS) != 1)
|
||||
throw new RuntimeException("Failed to compile shader: " + path + "! " + glGetShaderInfoLog(shader));
|
||||
return shader;
|
||||
}
|
||||
|
||||
protected abstract void getUniforms();
|
||||
|
||||
public void setMVP(Matrix4f matrix) {
|
||||
glUniformMatrix4fv(mvpLoc, false, matrix.get(new float[16]));
|
||||
}
|
||||
|
||||
public void enable() {
|
||||
glUseProgram(program);
|
||||
}
|
||||
|
||||
public void disable() {
|
||||
glUseProgram(0);
|
||||
}
|
||||
|
||||
public void destroy() {
|
||||
glDeleteProgram(program);
|
||||
}
|
||||
|
||||
public static void init() {
|
||||
SHADER2C = new Shader2c();
|
||||
SHADER2T = new Shader2t();
|
||||
SHADER2TM = new Shader2cs();
|
||||
}
|
||||
}
|
23
src/com/gnarly/engine/shaders/Shader2c.java
Normal file
23
src/com/gnarly/engine/shaders/Shader2c.java
Normal file
|
@ -0,0 +1,23 @@
|
|||
package com.gnarly.engine.shaders;
|
||||
|
||||
import static org.lwjgl.opengl.GL20.glGetUniformLocation;
|
||||
import static org.lwjgl.opengl.GL20.glUniform4f;
|
||||
|
||||
public class Shader2c extends Shader {
|
||||
|
||||
int colorLoc;
|
||||
|
||||
protected Shader2c() {
|
||||
super("res/shaders/s2c/vert.gls", "res/shaders/s2c/frag.gls");
|
||||
getUniforms();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void getUniforms() {
|
||||
colorLoc = glGetUniformLocation(program, "iColor");
|
||||
}
|
||||
|
||||
public void setColor(float r, float g, float b, float a) {
|
||||
glUniform4f(colorLoc, r, g, b, a);
|
||||
}
|
||||
}
|
37
src/com/gnarly/engine/shaders/Shader2cs.java
Normal file
37
src/com/gnarly/engine/shaders/Shader2cs.java
Normal file
|
@ -0,0 +1,37 @@
|
|||
package com.gnarly.engine.shaders;
|
||||
|
||||
import static org.lwjgl.opengl.GL20.glGetUniformLocation;
|
||||
import static org.lwjgl.opengl.GL20.glUniform2f;
|
||||
import static org.lwjgl.opengl.GL20.glUniform3f;
|
||||
import static org.lwjgl.opengl.GL20.glUniform4f;
|
||||
import static org.lwjgl.opengl.GL40.glUniform4d;
|
||||
|
||||
import com.gnarly.engine.texture.Spritesheet;
|
||||
|
||||
public class Shader2cs extends Shader {
|
||||
|
||||
int offsetLoc, dimsLoc, colorLoc;
|
||||
|
||||
protected Shader2cs() {
|
||||
super("res/shaders/s2cs/vert.gls", "res/shaders/s2cs/frag.gls");
|
||||
getUniforms();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void getUniforms() {
|
||||
offsetLoc = glGetUniformLocation(program, "offset");
|
||||
dimsLoc = glGetUniformLocation(program, "dims");
|
||||
colorLoc = glGetUniformLocation(program, "iColor");
|
||||
}
|
||||
|
||||
public void setFrame(int frame, Spritesheet map) {
|
||||
int x = frame % 16;
|
||||
int y = frame / 16;
|
||||
glUniform2f(offsetLoc, x * map.getFWidth(), y * map.getFHeight());
|
||||
glUniform2f(dimsLoc, map.getFWidth(), map.getFHeight());
|
||||
}
|
||||
|
||||
public void setColor(float r, float g, float b, float a) {
|
||||
glUniform4f(colorLoc, r, g, b, a);
|
||||
}
|
||||
}
|
23
src/com/gnarly/engine/shaders/Shader2t.java
Normal file
23
src/com/gnarly/engine/shaders/Shader2t.java
Normal file
|
@ -0,0 +1,23 @@
|
|||
package com.gnarly.engine.shaders;
|
||||
|
||||
import static org.lwjgl.opengl.GL20.glGetUniformLocation;
|
||||
import static org.lwjgl.opengl.GL20.glUniform4f;
|
||||
|
||||
public class Shader2t extends Shader {
|
||||
|
||||
int colorLoc;
|
||||
|
||||
protected Shader2t() {
|
||||
super("res/shaders/s2t/vert.gls", "res/shaders/s2t/frag.gls");
|
||||
getUniforms();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void getUniforms() {
|
||||
colorLoc = glGetUniformLocation(program, "iColor");
|
||||
}
|
||||
|
||||
public void setColor(float r, float g, float b, float a) {
|
||||
glUniform4f(colorLoc, r, g, b, a);
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue