This repository has been archived by the owner on Jan 13, 2022. It is now read-only.
/
easel.go
115 lines (102 loc) · 2.53 KB
/
easel.go
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
package easel
import (
"image"
log "github.com/Sirupsen/logrus"
"github.com/go-gl/gl/v4.1-core/gl"
"github.com/go-gl/glfw/v3.2/glfw"
)
// Easel ...
type Easel struct {
window *glfw.Window
}
// NewEasel ...
func NewEasel() *Easel {
glfw.WindowHint(glfw.Visible, glfw.False)
glfw.WindowHint(glfw.ContextVersionMajor, 4)
glfw.WindowHint(glfw.ContextVersionMinor, 1)
glfw.WindowHint(glfw.OpenGLProfile, glfw.OpenGLCoreProfile)
glfw.WindowHint(glfw.OpenGLForwardCompatible, glfw.True)
w, err := glfw.CreateWindow(640, 480, "Easel", nil, nil)
if err != nil {
log.Fatal(err)
}
w.MakeContextCurrent()
defer glfw.DetachCurrentContext()
err = gl.Init()
if err != nil {
log.Fatal(err)
}
log.Debugf("Easel Created.")
log.Debugf(" ** OpenGL Info **")
log.Debugf(" OpenGL Version: %s", gl.GoStr(gl.GetString(gl.VERSION)))
log.Debugf(" GLSL Version: %s", gl.GoStr(gl.GetString(gl.SHADING_LANGUAGE_VERSION)))
log.Debugf(" OpenGL Vendor: %s", gl.GoStr(gl.GetString(gl.VENDOR)))
log.Debugf(" Renderer: %s", gl.GoStr(gl.GetString(gl.RENDERER)))
log.Debugf(" ** Extensions **")
for i := uint32(0); i < gl.NUM_EXTENSIONS; i++ {
str := gl.GetStringi(gl.EXTENSIONS, i)
code := gl.GetError()
if code == gl.INVALID_VALUE {
break
}
if str != nil {
log.Debugf(" - %s", gl.GoStr(str))
}
}
return &Easel{
window: w,
}
}
// Destroy ...
func (e *Easel) Destroy() {
e.window.Destroy()
}
// MakeCurrent ...
func (e *Easel) MakeCurrent() {
e.window.MakeContextCurrent()
}
// DetachCurrent ...
func (e *Easel) DetachCurrent() {
glfw.DetachCurrentContext()
}
// NewPalette ...
func (e *Easel) NewPalette() (*Palette, error) {
var err error
va, err := newVertexArray()
if err != nil {
return nil, err
}
var fb uint32
gl.GenFramebuffers(1, &fb)
err = checkGLError("Error while generating framebuffer")
if err != nil {
return nil, err
}
p := &Palette{
easel: e,
program: nil,
vertexArray: va,
frameBufferID: fb,
}
return p, nil
}
// SwapBuffers ...
func (e *Easel) SwapBuffers() {
e.window.SwapBuffers()
}
// CompileProgram ...
func (e *Easel) CompileProgram(vertex, fragment string) (*Program, error) {
progID, err := compileProgram(vertex, fragment)
if err != nil {
return nil, err
}
return newProgram(progID), nil
}
// LoadTexture2D ...
func (e *Easel) LoadTexture2D(data []byte) (*Texture2D, image.Image, error) {
return newTexture2DFromBytes(data)
}
// CreateTexture2D ...
func (e *Easel) CreateTexture2D(img image.Image) (*Texture2D, error) {
return newTexture2DFromImage(img)
}