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.

61 lines
1.9 KiB
Kotlin

package me.eater.threedom.example.shader
import me.eater.threedom.gl.Shader
import me.eater.threedom.gl.ShaderPreProcessor
import me.eater.threedom.gl.ShaderProgram
class Plain private constructor(vertexShader: Shader, fragmentShader: Shader) :
ShaderProgram(vertexShader, fragmentShader) {
var objectColor by vec3()
var lightColor by vec3()
var lightPos by vec3()
var viewPos by vec3()
companion object {
fun load(preProcessor: ShaderPreProcessor): Plain {
val vertex = preProcessor.compile(
this::class.java.getResourceAsStream("/shaders/plain/vertex.glsl").readAllBytes()
.toString(Charsets.UTF_8),
Shader.ShaderType.Vertex
)
val fragment = preProcessor.compile(
this::class.java.getResourceAsStream("/shaders/plain/fragment.glsl").readAllBytes()
.toString(Charsets.UTF_8),
Shader.ShaderType.Fragment
)
return Plain(
vertex,
fragment
).also {
vertex.delete()
fragment.delete()
}
}
fun lamp(preProcessor: ShaderPreProcessor): Plain {
val vertex = preProcessor.compile(
this::class.java.getResourceAsStream("/shaders/plain/vertex.glsl").readAllBytes()
.toString(Charsets.UTF_8),
Shader.ShaderType.Vertex
)
val fragment = preProcessor.compile(
this::class.java.getResourceAsStream("/shaders/plain/fragment_lamp.glsl").readAllBytes()
.toString(Charsets.UTF_8),
Shader.ShaderType.Fragment
)
return Plain(
vertex,
fragment
).also {
vertex.delete()
fragment.delete()
}
}
}
}