Пример #1
0
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()
}
Пример #2
0
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
}
Пример #3
0
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
}
Пример #4
0
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
}