summaryrefslogtreecommitdiff
path: root/seascape.go
blob: abfee6e25635fdc6f01e1266cb3ef59e494aad7d (plain)
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
package main

import (
	"time"

	"github.com/go-gl/mathgl/mgl32"

	"github.com/faiface/pixel"
	"github.com/faiface/pixel/pixelgl"
	"golang.org/x/image/colornames"
)

import "log"
import "github.com/gookit/config"

func run() {
	// Set up window configs
	log.Println("width = ", config.Int("width"), "height = ", config.String("height"))
	cfg := pixelgl.WindowConfig{ // Default: 1024 x 768
		Title:  "Golang GLSL",
		Bounds: pixel.R(0, 0,  config.Float("width"), config.Float("height")),
		VSync:  true,
	}

	win, err := pixelgl.NewWindow(cfg)
	if err != nil {
		panic(err)
	}

	camVector := win.Bounds().Center()

	bounds := win.Bounds()
	bounds.Max = bounds.Max.ScaledXY(pixel.V(1.0, 1.0))

	// I am putting all shader example initializing stuff here for
	// easier reference to those learning to use this functionality

	log.Println("Load GSGL file = ", config.String("filename"))
	fragSource, err := LoadFileToString(config.String("filename"))

	if err != nil {
		panic(err)
	}

	var uMouse mgl32.Vec4
	var uTime float32
	log.Println("glDrift = ", config.String("glDrift"))
	var glDrift float32 = float32(config.Float("glDrift"))

	canvas := win.Canvas()
	uResolution := mgl32.Vec2{float32(win.Bounds().W()), float32(win.Bounds().H())}

	EasyBindUniforms(canvas,
		"uResolution", &uResolution,
		"uTime", &uTime,
		"uMouse", &uMouse,
		"uDrift", &glDrift,
	)

	canvas.SetFragmentShader(fragSource)

	start := time.Now()

	// Game Loop
	for !win.Closed() {
		uTime = float32(time.Since(start).Seconds())
		mpos := win.MousePosition()
		uMouse[0] = float32(mpos.X)
		uMouse[1] = float32(mpos.Y)

		win.Clear(colornames.Black)

		// Drawing to the screen
		canvas.Draw(win, pixel.IM.Moved(camVector))

		win.Update()
	}

}

func main() {
	// This parses the command line arguments
	parseConfig()

	pixelgl.Run(run)
}