@@ -2,14 +2,14 @@ package uno.buffer
22
33import glm_.BYTES
44import glm_.b
5- import glm_.i
65import glm_.vec2.Vec2
76import glm_.vec2.Vec2i
87import glm_.vec3.Vec3
98import glm_.vec3.Vec3i
109import glm_.vec4.Vec4
1110import glm_.vec4.Vec4b
1211import glm_.vec4.Vec4i
12+ import glm_.vec4.Vec4ub
1313import gln.glf.Vertex
1414import gln.glf.glf
1515import 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