src/nagu/program

    Dark Mode
Search:
Group by:

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 init(_: typedesc[Program]): Program
Initializes ProgramObject.
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.