aminal/gui/shaders.go

54 lines
1.1 KiB
Go

package gui
import (
"fmt"
"strings"
"github.com/go-gl/gl/all-core/gl" // OR: github.com/go-gl/gl/v2.1/gl
)
const (
vertexShaderSource = `
#version 150
in vec3 vp;
in vec3 inColour;
smooth out vec3 theColour;
void main() {
gl_Position = vec4(vp, 1.0);
theColour = inColour;
}
` + "\x00"
fragmentShaderSource = `
#version 150
smooth in vec3 theColour;
out vec4 outColour;
void main() {
outColour = vec4(theColour, 1.0);
}
` + "\x00"
)
func compileShader(source string, shaderType uint32) (uint32, error) {
shader := gl.CreateShader(shaderType)
csources, free := gl.Strs(source)
gl.ShaderSource(shader, 1, csources, nil)
free()
gl.CompileShader(shader)
var status int32
gl.GetShaderiv(shader, gl.COMPILE_STATUS, &status)
if status == gl.FALSE {
var logLength int32
gl.GetShaderiv(shader, gl.INFO_LOG_LENGTH, &logLength)
log := strings.Repeat("\x00", int(logLength+1))
gl.GetShaderInfoLog(shader, logLength, nil, gl.Str(log))
return 0, fmt.Errorf("failed to compile %v: %v", source, log)
}
return shader, nil
}