本文整理汇总了Golang中github.com/go-gl/gl.DrawArrays函数的典型用法代码示例。如果您正苦于以下问题:Golang DrawArrays函数的具体用法?Golang DrawArrays怎么用?Golang DrawArrays使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了DrawArrays函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: Draw
func (m *Map) Draw() {
// gl.Enable(gl.PRIMITIVE_RESTART)
// gl.PrimitiveRestartIndex(PRIMITIVE_RESTART)
gl.EnableClientState(gl.VERTEX_ARRAY)
gl.Translatef(float32(m.gridSize/2), float32(m.gridSize/2), 0)
if m.renderSmooth {
gl.Enable(gl.BLEND)
gl.BlendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA)
gl.Enable(gl.POLYGON_SMOOTH)
gl.Hint(gl.POLYGON_SMOOTH_HINT, gl.NICEST)
}
if m.renderMode == 1 {
gl.LineWidth(1)
gl.VertexPointer(2, gl.FLOAT, 0, m.gridLines)
gl.Color3f(0.2, 0.2, 0.2)
gl.DrawArrays(gl.LINES, 0, len(m.gridLines)/2)
gl.PolygonMode(gl.FRONT_AND_BACK, gl.LINE)
}
for _, vl := range m.vl {
if len(vl.vertices) > 0 {
gl.VertexPointer(2, gl.FLOAT, 0, vl.vertices)
gl.Color3f(vl.colors[0], vl.colors[1], vl.colors[2])
gl.DrawElements(gl.TRIANGLES, len(vl.indices), gl.UNSIGNED_INT, vl.indices)
}
}
}
示例2: Draw
func (m *Map) Draw() {
gl.PushMatrix()
gl.PushAttrib(gl.CURRENT_BIT | gl.ENABLE_BIT | gl.LIGHTING_BIT | gl.POLYGON_BIT | gl.LINE_BIT)
gl.EnableClientState(gl.VERTEX_ARRAY)
gl.VertexPointer(3, gl.FLOAT, 0, m.vertices)
gl.EnableClientState(gl.NORMAL_ARRAY)
gl.NormalPointer(gl.FLOAT, 0, m.normals)
// gl.EnableClientState(gl.TEXTURE_COORD_ARRAY)
// gl.TexCoordPointer(2, gl.FLOAT, 0, m.texcoords)
gl.EnableClientState(gl.COLOR_ARRAY)
gl.ColorPointer(3, gl.FLOAT, 0, m.colors)
// draw solids
gl.Enable(gl.COLOR_MATERIAL)
// gl.DrawArrays(gl.TRIANGLE_STRIP, 0, len(m.vertices)/3)
gl.PolygonMode(gl.FRONT_AND_BACK, gl.LINE)
gl.LineWidth(1.0)
gl.Color4f(1, 1, 1, 1)
gl.DrawArrays(gl.TRIANGLE_STRIP, 0, len(m.vertices)/3)
gl.PopAttrib()
gl.PopMatrix()
}
示例3: main
func main() {
if !glfw.Init() {
log.Fatal("glfw failed to initialize")
}
defer glfw.Terminate()
window, err := glfw.CreateWindow(640, 480, "Deformable", nil, nil)
if err != nil {
log.Fatal(err.Error())
}
window.MakeContextCurrent()
glfw.SwapInterval(1)
window.SetMouseButtonCallback(handleMouseButton)
window.SetKeyCallback(handleKeyDown)
window.SetInputMode(glfw.Cursor, glfw.CursorHidden)
gl.Init()
initGL()
i := 16
m = GenerateMap(1600/i, 1200/i, i)
for running && !window.ShouldClose() {
x, y := window.GetCursorPosition()
if drawing != 0 {
m.Add(int(x)+int(camera[0]), int(y)+int(camera[1]), drawing, brushSizes[currentBrushSize])
}
gl.Clear(gl.COLOR_BUFFER_BIT)
gl.LoadIdentity()
gl.PushMatrix()
gl.PushAttrib(gl.CURRENT_BIT | gl.ENABLE_BIT | gl.LIGHTING_BIT | gl.POLYGON_BIT | gl.LINE_BIT)
gl.Translatef(-camera[0], -camera[1], 0)
m.Draw()
gl.PopAttrib()
gl.PopMatrix()
gl.PushAttrib(gl.COLOR_BUFFER_BIT)
gl.LineWidth(2)
gl.Enable(gl.BLEND)
gl.BlendFunc(gl.ONE_MINUS_DST_COLOR, gl.ZERO)
// gl.Enable(gl.LINE_SMOOTH)
// gl.Hint(gl.LINE_SMOOTH_HINT, gl.NICEST)
gl.Translatef(float32(x), float32(y), 0)
gl.EnableClientState(gl.VERTEX_ARRAY)
gl.VertexPointer(2, gl.DOUBLE, 0, cursorVerts)
gl.DrawArrays(gl.LINE_LOOP, 0, 24)
gl.PopAttrib()
window.SwapBuffers()
glfw.PollEvents()
}
}
示例4: main
func main() {
if err := glfw.Init(); err != nil {
fmt.Fprintf(os.Stderr, "%s\n", err.Error())
return
}
defer glfw.Terminate()
glfw.OpenWindowHint(glfw.FsaaSamples, 4)
glfw.OpenWindowHint(glfw.OpenGLVersionMajor, 3)
glfw.OpenWindowHint(glfw.OpenGLVersionMinor, 3)
glfw.OpenWindowHint(glfw.OpenGLProfile, glfw.OpenGLCoreProfile)
if err := glfw.OpenWindow(1024, 768, 0, 0, 0, 0, 32, 0, glfw.Windowed); err != nil {
fmt.Fprintf(os.Stderr, "%s\n", err.Error())
return
}
gl.Init() // Can't find gl.GLEW_OK or any variation, not sure how to check if this worked
gl.GetError() // Ignore error
glfw.SetWindowTitle("Tutorial 02")
glfw.Enable(glfw.StickyKeys)
gl.ClearColor(0., 0., 0.4, 0.)
prog := helper.MakeProgram("SimpleVertexShader.vertexshader", "SimpleFragmentShader.fragmentshader")
vBufferData := [...]float32{
-1., -1., 0.,
1., -1., 0.,
0., 1., 0.}
vertexArray := gl.GenVertexArray()
vertexArray.Bind()
buffer := gl.GenBuffer()
buffer.Bind(gl.ARRAY_BUFFER)
gl.BufferData(gl.ARRAY_BUFFER, len(vBufferData)*4, &vBufferData, gl.STATIC_DRAW)
// Equivalent to a do... while
for ok := true; ok; ok = (glfw.Key(glfw.KeyEsc) != glfw.KeyPress && glfw.WindowParam(glfw.Opened) == gl.TRUE) {
gl.Clear(gl.COLOR_BUFFER_BIT)
prog.Use()
attribLoc := gl.AttribLocation(0)
attribLoc.EnableArray()
buffer.Bind(gl.ARRAY_BUFFER)
attribLoc.AttribPointer(3, gl.FLOAT, false, 0, nil)
gl.DrawArrays(gl.TRIANGLES, 0, 3)
attribLoc.DisableArray()
glfw.SwapBuffers()
}
}
示例5: Draw
func (ui *UIText) Draw() {
if ui.text == "" {
return
}
v := ui.align.Vector()
v.X = (v.X * ui.width)
v.Y = (v.Y * ui.height)
mat := engine.TextureMaterial
if ui.Font.IsSDF() {
mat = engine.SDFMaterial
}
mat.Begin(ui.GameObject())
mp := mat.ProjMatrix
mv := mat.ViewMatrix
mm := mat.ModelMatrix
tx := mat.Texture
ti := mat.Tiling
of := mat.Offset
color := mat.AddColor
_ = color
ui.buffer.Bind(gl.ARRAY_BUFFER)
mat.Verts.EnableArray()
mat.Verts.AttribPointer(3, gl.FLOAT, false, 0, uintptr(0))
mat.UV.EnableArray()
mat.UV.AttribPointer(2, gl.FLOAT, false, 0, uintptr(ui.texcoordsIndex))
camera := engine.GetScene().SceneBase().Camera
view := camera.InvertedMatrix()
model := engine.Identity()
model.Translate(v.X, v.Y, 0)
model.Mul(ui.GameObject().Transform().Matrix())
model.Translate(0.75, 0.75, 0)
/*
view := camera.Transform().Matrix()
view = view.Invert()
model := ui.GameObject().Transform().Matrix()
*/
mv.UniformMatrix4fv(false, view)
mp.UniformMatrix4f(false, (*[16]float32)(camera.Projection))
mm.UniformMatrix4fv(false, model)
ti.Uniform2f(1, 1)
of.Uniform2f(0, 0)
ui.Font.Bind()
tx.Uniform1i(0)
color.Uniform4f(ui.Color.R, ui.Color.G, ui.Color.B, ui.Color.A)
gl.DrawArrays(gl.QUADS, 0, ui.vertexCount)
}
示例6: handleText
func handleText(camera *PerspectiveCamera, text *Text) {
// Material
material := text.Material()
program := material.Program()
if program == nil {
program = createTextProgram(text)
material.SetProgram(program)
}
program.Use()
defer program.Unuse()
if c, ok := material.(Colored); ok {
if c.Color() != nil {
program.uniforms["diffuse"].apply(c.Color())
}
}
if t, ok := material.(Textured); ok {
texture := t.Texture()
if texture != nil {
gl.ActiveTexture(gl.TEXTURE0)
texture.Bind()
defer texture.Unbind()
program.uniforms["texture"].apply(texture)
}
}
for _, attribute := range program.attributes {
attribute.enable()
defer attribute.disable()
attribute.bindBuffer()
defer attribute.unbindBuffer()
attribute.pointer()
attribute.bindBuffer()
}
vertexAttrib := gl.AttribLocation(0)
vertexAttrib.EnableArray()
defer vertexAttrib.DisableArray()
text.vertexBuffer.Bind(gl.ARRAY_BUFFER)
defer text.vertexBuffer.Unbind(gl.ARRAY_BUFFER)
vertexAttrib.AttribPointer(2, gl.FLOAT, false, 0, nil)
if t, ok := material.(Wireframed); ok {
if t.Wireframe() {
gl.PolygonMode(gl.FRONT_AND_BACK, gl.LINE)
} else {
gl.PolygonMode(gl.FRONT_AND_BACK, gl.FILL)
}
}
gl.Enable(gl.BLEND)
gl.BlendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA)
gl.DrawArrays(gl.TRIANGLES, 0, len(text.Geometry().Vertices))
}
示例7: DrawSprites
func DrawSprites(tex *Texture, uvs []UV, positions []Vector, scales []Vector, rotations []float32, alings []Align, colors []Color) {
internalMaterial.Begin(nil)
mp := internalMaterial.ProjMatrix
mv := internalMaterial.ViewMatrix
mm := internalMaterial.ModelMatrix
tx := internalMaterial.Texture
ac := internalMaterial.AddColor
ti := internalMaterial.Tiling
of := internalMaterial.Offset
defaultBuffer.Bind(gl.ARRAY_BUFFER)
internalMaterial.Verts.EnableArray()
internalMaterial.Verts.AttribPointer(3, gl.FLOAT, false, 0, uintptr(0))
internalMaterial.UV.EnableArray()
internalMaterial.UV.AttribPointer(2, gl.FLOAT, false, 0, uintptr(12*4))
camera := GetScene().SceneBase().Camera
view := camera.InvertedMatrix()
mv.UniformMatrix4fv(false, view)
mp.UniformMatrix4f(false, (*[16]float32)(camera.Projection))
tex.Bind()
tx.Uniform1i(0)
for i := 0; i < len(uvs); i++ {
uv, position, scale := uvs[i], positions[i], scales[i]
if !InsideScreen(uv.Ratio, position, scale) {
continue
}
rotation, aling, color := rotations[i], alings[i], colors[i]
v := aling.Vector()
v.X *= uv.Ratio
model := Identity()
model.Translate(v.X, v.Y, 0)
model.Scale((scale.X * uv.Ratio), scale.Y, scale.Z)
model.RotateZ(rotation, -1)
model.Translate(position.X+0.75, position.Y+0.75, position.Z)
mm.UniformMatrix4fv(false, model)
ac.Uniform4f(color.R, color.G, color.B, color.A)
ti.Uniform2f(uv.U2-uv.U1, uv.V2-uv.V1)
of.Uniform2f(uv.U1, uv.V1)
gl.DrawArrays(gl.QUADS, 0, 4)
}
internalMaterial.End(nil)
}
示例8: draw
func (c *QuadraticCurve) draw(canv *Canvas) {
p := canv.toGLPoints(c.Points())
vertices := []float32{
p[0].X, p[0].Y, 0.0, 0.0,
p[1].X, p[1].Y, 0.5, 0.0,
p[2].X, p[2].Y, 1.0, 1.0,
}
gl.BufferData(gl.ARRAY_BUFFER, len(vertices)*4, vertices, gl.STATIC_DRAW)
gl.DrawArrays(gl.TRIANGLES, 0, 3)
}
示例9: Draw
func (sp *Sprite) Draw() {
if sp.Texture != nil && sp.Render {
/*
Temporal camera distance check
*/
currentUV := sp.UVs[int(sp.animation)]
if !InsideScreen(currentUV.Ratio, sp.Transform().WorldPosition(), sp.Transform().WorldScale()) {
return
}
renders++
TextureMaterial.Begin(sp.GameObject())
mp := TextureMaterial.ProjMatrix
mv := TextureMaterial.ViewMatrix
mm := TextureMaterial.ModelMatrix
tx := TextureMaterial.Texture
ac := TextureMaterial.AddColor
ti := TextureMaterial.Tiling
of := TextureMaterial.Offset
defaultBuffer.Bind(gl.ARRAY_BUFFER)
TextureMaterial.Verts.EnableArray()
TextureMaterial.Verts.AttribPointer(3, gl.FLOAT, false, 0, uintptr(0))
TextureMaterial.UV.EnableArray()
TextureMaterial.UV.AttribPointer(2, gl.FLOAT, false, 0, uintptr(12*4))
v := sp.align.Vector()
v.X *= currentUV.Ratio
camera := GetScene().SceneBase().Camera
view := camera.InvertedMatrix()
model := Identity()
model.Scale(currentUV.Ratio, 1, 1)
model.Translate(v.X, v.Y, 0)
model.Mul(sp.GameObject().Transform().Matrix())
mv.UniformMatrix4f(false, (*[16]float32)(&view))
mp.UniformMatrix4f(false, (*[16]float32)(camera.Projection))
mm.UniformMatrix4f(false, (*[16]float32)(&model))
sp.Bind()
tx.Uniform1i(0)
ac.Uniform4f(sp.Color.R, sp.Color.G, sp.Color.B, sp.Color.A)
ti.Uniform2f((currentUV.U2-currentUV.U1)*sp.Tiling.X, (currentUV.V2-currentUV.V1)*sp.Tiling.Y)
of.Uniform2f(currentUV.U1, currentUV.V1)
gl.DrawArrays(gl.QUADS, 0, 4)
TextureMaterial.End(sp.GameObject())
}
}
示例10: Render
func (r *Renderer) Render() {
gl.Clear(gl.COLOR_BUFFER_BIT)
r.prog.Use()
r.vao.Bind()
r.vbo.Bind(gl.ARRAY_BUFFER)
gl.DrawArrays(gl.POINTS, 0, len(r.vertices))
// FIXME: unbind vao/vbo/prog?
}
示例11: DrawScreen
func (sp *Sprite) DrawScreen() {
if sp.Texture != nil && sp.Render {
camera := GetScene().SceneBase().Camera
pos := sp.Transform().WorldPosition()
scale := sp.Transform().WorldScale()
TextureMaterial.Begin(sp.GameObject())
mp := TextureMaterial.ProjMatrix
mv := TextureMaterial.ViewMatrix
mm := TextureMaterial.ModelMatrix
tx := TextureMaterial.Texture
ac := TextureMaterial.AddColor
ti := TextureMaterial.Tiling
of := TextureMaterial.Offset
defaultBuffer.Bind(gl.ARRAY_BUFFER)
TextureMaterial.Verts.EnableArray()
TextureMaterial.Verts.AttribPointer(3, gl.FLOAT, false, 0, uintptr(0))
TextureMaterial.UV.EnableArray()
TextureMaterial.UV.AttribPointer(2, gl.FLOAT, false, 0, uintptr(12*4))
currentUV := sp.UVs[int(sp.animation)]
view := Identity()
model := Identity()
model.Scale(scale.X*currentUV.Ratio, scale.Y, 1)
model.Translate((float32(Width)/2)+pos.X+0.75, (float32(Height)/2)+pos.Y+0.75, 1)
mv.UniformMatrix4fv(false, view)
mp.UniformMatrix4f(false, (*[16]float32)(camera.Projection))
mm.UniformMatrix4fv(false, model)
ti.Uniform2f((currentUV.U2-currentUV.U1)*sp.Tiling.X, (currentUV.V2-currentUV.V1)*sp.Tiling.Y)
of.Uniform2f(currentUV.U1, currentUV.V1)
sp.Bind()
gl.ActiveTexture(gl.TEXTURE0)
tx.Uniform1i(0)
//ac.Uniform4f(1, 1, 1, 0)
ac.Uniform4f(sp.Color.R, sp.Color.G, sp.Color.B, sp.Color.A)
gl.DrawArrays(gl.QUADS, 0, 4)
TextureMaterial.End(sp.GameObject())
}
}
示例12: DrawSprite
func DrawSprite(tex *Texture, uv UV, position Vector, scale Vector, rotation float32, aling Align, color Color) {
if !InsideScreen(uv.Ratio, position, scale) {
return
}
internalMaterial.Begin(nil)
mp := internalMaterial.ProjMatrix
mv := internalMaterial.ViewMatrix
mm := internalMaterial.ModelMatrix
tx := internalMaterial.Texture
ac := internalMaterial.AddColor
ti := internalMaterial.Tiling
of := internalMaterial.Offset
defaultBuffer.Bind(gl.ARRAY_BUFFER)
internalMaterial.Verts.EnableArray()
internalMaterial.Verts.AttribPointer(3, gl.FLOAT, false, 0, uintptr(0))
internalMaterial.UV.EnableArray()
internalMaterial.UV.AttribPointer(2, gl.FLOAT, false, 0, uintptr(12*4))
v := aling.Vector()
v.X *= uv.Ratio
camera := GetScene().SceneBase().Camera
view := camera.InvertedMatrix()
model := Identity()
model.Translate(v.X, v.Y, 0)
model.Scale(scale.X*uv.Ratio, scale.Y, scale.Z)
model.RotateZ(rotation, -1)
model.Translate(position.X+0.75, position.Y+0.75, position.Z)
mv.UniformMatrix4fv(false, view)
mp.UniformMatrix4f(false, (*[16]float32)(camera.Projection))
mm.UniformMatrix4fv(false, model)
ac.Uniform4i(int(color.R), int(color.G), int(color.B), int(color.A))
ti.Uniform2f(uv.U2-uv.U1, uv.V2-uv.V1)
of.Uniform2f(uv.U1, uv.V1)
tx.Uniform1i(0)
tex.Bind()
gl.DrawArrays(gl.QUADS, 0, 4)
internalMaterial.End(nil)
}
示例13: renderOne
func (self *OpenGLRenderer) renderOne(operation render.RenderOperation, renderState RenderState) {
mesh := operation.Mesh
material := operation.Material
transform := operation.Transform
// No attributes? no loaded or empty? Better way to handle this than spamming
// the console?
if mesh.VertexArrayObj == nil {
log.Println("WARNING: Trying to render an invalid mesh", mesh)
return
}
vertexArrayObj := mesh.VertexArrayObj.(gl.VertexArray)
vertexArrayObj.Bind()
material.Shader.Program.Use()
material.Shader.Program.SetUniformMatrix(
"modelViewProjection",
renderState.ViewProjection.Times(transform),
)
if material.Texture != nil {
glTexture := material.Texture.Id.(gl.Texture)
gl.ActiveTexture(gl.TEXTURE0)
if !material.IsCubeMap {
glTexture.Bind(gl.TEXTURE_2D)
defer glTexture.Unbind(gl.TEXTURE_2D)
material.Shader.Program.SetUniformUnit("textureSampler", 0)
} else {
gl.Disable(gl.DEPTH_TEST)
defer gl.Enable(gl.DEPTH_TEST)
glTexture.Bind(gl.TEXTURE_CUBE_MAP)
defer glTexture.Unbind(gl.TEXTURE_CUBE_MAP)
material.Shader.Program.SetUniformUnit("cubeMap", 0)
}
}
if len(mesh.IndexList) == 0 {
gl.DrawArrays(gl.TRIANGLES, 0, len(mesh.VertexList)*3)
} else {
gl.DrawElements(gl.TRIANGLES, len(mesh.IndexList), gl.UNSIGNED_INT, nil)
}
}
示例14: renderArrays
// Arrays mode uses vertex arrays which involves gl*Pointer calls and
// directly passing in the vertex data on every render pass. This is slower
// than using VBO's, because the data has to be uploaded to the GPU on every
// render pass, but it is useful for older systems where glBufferData is
// not available.
func (mb *MeshBuffer) renderArrays(mode gl.GLenum, m Mesh, pa, ca, na, ta, ia *Attr) {
ps, pc := m[mbPositionKey][0], m[mbPositionKey][1]
is, ic := m[mbIndexKey][0], m[mbIndexKey][1]
cc := m[mbColorKey][1]
nc := m[mbNormalKey][1]
tc := m[mbTexCoordKey][1]
gl.PushClientAttrib(gl.CLIENT_VERTEX_ARRAY_BIT)
defer gl.PopClientAttrib()
if pc > 0 {
gl.EnableClientState(gl.VERTEX_ARRAY)
defer gl.DisableClientState(gl.VERTEX_ARRAY)
gl.VertexPointer(pa.size, pa.typ, 0, pa.ptr(0))
}
if cc > 0 {
gl.EnableClientState(gl.COLOR_ARRAY)
defer gl.DisableClientState(gl.COLOR_ARRAY)
gl.ColorPointer(ca.size, ca.typ, 0, ca.ptr(0))
}
if nc > 0 {
gl.EnableClientState(gl.NORMAL_ARRAY)
defer gl.DisableClientState(gl.NORMAL_ARRAY)
gl.NormalPointer(na.typ, 0, na.ptr(0))
}
if tc > 0 {
gl.EnableClientState(gl.TEXTURE_COORD_ARRAY)
defer gl.DisableClientState(gl.TEXTURE_COORD_ARRAY)
gl.TexCoordPointer(ta.size, ta.typ, 0, ta.ptr(0))
}
if ic > 0 {
gl.EnableClientState(gl.INDEX_ARRAY)
defer gl.DisableClientState(gl.INDEX_ARRAY)
gl.IndexPointer(ia.typ, 0, ia.ptr(0))
gl.DrawElements(mode, ic, ia.typ, ia.ptr(is*ia.size))
} else {
gl.DrawArrays(mode, ps, pc)
}
}
示例15: Tick
func Tick() {
timer = float32(glfw.Time())
gl.Clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT)
program.Use()
camera.Tick()
modelViewMatrixUniform.UniformMatrix4fv(camera.modelViewMatrix[:])
projectionMatrixUniform.UniformMatrix4fv(camera.projectionMatrix[:])
timerUniform.Uniform1f(timer)
positionAttrib.EnableArray()
texcoordAttrib.EnableArray()
gl.ActiveTexture(gl.TEXTURE0)
textures[0].Bind(gl.TEXTURE_2D)
textureUniforms[0].Uniform1i(0)
gl.ActiveTexture(gl.TEXTURE1)
textures[1].Bind(gl.TEXTURE_2D)
textureUniforms[1].Uniform1i(1)
sizeOfVertex := int(unsafe.Sizeof(Vertex{}))
posoffset := uintptr(0)
texoffset := unsafe.Offsetof(Vertex{}.texcoord)
for _, renderObject := range renderObjects {
renderObject.vertexBuffer.Bind(gl.ARRAY_BUFFER)
positionAttrib.AttribPointer(3, gl.FLOAT, false, sizeOfVertex, posoffset)
texcoordAttrib.AttribPointer(2, gl.FLOAT, false, sizeOfVertex, texoffset)
gl.DrawArrays(gl.TRIANGLES, 0, renderObject.numVerticies)
}
positionAttrib.DisableArray()
texcoordAttrib.DisableArray()
gl.ProgramUnuse()
glfw.SwapBuffers()
}