First commit
This commit is contained in:
commit
58c64ab472
62 changed files with 29291 additions and 0 deletions
117
src/mrdev023/rendering/Shader.java
Normal file
117
src/mrdev023/rendering/Shader.java
Normal file
|
@ -0,0 +1,117 @@
|
|||
package mrdev023.rendering;
|
||||
|
||||
import static org.lwjgl.opengl.GL11.*;
|
||||
import static org.lwjgl.opengl.GL20.*;
|
||||
|
||||
import java.io.*;
|
||||
|
||||
import mrdev023.math.*;
|
||||
import mrdev023.utils.*;
|
||||
|
||||
public class Shader {
|
||||
|
||||
public int program;
|
||||
public int includeV = 0,includeF = 0;
|
||||
public static Shader MAIN,LIGHT,LIGHT_AMBIENT;
|
||||
|
||||
public static void init() {
|
||||
MAIN = new Shader("res/shaders/main");
|
||||
LIGHT = new Shader("res/shaders/light");
|
||||
LIGHT_AMBIENT = new Shader("res/shaders/light_ambient");
|
||||
}
|
||||
|
||||
public Shader(String file){
|
||||
String vertexShader = "";
|
||||
try {
|
||||
vertexShader = IO.loadFile(file + ".vert");
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
System.exit(-1);
|
||||
}
|
||||
vertexShader = loadShader(vertexShader,0,file + ".vert");
|
||||
String fragmentShader = "";
|
||||
try {
|
||||
fragmentShader = IO.loadFile(file + ".frag");
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
System.exit(-1);
|
||||
}
|
||||
fragmentShader = loadShader(fragmentShader,1,file + ".vert");
|
||||
program = glCreateProgram();
|
||||
int vert = glCreateShader(GL_VERTEX_SHADER);
|
||||
int frag = glCreateShader(GL_FRAGMENT_SHADER);
|
||||
glShaderSource(vert, vertexShader);
|
||||
glShaderSource(frag, fragmentShader);
|
||||
glCompileShader(vert);
|
||||
if (glGetShaderi(vert, GL_COMPILE_STATUS) == GL_FALSE) {
|
||||
System.err.println(glGetShaderInfoLog(vert, 2048));
|
||||
System.exit(1);
|
||||
}
|
||||
glCompileShader(frag);
|
||||
if (glGetShaderi(frag, GL_COMPILE_STATUS) == GL_FALSE) {
|
||||
System.err.println(glGetShaderInfoLog(frag, 2048));
|
||||
System.exit(1);
|
||||
}
|
||||
glAttachShader(program, vert);
|
||||
glAttachShader(program, frag);
|
||||
glLinkProgram(program);
|
||||
glValidateProgram(program);
|
||||
System.out.println("Shader " + file + ".vert loaded with " + includeV + " include !");
|
||||
System.out.println("Shader " + file + ".frag loaded with " + includeF + " include !");
|
||||
}
|
||||
|
||||
public String loadShader(String shader,int a,String name){
|
||||
String st = "";
|
||||
BufferedReader reader = new BufferedReader(new StringReader(shader));
|
||||
String buffer = "";
|
||||
int line = 0;
|
||||
try {
|
||||
while ((buffer = reader.readLine()) != null) {
|
||||
line++;
|
||||
if(buffer.startsWith("#include")){
|
||||
if(a == 0){
|
||||
includeV++;
|
||||
}else{
|
||||
includeF++;
|
||||
}
|
||||
String path = buffer.substring(10, buffer.length() - 1);
|
||||
String sh = IO.loadFile("res/shaders/" + path);
|
||||
buffer += sh;
|
||||
}else{
|
||||
st += buffer + "\n";
|
||||
}
|
||||
}
|
||||
reader.close();
|
||||
} catch (IOException e) {
|
||||
System.err.println("include file not found in " + name + " #" + line + " !");
|
||||
System.exit(-1);
|
||||
}
|
||||
return st;
|
||||
}
|
||||
|
||||
public void bind(){
|
||||
glUseProgram(program);
|
||||
}
|
||||
|
||||
public void unbind(){
|
||||
glUseProgram(0);
|
||||
}
|
||||
|
||||
public void uniform(String name,float v){
|
||||
glUniform1f(glGetUniformLocation(program, name), v);
|
||||
}
|
||||
|
||||
public void uniform(String name,Vector3f vec){
|
||||
glUniform3f(glGetUniformLocation(program, name), vec.x,vec.y,vec.z);
|
||||
}
|
||||
|
||||
public void uniform(String name,Matrix4f mat){
|
||||
glUniformMatrix4fv(glGetUniformLocation(program, name),true, mat.getBuffer());
|
||||
}
|
||||
|
||||
public void uniform(String name, Color4f v) {
|
||||
glUniform4f(glGetUniformLocation(program, name), v.getR(),v.getG(),v.getB(),v.getA());
|
||||
}
|
||||
|
||||
|
||||
}
|
Reference in a new issue