src/nagu/program.nim defines the ProgramObject type and procedures related to its for abstracting OpenGL program.
Types
BindedProgram = ref ProgramObj[true]
mvpMatrix = array[16, float32]
- Represents model view projection matrixes.
Program = ref ProgramObj[false]
- The ProgramObject type representations OpenGL program object.
ProgramCreationDefect = object of ProgramDefect
- Raised by creating OpenGL programs.
ProgramDefect = object of OpenGLDefect
- Raised by something with OpenGL programs.
ProgramLinkingDefect = object of ProgramDefect
- Raised by linking OpenGL programs.
ProgramNotExistsActiveUniformDefect = object of ProgramDefect
- Raised by the condition that program don't have active uniform variables.
ProgramVariableKind = enum pvkAttrib, pvkUniform, pvkSubroutineUniform
Procs
proc `[]=`(program: Program | BindedProgram; name: string; matrix4v: array[16, float32])
proc `[]=`(program: Program | BindedProgram; name: string; v1: int)
proc `[]=`[I: static int; T](program: Program | BindedProgram; name: string; data: tuple[vbo: BindedVBO[I, T], size: int])
proc `[]`(program: Program | BindedProgram; name: string): int
proc `bind`(program: var Program): BindedProgram {....raises: [Exception], tags: [RootEffect].}
- Use program if it is linked.
proc attach(program: Program | var BindedProgram; shader: ShaderObject)
- Attach shader to program.
func id(program: Program | BindedProgram): opengl.GLuint
- Gets id of program.
func identityMatrix(): mvpMatrix {....raises: [], tags: [].}
- Matrix which value does not change when applied.
func index(program: Program | BindedProgram; name: string): int
- Queries program for name and corresponding index.
proc link(program: var Program | var BindedProgram)
- Links program.
func linked(program: Program | BindedProgram): bool
- Gets program linked or not.
proc log(program: var Program | var BindedProgram): string
- Gets logs about OpenGL programs.
proc make(_: typedesc[Program]; vertex_shader: ShaderObject; fragment_shader: ShaderObject): Program
- Makes a program linking vertex_shader and fragment_shader.
proc make(_: typedesc[Program]; vertex_shader: ShaderObject; fragment_shader: ShaderObject; attributes: seq[string] = @[]; uniforms: seq[string] = @[]; subroutine_uniforms: seq[(ShaderObjectKind, string)] = @[]): Program
- Makes a program linking vertex_shader and fragment_shader; registering attributes and uniforms.
proc registerAttrib(program: var Program | var BindedProgram; name: string)
- Register an attrib variable named name in program
proc registerSubroutineUniform(program: var Program | var BindedProgram; shaderType: ShaderObjectKind; name: string)
proc registerUniform(program: var Program | var BindedProgram; name: string)
- Register a uniform variable named name in program
proc unbind(program: var BindedProgram): Program {....raises: [Exception], tags: [RootEffect].}
proc use(program: var Program; procedure: proc (program: var BindedProgram)) {. ...raises: [Exception], tags: [RootEffect].}
- Use program if it is linked.