func (g *context) GetShaderiv(shader uint32, pname uint32, params *int32) {
	g.run(func() {
		gl.GetShaderiv(shader, pname, params)
	})
}
GetShaderiv returns a parameter from a shader 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)
	})
}