Skip to content

Commit 8530765

Browse files
committed
hello triangle
1 parent 69ec988 commit 8530765

File tree

2 files changed

+237
-0
lines changed

2 files changed

+237
-0
lines changed

hellotriangle/hellotriangle.go

Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
"github.com/go-gl/gl/v3.3-core/gl"
6+
"github.com/veandco/go-sdl2/sdl"
7+
"strings"
8+
)
9+
10+
const winWidth = 1280
11+
const winHeight = 720
12+
13+
func main() {
14+
err := sdl.Init(sdl.INIT_EVERYTHING)
15+
if err != nil {
16+
panic(err)
17+
}
18+
defer sdl.Quit()
19+
20+
window, err := sdl.CreateWindow("Hello Triangle", 200, 200, winWidth, winHeight, sdl.WINDOW_OPENGL)
21+
if err != nil {
22+
panic(err)
23+
}
24+
window.GLCreateContext()
25+
defer window.Destroy()
26+
27+
gl.Init()
28+
version := gl.GoStr(gl.GetString(gl.VERSION))
29+
fmt.Println("OpenGL Version", version)
30+
31+
//TODO - why is the csource string not getting freed?
32+
33+
fragmentShaderSource :=
34+
`#version 330 core
35+
out vec4 FragColor;
36+
37+
void main()
38+
{
39+
FragColor = vec4(1.0f, 0.0f, 0.0f, 1.0f);
40+
} `
41+
42+
fmt.Println(fragmentShaderSource)
43+
fragmentShader := gl.CreateShader(gl.FRAGMENT_SHADER)
44+
csource, free := gl.Strs(fragmentShaderSource)
45+
gl.ShaderSource(fragmentShader, 1, csource, nil)
46+
gl.CompileShader(fragmentShader)
47+
free()
48+
var status int32
49+
gl.GetShaderiv(fragmentShader, gl.COMPILE_STATUS, &status)
50+
if status == gl.FALSE {
51+
var logLength int32
52+
gl.GetShaderiv(fragmentShader, gl.INFO_LOG_LENGTH, &logLength)
53+
log := strings.Repeat("\x00", int(logLength+1))
54+
gl.GetShaderInfoLog(fragmentShader, logLength, nil, gl.Str(log))
55+
panic("Failed to compile fragment shader: \n" + log)
56+
}
57+
58+
vertexShaderSource :=
59+
`#version 330 core
60+
layout (location = 0) in vec3 aPos;
61+
62+
void main()
63+
{
64+
gl_Position = vec4(aPos.x,aPos.y,aPos.z,1.0);
65+
}`
66+
67+
vertexShader := gl.CreateShader(gl.VERTEX_SHADER)
68+
csource, free = gl.Strs(vertexShaderSource)
69+
gl.ShaderSource(vertexShader, 1, csource, nil)
70+
free()
71+
gl.CompileShader(vertexShader)
72+
gl.GetShaderiv(vertexShader, gl.COMPILE_STATUS, &status)
73+
if status == gl.FALSE {
74+
var logLength int32
75+
gl.GetShaderiv(vertexShader, gl.INFO_LOG_LENGTH, &logLength)
76+
log := strings.Repeat("\x00", int(logLength+1))
77+
gl.GetShaderInfoLog(vertexShader, logLength, nil, gl.Str(log))
78+
panic("Failed to compile vertex shader: \n" + log)
79+
}
80+
81+
shaderProgram := gl.CreateProgram()
82+
gl.AttachShader(shaderProgram, vertexShader)
83+
gl.AttachShader(shaderProgram, fragmentShader)
84+
gl.LinkProgram(shaderProgram)
85+
var success int32
86+
gl.GetProgramiv(shaderProgram, gl.LINK_STATUS, &success)
87+
if success == gl.FALSE {
88+
var logLength int32
89+
gl.GetProgramiv(shaderProgram, gl.INFO_LOG_LENGTH, &logLength)
90+
log := strings.Repeat("\x00", int(logLength+1))
91+
gl.GetProgramInfoLog(shaderProgram, logLength, nil, gl.Str(log))
92+
panic("Failed to link program: \n" + log)
93+
}
94+
gl.DeleteShader(vertexShader)
95+
gl.DeleteShader(fragmentShader)
96+
97+
vertices := []float32{
98+
-0.5, -0.5, 0.0,
99+
0.5, -0.5, 0.0,
100+
0.0, 0.5, 0.0}
101+
102+
var VBO uint32
103+
gl.GenBuffers(1, &VBO)
104+
gl.BindBuffer(gl.ARRAY_BUFFER, VBO)
105+
var VAO uint32
106+
gl.GenVertexArrays(1, &VAO)
107+
gl.BindVertexArray(VAO)
108+
109+
gl.BufferData(gl.ARRAY_BUFFER, len(vertices)*4, gl.Ptr(vertices), gl.STATIC_DRAW)
110+
111+
gl.VertexAttribPointer(0, 3, gl.FLOAT, false, 3*4, nil)
112+
gl.EnableVertexAttribArray(0)
113+
gl.BindVertexArray(0)
114+
115+
for {
116+
for event := sdl.PollEvent(); event != nil; event = sdl.PollEvent() {
117+
switch event.(type) {
118+
case *sdl.QuitEvent:
119+
return
120+
}
121+
}
122+
123+
gl.ClearColor(0.0, 0.0, 0.0, 0.0)
124+
gl.Clear(gl.COLOR_BUFFER_BIT)
125+
126+
gl.UseProgram(shaderProgram)
127+
gl.BindVertexArray(VAO)
128+
gl.DrawArrays(gl.TRIANGLES, 0, 3)
129+
130+
window.GLSwap()
131+
132+
}
133+
}

opengltest/test.go

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
"github.com/go-gl/gl/v3.3-core/gl"
6+
"github.com/veandco/go-sdl2/sdl"
7+
"strings"
8+
"unsafe"
9+
)
10+
11+
const winWidth = 1280
12+
const winHeight = 720
13+
14+
func main() {
15+
16+
err := sdl.Init(sdl.INIT_EVERYTHING)
17+
if err != nil {
18+
fmt.Println(err)
19+
return
20+
}
21+
defer sdl.Quit()
22+
23+
window, err := sdl.CreateWindow("OpenGL", 200, 200,
24+
int32(winWidth), int32(winHeight), sdl.WINDOW_OPENGL)
25+
if err != nil {
26+
fmt.Println(err)
27+
return
28+
}
29+
window.GLCreateContext()
30+
defer window.Destroy()
31+
fmt.Println("A")
32+
gl.Init()
33+
fmt.Println("B")
34+
version := gl.GoStr(gl.GetString(gl.VERSION))
35+
fmt.Println("OpenGL version", version)
36+
37+
vertices := []float32{
38+
0.5, 0.5, 0.0,
39+
0.5, -0.5, 0.0,
40+
-0.5, -0.5, 0.0,
41+
-0.5, 0.5, 0.0}
42+
43+
var VBO uint32
44+
gl.GenBuffers(1, &VBO)
45+
gl.BindBuffer(gl.ARRAY_BUFFER, VBO)
46+
gl.BufferData(gl.ARRAY_BUFFER, len(vertices)*int(unsafe.Sizeof(vertices[0])), gl.Ptr(vertices), gl.STATIC_DRAW)
47+
48+
vertexShaderStr :=
49+
`#version 330 core
50+
layout (location = 0) in vec3 aPos;
51+
52+
void main()
53+
{
54+
gl_Position = vec4(aPos.x, aPos.y, aPos.z, 1.0);
55+
}`
56+
vertexShader := gl.CreateShader(gl.VERTEX_SHADER)
57+
csources, free := gl.Strs(vertexShaderStr)
58+
gl.ShaderSource(vertexShader, 1, csources, nil)
59+
free()
60+
gl.CompileShader(vertexShader)
61+
var status int32
62+
gl.GetShaderiv(vertexShader, gl.COMPILE_STATUS, &status)
63+
if status == gl.FALSE {
64+
var logLength int32
65+
gl.GetShaderiv(vertexShader, gl.INFO_LOG_LENGTH, &logLength)
66+
log := strings.Repeat("\x00", int(logLength+1))
67+
gl.GetShaderInfoLog(vertexShader, logLength, nil, gl.Str(log))
68+
panic("failed to compile vertex shader \n" + log)
69+
}
70+
71+
fragmentShaderStr := `
72+
#version 330 core
73+
out vec4 FragColor;
74+
75+
void main()
76+
{
77+
FragColor = vec4(1.0f, 0.5f, 0.2f, 1.0f);
78+
} `
79+
80+
fragmentShader := gl.CreateShader(gl.VERTEX_SHADER)
81+
csources, free = gl.Strs(fragmentShaderStr)
82+
gl.ShaderSource(fragmentShader, 1, csources, nil)
83+
free()
84+
gl.CompileShader(fragmentShader)
85+
86+
gl.GetShaderiv(fragmentShader, gl.COMPILE_STATUS, &status)
87+
if status == gl.FALSE {
88+
var logLength int32
89+
gl.GetShaderiv(fragmentShader, gl.INFO_LOG_LENGTH, &logLength)
90+
log := strings.Repeat("\x00", int(logLength+1))
91+
gl.GetShaderInfoLog(fragmentShader, logLength, nil, gl.Str(log))
92+
panic("failed to compile vertex shader \n" + log)
93+
}
94+
95+
for {
96+
for event := sdl.PollEvent(); event != nil; event = sdl.PollEvent() {
97+
switch event.(type) {
98+
case *sdl.QuitEvent:
99+
return
100+
}
101+
}
102+
}
103+
104+
}

0 commit comments

Comments
 (0)