func (g *context) Uniform1f(location int32, v0 float32) {
	g.runAsync(func() {
		gl.Uniform1f(location, v0)
	})
}
Uniform1f specifies the value of a uniform variable for the current program object
package glfw
import (
	"unsafe"
	"github.com/go-gl/gl/v3.3-core/gl"
	"github.com/go-gl/glfw/v3.3/glfw"
)
type context struct {
	run      func(func())
	runAsync func(func())
}
func newContext(mainThreadLoop *MainThreadLoop, window *glfw.Window) *context {
	return &context{
		run: func(f func()) {
			mainThreadLoop.executeCommand(command{
				window:  window,
				execute: f,
			})
		},
		runAsync: func(f func()) {
			mainThreadLoop.executeAsyncCommand(command{
				window:  window,
				execute: f,
			})
		},
	}
}
func (g *context) GenBuffers(n int32, buffers *uint32) {
	g.run(func() {
		gl.GenBuffers(n, buffers)
	})
}
func (g *context) BindBuffer(target uint32, buffer uint32) {
	g.runAsync(func() {
		gl.BindBuffer(target, buffer)
	})
}
func (g *context) BufferData(target uint32, size int, data unsafe.Pointer, usage uint32) {
	g.run(func() {
		gl.BufferData(target, size, data, usage)
	})
}
func (g *context) BufferSubData(target uint32, offset int, size int, data unsafe.Pointer) {
	g.run(func() {
		gl.BufferSubData(target, offset, size, data)
	})
}
func (g *context) GetBufferSubData(target uint32, offset int, size int, data unsafe.Pointer) {
	g.run(func() {
		gl.GetBufferSubData(target, offset, size, data)
	})
}
func (g *context) DeleteBuffers(n int32, buffers *uint32) {
	g.run(func() {
		gl.DeleteBuffers(n, buffers)
	})
}
func (g *context) GenVertexArrays(n int32, arrays *uint32) {
	g.run(func() {
		gl.GenVertexArrays(n, arrays)
	})
}
func (g *context) DeleteVertexArrays(n int32, arrays *uint32) {
	g.run(func() {
		gl.DeleteVertexArrays(n, arrays)
	})
}
func (g *context) BindVertexArray(array uint32) {
	g.runAsync(func() {
		gl.BindVertexArray(array)
	})
}
func (g *context) VertexAttribPointer(index uint32, size int32, xtype uint32, normalized bool, stride int32, pointer unsafe.Pointer) {
	g.run(func() {
		gl.VertexAttribPointer(index, size, xtype, normalized, stride, pointer)
	})
}
func (g *context) EnableVertexAttribArray(index uint32) {
	g.runAsync(func() {
		gl.EnableVertexAttribArray(index)
	})
}
func (g *context) CreateShader(xtype uint32) uint32 {
	var id uint32
	g.run(func() {
		id = gl.CreateShader(xtype)
	})
	return id
}
func (g *context) ShaderSource(shader uint32, count int32, xstring **uint8, length *int32) {
	g.run(func() {
		gl.ShaderSource(shader, count, xstring, length)
	})
}
func (g *context) CompileShader(shader uint32) {
	g.runAsync(func() {
		gl.CompileShader(shader)
	})
}
func (g *context) GetShaderiv(shader uint32, pname uint32, params *int32) {
	g.run(func() {
		gl.GetShaderiv(shader, pname, params)
	})
}
func (g *context) GetShaderInfoLog(shader uint32, bufSize int32, length *int32, infoLog *uint8) {
	g.run(func() {
		gl.GetShaderInfoLog(shader, bufSize, length, infoLog)
	})
}
func (g *context) DeleteShader(shader uint32) {
	g.runAsync(func() {
		gl.DeleteShader(shader)
	})
}
func (g *context) AttachShader(program uint32, shader uint32) {
	g.runAsync(func() {
		gl.AttachShader(program, shader)
	})
}
func (g *context) LinkProgram(program uint32) {
	g.runAsync(func() {
		gl.LinkProgram(program)
	})
}
func (g *context) GetProgramiv(program uint32, pname uint32, params *int32) {
	g.run(func() {
		gl.GetProgramiv(program, pname, params)
	})
}
func (g *context) GetProgramInfoLog(program uint32, bufSize int32, length *int32, infoLog *uint8) {
	g.run(func() {
		gl.GetProgramInfoLog(program, bufSize, length, infoLog)
	})
}
func (g *context) UseProgram(program uint32) {
	g.runAsync(func() {
		gl.UseProgram(program)
	})
}
func (g *context) CreateProgram() uint32 {
	var program uint32
	g.run(func() {
		program = gl.CreateProgram()
	})
	return program
}
func (g *context) DeleteProgram(program uint32) {
	g.run(func() {
		gl.DeleteProgram(program)
	})
}
func (g *context) GetActiveUniform(program uint32, index uint32, bufSize int32, length *int32, size *int32, xtype *uint32, name *uint8) {
	g.run(func() {
		gl.GetActiveUniform(program, index, bufSize, length, size, xtype, name)
	})
}
func (g *context) GetActiveAttrib(program uint32, index uint32, bufSize int32, length *int32, size *int32, xtype *uint32, name *uint8) {
	g.run(func() {
		gl.GetActiveAttrib(program, index, bufSize, length, size, xtype, name)
	})
}
func (g *context) GetAttribLocation(program uint32, name *uint8) int32 {
	var loc int32
	g.run(func() {
		loc = gl.GetAttribLocation(program, name)
	})
	return loc
}
func (g *context) Enable(cap uint32) {
	g.runAsync(func() {
		gl.Enable(cap)
	})
}
func (g *context) Disable(cap uint32) {
	g.runAsync(func() {
		gl.Disable(cap)
	})
}
func (g *context) BindFramebuffer(target uint32, framebuffer uint32) {
	g.runAsync(func() {
		gl.BindFramebuffer(target, framebuffer)
	})
}
func (g *context) Scissor(x int32, y int32, width int32, height int32) {
	g.runAsync(func() {
		gl.Scissor(x, y, width, height)
	})
}
func (g *context) Viewport(x int32, y int32, width int32, height int32) {
	g.runAsync(func() {
		gl.Viewport(x, y, width, height)
	})
}
func (g *context) ClearColor(red float32, green float32, blue float32, alpha float32) {
	g.runAsync(func() {
		gl.ClearColor(red, green, blue, alpha)
	})
}
func (g *context) Clear(mask uint32) {
	g.runAsync(func() {
		gl.Clear(mask)
	})
}
func (g *context) DrawArrays(mode uint32, first int32, count int32) {
	g.runAsync(func() {
		gl.DrawArrays(mode, first, count)
	})
}