Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.main;
- import static org.lwjgl.opengl.GL11.*;
- import static org.lwjgl.opengl.GL20.*;
- public class ShaderProgram {
- private int programID;
- private int vertexShaderID;
- private int fragmentShaderID;
- public ShaderProgram() {
- programID = glCreateProgram();
- }
- public void attachVertexShader(String name)
- {
- // Load the source
- String vertexShaderSource = FileUtil.readFromFile(name);
- // Create the shader and set the source
- vertexShaderID = glCreateShader(GL_VERTEX_SHADER);
- glShaderSource(vertexShaderID, vertexShaderSource);
- // Compile the shader
- glCompileShader(vertexShaderID);
- // Check for errors
- if (glGetShaderi(vertexShaderID, GL_COMPILE_STATUS) == GL_FALSE)
- throw new RuntimeException("Error creating vertex shader\n"
- + glGetShaderInfoLog(vertexShaderID, glGetShaderi(vertexShaderID, GL_INFO_LOG_LENGTH)));
- // Attach the shader
- glAttachShader(programID, vertexShaderID);
- }
- public void attachFragmentShader(String name)
- {
- // Load the source
- String fragmentShaderSource = FileUtil.readFromFile(name);
- // Create the shader and set the source
- fragmentShaderID = glCreateShader(GL_FRAGMENT_SHADER);
- glShaderSource(fragmentShaderID, fragmentShaderSource);
- // Compile the shader
- glCompileShader(fragmentShaderID);
- // Check for errors
- if (glGetShaderi(fragmentShaderID, GL_COMPILE_STATUS) == GL_FALSE)
- throw new RuntimeException("Error creating vertex shader\n"
- + glGetShaderInfoLog(fragmentShaderID, glGetShaderi(fragmentShaderID, GL_INFO_LOG_LENGTH)));
- // Attach the shader
- glAttachShader(programID, fragmentShaderID);
- }
- public void link()
- {
- // Link this program
- glLinkProgram(programID);
- // Check for linking errors
- if (glGetProgrami(programID, GL_LINK_STATUS) == GL_FALSE)
- throw new RuntimeException("Unable to link shader program:");
- }
- public void bind()
- {
- glUseProgram(programID);
- }
- public void unbind()
- {
- glUseProgram(0);
- }
- public void dispose()
- {
- // Unbind the program
- unbind();
- // Detach the shaders
- glDetachShader(programID, vertexShaderID);
- glDetachShader(programID, fragmentShaderID);
- // Delete the shaders
- glDeleteShader(vertexShaderID);
- glDeleteShader(fragmentShaderID);
- // Delete the program
- glDeleteProgram(programID);
- }
- public int getID()
- {
- return programID;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement