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
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)
|
|
}
|
|
}
|
|
}
|