From 237e2d54cdcd0bf5ea499c03e6446b9f315ad9d8 Mon Sep 17 00:00:00 2001
From: faiface <faiface@ksp.sk>
Date: Fri, 2 Dec 2016 18:17:40 +0100
Subject: [PATCH] make window use a shader

---
 window.go | 34 +++++++++++++++++++++-------------
 1 file changed, 21 insertions(+), 13 deletions(-)

diff --git a/window.go b/window.go
index 9caba6f..f7e44ec 100644
--- a/window.go
+++ b/window.go
@@ -54,7 +54,7 @@ type WindowConfig struct {
 type Window struct {
 	window        *glfw.Window
 	config        WindowConfig
-	defaultShader *pixelgl.Shader
+	contextHolder pixelgl.ContextHolder
 
 	// need to save these to correctly restore a fullscreen window
 	restore struct {
@@ -104,12 +104,14 @@ func NewWindow(config WindowConfig) (*Window, error) {
 
 	w.SetFullscreen(config.Fullscreen)
 
-	w.defaultShader, err = pixelgl.NewShader(w, defaultUniformFormat, defaultVertexShader, defaultFragmentShader)
+	defaultShader, err := pixelgl.NewShader(w, defaultVertexFormat, defaultUniformFormat, defaultVertexShader, defaultFragmentShader)
 	if err != nil {
 		w.Delete()
 		return nil, errors.Wrap(err, "creating window failed")
 	}
 
+	w.contextHolder.Context = w.contextHolder.Context.WithShader(defaultShader)
+
 	return w, nil
 }
 
@@ -309,32 +311,39 @@ func (w *Window) Do(sub func(pixelgl.Context)) {
 		currentWindow.handler = w
 	}
 
-	sub(pixelgl.Context{})
+	w.contextHolder.Do(sub)
+}
+
+var defaultVertexFormat = pixelgl.VertexFormat{
+	"position":  {Purpose: pixelgl.Position, Type: pixelgl.Vec2},
+	"color":     {Purpose: pixelgl.Color, Type: pixelgl.Vec4},
+	"texCoord":  {Purpose: pixelgl.TexCoord, Type: pixelgl.Vec2},
+	"isTexture": {Purpose: pixelgl.IsTexture, Type: pixelgl.Int},
 }
 
 var defaultUniformFormat = pixelgl.UniformFormat{
-	"camera":    {Purpose: pixelgl.Camera, Type: pixelgl.Mat3},
 	"transform": {Purpose: pixelgl.Transform, Type: pixelgl.Mat3},
-	"isTexture": {Purpose: pixelgl.IsTexture, Type: pixelgl.Int},
 }
 
 var defaultVertexShader = `
 #version 330 core
 
-layout (location = 0) in vec2 position;
-layout (location = 1) in vec4 color;
-layout (location = 2) in vec2 texCoord;
+in vec2 position;
+in vec4 color;
+in vec2 texCoord;
+in int isTexture;
 
 out vec4 Color;
 out vec2 TexCoord;
+out int IsTexture;
 
-uniform mat3 camera;
 uniform mat3 transform;
 
 void main() {
-	gl_Position = vec4((camera * transform * vec3(position.x, position.y, 1.0)).xy, 0.0, 1.0);
+	gl_Position = vec4((transform * vec3(position.x, position.y, 1.0)).xy, 0.0, 1.0);
 	Color = color;
 	TexCoord = texCoord;
+	IsTexture = isTexture;
 }
 `
 
@@ -343,15 +352,14 @@ var defaultFragmentShader = `
 
 in vec4 Color;
 in vec2 TexCoord;
+in int IsTexture;
 
 out vec4 color;
 
-uniform int isTexture;
-
 uniform sampler2D tex;
 
 void main() {
-	if (isTexture != 0) {
+	if (IsTexture != 0) {
 		color = Color * texture(tex, vec2(TexCoord.x, 1 - TexCoord.y));
 	} else {
 		color = Color;
-- 
GitLab