func glGetInfoLog(shaderOrProgram gl.Uint, isShader bool) string { var l = gl.Sizei(256) var s = gl.GLStringAlloc(l) defer gl.GLStringFree(s) if isShader { gl.GetShaderInfoLog(shaderOrProgram, l, nil, s) } else { gl.GetProgramInfoLog(shaderOrProgram, l, nil, s) } return gl.GoString(s) }
func ShaderInfoLog(shaderOrProgram gl.Uint, isShader bool) string { var l = gl.Sizei(256) var s = gl.GLStringAlloc(l) defer gl.GLStringFree(s) if isShader { gl.GetShaderInfoLog(shaderOrProgram, l, nil, s) } else { gl.GetProgramInfoLog(shaderOrProgram, l, nil, s) } PanicIfErrors("ShaderInfoLog(s=%v)", isShader) return gl.GoString(s) }
func CreateProgram(shaders []g.Uint) g.Uint { p := g.CreateProgram() for _, v := range shaders { g.AttachShader(p, v) } g.LinkProgram(p) var status g.Int g.GetProgramiv(p, g.LINK_STATUS, &status) if status == g.FALSE { var length g.Int g.GetProgramiv(p, g.INFO_LOG_LENGTH, &length) log.Println(length) logStr := g.GLStringAlloc(g.Sizei(length + 1)) g.GetProgramInfoLog(p, g.Sizei(length), nil, logStr) log.Println(g.GoString(logStr)) } return p }
// Loads a shader from a string func LoadShader(typ g.Enum, s string) g.Uint { shader := g.CreateShader(typ) cst := g.GLString(s) defer g.GLStringFree(cst) g.ShaderSource(shader, 1, &cst, nil) g.CompileShader(shader) var status g.Int g.GetShaderiv(shader, g.COMPILE_STATUS, &status) if status == g.FALSE { var length g.Int g.GetShaderiv(shader, g.INFO_LOG_LENGTH, &length) log.Println(int(length)) logStr := g.GLStringAlloc(g.Sizei(length + 1)) // TODO: defer g.GetShaderInfoLog(shader, g.Sizei(length), nil, logStr) log.Println(g.GoString(logStr)) } return shader }