Skip to content

Instantly share code, notes, and snippets.

@mendes5
Created June 10, 2017 14:35
Show Gist options
  • Select an option

  • Save mendes5/d7291642731779d37f62078749fcb387 to your computer and use it in GitHub Desktop.

Select an option

Save mendes5/d7291642731779d37f62078749fcb387 to your computer and use it in GitHub Desktop.
package glutils
import (
"fmt"
"unsafe"
"shader"
"github.com/go-gl/gl/v3.3-core/gl"
"github.com/go-gl/glfw/v3.2/glfw"
)
const (
sizeOfFloat = 4
sizeOfUInt32 = 4
)
func InitOpenGL() error {
if err := gl.Init(); err != nil {
panic(err)
}
version := gl.GoStr(gl.GetString(gl.VERSION))
fmt.Println("OpenGL Version", version)
gl.ClearColor(0, 0, 0, 1)
gl.PolygonMode(gl.FRONT_AND_BACK, gl.FILL)
return nil
}
func ProcessInput(window *glfw.Window){
if(window.GetKey(glfw.KeyEscape) == glfw.Press){
window.SetShouldClose(true)
}
}
func MakeVertexArrayObject(vertices []float32, indices []uint32) uint32 {
var vao uint32
var vbo uint32
var ebo uint32
gl.GenVertexArrays(1, &vao)
gl.BindVertexArray(vao)
gl.GenBuffers(1, &vbo)
gl.BindBuffer(gl.ARRAY_BUFFER, vbo)
gl.BufferData(gl.ARRAY_BUFFER, sizeOfFloat * len(vertices), gl.Ptr(vertices), gl.STATIC_DRAW)
gl.GenBuffers(1, &ebo)
gl.BindBuffer(gl.ELEMENT_ARRAY_BUFFER, ebo)
gl.BufferData(gl.ELEMENT_ARRAY_BUFFER, sizeOfUInt32 * len(indices), gl.Ptr(indices), gl.STATIC_DRAW)
gl.VertexAttribPointer(0, 3, gl.FLOAT, false, 6*sizeOfFloat, gl.PtrOffset(0))
gl.EnableVertexAttribArray(0)
gl.VertexAttribPointer(1, 3, gl.FLOAT, false, 6 * sizeOfFloat, gl.PtrOffset(3 * sizeOfFloat))
gl.EnableVertexAttribArray(1)
gl.BindVertexArray(0)
gl.BindBuffer(gl.ARRAY_BUFFER, 0)
gl.BindBuffer(gl.ELEMENT_ARRAY_BUFFER, 0)
return vao
}
func GetGlfwWindow(name string, width int, height int) (*glfw.Window, error) {
err := glfw.Init()
if err != nil {
return nil, err
}
glfw.WindowHint(glfw.Samples, 0)
glfw.WindowHint(glfw.Resizable, glfw.True)
glfw.WindowHint(glfw.ContextVersionMajor, 3)
glfw.WindowHint(glfw.ContextVersionMinor, 3)
glfw.WindowHint(glfw.OpenGLProfile, glfw.OpenGLCoreProfile)
glfw.WindowHint(glfw.OpenGLForwardCompatible, glfw.True)
window, err := glfw.CreateWindow(width, height, name, nil, nil)
if err != nil {
return nil, err
}
window.MakeContextCurrent()
window.SetInputMode(glfw.StickyKeysMode, gl.TRUE)
return window, nil
}
func DrawVAO(vao uint32, window *glfw.Window, program *shader.Shader, count int32){
gl.Clear(gl.COLOR_BUFFER_BIT)
program.Use()
gl.BindVertexArray(vao)
gl.DrawElements(gl.TRIANGLES, count, gl.UNSIGNED_INT,unsafe.Pointer(nil))
window.SwapBuffers()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment