gamnit :: Shader :: defaultinit
# Gamnit shader
abstract class Shader
# TODO add alternative init to load shaders from binary
# Index of this shader in OpenGL
private var gl_shader: GLShader is noinit
# Latest error raised by operations of this shader
var error: nullable Error = null
# Source code of this shader
var source: Text
# Low-level type of this shader
private fun gl_shader_type: GLShaderType is abstract
# Compile this shader and report any errors in the attribute `error`
fun compile
do
# Create
var gl_shader = glCreateShader(gl_shader_type)
if not glIsShader(gl_shader) then
self.error = new Error("Shader creation failed: {glGetError}")
return
end
self.gl_shader = gl_shader
glShaderSource(gl_shader, source.to_cstring)
# Compile
glCompileShader gl_shader
if not gl_shader.is_compiled then
self.error = new Error("Shader compilation failed: {glGetShaderInfoLog(gl_shader)}")
return
end
error = gammit_gl_error
end
# Has this shader been deleted?
var deleted = false
# Delete this shader and free its resources
fun delete
do
if deleted then return
glDeleteShader gl_shader
deleted = true
end
end
lib/gamnit/programs.nit:252,1--303,3