go-gl / gl

Go bindings for OpenGL (generated via glow)
MIT License
1.08k stars 74 forks source link

Window Access Violation #137

Closed NewSalman closed 3 years ago

NewSalman commented 3 years ago
package main

import (
    "fmt"
    "io/ioutil"
    "runtime"

    "github.com/go-gl/gl/v4.1-core/gl"
    "github.com/go-gl/glfw/v3.3/glfw"
)

func init() {
    // This is needed to arrange that main() runs on main thread.
    // See documentation for functions that are only allowed to be called from the main thread.
    runtime.LockOSThread()
}

func main() {
    err := glfw.Init()
    if err != nil {
        panic(err)
    }
    defer glfw.Terminate()

    glfw.WindowHint(glfw.Resizable, glfw.True)
    glfw.WindowHint(glfw.ContextVersionMajor, 4)
    glfw.WindowHint(glfw.ContextVersionMinor, 3)
    glfw.WindowHint(glfw.OpenGLProfile, glfw.OpenGLCoreProfile)

    var Vertecies = []float32{
        -.5, -.5, 0.0,
        -.5, .5, 0.0,
        0.0, 0.0, 0.0,
    }

    window, err := glfw.CreateWindow(800, 600, "Minecraft Golang Edition", nil, nil)
    if err != nil {
        glfw.Terminate()
        panic(err)
    }
    //Init Contex
    window.MakeContextCurrent()

    version := gl.GoStr(gl.GetString(gl.VERSION))
    fmt.Println("OpenGL version", version)

    gl.Viewport(0, 0, 800, 600)

    //VERTEX SHADER COMPILE
    var VertexShader uint32 = gl.CreateShader(gl.VERTEX_SHADER)

    resultvert, err := ioutil.ReadFile("shader.vert")
    ErrorHandler(err)

    vsource, free := gl.Strs(string(resultvert))
    gl.ShaderSource(VertexShader, 1, vsource, nil)
    gl.CompileShader(VertexShader)
    free()

    //FRAGMENT SHADER COMPILE
    var FragmentShader uint32 = gl.CreateShader(gl.FRAGMENT_SHADER)

    resultFrag, err := ioutil.ReadFile("shader.frag")
    ErrorHandler(err)

    fsource, free := gl.Strs(string(resultFrag))
    gl.ShaderSource(FragmentShader, 1, fsource, nil)
    gl.CompileShader(FragmentShader)
    free()

    //MAKE PROGRAM
    Program := gl.CreateProgram()

    gl.AttachShader(Program, VertexShader)
    gl.AttachShader(Program, FragmentShader)
    gl.LinkProgram(Program)

    gl.DeleteShader(VertexShader)
    gl.DeleteShader(FragmentShader)

    //VAO, VBO, EBO

    var VBO, VAO uint32
    //generate VAO first
    gl.GenVertexArrays(1, &VAO)

    gl.GenBuffers(1, &VBO)
    gl.BindBuffer(gl.ARRAY_BUFFER, VBO)

    gl.BufferData(gl.ARRAY_BUFFER, len(Vertecies), gl.Ptr(Vertecies), gl.STATIC_DRAW)

    gl.VertexAttribPointer(0, 3, gl.FLOAT, false, 3*4, gl.Ptr(0))
    gl.EnableVertexAttribArray(0)

    gl.BindBuffer(gl.ARRAY_BUFFER, 0)
    gl.BindVertexArray(0)

    //Clear Color can maka a access viaolation error
    //gl.ClearColor(1.0, 1.0, 1.0, 1.0)

    for !window.ShouldClose() {
        // Do OpenGL stuff.
        //gl.Clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT)

        HandleInput(window)

        gl.UseProgram(Program)
        gl.BindVertexArray(VAO)
        gl.DrawArrays(gl.TRIANGLES, 0, 3)

        window.SwapBuffers()
        glfw.PollEvents()
    }

    gl.DeleteVertexArrays(1, &VAO)
    gl.DeleteBuffers(1, &VBO)
    gl.DeleteProgram(Program)
}

func HandleInput(window *glfw.Window) {
    if window.GetKey(glfw.KeyEscape) == glfw.Press {
        glfw.Terminate()
    }
}

func ErrorHandler(errorMsg error) {
    glfw.Terminate()
    panic(errorMsg.Error())
}

im still a beginner in openGL, when i run it always resulting error message exit status 3221225477, no log about the error and i find this https://stackoverflow.com/questions/59838685/exit-status-3221225477-in-terminal-in-golang but no answer.

i know this function resulting the error, I have also tried removing this but still the same problem occure

gl.ClearColor(1.0, 1.0, 1.0, 1.0)
gl.Clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT)
NewSalman commented 3 years ago

it just my beginner fault, i forgot to write gl.Init() after making window.MakeContextCurrent