Property definitions

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