func initShaders() { // Compile vertex shader vshader := gl.CreateShader(gl.VERTEX_SHADER) vshader.Source(vertexShaderSrc) vshader.Compile() if vshader.Get(gl.COMPILE_STATUS) != gl.TRUE { panic("vertex shader compile error: " + vshader.GetInfoLog()) } // Compile fragment shader fshader := gl.CreateShader(gl.FRAGMENT_SHADER) fragSrc, err := readShader("dist-field-raycaster.glsl") if err != nil { panic(err) } fshader.Source(fragSrc) fshader.Compile() if fshader.Get(gl.COMPILE_STATUS) != gl.TRUE { panic("fragment shader compile error: " + fshader.GetInfoLog()) } // Link program prg = gl.CreateProgram() prg.AttachShader(vshader) prg.AttachShader(fshader) prg.Link() if prg.Get(gl.LINK_STATUS) != gl.TRUE { panic("linker error: " + prg.GetInfoLog()) } prg.Use() }
func New(vert, frag string) *Program { vsh := NewShader(true) fsh := NewShader(false) vsrc, fsrc := vertShaderSource(vert), fragShaderSource(frag) vsrc = PreprocessShaderSource(vsrc) fsrc = PreprocessShaderSource(fsrc) vsh.Source(vsrc) fsh.Source(fsrc) vsh.Compile() fsh.Compile() prog := new(Program) prog.vparam, prog.fparam = vert, frag //save params prog.id = gl.CreateProgram() prog.AttachShader(vsh) prog.AttachShader(fsh) prog.Link() return prog }
func New(vert, frag string) *Program { ass.True(util.GlSupportsVersion(2, 0)) vsh := NewShader(true) fsh := NewShader(false) vsrc, fsrc := vertShaderSource(vert), fragShaderSource(frag) vsrc = PreprocessShaderSource(vsrc) fsrc = PreprocessShaderSource(fsrc) vsh.Source(vsrc) fsh.Source(fsrc) vsh.Compile() fsh.Compile() prog := new(Program) prog.vparam, prog.fparam = vert, frag //save params prog.id = gl.CreateProgram() prog.AttachShader(vsh) prog.AttachShader(fsh) prog.Link() if GUsedProgram == nil { GUsedProgram = prog } return prog }
func createProgram(vname, fname string) (gl.Program, error) { vs, e := loadShader(gl.VERTEX_SHADER, vname) if e != nil { return 0, e } fs, e := loadShader(gl.FRAGMENT_SHADER, fname) if e != nil { return 0, e } p := gl.CreateProgram() p.AttachShader(vs) p.AttachShader(fs) p.Link() if p.Get(gl.LINK_STATUS) != gl.TRUE { return 0, errors.New(p.GetInfoLog()) } return p, nil }