You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

33 lines
989 B
Kotlin

package me.eater.threedom.gl
import me.eater.threedom.gl.GL.stack
import me.eater.threedom.gl.exception.ShaderCompilationException
import org.lwjgl.opengl.GL20.*
import org.lwjgl.system.MemoryUtil
data class Shader(val shaderId: Int, val shaderType: ShaderType) {
enum class ShaderType(val glId: Int) {
Fragment(GL_FRAGMENT_SHADER),
Vertex(GL_VERTEX_SHADER);
}
fun delete() {
glDeleteShader(shaderId)
}
companion object {
fun create(source: String, shaderType: ShaderType): Shader {
val shaderId = glCreateShader(shaderType.glId)
glShaderSource(shaderId, source)
glCompileShader(shaderId)
val success = stack.mallocInt(1)
glGetShaderiv(shaderId, GL_COMPILE_STATUS, success)
if (success.get(0) == 0) {
throw ShaderCompilationException(glGetShaderInfoLog(shaderId))
}
return Shader(shaderId, shaderType)
}
}
}