remove gl00
This commit is contained in:
130
main.go
130
main.go
@@ -1,130 +0,0 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"runtime"
|
||||
"time"
|
||||
|
||||
"github.com/go-gl/gl/v4.1-core/gl"
|
||||
"github.com/go-gl/glfw/v3.3/glfw"
|
||||
"github.com/go-gl/mathgl/mgl32"
|
||||
)
|
||||
|
||||
const (
|
||||
windowWidth = 800
|
||||
windowHeight = 600
|
||||
)
|
||||
|
||||
func init() {
|
||||
runtime.LockOSThread()
|
||||
}
|
||||
|
||||
func main() {
|
||||
|
||||
if err := glfw.Init(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
defer glfw.Terminate()
|
||||
|
||||
glfw.WindowHint(glfw.Resizable, 0)
|
||||
glfw.WindowHint(glfw.ContextVersionMajor, 4)
|
||||
glfw.WindowHint(glfw.ContextVersionMinor, 1)
|
||||
glfw.WindowHint(glfw.OpenGLProfile, glfw.OpenGLCoreProfile)
|
||||
glfw.WindowHint(glfw.OpenGLForwardCompatible, 1)
|
||||
win, err := glfw.CreateWindow(windowWidth, windowHeight, "Cube", nil, nil)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
win.MakeContextCurrent()
|
||||
glfw.SwapInterval(1)
|
||||
|
||||
err = gl.Init()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
fmt.Println("OpenGL Version: ", gl.GoStr(gl.GetString(gl.VERSION)))
|
||||
|
||||
program, err := newProgram(shaderVert, shaderFrag)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
gl.UseProgram(program)
|
||||
|
||||
model := mgl32.Ident4()
|
||||
modelUniform := gl.GetUniformLocation(program, gl.Str("model\x00"))
|
||||
gl.UniformMatrix4fv(modelUniform, 1, false, &model[0])
|
||||
|
||||
view := mgl32.LookAtV(mgl32.Vec3{3, 3, 3}, mgl32.Vec3{0, 0, 0}, mgl32.Vec3{0, 1, 0})
|
||||
viewUniform := gl.GetUniformLocation(program, gl.Str("view\x00"))
|
||||
gl.UniformMatrix4fv(viewUniform, 1, false, &view[0])
|
||||
|
||||
projection := mgl32.Perspective(mgl32.DegToRad(45), float32(windowWidth)/float32(windowHeight), 0.1, 10)
|
||||
projectionUniform := gl.GetUniformLocation(program, gl.Str("projection\x00"))
|
||||
gl.UniformMatrix4fv(projectionUniform, 1, false, &projection[0])
|
||||
|
||||
// Texture
|
||||
textureUniform := gl.GetUniformLocation(program, gl.Str("tex\x00"))
|
||||
gl.Uniform1i(textureUniform, 0)
|
||||
|
||||
texture, err := newTexture(bytes.NewReader(textureData))
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
gl.BindFragDataLocation(program, 0, gl.Str("outputColor\x00"))
|
||||
|
||||
// Vertex Array
|
||||
var vao uint32
|
||||
gl.GenVertexArrays(1, &vao)
|
||||
gl.BindVertexArray(vao)
|
||||
|
||||
// Vertex Buffer
|
||||
var vbo uint32
|
||||
gl.GenBuffers(1, &vbo)
|
||||
gl.BindBuffer(gl.ARRAY_BUFFER, vbo)
|
||||
gl.BufferData(gl.ARRAY_BUFFER, len(cubeVertices)*4, gl.Ptr(cubeVertices), gl.STATIC_DRAW)
|
||||
|
||||
vertAttrib := uint32(gl.GetAttribLocation(program, gl.Str("vert\x00")))
|
||||
gl.EnableVertexAttribArray(vertAttrib)
|
||||
gl.VertexAttribPointer(vertAttrib, 3, gl.FLOAT, false, 5*4, gl.PtrOffset(0))
|
||||
|
||||
texCoordAttrib := uint32(gl.GetAttribLocation(program, gl.Str("vertTexCoord\x00")))
|
||||
gl.EnableVertexAttribArray(texCoordAttrib)
|
||||
gl.VertexAttribPointer(texCoordAttrib, 2, gl.FLOAT, false, 5*4, gl.PtrOffset(3*4))
|
||||
|
||||
gl.Enable(gl.CULL_FACE)
|
||||
gl.Enable(gl.DEPTH_TEST)
|
||||
gl.DepthFunc(gl.LESS)
|
||||
gl.ClearColor(1, 1, 1, 1)
|
||||
|
||||
angle := 0.0
|
||||
prevTime := time.Now()
|
||||
|
||||
for !win.ShouldClose() {
|
||||
|
||||
gl.Clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT)
|
||||
|
||||
// Angle update
|
||||
angle += time.Since(prevTime).Seconds()
|
||||
prevTime = time.Now()
|
||||
|
||||
model = mgl32.HomogRotate3D(float32(angle), mgl32.Vec3{0, 1, 0})
|
||||
|
||||
// Render
|
||||
// Shader variable
|
||||
gl.UseProgram(program)
|
||||
gl.UniformMatrix4fv(modelUniform, 1, false, &model[0])
|
||||
|
||||
gl.BindVertexArray(vao)
|
||||
|
||||
gl.ActiveTexture(gl.TEXTURE0)
|
||||
gl.BindTexture(gl.TEXTURE_2D, texture)
|
||||
|
||||
gl.DrawArrays(gl.TRIANGLES, 0, 6*2*3)
|
||||
|
||||
win.SwapBuffers()
|
||||
glfw.PollEvents()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user