This commit is contained in:
firefighter198
2021-09-13 14:31:50 +02:00
parent 9bdad49238
commit 0b24b0bb9d
4 changed files with 79 additions and 1 deletions
+43
View File
@@ -1,12 +1,16 @@
package Shaders;
import org.lwjgl.BufferUtils;
import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL20;
import org.lwjgl.util.vector.Matrix4f;
import org.lwjgl.util.vector.Vector3f;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.nio.FloatBuffer;
public abstract class ShaderProgram
{
@@ -14,6 +18,8 @@ public abstract class ShaderProgram
private int vertexShaderID;
private int fragmentShaderID;
private static FloatBuffer matrixBuffer = BufferUtils.createFloatBuffer(16);
public ShaderProgram(String vertexFile, String fragmentFile)
{
vertexShaderID = loadShader(vertexFile, GL20.GL_VERTEX_SHADER);
@@ -24,6 +30,14 @@ public abstract class ShaderProgram
bindAttributes();
GL20.glLinkProgram(programID);
GL20.glValidateProgram(programID);
getAllUniformLocations();
}
protected abstract void getAllUniformLocations();
protected int getUniformLocation(String uniformName)
{
return GL20.glGetUniformLocation(programID, uniformName);
}
public void start()
@@ -53,6 +67,35 @@ public abstract class ShaderProgram
GL20.glBindAttribLocation(programID, attribute, variableName);
}
protected void loadFloat(int location, float value)
{
GL20.glUniform1f(location, value);
}
protected void loadVector(int location, Vector3f vector)
{
GL20.glUniform3f(location, vector.x, vector.y, vector.z);
}
protected void loadBoolean(int location, boolean value)
{
if(value)
{
GL20.glUniform1f(location, 1);
}
else
{
GL20.glUniform1f(location, 0);
}
}
protected void loadMatrix(int location, Matrix4f matrix)
{
matrix.store(matrixBuffer);
matrixBuffer.flip();
GL20.glUniformMatrix4(location, false, matrixBuffer);
}
private static int loadShader(String file, int type)
{
StringBuilder shaderSource = new StringBuilder();
+14
View File
@@ -1,18 +1,32 @@
package Shaders;
import org.lwjgl.util.vector.Matrix4f;
public class StaticShader extends ShaderProgram
{
private static final String vertexFile = "src/shaders/vertexShader.glsl", fragmentFile = "src/shaders/fragmentShader.glsl";
private int locationTransform;
public StaticShader()
{
super(vertexFile, fragmentFile);
}
@Override
protected void getAllUniformLocations()
{
locationTransform = getUniformLocation("transformationMatrix");
}
@Override
protected void bindAttributes()
{
bindAttribute(0, "position");
bindAttribute(1, "uvs");
}
public void loadTransformMatrix(Matrix4f matrix)
{
loadMatrix(locationTransform, matrix);
}
}
+3 -1
View File
@@ -6,8 +6,10 @@ in vec2 uvs;
out vec3 color;
out vec2 passUvs;
uniform mat4 transformationMatrix;
void main(void)
{
gl_Position = vec4(position.x, position.y, position.z, 1.0);
gl_Position = vec4(position.x, position.y, position.z, 1.0) * transformationMatrix;
passUvs = uvs;
}
+19
View File
@@ -0,0 +1,19 @@
package Tools;
import org.lwjgl.util.vector.Matrix4f;
import org.lwjgl.util.vector.Vector3f;
public class Maths
{
public static Matrix4f createTransformMatrix(Vector3f translation, float rX, float rY, float rZ, float scale)
{
Matrix4f matrix = new Matrix4f();
matrix.setIdentity();
Matrix4f.translate(translation, matrix, matrix);
Matrix4f.rotate((float)Math.toRadians(rX), new Vector3f(1, 0, 0), matrix, matrix);
Matrix4f.rotate((float)Math.toRadians(rY), new Vector3f(0, 1, 0), matrix, matrix);
Matrix4f.rotate((float)Math.toRadians(rZ), new Vector3f(0, 0, 1), matrix, matrix);
Matrix4f.scale(new Vector3f(scale, scale, scale), matrix, matrix);
return matrix;
}
}