Vendor updates

This commit is contained in:
2018-10-13 01:38:03 +01:00
parent 0dd44d9de7
commit 197b5e696b
51 changed files with 70978 additions and 10088 deletions

View File

@@ -1,2 +0,0 @@
test
.vscode

View File

@@ -1,23 +0,0 @@
language: go
sudo: false
addons:
apt:
packages:
- xorg-dev
- libx11-dev
- libxrandr-dev
- libxinerama-dev
- libxcursor-dev
- libxi-dev
- libopenal-dev
- libasound2-dev
go:
- 1.8
- 1.7.4
- tip
install:
- go get -t ./...
script:
- go test -i -race ./...
- go test -v -race ./...

View File

@@ -22,32 +22,33 @@ covering several topics of Pixel. Here's the content of the tutorial parts so fa
- [Drawing efficiently with Batch](https://github.com/faiface/pixel/wiki/Drawing-efficiently-with-Batch)
- [Drawing shapes with IMDraw](https://github.com/faiface/pixel/wiki/Drawing-shapes-with-IMDraw)
- [Typing text on the screen](https://github.com/faiface/pixel/wiki/Typing-text-on-the-screen)
- [Using a custom fragment shader](https://github.com/faiface/pixel/wiki/Using-a-custom-fragment-shader)
## Examples
## [Examples](https://github.com/faiface/pixel-examples)
The [examples](https://github.com/faiface/pixel/tree/master/examples) directory contains a few
The [examples](https://github.com/faiface/pixel-examples) repository contains a few
examples demonstrating Pixel's functionality.
**To run an example**, navigate to it's directory, then `go run` the `main.go` file. For example:
```
$ cd examples/platformer
$ cd pixel-examples/platformer
$ go run main.go
```
Here are some screenshots from the examples!
| [Lights](examples/lights) | [Platformer](examples/platformer) |
| [Lights](https://github.com/faiface/pixel-examples/blob/master/lights) | [Platformer](https://github.com/faiface/pixel-examples/blob/master/platformer) |
| --- | --- |
| ![Lights](examples/lights/screenshot.png) | ![Platformer](examples/platformer/screenshot.png) |
| ![Lights](https://github.com/faiface/pixel-examples/blob/master/lights/screenshot.png) | ![Platformer](https://github.com/faiface/pixel-examples/blob/master/platformer/screenshot.png) |
| [Smoke](examples/smoke) | [Typewriter](examples/typewriter) |
| [Smoke](https://github.com/faiface/pixel-examples/blob/master/smoke) | [Typewriter](https://github.com/faiface/pixel-examples/blob/master/typewriter) |
| --- | --- |
| ![Smoke](examples/smoke/screenshot.png) | ![Typewriter](examples/typewriter/screenshot.png) |
| ![Smoke](https://github.com/faiface/pixel-examples/blob/master/smoke/screenshot.png) | ![Typewriter](https://github.com/faiface/pixel-examples/blob/master/typewriter/screenshot.png) |
| [Raycaster](examples/community/raycaster) | [Starfield](examples/community/starfield) |
| [Raycaster](https://github.com/faiface/pixel-examples/blob/master/community/raycaster) | [Starfield](https://github.com/faiface/pixel-examples/blob/master/community/starfield) |
| --- | --- |
| ![Raycaster](examples/community/raycaster/screenshot.png) | ![Starfield](examples/community/starfield/screenshot.png) |
| ![Raycaster](https://github.com/faiface/pixel-examples/blob/master/community/raycaster/screenshot.png) | ![Starfield](https://github.com/faiface/pixel-examples/blob/master/community/starfield/screenshot.png) |
## Features
@@ -152,7 +153,7 @@ better result.
Take a look at [CONTRIBUTING.md](CONTRIBUTING.md) for further information.
For any kind of discussion, feel free to use our
[Gitter](https://gitter.im/pixellib/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
[Gitter](https://gitter.im/pixellib/Lobby)
community.
## License

View File

@@ -165,13 +165,8 @@ func verticalFlip(rgba *image.RGBA) {
//
// The resulting PictureData's Bounds will be the equivalent of the supplied image.Image's Bounds.
func PictureDataFromImage(img image.Image) *PictureData {
var rgba *image.RGBA
if rgbaImg, ok := img.(*image.RGBA); ok {
rgba = rgbaImg
} else {
rgba = image.NewRGBA(img.Bounds())
draw.Draw(rgba, rgba.Bounds(), img, img.Bounds().Min, draw.Src)
}
rgba := image.NewRGBA(img.Bounds())
draw.Draw(rgba, rgba.Bounds(), img, img.Bounds().Min, draw.Src)
verticalFlip(rgba)

View File

@@ -310,7 +310,7 @@ func (r Rect) Intersect(s Rect) Rect {
return t
}
// Matrix is a 3x2 affine matrix that can be used for all kinds of spatial transforms, such
// Matrix is a 2x3 affine matrix that can be used for all kinds of spatial transforms, such
// as movement, scaling and rotations.
//
// Matrix has a handful of useful methods, each of which adds a transformation to the matrix. For

View File

@@ -17,7 +17,7 @@ import (
// It supports TrianglesPosition, TrianglesColor, TrianglesPicture and PictureColor.
type Canvas struct {
gf *GLFrame
shader *glhf.Shader
shader *glShader
cmp pixel.ComposeMethod
mat mgl32.Mat3
@@ -37,32 +37,32 @@ func NewCanvas(bounds pixel.Rect) *Canvas {
col: mgl32.Vec4{1, 1, 1, 1},
}
baseShader(c)
c.SetBounds(bounds)
var shader *glhf.Shader
mainthread.Call(func() {
var err error
shader, err = glhf.NewShader(
canvasVertexFormat,
canvasUniformFormat,
canvasVertexShader,
canvasFragmentShader,
)
if err != nil {
panic(errors.Wrap(err, "failed to create Canvas, there's a bug in the shader"))
}
})
c.shader = shader
c.shader.update()
return c
}
// SetUniform will update the named uniform with the value of any supported underlying
// attribute variable. If the uniform already exists, including defaults, they will be reassigned
// to the new value. The value can be a pointer.
func (c *Canvas) SetUniform(name string, value interface{}) {
c.shader.setUniform(name, value)
}
// SetFragmentShader allows you to set a new fragment shader on the underlying
// framebuffer. Argument "src" is the GLSL source, not a filename.
func (c *Canvas) SetFragmentShader(src string) {
c.shader.fs = src
c.shader.update()
}
// MakeTriangles creates a specialized copy of the supplied Triangles that draws onto this Canvas.
//
// TrianglesPosition, TrianglesColor and TrianglesPicture are supported.
func (c *Canvas) MakeTriangles(t pixel.Triangles) pixel.TargetTriangles {
return &canvasTriangles{
GLTriangles: NewGLTriangles(c.shader, t),
GLTriangles: NewGLTriangles(c.shader.s, t),
dst: c,
}
}
@@ -279,29 +279,41 @@ func (ct *canvasTriangles) draw(tex *glhf.Texture, bounds pixel.Rect) {
// save the current state vars to avoid race condition
cmp := ct.dst.cmp
smt := ct.dst.smooth
mat := ct.dst.mat
col := ct.dst.col
smt := ct.dst.smooth
mainthread.CallNonBlock(func() {
ct.dst.setGlhfBounds()
setBlendFunc(cmp)
frame := ct.dst.gf.Frame()
shader := ct.dst.shader
shader := ct.dst.shader.s
frame.Begin()
shader.Begin()
ct.dst.shader.uniformDefaults.transform = mat
ct.dst.shader.uniformDefaults.colormask = col
dstBounds := ct.dst.Bounds()
shader.SetUniformAttr(canvasBounds, mgl32.Vec4{
ct.dst.shader.uniformDefaults.bounds = mgl32.Vec4{
float32(dstBounds.Min.X),
float32(dstBounds.Min.Y),
float32(dstBounds.W()),
float32(dstBounds.H()),
})
shader.SetUniformAttr(canvasTransform, mat)
shader.SetUniformAttr(canvasColorMask, col)
}
bx, by, bw, bh := intBounds(bounds)
ct.dst.shader.uniformDefaults.texbounds = mgl32.Vec4{
float32(bx),
float32(by),
float32(bw),
float32(bh),
}
for loc, u := range ct.dst.shader.uniforms {
ct.dst.shader.s.SetUniformAttr(loc, u.Value())
}
if tex == nil {
ct.vs.Begin()
@@ -310,14 +322,6 @@ func (ct *canvasTriangles) draw(tex *glhf.Texture, bounds pixel.Rect) {
} else {
tex.Begin()
bx, by, bw, bh := intBounds(bounds)
shader.SetUniformAttr(canvasTexBounds, mgl32.Vec4{
float32(bx),
float32(by),
float32(bw),
float32(bh),
})
if tex.Smooth() != smt {
tex.SetSmooth(smt)
}
@@ -358,74 +362,9 @@ const (
canvasIntensity
)
var canvasVertexFormat = glhf.AttrFormat{
canvasPosition: {Name: "position", Type: glhf.Vec2},
canvasColor: {Name: "color", Type: glhf.Vec4},
canvasTexCoords: {Name: "texCoords", Type: glhf.Vec2},
canvasIntensity: {Name: "intensity", Type: glhf.Float},
var defaultCanvasVertexFormat = glhf.AttrFormat{
canvasPosition: {Name: "aPosition", Type: glhf.Vec2},
canvasColor: {Name: "aColor", Type: glhf.Vec4},
canvasTexCoords: {Name: "aTexCoords", Type: glhf.Vec2},
canvasIntensity: {Name: "aIntensity", Type: glhf.Float},
}
const (
canvasTransform int = iota
canvasColorMask
canvasBounds
canvasTexBounds
)
var canvasUniformFormat = glhf.AttrFormat{
canvasTransform: {Name: "transform", Type: glhf.Mat3},
canvasColorMask: {Name: "colorMask", Type: glhf.Vec4},
canvasBounds: {Name: "bounds", Type: glhf.Vec4},
canvasTexBounds: {Name: "texBounds", Type: glhf.Vec4},
}
var canvasVertexShader = `
#version 330 core
in vec2 position;
in vec4 color;
in vec2 texCoords;
in float intensity;
out vec4 Color;
out vec2 TexCoords;
out float Intensity;
uniform mat3 transform;
uniform vec4 bounds;
void main() {
vec2 transPos = (transform * vec3(position, 1.0)).xy;
vec2 normPos = (transPos - bounds.xy) / bounds.zw * 2 - vec2(1, 1);
gl_Position = vec4(normPos, 0.0, 1.0);
Color = color;
TexCoords = texCoords;
Intensity = intensity;
}
`
var canvasFragmentShader = `
#version 330 core
in vec4 Color;
in vec2 TexCoords;
in float Intensity;
out vec4 color;
uniform vec4 colorMask;
uniform vec4 texBounds;
uniform sampler2D tex;
void main() {
if (Intensity == 0) {
color = colorMask * Color;
} else {
color = vec4(0, 0, 0, 0);
color += (1 - Intensity) * Color;
vec2 t = (TexCoords - texBounds.xy) / texBounds.zw;
color += Intensity * Color * texture(tex, t);
color *= colorMask;
}
}
`

267
vendor/github.com/faiface/pixel/pixelgl/glshader.go generated vendored Normal file
View File

@@ -0,0 +1,267 @@
package pixelgl
import (
"github.com/faiface/glhf"
"github.com/faiface/mainthread"
"github.com/go-gl/mathgl/mgl32"
"github.com/pkg/errors"
)
// glShader is a type to assist with managing a canvas's underlying
// shader configuration. This allows for customization of shaders on
// a per canvas basis.
type glShader struct {
s *glhf.Shader
vf, uf glhf.AttrFormat
vs, fs string
uniforms []gsUniformAttr
uniformDefaults struct {
transform mgl32.Mat3
colormask mgl32.Vec4
bounds mgl32.Vec4
texbounds mgl32.Vec4
}
}
type gsUniformAttr struct {
Name string
Type glhf.AttrType
value interface{}
ispointer bool
}
// reinitialize GLShader data and recompile the underlying gl shader object
func (gs *glShader) update() {
gs.uf = nil
for _, u := range gs.uniforms {
gs.uf = append(gs.uf, glhf.Attr{
Name: u.Name,
Type: u.Type,
})
}
var shader *glhf.Shader
mainthread.Call(func() {
var err error
shader, err = glhf.NewShader(
gs.vf,
gs.uf,
gs.vs,
gs.fs,
)
if err != nil {
panic(errors.Wrap(err, "failed to create Canvas, there's a bug in the shader"))
}
})
gs.s = shader
}
// gets the uniform index from GLShader
func (gs *glShader) getUniform(Name string) int {
for i, u := range gs.uniforms {
if u.Name == Name {
return i
}
}
return -1
}
// SetUniform appends a custom uniform name and value to the shader.
// if the uniform already exists, it will simply be overwritten.
//
// example:
//
// utime := float32(time.Since(starttime)).Seconds())
// mycanvas.shader.AddUniform("u_time", &utime)
func (gs *glShader) setUniform(name string, value interface{}) {
t, p := getAttrType(value)
if loc := gs.getUniform(name); loc > -1 {
gs.uniforms[loc].Name = name
gs.uniforms[loc].Type = t
gs.uniforms[loc].ispointer = p
gs.uniforms[loc].value = value
return
}
gs.uniforms = append(gs.uniforms, gsUniformAttr{
Name: name,
Type: t,
ispointer: p,
value: value,
})
}
// Sets up a base shader with everything needed for a Pixel
// canvas to render correctly. The defaults can be overridden
// by simply using the SetUniform function.
func baseShader(c *Canvas) {
gs := &glShader{
vf: defaultCanvasVertexFormat,
vs: baseCanvasVertexShader,
fs: baseCanvasFragmentShader,
}
gs.setUniform("uTransform", &gs.uniformDefaults.transform)
gs.setUniform("uColorMask", &gs.uniformDefaults.colormask)
gs.setUniform("uBounds", &gs.uniformDefaults.bounds)
gs.setUniform("uTexBounds", &gs.uniformDefaults.texbounds)
c.shader = gs
}
// Value returns the attribute's concrete value. If the stored value
// is a pointer, we return the dereferenced value.
func (gu *gsUniformAttr) Value() interface{} {
if !gu.ispointer {
return gu.value
}
switch gu.Type {
case glhf.Vec2:
return *gu.value.(*mgl32.Vec2)
case glhf.Vec3:
return *gu.value.(*mgl32.Vec3)
case glhf.Vec4:
return *gu.value.(*mgl32.Vec4)
case glhf.Mat2:
return *gu.value.(*mgl32.Mat2)
case glhf.Mat23:
return *gu.value.(*mgl32.Mat2x3)
case glhf.Mat24:
return *gu.value.(*mgl32.Mat2x4)
case glhf.Mat3:
return *gu.value.(*mgl32.Mat3)
case glhf.Mat32:
return *gu.value.(*mgl32.Mat3x2)
case glhf.Mat34:
return *gu.value.(*mgl32.Mat3x4)
case glhf.Mat4:
return *gu.value.(*mgl32.Mat4)
case glhf.Mat42:
return *gu.value.(*mgl32.Mat4x2)
case glhf.Mat43:
return *gu.value.(*mgl32.Mat4x3)
case glhf.Int:
return *gu.value.(*int32)
case glhf.Float:
return *gu.value.(*float32)
default:
panic("invalid attrtype")
}
}
// Returns the type identifier for any (supported) attribute variable type
// and whether or not it is a pointer of that type.
func getAttrType(v interface{}) (glhf.AttrType, bool) {
switch v.(type) {
case int32:
return glhf.Int, false
case float32:
return glhf.Float, false
case mgl32.Vec2:
return glhf.Vec2, false
case mgl32.Vec3:
return glhf.Vec3, false
case mgl32.Vec4:
return glhf.Vec4, false
case mgl32.Mat2:
return glhf.Mat2, false
case mgl32.Mat2x3:
return glhf.Mat23, false
case mgl32.Mat2x4:
return glhf.Mat24, false
case mgl32.Mat3:
return glhf.Mat3, false
case mgl32.Mat3x2:
return glhf.Mat32, false
case mgl32.Mat3x4:
return glhf.Mat34, false
case mgl32.Mat4:
return glhf.Mat4, false
case mgl32.Mat4x2:
return glhf.Mat42, false
case mgl32.Mat4x3:
return glhf.Mat43, false
case *mgl32.Vec2:
return glhf.Vec2, true
case *mgl32.Vec3:
return glhf.Vec3, true
case *mgl32.Vec4:
return glhf.Vec4, true
case *mgl32.Mat2:
return glhf.Mat2, true
case *mgl32.Mat2x3:
return glhf.Mat23, true
case *mgl32.Mat2x4:
return glhf.Mat24, true
case *mgl32.Mat3:
return glhf.Mat3, true
case *mgl32.Mat3x2:
return glhf.Mat32, true
case *mgl32.Mat3x4:
return glhf.Mat34, true
case *mgl32.Mat4:
return glhf.Mat4, true
case *mgl32.Mat4x2:
return glhf.Mat42, true
case *mgl32.Mat4x3:
return glhf.Mat43, true
case *int32:
return glhf.Int, true
case *float32:
return glhf.Float, true
default:
panic("invalid AttrType")
}
}
var baseCanvasVertexShader = `
#version 330 core
in vec2 aPosition;
in vec4 aColor;
in vec2 aTexCoords;
in float aIntensity;
out vec4 vColor;
out vec2 vTexCoords;
out float vIntensity;
uniform mat3 uTransform;
uniform vec4 uBounds;
void main() {
vec2 transPos = (uTransform * vec3(aPosition, 1.0)).xy;
vec2 normPos = (transPos - uBounds.xy) / uBounds.zw * 2 - vec2(1, 1);
gl_Position = vec4(normPos, 0.0, 1.0);
vColor = aColor;
vTexCoords = aTexCoords;
vIntensity = aIntensity;
}
`
var baseCanvasFragmentShader = `
#version 330 core
in vec4 vColor;
in vec2 vTexCoords;
in float vIntensity;
out vec4 fragColor;
uniform vec4 uColorMask;
uniform vec4 uTexBounds;
uniform sampler2D uTexture;
void main() {
if (vIntensity == 0) {
fragColor = uColorMask * vColor;
} else {
fragColor = vec4(0, 0, 0, 0);
fragColor += (1 - vIntensity) * vColor;
vec2 t = (vTexCoords - uTexBounds.xy) / uTexBounds.zw;
fragColor += vIntensity * vColor * texture(uTexture, t);
fragColor *= uColorMask;
}
}
`

View File

@@ -10,6 +10,17 @@ type Monitor struct {
monitor *glfw.Monitor
}
// VideoMode represents all properties of a video mode and is
// associated with a monitor if it is used in fullscreen mode.
type VideoMode struct {
// Width is the width of the vide mode in pixels.
Width int
// Height is the height of the video mode in pixels.
Height int
// RefreshRate holds the refresh rate of the associated monitor in Hz.
RefreshRate int
}
// PrimaryMonitor returns the main monitor (usually the one with the taskbar and stuff).
func PrimaryMonitor() *Monitor {
var monitor *glfw.Monitor
@@ -95,3 +106,19 @@ func (m *Monitor) RefreshRate() (rate float64) {
rate = float64(mode.RefreshRate)
return
}
// VideoModes returns all available video modes for the monitor.
func (m *Monitor) VideoModes() (vmodes []VideoMode) {
var modes []*glfw.VidMode
mainthread.Call(func() {
modes = m.monitor.GetVideoModes()
})
for _, mode := range modes {
vmodes = append(vmodes, VideoMode{
Width: mode.Width,
Height: mode.Height,
RefreshRate: mode.RefreshRate,
})
}
return
}

View File

@@ -116,6 +116,7 @@ func NewWindow(cfg WindowConfig) (*Window, error) {
// enter the OpenGL context
w.begin()
glhf.Init()
w.end()
return nil
@@ -362,7 +363,6 @@ func (w *Window) CursorVisible() bool {
func (w *Window) begin() {
if currWin != w {
w.window.MakeContextCurrent()
glhf.Init()
currWin = w
}
}
@@ -424,3 +424,8 @@ func (w *Window) Clear(c color.Color) {
func (w *Window) Color(at pixel.Vec) pixel.RGBA {
return w.canvas.Color(at)
}
// Canvas returns the window's underlying Canvas
func (w *Window) Canvas() *Canvas {
return w.canvas
}

View File

@@ -1,21 +0,0 @@
sudo: false
addons:
apt_packages:
- libgles2-mesa-dev
language: go
go:
- 1.8.x
- 1.4.x
- master
matrix:
allow_failures:
- go: master
fast_finish: true
install:
- # Do nothing. This is needed to prevent default install action "go get -t -v ./..." from happening here (we want it to happen inside script step).
script:
- go get -t -v ./...
- diff -u <(echo -n) <(gofmt -d -s .)
- # vet is reporting "possible misuse of unsafe.Pointer", need to fix that.
- # go tool vet .
- go test -v -race ./...

File diff suppressed because it is too large Load Diff

View File

@@ -51,7 +51,7 @@ package gl
#include <stdlib.h>
#include <GL/glx.h>
void* GlowGetProcAddress_glcoreall(const char* name) {
return glXGetProcAddress(name);
return glXGetProcAddress((const GLubyte *) name);
}
#endif
*/

File diff suppressed because it is too large Load Diff

View File

@@ -51,7 +51,7 @@ package gl
#include <stdlib.h>
#include <GL/glx.h>
void* GlowGetProcAddress_gl21(const char* name) {
return glXGetProcAddress(name);
return glXGetProcAddress((const GLubyte *) name);
}
#endif
*/

File diff suppressed because it is too large Load Diff

View File

@@ -51,7 +51,7 @@ package gles2
#include <stdlib.h>
#include <GL/glx.h>
void* GlowGetProcAddress_gles231(const char* name) {
return glXGetProcAddress(name);
return glXGetProcAddress((const GLubyte *) name);
}
#endif
*/

File diff suppressed because it is too large Load Diff

View File

@@ -51,7 +51,7 @@ package gl
#include <stdlib.h>
#include <GL/glx.h>
void* GlowGetProcAddress_glcompatibility32(const char* name) {
return glXGetProcAddress(name);
return glXGetProcAddress((const GLubyte *) name);
}
#endif
*/

File diff suppressed because it is too large Load Diff

View File

@@ -51,7 +51,7 @@ package gl
#include <stdlib.h>
#include <GL/glx.h>
void* GlowGetProcAddress_glcore32(const char* name) {
return glXGetProcAddress(name);
return glXGetProcAddress((const GLubyte *) name);
}
#endif
*/

File diff suppressed because it is too large Load Diff

View File

@@ -51,7 +51,7 @@ package gl
#include <stdlib.h>
#include <GL/glx.h>
void* GlowGetProcAddress_glcompatibility33(const char* name) {
return glXGetProcAddress(name);
return glXGetProcAddress((const GLubyte *) name);
}
#endif
*/

File diff suppressed because it is too large Load Diff

View File

@@ -51,7 +51,7 @@ package gl
#include <stdlib.h>
#include <GL/glx.h>
void* GlowGetProcAddress_glcore33(const char* name) {
return glXGetProcAddress(name);
return glXGetProcAddress((const GLubyte *) name);
}
#endif
*/

File diff suppressed because it is too large Load Diff

View File

@@ -51,7 +51,7 @@ package gl
#include <stdlib.h>
#include <GL/glx.h>
void* GlowGetProcAddress_glcompatibility41(const char* name) {
return glXGetProcAddress(name);
return glXGetProcAddress((const GLubyte *) name);
}
#endif
*/

File diff suppressed because it is too large Load Diff

View File

@@ -51,7 +51,7 @@ package gl
#include <stdlib.h>
#include <GL/glx.h>
void* GlowGetProcAddress_glcore41(const char* name) {
return glXGetProcAddress(name);
return glXGetProcAddress((const GLubyte *) name);
}
#endif
*/

File diff suppressed because it is too large Load Diff

View File

@@ -51,7 +51,7 @@ package gl
#include <stdlib.h>
#include <GL/glx.h>
void* GlowGetProcAddress_glcompatibility42(const char* name) {
return glXGetProcAddress(name);
return glXGetProcAddress((const GLubyte *) name);
}
#endif
*/

File diff suppressed because it is too large Load Diff

View File

@@ -51,7 +51,7 @@ package gl
#include <stdlib.h>
#include <GL/glx.h>
void* GlowGetProcAddress_glcore42(const char* name) {
return glXGetProcAddress(name);
return glXGetProcAddress((const GLubyte *) name);
}
#endif
*/

File diff suppressed because it is too large Load Diff

View File

@@ -51,7 +51,7 @@ package gl
#include <stdlib.h>
#include <GL/glx.h>
void* GlowGetProcAddress_glcompatibility43(const char* name) {
return glXGetProcAddress(name);
return glXGetProcAddress((const GLubyte *) name);
}
#endif
*/

File diff suppressed because it is too large Load Diff

View File

@@ -51,7 +51,7 @@ package gl
#include <stdlib.h>
#include <GL/glx.h>
void* GlowGetProcAddress_glcore43(const char* name) {
return glXGetProcAddress(name);
return glXGetProcAddress((const GLubyte *) name);
}
#endif
*/

File diff suppressed because it is too large Load Diff

View File

@@ -51,7 +51,7 @@ package gl
#include <stdlib.h>
#include <GL/glx.h>
void* GlowGetProcAddress_glcompatibility44(const char* name) {
return glXGetProcAddress(name);
return glXGetProcAddress((const GLubyte *) name);
}
#endif
*/

File diff suppressed because it is too large Load Diff

View File

@@ -51,7 +51,7 @@ package gl
#include <stdlib.h>
#include <GL/glx.h>
void* GlowGetProcAddress_glcore44(const char* name) {
return glXGetProcAddress(name);
return glXGetProcAddress((const GLubyte *) name);
}
#endif
*/

File diff suppressed because it is too large Load Diff

View File

@@ -51,7 +51,7 @@ package gl
#include <stdlib.h>
#include <GL/glx.h>
void* GlowGetProcAddress_glcompatibility45(const char* name) {
return glXGetProcAddress(name);
return glXGetProcAddress((const GLubyte *) name);
}
#endif
*/

File diff suppressed because it is too large Load Diff

View File

@@ -51,7 +51,7 @@ package gl
#include <stdlib.h>
#include <GL/glx.h>
void* GlowGetProcAddress_glcore45(const char* name) {
return glXGetProcAddress(name);
return glXGetProcAddress((const GLubyte *) name);
}
#endif
*/

View File

@@ -86,6 +86,7 @@ package gl
// typedef double GLdouble;
// typedef double GLclampd;
// typedef void *GLeglClientBufferEXT;
// typedef void *GLeglImageOES;
// typedef char GLchar;
// typedef char GLcharARB;
// #ifdef __APPLE__
@@ -564,7 +565,7 @@ package gl
// typedef void (APIENTRYP GPDEPTHBOUNDSDNV)(GLdouble zmin, GLdouble zmax);
// typedef void (APIENTRYP GPDEPTHFUNC)(GLenum func);
// typedef void (APIENTRYP GPDEPTHMASK)(GLboolean flag);
// typedef void (APIENTRYP GPDEPTHRANGE)(GLdouble xnear, GLdouble xfar);
// typedef void (APIENTRYP GPDEPTHRANGE)(GLdouble n, GLdouble f);
// typedef void (APIENTRYP GPDEPTHRANGEARRAYV)(GLuint first, GLsizei count, const GLdouble * v);
// typedef void (APIENTRYP GPDEPTHRANGEINDEXED)(GLuint index, GLdouble n, GLdouble f);
// typedef void (APIENTRYP GPDEPTHRANGEDNV)(GLdouble zNear, GLdouble zFar);
@@ -630,6 +631,8 @@ package gl
// typedef void (APIENTRYP GPDRAWTRANSFORMFEEDBACKSTREAM)(GLenum mode, GLuint id, GLuint stream);
// typedef void (APIENTRYP GPDRAWTRANSFORMFEEDBACKSTREAMINSTANCED)(GLenum mode, GLuint id, GLuint stream, GLsizei instancecount);
// typedef void (APIENTRYP GPDRAWVKIMAGENV)(GLuint64 vkImage, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1);
// typedef void (APIENTRYP GPEGLIMAGETARGETTEXSTORAGEEXT)(GLenum target, GLeglImageOES image, const GLint* attrib_list);
// typedef void (APIENTRYP GPEGLIMAGETARGETTEXTURESTORAGEEXT)(GLuint texture, GLeglImageOES image, const GLint* attrib_list);
// typedef void (APIENTRYP GPEDGEFLAG)(GLboolean flag);
// typedef void (APIENTRYP GPEDGEFLAGFORMATNV)(GLsizei stride);
// typedef void (APIENTRYP GPEDGEFLAGPOINTER)(GLsizei stride, const void * pointer);
@@ -4414,8 +4417,8 @@ package gl
// static void glowDepthMask(GPDEPTHMASK fnptr, GLboolean flag) {
// (*fnptr)(flag);
// }
// static void glowDepthRange(GPDEPTHRANGE fnptr, GLdouble xnear, GLdouble xfar) {
// (*fnptr)(xnear, xfar);
// static void glowDepthRange(GPDEPTHRANGE fnptr, GLdouble n, GLdouble f) {
// (*fnptr)(n, f);
// }
// static void glowDepthRangeArrayv(GPDEPTHRANGEARRAYV fnptr, GLuint first, GLsizei count, const GLdouble * v) {
// (*fnptr)(first, count, v);
@@ -4612,6 +4615,12 @@ package gl
// static void glowDrawVkImageNV(GPDRAWVKIMAGENV fnptr, GLuint64 vkImage, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1) {
// (*fnptr)(vkImage, sampler, x0, y0, x1, y1, z, s0, t0, s1, t1);
// }
// static void glowEGLImageTargetTexStorageEXT(GPEGLIMAGETARGETTEXSTORAGEEXT fnptr, GLenum target, GLeglImageOES image, const GLint* attrib_list) {
// (*fnptr)(target, image, attrib_list);
// }
// static void glowEGLImageTargetTextureStorageEXT(GPEGLIMAGETARGETTEXTURESTORAGEEXT fnptr, GLuint texture, GLeglImageOES image, const GLint* attrib_list) {
// (*fnptr)(texture, image, attrib_list);
// }
// static void glowEdgeFlag(GPEDGEFLAG fnptr, GLboolean flag) {
// (*fnptr)(flag);
// }
@@ -12149,6 +12158,7 @@ const (
BINORMAL_ARRAY_TYPE_EXT = 0x8440
BITMAP = 0x1A00
BITMAP_TOKEN = 0x0704
BLACKHOLE_RENDER_INTEL = 0x83FC
BLEND = 0x0BE2
BLEND_ADVANCED_COHERENT_KHR = 0x9285
BLEND_ADVANCED_COHERENT_NV = 0x9285
@@ -17357,6 +17367,8 @@ var (
gpDrawTransformFeedbackStream C.GPDRAWTRANSFORMFEEDBACKSTREAM
gpDrawTransformFeedbackStreamInstanced C.GPDRAWTRANSFORMFEEDBACKSTREAMINSTANCED
gpDrawVkImageNV C.GPDRAWVKIMAGENV
gpEGLImageTargetTexStorageEXT C.GPEGLIMAGETARGETTEXSTORAGEEXT
gpEGLImageTargetTextureStorageEXT C.GPEGLIMAGETARGETTEXTURESTORAGEEXT
gpEdgeFlag C.GPEDGEFLAG
gpEdgeFlagFormatNV C.GPEDGEFLAGFORMATNV
gpEdgeFlagPointer C.GPEDGEFLAGPOINTER
@@ -21435,8 +21447,8 @@ func DepthMask(flag bool) {
}
// specify mapping of depth values from normalized device coordinates to window coordinates
func DepthRange(near float64, far float64) {
C.glowDepthRange(gpDepthRange, (C.GLdouble)(near), (C.GLdouble)(far))
func DepthRange(n float64, f float64) {
C.glowDepthRange(gpDepthRange, (C.GLdouble)(n), (C.GLdouble)(f))
}
func DepthRangeArrayv(first uint32, count int32, v *float64) {
C.glowDepthRangeArrayv(gpDepthRangeArrayv, (C.GLuint)(first), (C.GLsizei)(count), (*C.GLdouble)(unsafe.Pointer(v)))
@@ -21687,6 +21699,12 @@ func DrawTransformFeedbackStreamInstanced(mode uint32, id uint32, stream uint32,
func DrawVkImageNV(vkImage uint64, sampler uint32, x0 float32, y0 float32, x1 float32, y1 float32, z float32, s0 float32, t0 float32, s1 float32, t1 float32) {
C.glowDrawVkImageNV(gpDrawVkImageNV, (C.GLuint64)(vkImage), (C.GLuint)(sampler), (C.GLfloat)(x0), (C.GLfloat)(y0), (C.GLfloat)(x1), (C.GLfloat)(y1), (C.GLfloat)(z), (C.GLfloat)(s0), (C.GLfloat)(t0), (C.GLfloat)(s1), (C.GLfloat)(t1))
}
func EGLImageTargetTexStorageEXT(target uint32, image C.GLeglImageOES, attrib_list *int32) {
C.glowEGLImageTargetTexStorageEXT(gpEGLImageTargetTexStorageEXT, (C.GLenum)(target), (C.GLeglImageOES)(image), (*C.GLint)(unsafe.Pointer(attrib_list)))
}
func EGLImageTargetTextureStorageEXT(texture uint32, image C.GLeglImageOES, attrib_list *int32) {
C.glowEGLImageTargetTextureStorageEXT(gpEGLImageTargetTextureStorageEXT, (C.GLuint)(texture), (C.GLeglImageOES)(image), (*C.GLint)(unsafe.Pointer(attrib_list)))
}
// flag edges as either boundary or nonboundary
func EdgeFlag(flag bool) {
@@ -30979,6 +30997,8 @@ func InitWithProcAddrFunc(getProcAddr func(name string) unsafe.Pointer) error {
return errors.New("glDrawTransformFeedbackStreamInstanced")
}
gpDrawVkImageNV = (C.GPDRAWVKIMAGENV)(getProcAddr("glDrawVkImageNV"))
gpEGLImageTargetTexStorageEXT = (C.GPEGLIMAGETARGETTEXSTORAGEEXT)(getProcAddr("glEGLImageTargetTexStorageEXT"))
gpEGLImageTargetTextureStorageEXT = (C.GPEGLIMAGETARGETTEXTURESTORAGEEXT)(getProcAddr("glEGLImageTargetTextureStorageEXT"))
gpEdgeFlag = (C.GPEDGEFLAG)(getProcAddr("glEdgeFlag"))
if gpEdgeFlag == nil {
return errors.New("glEdgeFlag")

View File

@@ -82,6 +82,7 @@ package gl
// typedef int GLsizei;
// typedef float GLfloat;
// typedef double GLdouble;
// typedef void *GLeglImageOES;
// typedef char GLchar;
// typedef ptrdiff_t GLintptr;
// typedef ptrdiff_t GLsizeiptr;
@@ -296,7 +297,7 @@ package gl
// typedef void (APIENTRYP GPDELETEVERTEXARRAYS)(GLsizei n, const GLuint * arrays);
// typedef void (APIENTRYP GPDEPTHFUNC)(GLenum func);
// typedef void (APIENTRYP GPDEPTHMASK)(GLboolean flag);
// typedef void (APIENTRYP GPDEPTHRANGE)(GLdouble xnear, GLdouble xfar);
// typedef void (APIENTRYP GPDEPTHRANGE)(GLdouble n, GLdouble f);
// typedef void (APIENTRYP GPDEPTHRANGEARRAYV)(GLuint first, GLsizei count, const GLdouble * v);
// typedef void (APIENTRYP GPDEPTHRANGEINDEXED)(GLuint index, GLdouble n, GLdouble f);
// typedef void (APIENTRYP GPDEPTHRANGEF)(GLfloat n, GLfloat f);
@@ -341,6 +342,8 @@ package gl
// typedef void (APIENTRYP GPDRAWTRANSFORMFEEDBACKSTREAM)(GLenum mode, GLuint id, GLuint stream);
// typedef void (APIENTRYP GPDRAWTRANSFORMFEEDBACKSTREAMINSTANCED)(GLenum mode, GLuint id, GLuint stream, GLsizei instancecount);
// typedef void (APIENTRYP GPDRAWVKIMAGENV)(GLuint64 vkImage, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1);
// typedef void (APIENTRYP GPEGLIMAGETARGETTEXSTORAGEEXT)(GLenum target, GLeglImageOES image, const GLint* attrib_list);
// typedef void (APIENTRYP GPEGLIMAGETARGETTEXTURESTORAGEEXT)(GLuint texture, GLeglImageOES image, const GLint* attrib_list);
// typedef void (APIENTRYP GPEDGEFLAGFORMATNV)(GLsizei stride);
// typedef void (APIENTRYP GPENABLE)(GLenum cap);
// typedef void (APIENTRYP GPENABLECLIENTSTATEINDEXEDEXT)(GLenum array, GLuint index);
@@ -1956,8 +1959,8 @@ package gl
// static void glowDepthMask(GPDEPTHMASK fnptr, GLboolean flag) {
// (*fnptr)(flag);
// }
// static void glowDepthRange(GPDEPTHRANGE fnptr, GLdouble xnear, GLdouble xfar) {
// (*fnptr)(xnear, xfar);
// static void glowDepthRange(GPDEPTHRANGE fnptr, GLdouble n, GLdouble f) {
// (*fnptr)(n, f);
// }
// static void glowDepthRangeArrayv(GPDEPTHRANGEARRAYV fnptr, GLuint first, GLsizei count, const GLdouble * v) {
// (*fnptr)(first, count, v);
@@ -2091,6 +2094,12 @@ package gl
// static void glowDrawVkImageNV(GPDRAWVKIMAGENV fnptr, GLuint64 vkImage, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1) {
// (*fnptr)(vkImage, sampler, x0, y0, x1, y1, z, s0, t0, s1, t1);
// }
// static void glowEGLImageTargetTexStorageEXT(GPEGLIMAGETARGETTEXSTORAGEEXT fnptr, GLenum target, GLeglImageOES image, const GLint* attrib_list) {
// (*fnptr)(target, image, attrib_list);
// }
// static void glowEGLImageTargetTextureStorageEXT(GPEGLIMAGETARGETTEXTURESTORAGEEXT fnptr, GLuint texture, GLeglImageOES image, const GLint* attrib_list) {
// (*fnptr)(texture, image, attrib_list);
// }
// static void glowEdgeFlagFormatNV(GPEDGEFLAGFORMATNV fnptr, GLsizei stride) {
// (*fnptr)(stride);
// }
@@ -5244,6 +5253,7 @@ const (
BGRA = 0x80E1
BGRA_INTEGER = 0x8D9B
BGR_INTEGER = 0x8D9A
BLACKHOLE_RENDER_INTEL = 0x83FC
BLEND = 0x0BE2
BLEND_ADVANCED_COHERENT_KHR = 0x9285
BLEND_ADVANCED_COHERENT_NV = 0x9285
@@ -7444,6 +7454,8 @@ var (
gpDrawTransformFeedbackStream C.GPDRAWTRANSFORMFEEDBACKSTREAM
gpDrawTransformFeedbackStreamInstanced C.GPDRAWTRANSFORMFEEDBACKSTREAMINSTANCED
gpDrawVkImageNV C.GPDRAWVKIMAGENV
gpEGLImageTargetTexStorageEXT C.GPEGLIMAGETARGETTEXSTORAGEEXT
gpEGLImageTargetTextureStorageEXT C.GPEGLIMAGETARGETTEXTURESTORAGEEXT
gpEdgeFlagFormatNV C.GPEDGEFLAGFORMATNV
gpEnable C.GPENABLE
gpEnableClientStateIndexedEXT C.GPENABLECLIENTSTATEINDEXEDEXT
@@ -9293,8 +9305,8 @@ func DepthMask(flag bool) {
}
// specify mapping of depth values from normalized device coordinates to window coordinates
func DepthRange(near float64, far float64) {
C.glowDepthRange(gpDepthRange, (C.GLdouble)(near), (C.GLdouble)(far))
func DepthRange(n float64, f float64) {
C.glowDepthRange(gpDepthRange, (C.GLdouble)(n), (C.GLdouble)(f))
}
func DepthRangeArrayv(first uint32, count int32, v *float64) {
C.glowDepthRangeArrayv(gpDepthRangeArrayv, (C.GLuint)(first), (C.GLsizei)(count), (*C.GLdouble)(unsafe.Pointer(v)))
@@ -9480,6 +9492,12 @@ func DrawTransformFeedbackStreamInstanced(mode uint32, id uint32, stream uint32,
func DrawVkImageNV(vkImage uint64, sampler uint32, x0 float32, y0 float32, x1 float32, y1 float32, z float32, s0 float32, t0 float32, s1 float32, t1 float32) {
C.glowDrawVkImageNV(gpDrawVkImageNV, (C.GLuint64)(vkImage), (C.GLuint)(sampler), (C.GLfloat)(x0), (C.GLfloat)(y0), (C.GLfloat)(x1), (C.GLfloat)(y1), (C.GLfloat)(z), (C.GLfloat)(s0), (C.GLfloat)(t0), (C.GLfloat)(s1), (C.GLfloat)(t1))
}
func EGLImageTargetTexStorageEXT(target uint32, image C.GLeglImageOES, attrib_list *int32) {
C.glowEGLImageTargetTexStorageEXT(gpEGLImageTargetTexStorageEXT, (C.GLenum)(target), (C.GLeglImageOES)(image), (*C.GLint)(unsafe.Pointer(attrib_list)))
}
func EGLImageTargetTextureStorageEXT(texture uint32, image C.GLeglImageOES, attrib_list *int32) {
C.glowEGLImageTargetTextureStorageEXT(gpEGLImageTargetTextureStorageEXT, (C.GLuint)(texture), (C.GLeglImageOES)(image), (*C.GLint)(unsafe.Pointer(attrib_list)))
}
func EdgeFlagFormatNV(stride int32) {
C.glowEdgeFlagFormatNV(gpEdgeFlagFormatNV, (C.GLsizei)(stride))
}
@@ -13948,6 +13966,8 @@ func InitWithProcAddrFunc(getProcAddr func(name string) unsafe.Pointer) error {
return errors.New("glDrawTransformFeedbackStreamInstanced")
}
gpDrawVkImageNV = (C.GPDRAWVKIMAGENV)(getProcAddr("glDrawVkImageNV"))
gpEGLImageTargetTexStorageEXT = (C.GPEGLIMAGETARGETTEXSTORAGEEXT)(getProcAddr("glEGLImageTargetTexStorageEXT"))
gpEGLImageTargetTextureStorageEXT = (C.GPEGLIMAGETARGETTEXTURESTORAGEEXT)(getProcAddr("glEGLImageTargetTextureStorageEXT"))
gpEdgeFlagFormatNV = (C.GPEDGEFLAGFORMATNV)(getProcAddr("glEdgeFlagFormatNV"))
gpEnable = (C.GPENABLE)(getProcAddr("glEnable"))
if gpEnable == nil {

View File

@@ -23,11 +23,11 @@ package glfw
// ----------------
// GLFW Options:
#cgo linux,!wayland CFLAGS: -D_GLFW_X11
#cgo linux,wayland CFLAGS: -D_GLFW_WAYLAND
#cgo linux,wayland CFLAGS: -D_GLFW_WAYLAND -D_GNU_SOURCE
// Linker Options:
#cgo linux,!wayland LDFLAGS: -lGL -lX11 -lXrandr -lXxf86vm -lXi -lXcursor -lm -lXinerama -ldl -lrt
#cgo linux,wayland LDFLAGS: -lGL -lX11 -lXrandr -lXxf86vm -lXi -lXcursor -lm -lXinerama -ldl -lrt
#cgo linux,wayland LDFLAGS: -lGL -lwayland-client -lwayland-cursor -lwayland-egl -lxkbcommon -lm -ldl -lrt
// FreeBSD Build Tags
@@ -38,6 +38,6 @@ package glfw
// Linker Options:
#cgo freebsd,!wayland LDFLAGS: -lGL -lX11 -lXrandr -lXxf86vm -lXi -lXcursor -lm -lXinerama
#cgo freebsd,wayland LDFLAGS: -lGL -lX11 -lXrandr -lXxf86vm -lXi -lXcursor -lm -lXinerama
#cgo freebsd,wayland LDFLAGS: -lGL -lwayland-client -lwayland-cursor -lwayland-egl -lxkbcommon -lm
*/
import "C"

View File

@@ -12,6 +12,8 @@ package glfw
#include "glfw/src/wl_init.c"
#include "glfw/src/wl_monitor.c"
#include "glfw/src/wl_window.c"
#include "glfw/src/wayland-pointer-constraints-unstable-v1-client-protocol.c"
#include "glfw/src/wayland-relative-pointer-unstable-v1-client-protocol.c"
#endif
#ifdef _GLFW_X11
#include "glfw/src/x11_init.c"

View File

@@ -1,4 +1,4 @@
// +build linux freebsd
// +build linux,!wayland freebsd,!wayland
package glfw

View File

@@ -167,6 +167,12 @@ func (w *Window) GLFWWindow() uintptr {
return uintptr(unsafe.Pointer(w.data))
}
// GoWindow creates a Window from a *C.GLFWwindow reference.
// Used when an external C library is calling your Go handlers.
func GoWindow(window unsafe.Pointer) *Window {
return &Window{data: (*C.GLFWwindow)(window)}
}
//export goWindowPosCB
func goWindowPosCB(window unsafe.Pointer, xpos, ypos C.int) {
w := windows.get((*C.GLFWwindow)(window))

507
vendor/vendor.json vendored
View File

@@ -1,6 +1,509 @@
{
"comment": "",
"ignore": "test",
"package": [],
"rootPath": "ur.gs/chaos-gate"
"package": [
{
"path": "github.com/faiface/glhf",
"revision": ""
},
{
"path": "github.com/faiface/glhf/examples/demo",
"revision": ""
},
{
"path": "github.com/faiface/mainthread",
"revision": ""
},
{
"checksumSHA1": "x8UxeYJtVgI3D2r2URgA0JERgYY=",
"path": "github.com/faiface/pixel",
"revision": "0c2d627cfa32f437abe22d6a6ee1de7d102c0264",
"revisionTime": "2018-10-10T11:48:53Z"
},
{
"path": "github.com/faiface/pixel/examples/community/bouncing",
"revision": ""
},
{
"path": "github.com/faiface/pixel/examples/community/game_of_life",
"revision": ""
},
{
"path": "github.com/faiface/pixel/examples/community/game_of_life/life",
"revision": ""
},
{
"path": "github.com/faiface/pixel/examples/community/isometric-basics",
"revision": ""
},
{
"path": "github.com/faiface/pixel/examples/community/maze",
"revision": ""
},
{
"path": "github.com/faiface/pixel/examples/community/maze/stack",
"revision": ""
},
{
"path": "github.com/faiface/pixel/examples/community/parallax-scrolling-background",
"revision": ""
},
{
"path": "github.com/faiface/pixel/examples/community/procedural-terrain-1d",
"revision": ""
},
{
"path": "github.com/faiface/pixel/examples/community/raycaster",
"revision": ""
},
{
"path": "github.com/faiface/pixel/examples/community/scrolling-background",
"revision": ""
},
{
"path": "github.com/faiface/pixel/examples/community/starfield",
"revision": ""
},
{
"path": "github.com/faiface/pixel/examples/guide/01_creating_a_window",
"revision": ""
},
{
"path": "github.com/faiface/pixel/examples/guide/02_drawing_a_sprite",
"revision": ""
},
{
"path": "github.com/faiface/pixel/examples/guide/03_moving_scaling_and_rotating_with_matrix",
"revision": ""
},
{
"path": "github.com/faiface/pixel/examples/guide/04_pressing_keys_and_clicking_mouse",
"revision": ""
},
{
"path": "github.com/faiface/pixel/examples/guide/05_drawing_efficiently_with_batch",
"revision": ""
},
{
"path": "github.com/faiface/pixel/examples/guide/06_drawing_shapes_with_imdraw",
"revision": ""
},
{
"path": "github.com/faiface/pixel/examples/guide/07_typing_text_on_the_screen",
"revision": ""
},
{
"path": "github.com/faiface/pixel/examples/lights",
"revision": ""
},
{
"path": "github.com/faiface/pixel/examples/platformer",
"revision": ""
},
{
"path": "github.com/faiface/pixel/examples/smoke",
"revision": ""
},
{
"path": "github.com/faiface/pixel/examples/typewriter",
"revision": ""
},
{
"path": "github.com/faiface/pixel/examples/xor",
"revision": ""
},
{
"path": "github.com/faiface/pixel/imdraw",
"revision": ""
},
{
"path": "github.com/faiface/pixel/pixelgl",
"revision": ""
},
{
"path": "github.com/faiface/pixel/text",
"revision": ""
},
{
"path": "github.com/faiface/pixrel",
"revision": ""
},
{
"path": "github.com/go-gl/gl",
"revision": ""
},
{
"path": "github.com/go-gl/gl/all-core/gl",
"revision": ""
},
{
"path": "github.com/go-gl/gl/v2.1/gl",
"revision": ""
},
{
"path": "github.com/go-gl/gl/v3.1/gles2",
"revision": ""
},
{
"path": "github.com/go-gl/gl/v3.2-compatibility/gl",
"revision": ""
},
{
"path": "github.com/go-gl/gl/v3.2-core/gl",
"revision": ""
},
{
"path": "github.com/go-gl/gl/v3.3-compatibility/gl",
"revision": ""
},
{
"path": "github.com/go-gl/gl/v3.3-core/gl",
"revision": ""
},
{
"path": "github.com/go-gl/gl/v4.1-compatibility/gl",
"revision": ""
},
{
"path": "github.com/go-gl/gl/v4.1-core/gl",
"revision": ""
},
{
"path": "github.com/go-gl/gl/v4.2-compatibility/gl",
"revision": ""
},
{
"path": "github.com/go-gl/gl/v4.2-core/gl",
"revision": ""
},
{
"path": "github.com/go-gl/gl/v4.3-compatibility/gl",
"revision": ""
},
{
"path": "github.com/go-gl/gl/v4.3-core/gl",
"revision": ""
},
{
"path": "github.com/go-gl/gl/v4.4-compatibility/gl",
"revision": ""
},
{
"path": "github.com/go-gl/gl/v4.4-core/gl",
"revision": ""
},
{
"path": "github.com/go-gl/gl/v4.5-compatibility/gl",
"revision": ""
},
{
"path": "github.com/go-gl/gl/v4.5-core/gl",
"revision": ""
},
{
"path": "github.com/go-gl/gl/v4.6-compatibility/gl",
"revision": ""
},
{
"path": "github.com/go-gl/gl/v4.6-core/gl",
"revision": ""
},
{
"path": "github.com/go-gl/glfw/v3.0/glfw",
"revision": ""
},
{
"path": "github.com/go-gl/glfw/v3.1/glfw",
"revision": ""
},
{
"path": "github.com/go-gl/glfw/v3.2/glfw",
"revision": ""
},
{
"path": "github.com/go-gl/mathgl/mgl32",
"revision": ""
},
{
"path": "github.com/go-gl/mathgl/mgl32/matstack",
"revision": ""
},
{
"path": "github.com/go-gl/mathgl/mgl64",
"revision": ""
},
{
"path": "github.com/go-gl/mathgl/mgl64/matstack",
"revision": ""
},
{
"path": "github.com/pkg/errors",
"revision": ""
},
{
"path": "golang.org/x/image/bmp",
"revision": ""
},
{
"path": "golang.org/x/image/colornames",
"revision": ""
},
{
"path": "golang.org/x/image/draw",
"revision": ""
},
{
"path": "golang.org/x/image/example/font",
"revision": ""
},
{
"path": "golang.org/x/image/font",
"revision": ""
},
{
"path": "golang.org/x/image/font/basicfont",
"revision": ""
},
{
"path": "golang.org/x/image/font/gofont/gobold",
"revision": ""
},
{
"path": "golang.org/x/image/font/gofont/gobolditalic",
"revision": ""
},
{
"path": "golang.org/x/image/font/gofont/goitalic",
"revision": ""
},
{
"path": "golang.org/x/image/font/gofont/gomedium",
"revision": ""
},
{
"path": "golang.org/x/image/font/gofont/gomediumitalic",
"revision": ""
},
{
"path": "golang.org/x/image/font/gofont/gomono",
"revision": ""
},
{
"path": "golang.org/x/image/font/gofont/gomonobold",
"revision": ""
},
{
"path": "golang.org/x/image/font/gofont/gomonobolditalic",
"revision": ""
},
{
"path": "golang.org/x/image/font/gofont/gomonoitalic",
"revision": ""
},
{
"path": "golang.org/x/image/font/gofont/goregular",
"revision": ""
},
{
"path": "golang.org/x/image/font/gofont/gosmallcaps",
"revision": ""
},
{
"path": "golang.org/x/image/font/gofont/gosmallcapsitalic",
"revision": ""
},
{
"path": "golang.org/x/image/font/inconsolata",
"revision": ""
},
{
"path": "golang.org/x/image/font/opentype",
"revision": ""
},
{
"path": "golang.org/x/image/font/plan9font",
"revision": ""
},
{
"path": "golang.org/x/image/font/sfnt",
"revision": ""
},
{
"path": "golang.org/x/image/math/f32",
"revision": ""
},
{
"path": "golang.org/x/image/math/f64",
"revision": ""
},
{
"path": "golang.org/x/image/math/fixed",
"revision": ""
},
{
"path": "golang.org/x/image/riff",
"revision": ""
},
{
"path": "golang.org/x/image/tiff",
"revision": ""
},
{
"path": "golang.org/x/image/tiff/lzw",
"revision": ""
},
{
"path": "golang.org/x/image/vector",
"revision": ""
},
{
"path": "golang.org/x/image/vp8",
"revision": ""
},
{
"path": "golang.org/x/image/vp8l",
"revision": ""
},
{
"path": "golang.org/x/image/webp",
"revision": ""
},
{
"path": "golang.org/x/image/webp/nycbcra",
"revision": ""
},
{
"path": "golang.org/x/net/bpf",
"revision": ""
},
{
"path": "golang.org/x/net/context",
"revision": ""
},
{
"path": "golang.org/x/net/context/ctxhttp",
"revision": ""
},
{
"path": "golang.org/x/net/dict",
"revision": ""
},
{
"path": "golang.org/x/net/dns/dnsmessage",
"revision": ""
},
{
"path": "golang.org/x/net/html",
"revision": ""
},
{
"path": "golang.org/x/net/html/atom",
"revision": ""
},
{
"path": "golang.org/x/net/html/charset",
"revision": ""
},
{
"path": "golang.org/x/net/http/httpproxy",
"revision": ""
},
{
"path": "golang.org/x/net/http2",
"revision": ""
},
{
"path": "golang.org/x/net/http2/h2demo",
"revision": ""
},
{
"path": "golang.org/x/net/http2/h2i",
"revision": ""
},
{
"path": "golang.org/x/net/http2/hpack",
"revision": ""
},
{
"path": "golang.org/x/net/icmp",
"revision": ""
},
{
"path": "golang.org/x/net/idna",
"revision": ""
},
{
"path": "golang.org/x/net/internal/iana",
"revision": ""
},
{
"path": "golang.org/x/net/internal/nettest",
"revision": ""
},
{
"path": "golang.org/x/net/internal/socket",
"revision": ""
},
{
"path": "golang.org/x/net/internal/timeseries",
"revision": ""
},
{
"path": "golang.org/x/net/ipv4",
"revision": ""
},
{
"path": "golang.org/x/net/ipv6",
"revision": ""
},
{
"path": "golang.org/x/net/lex/httplex",
"revision": ""
},
{
"path": "golang.org/x/net/lif",
"revision": ""
},
{
"path": "golang.org/x/net/nettest",
"revision": ""
},
{
"path": "golang.org/x/net/netutil",
"revision": ""
},
{
"path": "golang.org/x/net/proxy",
"revision": ""
},
{
"path": "golang.org/x/net/publicsuffix",
"revision": ""
},
{
"path": "golang.org/x/net/route",
"revision": ""
},
{
"path": "golang.org/x/net/trace",
"revision": ""
},
{
"path": "golang.org/x/net/webdav",
"revision": ""
},
{
"path": "golang.org/x/net/webdav/internal/xml",
"revision": ""
},
{
"path": "golang.org/x/net/websocket",
"revision": ""
},
{
"path": "golang.org/x/net/xsrftoken",
"revision": ""
}
],
"rootPath": "ur.gs/ordoor"
}