package com.nilunder.bdx.gl;
import javax.vecmath.Vector2f;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.files.FileHandle;
public class ScreenShader extends com.badlogic.gdx.graphics.glutils.ShaderProgram {
public Vector2f renderScale;
public boolean overlay;
static public boolean nearestFiltering = false;
private boolean usingDepthTexture = false;
private boolean checkedShaderProgram = false;
public boolean active = true;
public String vertexShaderPath;
public String fragmentShaderPath;
public ScreenShader(String vertexShader, String fragmentShader) {
super(vertexShader, fragmentShader);
vertexShaderPath = vertexShader;
fragmentShaderPath = fragmentShader;
check();
}
public ScreenShader(FileHandle vertexShader, FileHandle fragmentShader) {
super(vertexShader, fragmentShader);
vertexShaderPath = vertexShader.path();
fragmentShaderPath = fragmentShader.path();
check();
}
private void check(){
if (!isCompiled()) {
String msg = "Shader compilation error in ScreenShader at:\n" + getLog() + "\n\n\n< Vertex Shader >\n\n" + vertexShaderPath + "\n\n< Fragment Shader >\n\n" + fragmentShaderPath + "\n\n";
throw new RuntimeException(msg);
}
renderScale = new Vector2f(1, 1);
overlay = false;
}
public static ScreenShader load(String vertexPath, String fragmentPath) {
return new ScreenShader(Gdx.files.internal("bdx/shaders/2d/" + vertexPath), Gdx.files.internal("bdx/shaders/2d/" + fragmentPath));
}
public static ScreenShader load(String fragmentPath) {
return load("default.vert", fragmentPath);
}
public boolean usingDepthTexture(){
checkBuffers();
return usingDepthTexture;
}
public void checkBuffers(){
if (!checkedShaderProgram) {
if (getFragmentShaderSource().contains("depthTexture"))
usingDepthTexture = true;
checkedShaderProgram = true;
}
}
}