Scene, VertexArray, Shader, ShaderUtils, BufferUtils, FileUtils, Matrix4f, Vector3f Ajout des shaders de test: vert.vert et frag.frag dans le dossier shaders
67 lines
1.8 KiB
Java
67 lines
1.8 KiB
Java
package engine;
|
|
|
|
import java.util.HashMap;
|
|
import java.util.Map;
|
|
|
|
import static org.lwjgl.opengl.GL20.*;
|
|
|
|
public class Shader {
|
|
|
|
private boolean enabled = false;
|
|
|
|
//Identifiant du programme resultat de la compilation des shaders
|
|
private final int ID;
|
|
private Map<String, Integer> locationCache = new HashMap<String, Integer>();
|
|
|
|
/*
|
|
Crée le fragment et le vertex shader les lie dans un programme dont il renvoie l'identifiant.
|
|
*/
|
|
public Shader(String vertex, String fragment) {
|
|
ID = ShaderUtils.load(vertex, fragment);
|
|
}
|
|
|
|
public int getUniform(String name){
|
|
if (locationCache.containsKey(name)) return locationCache.get(name);
|
|
int result = glGetUniformLocation(ID, name);
|
|
if (result == -1) System.err.println("Could not find uniform variable " + name);
|
|
else locationCache.put(name, result);
|
|
return result;
|
|
}
|
|
|
|
public void setUniform1i(String name, int value) {
|
|
if (!enabled) enable();
|
|
glUniform1i(getUniform(name), value);
|
|
}
|
|
|
|
public void setUniform1f(String name, float value) {
|
|
if (!enabled) enable();
|
|
glUniform1f(getUniform(name), value);
|
|
}
|
|
|
|
public void setUniform2f(String name, float x, float y) {
|
|
if (!enabled) enable();
|
|
glUniform2f(getUniform(name), x, y);
|
|
}
|
|
|
|
public void setUniform3f(String name, Vector3f vector) {
|
|
if (!enabled) enable();
|
|
glUniform3f(getUniform(name), vector.x, vector.y, vector.z);
|
|
}
|
|
|
|
public void setUniformMat4f(String name, Matrix4f matrix){
|
|
if (!enabled) enable();
|
|
glUniformMatrix4fv(getUniform(name), false, matrix.toFloatBuffer());
|
|
}
|
|
|
|
public void enable() {
|
|
glUseProgram(ID);
|
|
enabled = true;
|
|
}
|
|
|
|
public void disable() {
|
|
glUseProgram(0);
|
|
enabled = false;
|
|
}
|
|
|
|
}
|