func main() { if err := glfw.Init(); err != nil { log.Fatalln("failed to initialize glfw:", err) } defer glfw.Terminate() glfw.WindowHint(glfw.Resizable, glfw.False) glfw.WindowHint(glfw.ContextVersionMajor, 2) glfw.WindowHint(glfw.ContextVersionMinor, 1) window, err := glfw.CreateWindow(640, 480, "tut02", nil, nil) if err != nil { panic(err) } window.MakeContextCurrent() if err := gl.Init(); err != nil { panic(err) } program, coords := initResources() for { onDisplay(program, uint32(coords)) window.SwapBuffers() } gl.DeleteProgram(program) gl.DeleteBuffers(1, &vboTriangle) }
func main() { if err := glfw.Init(); err != nil { log.Fatalln("failed to initialize glfw:", err) } defer glfw.Terminate() glfw.WindowHint(glfw.Resizable, glfw.False) glfw.WindowHint(glfw.ContextVersionMajor, 2) glfw.WindowHint(glfw.ContextVersionMinor, 1) window, err := glfw.CreateWindow(640, 480, "tut03", nil, nil) if err != nil { panic(err) } window.MakeContextCurrent() if err := gl.Init(); err != nil { panic(err) } t0 := time.Now() program := initResources() for { curFade = float32(math.Sin(time.Now().Sub(t0).Seconds()*2*math.Pi/5)/2 + 0.5) onDisplay(program) window.SwapBuffers() glfw.PollEvents() } gl.DeleteProgram(program) gl.DeleteBuffers(1, &vboTriangle) }
func (c *Context) DeleteProgram(p Program) { _ = c.runOnContextThread(func() error { if !gl.IsProgram(uint32(p)) { return nil } gl.DeleteProgram(uint32(p)) return nil }) }
func NewProgram(vertexSource, fragmentSource string) (*Program, error) { vertexId, err := newShader(vertexSource, gl.VERTEX_SHADER) if err != nil { return nil, err } fragmentId, err := newShader(fragmentSource, gl.FRAGMENT_SHADER) if err != nil { gl.DeleteShader(vertexId) return nil, err } id := gl.CreateProgram() if id == 0 { gl.DeleteShader(vertexId) gl.DeleteShader(fragmentId) return nil, fmt.Errorf("Unable to allocate program") } gl.AttachShader(id, vertexId) gl.AttachShader(id, fragmentId) gl.LinkProgram(id) var result int32 gl.GetProgramiv(id, gl.LINK_STATUS, &result) if result == int32(gl.FALSE) { var loglength int32 gl.GetProgramiv(id, gl.INFO_LOG_LENGTH, &loglength) log := make([]byte, loglength) var length int32 gl.GetProgramInfoLog(id, loglength, &length, &log[0]) gl.DeleteShader(vertexId) gl.DeleteShader(fragmentId) gl.DeleteProgram(id) return nil, fmt.Errorf("Unable to link program: %s", log[:length]) } return &Program{ id: id, vertId: vertexId, fragId: fragmentId, uniforms: uniforms(id), }, nil }
// DeleteProgram deletes the given program object. // // http://www.khronos.org/opengles/sdk/docs/man3/html/glDeleteProgram.xhtml func DeleteProgram(p Program) { gl.DeleteProgram(p.Value) }
func (program *Program) Delete() { gl.DeleteProgram(program.id) gl.DeleteShader(program.vertId) gl.DeleteShader(program.fragId) }