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