commit a8b156fbd2bca8873e8b09d678ba134a0cffc4bb
parent c1541bec81d065f1e5bb576a675cda2fdd121a4f
Author: Matsuda Kenji <info@mtkn.jp>
Date: Tue, 12 Nov 2024 07:30:52 +0900
remove gl dependency from cmd/sample
Diffstat:
2 files changed, 27 insertions(+), 23 deletions(-)
diff --git a/cmd/sample/main.go b/cmd/sample/main.go
@@ -8,8 +8,6 @@ import (
"runtime"
"time"
- "github.com/go-gl/gl/v3.3-core/gl"
-
"git.mtkn.jp/tofu"
)
@@ -174,13 +172,13 @@ func (app *App) Update() error {
app.program.SetMat4("model", model)
app.program.SetVec3("objCol", app.objCol)
- gl.DrawElements(gl.TRIANGLES, 36, gl.UNSIGNED_INT, nil)
+ object.Draw()
app.lightProgram.Use()
app.lightProgram.SetMat4("view", view)
app.lightProgram.SetMat4("projection", projection)
app.lightProgram.SetMat4("model", lightModel)
app.lightProgram.SetVec3("lightCol", app.lightCol)
- gl.DrawElements(gl.TRIANGLES, 36, gl.UNSIGNED_INT, nil)
+ object.Draw()
return nil
}
diff --git a/object.go b/object.go
@@ -23,29 +23,29 @@ type Face struct {
const objectStride = 11
func (obj Object) data() []float32 {
- data := make([]float32, objectStride * 3 * len(obj.Faces))
+ data := make([]float32, objectStride*3*len(obj.Faces))
for i, f := range obj.Faces {
for j := 0; j < 3; j++ {
- data[objectStride * (3*i+j)] = obj.Vertices[f.V[j]][0]
- data[objectStride * (3*i+j) + 1] = obj.Vertices[f.V[j]][1]
- data[objectStride * (3*i+j) + 2] = obj.Vertices[f.V[j]][2]
- r, g, b, _ := obj.Colors[f.V[j]].RGBA()
- data[objectStride * (3*i+j) + 3] = float32(r)/0xffff
- data[objectStride * (3*i+j) + 4] = float32(g)/0xffff
- data[objectStride * (3*i+j) + 5] = float32(b)/0xffff
- data[objectStride * (3*i+j) + 6] = obj.TexCoords[f.V[j]][0]
- data[objectStride * (3*i+j) + 7] = obj.TexCoords[f.V[j]][1]
- data[objectStride * (3*i+j) + 8] = obj.Normals[f.N[j]][0]
- data[objectStride * (3*i+j) + 9] = obj.Normals[f.N[j]][1]
- data[objectStride * (3*i+j) + 10] = obj.Normals[f.N[j]][2]
+ data[objectStride*(3*i+j)] = obj.Vertices[f.V[j]][0]
+ data[objectStride*(3*i+j)+1] = obj.Vertices[f.V[j]][1]
+ data[objectStride*(3*i+j)+2] = obj.Vertices[f.V[j]][2]
+ r, g, b, _ := obj.Colors[f.V[j]].RGBA()
+ data[objectStride*(3*i+j)+3] = float32(r) / 0xffff
+ data[objectStride*(3*i+j)+4] = float32(g) / 0xffff
+ data[objectStride*(3*i+j)+5] = float32(b) / 0xffff
+ data[objectStride*(3*i+j)+6] = obj.TexCoords[f.V[j]][0]
+ data[objectStride*(3*i+j)+7] = obj.TexCoords[f.V[j]][1]
+ data[objectStride*(3*i+j)+8] = obj.Normals[f.N[j]][0]
+ data[objectStride*(3*i+j)+9] = obj.Normals[f.N[j]][1]
+ data[objectStride*(3*i+j)+10] = obj.Normals[f.N[j]][2]
}
}
return data
}
func (obj Object) faceData() []uint32 {
- fdata := make([]uint32, 3 * len(obj.Faces))
- for i := 0; i < 3 * len(obj.Faces); i++ {
+ fdata := make([]uint32, 3*len(obj.Faces))
+ for i := 0; i < 3*len(obj.Faces); i++ {
fdata[i] = uint32(i)
}
return fdata
@@ -56,8 +56,14 @@ func (obj *Object) Load() {
obj.vao = newVAO(obj)
}
+func (obj *Object) Draw() {
+ gl.DrawElements(gl.TRIANGLES,
+ int32(objectStride*3*len(obj.Faces)),
+ gl.UNSIGNED_INT, nil)
+}
+
type VAO struct {
- id uint32
+ id uint32
vbo *Buffer
ebo *Buffer
}
@@ -91,19 +97,19 @@ func (vao *VAO) bind() {
func (vao *VAO) setAttribute(uniformNum uint32, size int, stride int, offset int) {
gl.VertexAttribPointerWithOffset(uniformNum, int32(size), gl.FLOAT,
- false, int32(stride) * 4, uintptr(offset) * 4)
+ false, int32(stride)*4, uintptr(offset)*4)
gl.EnableVertexAttribArray(uniformNum)
}
func (vao *VAO) setData(data []float32) {
gl.BindBuffer(gl.ARRAY_BUFFER, vao.vbo.id)
- gl.BufferData(gl.ARRAY_BUFFER, len(data) * 4,
+ gl.BufferData(gl.ARRAY_BUFFER, len(data)*4,
gl.Ptr(data), gl.STATIC_DRAW)
}
func (vao *VAO) setFaces(data []uint32) {
gl.BindBuffer(gl.ELEMENT_ARRAY_BUFFER, vao.ebo.id)
- gl.BufferData(gl.ELEMENT_ARRAY_BUFFER, len(data) * 4,
+ gl.BufferData(gl.ELEMENT_ARRAY_BUFFER, len(data)*4,
gl.Ptr(data), gl.STATIC_DRAW)
}