Skip to content

Commit 8364a63

Browse files
committed
bufferOf
1 parent 4fb88c9 commit 8364a63

File tree

2 files changed

+46
-57
lines changed

2 files changed

+46
-57
lines changed

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ ext{
1616
kotlin = 'org.jetbrains.kotlin:kotlin'
1717
kotlin_version = '1.3.11'
1818
kotlintest_version = '3.1.11'
19-
gln_version = '63d26807879c3519744f5aae7a059e3ca40a894a'
19+
gln_version = '42256d1618525ea96a91848ec21bcbe15cdeba29'
2020
vkk_version = 'a0d037b48e'
2121
lwjgl_version = "3.2.1"
2222
lwjgl_natives = current() == WINDOWS ? "windows" : current() == LINUX ? "linux" : "macos"

src/main/kotlin/uno/buffer/of.kt

Lines changed: 45 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@ package uno.buffer
22

33
import glm_.BYTES
44
import glm_.b
5-
import glm_.i
65
import glm_.vec2.Vec2
76
import glm_.vec2.Vec2i
87
import glm_.vec3.Vec3
98
import glm_.vec3.Vec3i
109
import glm_.vec4.Vec4
1110
import glm_.vec4.Vec4b
1211
import glm_.vec4.Vec4i
12+
import glm_.vec4.Vec4ub
1313
import gln.glf.Vertex
1414
import gln.glf.glf
1515
import kool.Buffer
@@ -60,66 +60,55 @@ fun bufferOf(vertices: Collection<*>): ByteBuffer {
6060
return res
6161
}
6262

63-
fun bufferOf(vararg vertices: Any): ByteBuffer {
64-
val res: ByteBuffer
65-
when (vertices.elementAt(0)) {
66-
is Float -> {
67-
res = Buffer(Float.BYTES * vertices.size)
68-
for (i in 0 until vertices.size)
69-
res.putFloat(i * Float.BYTES, (vertices[i] as Float))
70-
}
71-
is Int -> {
72-
res = Buffer(Int.BYTES * vertices.size)
73-
for (i in 0 until vertices.size)
74-
res.putInt(i * Int.BYTES, (vertices[i] as Int))
75-
}
76-
is Vec2 -> {
77-
res = Buffer(Vec2.size * vertices.size)
78-
for (i in 0 until vertices.size)
79-
(vertices[i] as Vec2).to(res, i * Vec2.size)
80-
}
81-
is Vec3 -> {
82-
res = Buffer(Vec3.size * vertices.size)
83-
for (i in 0 until vertices.size)
84-
(vertices[i] as Vec3).to(res, i * Vec3.size)
85-
}
86-
is Vec4 -> {
87-
res = Buffer(Vec4.size * vertices.size)
88-
for (i in 0 until vertices.size)
89-
(vertices[i] as Vec4).to(res, i * Vec4.size)
90-
}
91-
is Vec4b -> {
92-
res = Buffer(Vec4b.size * vertices.size)
93-
for (i in 0 until vertices.size)
94-
(vertices[i] as Vec4b).to(res, i * Vec4b.size)
63+
fun bufferOf(vararg elements: Any): ByteBuffer {
64+
val size = elements.sumBy {
65+
when (it) {
66+
is Float, Int, Vec4b -> Float.BYTES
67+
is Vec2 -> Vec2.size
68+
is Vec3 -> Vec3.size
69+
is Vec4 -> Vec4.size
70+
is Vertex.pos2_tc2 -> Vec2.size * 2
71+
is Vertex.pos3_col4ub -> Vec3.size + Vec4ub.size
72+
is Vertex.pos3_nor3_col4 -> Vec3.size * 2 + Vec4.size
73+
else -> throw Exception("Invalid")
9574
}
96-
is Vertex.pos2_tc2 -> {
97-
res = Buffer(glf.pos2_tc2.stride * vertices.size)
98-
for (i in 0 until vertices.size) {
99-
val v = vertices.elementAt(i) as Vertex.pos2_tc2
100-
v.p.to(res, i * glf.pos2_tc2.stride)
101-
v.t.to(res, i * glf.pos2_tc2.stride + Vec2.size)
75+
}
76+
val res = Buffer(size)
77+
var offset = 0
78+
for (e in elements)
79+
when (e) {
80+
is Float -> {
81+
res.putFloat(offset, e)
82+
offset += Float.BYTES
10283
}
103-
}
104-
is Vertex.pos3_col4ub -> {
105-
res = Buffer(glf.pos3_col4ub.stride * vertices.size)
106-
for (i in 0 until vertices.size) {
107-
val v = vertices.elementAt(i) as Vertex.pos3_col4ub
108-
v.p.to(res, i * glf.pos3_col4ub.stride)
109-
v.c.to(res, i * glf.pos3_col4ub.stride + Vec3.size)
84+
is Int -> {
85+
res.putInt(offset, e)
86+
offset += Int.BYTES
11087
}
111-
}
112-
is Vertex.pos3_nor3_col4 -> {
113-
res = Buffer(glf.pos3_nor3_col4.stride * vertices.size)
114-
for (i in 0 until vertices.size) {
115-
val v = vertices.elementAt(i) as Vertex.pos3_nor3_col4
116-
v.p.to(res, i * glf.pos3_nor3_col4.stride)
117-
v.n.to(res, i * glf.pos3_nor3_col4.stride + Vec3.size)
118-
v.c.to(res, i * glf.pos3_nor3_col4.stride + Vec3.size * 2)
88+
is Vec4b -> {
89+
e.to(res, offset)
90+
offset += Vec4b.size
11991
}
92+
is Vec2 -> {
93+
e.to(res, offset)
94+
offset += Vec2.size
95+
}
96+
is Vec3 -> {
97+
e.to(res, offset)
98+
offset += Vec3.size
99+
}
100+
is Vec4 -> {
101+
e.to(res, offset)
102+
offset += Vec4.size
103+
}
104+
// is Vertex.pos2_tc2 -> {
105+
// e.to(res, offset)
106+
// offset += Vec4b.size
107+
// }
108+
// is Vertex.pos3_col4ub -> Vec3.size + Vec4ub.size
109+
// is Vertex.pos3_nor3_col4 -> Vec3.size * 2 + Vec4.size
110+
else -> throw Exception("Invalid")
120111
}
121-
else -> throw Error()
122-
}
123112
return res
124113
}
125114

0 commit comments

Comments
 (0)