作者:jacksca
项目:go-gles
func (program *Program) Link() {
C.glLinkProgram(program.id)
status := C.GLint(0)
C.glGetProgramiv(program.id, C.GL_LINK_STATUS, &status)
if status != C.GL_TRUE {
loglen := C.GLint(0)
C.glGetProgramiv(program.id, C.GL_INFO_LOG_LENGTH, &loglen)
log := (*C.GLchar)(C.malloc(C.size_t(loglen)))
defer C.free(unsafe.Pointer(log))
C.glGetProgramInfoLog(program.id, C.GLsizei(loglen), nil, log)
panic(fmt.Errorf("Failed to link shader: %s", C.GoString((*C.char)(log))))
}
}
作者:remogatt
项目:egle
func GetProgramiv(
program uint32, pname Enum, params *int32) {
C.glGetProgramiv(
C.GLuint(program),
C.GLenum(pname),
(*C.GLint)(params))
}
作者:kanelbull
项目:g
func (program Program) GetAttachedShaders() []Object {
var len C.GLint
C.glGetProgramiv(C.GLuint(program), C.GLenum(ACTIVE_UNIFORM_MAX_LENGTH), &len)
objects := make([]Object, len)
C.glGetAttachedShaders(C.GLuint(program), C.GLsizei(len), nil, *((**C.GLuint)(unsafe.Pointer(&objects))))
return objects
}
作者:Miaqu
项目:moj
func GetProgrami(p Program, pname Enum) (r0 int) {
defer func() {
errstr := errDrain()
log.Printf("gl.GetProgrami(%v, %v) %v%v", p, pname, r0, errstr)
}()
var params C.GLint
C.glGetProgramiv(p.c(), pname.c(), ¶ms)
return int(params)
}
作者:jacksca
项目:go-gles
func (program *Program) Shaders() []Shader {
if !program.shadersValid {
nshaders := C.GLint(0)
C.glGetProgramiv(program.id, C.GL_ATTACHED_SHADERS, &nshaders)
program.shaders = make([]Shader, nshaders)
C.glGetAttachedShaders(program.id, C.GLsizei(nshaders), nil, (*C.GLuint)(&program.shaders[0]))
program.shadersValid = true
}
return program.shaders
}
作者:extram
项目:g
// Link links the attached shader objects
func (p *Program) Link() error {
var val, val2 C.GLint
C.glLinkProgram(p.i)
C.glGetProgramiv(p.i, LINK_STATUS, &val)
if val != TRUE {
C.glGetProgramiv(p.i, INFO_LOG_LENGTH, &val)
buf := make([]C.GLchar, val+1)
C.glGetProgramInfoLog(p.i, C.GLsizei(val), nil, &buf[0])
return errors.New(C.GoString((*C.char)(&buf[0])))
}
p.attr = make(map[string]C.GLuint)
C.glGetProgramiv(p.i, ACTIVE_ATTRIBUTES, &val)
C.glGetProgramiv(p.i, ACTIVE_ATTRIBUTE_MAX_LENGTH, &val2)
buf := make([]C.char, val2)
for i := C.GLuint(0); i < C.GLuint(val); i++ {
C.glGetActiveAttrib(p.i, i, C.GLsizei(val2), nil, nil, nil, (*C.GLchar)(&buf[0]))
p.attr[C.GoString(&buf[0])] = C.GLuint(C.glGetAttribLocation(p.i, (*C.GLchar)(&buf[0])))
}
p.uni = make(map[string]C.GLint)
C.glGetProgramiv(p.i, ACTIVE_UNIFORMS, &val)
C.glGetProgramiv(p.i, ACTIVE_UNIFORM_MAX_LENGTH, &val2)
buf = make([]C.char, val2)
for i := C.GLuint(0); i < C.GLuint(val); i++ {
C.glGetActiveUniform(p.i, i, C.GLsizei(val2), nil, nil, nil, (*C.GLchar)(&buf[0]))
p.uni[C.GoString(&buf[0])] = C.glGetUniformLocation(p.i, (*C.GLchar)(&buf[0]))
}
return nil
}
作者:Congenita
项目:goandroi
func GetProgramInfoLog(program C.GLuint) string {
var logLen C.GLint
C.glGetProgramiv(program, C.GL_INFO_LOG_LENGTH, &logLen)
var c C.GLchar
logLenBytes := int(logLen) * int(unsafe.Sizeof(c))
log := C.malloc(C.size_t(logLenBytes))
if log == nil {
panic("Failed to allocate shader log buffer")
}
defer C.free(log)
C.glGetProgramInfoLog(C.GLuint(program), C.GLsizei(logLen), (*C.GLsizei)(unsafe.Pointer(nil)), (*C.GLchar)(log))
return string(C.GoBytes(log, C.int(logLenBytes)))
}
作者:kanelbull
项目:g
func (program Program) GetInfoLog() string {
var length C.GLint
C.glGetProgramiv(C.GLuint(program), C.GLenum(INFO_LOG_LENGTH), &length)
// length is buffer size including null character
if length > 1 {
log := C.malloc(C.size_t(length))
defer C.free(log)
C.glGetProgramInfoLog(C.GLuint(program), C.GLsizei(length), nil, (*C.GLchar)(log))
return C.GoString((*C.char)(log))
}
return ""
}
作者:Congenita
项目:goandroi
func createProgram(vertShaderSrc string, fragShaderSrc string) C.GLuint {
vertShader := loadShader(C.GL_VERTEX_SHADER, vertShaderSrc)
fragShader := loadShader(C.GL_FRAGMENT_SHADER, fragShaderSrc)
prog := C.glCreateProgram()
if prog == 0 {
panic("Failed to create shader program")
}
C.glAttachShader(prog, vertShader)
checkGLError()
C.glAttachShader(prog, fragShader)
checkGLError()
C.glLinkProgram(prog)
var linkStatus C.GLint
C.glGetProgramiv(prog, C.GL_LINK_STATUS, &linkStatus)
if linkStatus != C.GL_TRUE {
log := GetProgramInfoLog(prog)
panic(fmt.Errorf("Failed to link program: %v", log))
}
return prog
}
作者:tanem
项目:amor
func GetProgrami(p Program, pname Enum) int {
var params C.GLint
C.glGetProgramiv(p.c(), pname.c(), ¶ms)
return int(params)
}
作者:eaburn
项目:g
// Get returns a parameter from a program object.
func (p Program) Get(parm ProgramParameter) int {
var vl C.GLint
C.glGetProgramiv(C.GLuint(p), C.GLenum(parm), &vl)
return int(vl)
}
作者:kanelbull
项目:g
func (program Program) Get(param GLenum) int {
var rv C.GLint
C.glGetProgramiv(C.GLuint(program), C.GLenum(param), &rv)
return int(rv)
}
作者:nick-fedesn
项目:egle
func GetProgramiv(program, pname uint, params []int32) []int32 {
C.glGetProgramiv(C.GLuint(program), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0])))
return params
}