-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathprogram.go
More file actions
55 lines (45 loc) · 1.14 KB
/
program.go
File metadata and controls
55 lines (45 loc) · 1.14 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
// +build ignore
package main
import (
"github.com/adinfinit/g"
"github.com/go-gl/gl/v3.3-core/gl"
)
type Shader struct {
program uint32
locationCache map[string]int32
}
func NewShader() *Shader {
return &Shader{}
}
func (shader *Shader) Recompile() {}
func (shader *Shader) Begin() { gl.UseProgram(shader.program) }
func (shader *Shader) End() { gl.UseProgram(0) }
func (shader *Shader) uniformLocation(name string) int32 {
location, ok := shader.locationCache[name]
if !ok {
location = gl.GetUniformLocation(shader.program, gl.Str(name+"\x00"))
shader.locationCache[name] = location
}
return location
}
func (shader *Shader) UniformFloat32(name string, v float32) {
location := shader.uniformLocation(name)
if location == 0 {
return
}
gl.Uniform1f(location, v)
}
func (shader *Shader) UniformVec3(name string, v g.Vec3) {
location := shader.uniformLocation(name)
if location == 0 {
return
}
gl.Uniform3f(location, v.X, v.Y, v.Z)
}
func (shader *Shader) UniformMatrix(name string, v g.Mat4) {
location := shader.uniformLocation(name)
if location == 0 {
return
}
gl.UniformMatrix4fv(location, 1, false, v.Ptr())
}