Skip to content

Commit 6157949

Browse files
committed
Fix calculation of uniform*v count on JOGL, Android, and iOS.
1 parent bbcefcb commit 6157949

File tree

4 files changed

+105
-110
lines changed
  • kgl-android/src/main/kotlin/com/danielgergely/kgl
  • kgl-ios/src/nativeMain/kotlin/com.danielgergely.kgl
  • kgl-jogl/src/main/kotlin/com/danielgergely/kgl
  • kgl/src/commonMain/kotlin/com/danielgergely/kgl

4 files changed

+105
-110
lines changed

kgl-android/src/main/kotlin/com/danielgergely/kgl/KglAndroid.kt

Lines changed: 32 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -90,35 +90,46 @@ object KglAndroid : Kgl {
9090
override fun enable(cap: Int) = GL.glEnable(cap)
9191
override fun disable(cap: Int) = GL.glDisable(cap)
9292

93-
override fun uniform1f(location: UniformLocation, f: Float) = GL.glUniform1f(location, f)
94-
override fun uniform1fv(location: UniformLocation, value: FloatArray) = GL.glUniform1fv(location, 1, value, 0)
95-
override fun uniform1i(location: UniformLocation, i: Int) = GL.glUniform1i(location, i)
96-
override fun uniform1iv(location: UniformLocation, value: IntArray) = GL.glUniform1iv(location, 1, value, 0)
97-
98-
override fun uniform2f(location: UniformLocation, x: Float, y: Float) = GL.glUniform2f(location, x, y)
99-
override fun uniform2fv(location: UniformLocation, value: FloatArray) = GL.glUniform2fv(location, 1, value, 0)
100-
override fun uniform2i(location: UniformLocation, x: Int, y: Int) = GL.glUniform2i(location, x, y)
101-
override fun uniform2iv(location: UniformLocation, value: IntArray) = GL.glUniform2iv(location, 1, value, 0)
102-
103-
override fun uniform3f(location: UniformLocation, x: Float, y: Float, z: Float) = GL.glUniform3f(location, x, y, z)
104-
override fun uniform3fv(location: UniformLocation, value: FloatArray) = GL.glUniform3fv(location, 1, value, 0)
105-
override fun uniform3i(location: UniformLocation, x: Int, y: Int, z: Int) = GL.glUniform3i(location, x, y, z)
106-
override fun uniform3iv(location: UniformLocation, value: IntArray) = GL.glUniform3iv(location, 1, value, 0)
93+
override fun uniform1f(location: UniformLocation, f: Float) =
94+
GL.glUniform1f(location, f)
95+
override fun uniform1fv(location: UniformLocation, value: FloatArray) =
96+
GL.glUniform1fv(location, value.vSize(1), value, 0)
97+
override fun uniform1i(location: UniformLocation, i: Int) =
98+
GL.glUniform1i(location, i)
99+
override fun uniform1iv(location: UniformLocation, value: IntArray) =
100+
GL.glUniform1iv(location, value.vSize(1), value, 0)
101+
102+
override fun uniform2f(location: UniformLocation, x: Float, y: Float) =
103+
GL.glUniform2f(location, x, y)
104+
override fun uniform2fv(location: UniformLocation, value: FloatArray) =
105+
GL.glUniform2fv(location, value.vSize(2), value, 0)
106+
override fun uniform2i(location: UniformLocation, x: Int, y: Int) =
107+
GL.glUniform2i(location, x, y)
108+
override fun uniform2iv(location: UniformLocation, value: IntArray) =
109+
GL.glUniform2iv(location, value.vSize(2), value, 0)
110+
111+
override fun uniform3f(location: UniformLocation, x: Float, y: Float, z: Float) =
112+
GL.glUniform3f(location, x, y, z)
113+
override fun uniform3fv(location: UniformLocation, value: FloatArray) =
114+
GL.glUniform3fv(location, value.vSize(3), value, 0)
115+
override fun uniform3i(location: UniformLocation, x: Int, y: Int, z: Int) =
116+
GL.glUniform3i(location, x, y, z)
117+
override fun uniform3iv(location: UniformLocation, value: IntArray) =
118+
GL.glUniform3iv(location, value.vSize(3), value, 0)
107119

108120
override fun uniform4f(location: UniformLocation, x: Float, y: Float, z: Float, w: Float) =
109121
GL.glUniform4f(location, x, y, z, w)
110-
111-
override fun uniform4fv(location: UniformLocation, value: FloatArray) = GL.glUniform4fv(location, 1, value, 0)
122+
override fun uniform4fv(location: UniformLocation, value: FloatArray) =
123+
GL.glUniform4fv(location, value.vSize(4), value, 0)
112124
override fun uniform4i(location: UniformLocation, x: Int, y: Int, z: Int, w: Int) =
113125
GL.glUniform4i(location, x, y, z, w)
114-
115-
override fun uniform4iv(location: UniformLocation, value: IntArray) = GL.glUniform4iv(location, 1, value, 0)
126+
override fun uniform4iv(location: UniformLocation, value: IntArray) =
127+
GL.glUniform4iv(location, value.vSize(4), value, 0)
116128

117129
override fun uniformMatrix3fv(location: Int, transpose: Boolean, value: FloatArray) =
118-
GL.glUniformMatrix3fv(location, 1, transpose, value, 0)
119-
130+
GL.glUniformMatrix3fv(location, value.vSize(3*3), transpose, value, 0)
120131
override fun uniformMatrix4fv(location: Int, transpose: Boolean, value: FloatArray) =
121-
GL.glUniformMatrix4fv(location, 1, transpose, value, 0)
132+
GL.glUniformMatrix4fv(location, value.vSize(4*4), transpose, value, 0)
122133

123134
override fun blendFunc(sFactor: Int, dFactor: Int) = GL.glBlendFunc(sFactor, dFactor)
124135

kgl-ios/src/nativeMain/kotlin/com.danielgergely.kgl/KglIos.kt

Lines changed: 28 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -195,77 +195,47 @@ object KglIos : Kgl {
195195
)
196196
}
197197

198-
override fun uniform1f(location: UniformLocation, f: Float) {
198+
override fun uniform1f(location: UniformLocation, f: Float) =
199199
glUniform1f(location, f)
200-
}
201-
202-
override fun uniform1fv(location: UniformLocation, value: FloatArray) {
203-
glUniform1fv(location, 1, value.refTo(0))
204-
}
205-
206-
override fun uniform1i(location: UniformLocation, i: Int) {
200+
override fun uniform1fv(location: UniformLocation, value: FloatArray) =
201+
glUniform1fv(location, value.vSize(1), value.refTo(0))
202+
override fun uniform1i(location: UniformLocation, i: Int) =
207203
glUniform1i(location, i)
208-
}
209-
210-
override fun uniform1iv(location: UniformLocation, value: IntArray) {
211-
glUniform1iv(location, 1, value.refTo(0))
212-
}
204+
override fun uniform1iv(location: UniformLocation, value: IntArray) =
205+
glUniform1iv(location, value.vSize(1), value.refTo(0))
213206

214-
override fun uniform2f(location: UniformLocation, x: Float, y: Float) {
207+
override fun uniform2f(location: UniformLocation, x: Float, y: Float) =
215208
glUniform2f(location, x, y)
216-
}
217-
218-
override fun uniform2fv(location: UniformLocation, value: FloatArray) {
219-
glUniform2fv(location, 1, value.refTo(0))
220-
}
221-
222-
override fun uniform2i(location: UniformLocation, x: Int, y: Int) {
209+
override fun uniform2fv(location: UniformLocation, value: FloatArray) =
210+
glUniform2fv(location, value.vSize(2), value.refTo(0))
211+
override fun uniform2i(location: UniformLocation, x: Int, y: Int) =
223212
glUniform2i(location, x, y)
224-
}
213+
override fun uniform2iv(location: UniformLocation, value: IntArray) =
214+
glUniform2iv(location, value.vSize(2), value.refTo(0))
225215

226-
override fun uniform2iv(location: UniformLocation, value: IntArray) {
227-
glUniform2iv(location, 1, value.refTo(0))
228-
}
229-
230-
override fun uniform3f(location: UniformLocation, x: Float, y: Float, z: Float) {
216+
override fun uniform3f(location: UniformLocation, x: Float, y: Float, z: Float) =
231217
glUniform3f(location, x, y, z)
232-
}
233-
234-
override fun uniform3fv(location: UniformLocation, value: FloatArray) {
235-
glUniform3fv(location, 1, value.refTo(0))
236-
}
237-
238-
override fun uniform3i(location: UniformLocation, x: Int, y: Int, z: Int) {
218+
override fun uniform3fv(location: UniformLocation, value: FloatArray) =
219+
glUniform3fv(location, value.vSize(3), value.refTo(0))
220+
override fun uniform3i(location: UniformLocation, x: Int, y: Int, z: Int) =
239221
glUniform3i(location, x, y, z)
240-
}
222+
override fun uniform3iv(location: UniformLocation, value: IntArray) =
223+
glUniform3iv(location, value.vSize(3), value.refTo(0))
241224

242-
override fun uniform3iv(location: UniformLocation, value: IntArray) {
243-
glUniform3iv(location, 1, value.refTo(0))
244-
}
245-
246-
override fun uniform4f(location: UniformLocation, x: Float, y: Float, z: Float, w: Float) {
225+
override fun uniform4f(location: UniformLocation, x: Float, y: Float, z: Float, w: Float) =
247226
glUniform4f(location, x, y, z, w)
248-
}
249-
250-
override fun uniform4fv(location: UniformLocation, value: FloatArray) {
251-
glUniform4fv(location, 1, value.refTo(0))
252-
}
253-
254-
override fun uniform4i(location: UniformLocation, x: Int, y: Int, z: Int, w: Int) {
227+
override fun uniform4fv(location: UniformLocation, value: FloatArray) =
228+
glUniform4fv(location, value.vSize(4), value.refTo(0))
229+
override fun uniform4i(location: UniformLocation, x: Int, y: Int, z: Int, w: Int) =
255230
glUniform4i(location, x, y, z, w)
256-
}
231+
override fun uniform4iv(location: UniformLocation, value: IntArray) =
232+
glUniform4iv(location, value.vSize(4), value.refTo(0))
257233

258-
override fun uniform4iv(location: UniformLocation, value: IntArray) {
259-
glUniform4iv(location, 1, value.refTo(0))
260-
}
234+
override fun uniformMatrix3fv(location: UniformLocation, transpose: Boolean, value: FloatArray) =
235+
glUniformMatrix3fv(location, value.vSize(3*3), transpose.toGl(), value.refTo(0))
261236

262-
override fun uniformMatrix3fv(location: UniformLocation, transpose: Boolean, value: FloatArray) {
263-
glUniformMatrix3fv(location, 1, transpose.toGl(), value.refTo(0))
264-
}
265-
266-
override fun uniformMatrix4fv(location: UniformLocation, transpose: Boolean, value: FloatArray) {
267-
glUniformMatrix4fv(location, 1, transpose.toGl(), value.refTo(0))
268-
}
237+
override fun uniformMatrix4fv(location: UniformLocation, transpose: Boolean, value: FloatArray) =
238+
glUniformMatrix4fv(location, value.vSize(4*4), transpose.toGl(), value.refTo(0))
269239

270240
override fun blendFunc(sFactor: Int, dFactor: Int) {
271241
glBlendFunc(sFactor.toUInt(), dFactor.toUInt())

kgl-jogl/src/main/kotlin/com/danielgergely/kgl/KglJogl.kt

Lines changed: 32 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -142,45 +142,46 @@ class KglJogl(private val gl: GL) : Kgl {
142142
return gl.glVertexAttribPointer(location, size, type, normalized, stride, offset.toLong())
143143
}
144144

145-
override fun uniform1f(location: UniformLocation, f: Float) = gl.glUniform1f(location, f)
146-
147-
override fun uniform1fv(location: UniformLocation, value: FloatArray) = gl.glUniform1fv(location, value.size, value, 0)
148-
149-
override fun uniform1i(location: UniformLocation, i: Int) = gl.glUniform1i(location, i)
150-
151-
override fun uniform1iv(location: UniformLocation, value: IntArray) = gl.glUniform1iv(location, value.size, value, 0)
152-
153-
override fun uniform2f(location: UniformLocation, x: Float, y: Float) = gl.glUniform2f(location, x, y)
154-
155-
override fun uniform2fv(location: UniformLocation, value: FloatArray) = gl.glUniform2fv(location, value.size / 2, value, 0)
156-
157-
override fun uniform2i(location: UniformLocation, x: Int, y: Int) = gl.glUniform2i(location, x, y)
158-
159-
override fun uniform2iv(location: UniformLocation, value: IntArray) = gl.glUniform2iv(location, value.size / 2, value, 0)
160-
161-
override fun uniform3f(location: UniformLocation, x: Float, y: Float, z: Float) = gl.glUniform3f(location, x, y, z)
162-
163-
override fun uniform3fv(location: UniformLocation, value: FloatArray) = gl.glUniform3fv(location, value.size / 3, value, 0)
164-
165-
override fun uniform3i(location: UniformLocation, x: Int, y: Int, z: Int) = gl.glUniform3i(location, x, y, z)
166-
167-
override fun uniform3iv(location: UniformLocation, value: IntArray) = gl.glUniform3iv(location, value.size / 3, value, 0)
145+
override fun uniform1f(location: UniformLocation, f: Float) =
146+
gl.glUniform1f(location, f)
147+
override fun uniform1fv(location: UniformLocation, value: FloatArray) =
148+
gl.glUniform1fv(location, value.vSize(1), value, 0)
149+
override fun uniform1i(location: UniformLocation, i: Int) =
150+
gl.glUniform1i(location, i)
151+
override fun uniform1iv(location: UniformLocation, value: IntArray) =
152+
gl.glUniform1iv(location, value.vSize(1), value, 0)
153+
154+
override fun uniform2f(location: UniformLocation, x: Float, y: Float) =
155+
gl.glUniform2f(location, x, y)
156+
override fun uniform2fv(location: UniformLocation, value: FloatArray) =
157+
gl.glUniform2fv(location, value.vSize(2), value, 0)
158+
override fun uniform2i(location: UniformLocation, x: Int, y: Int) =
159+
gl.glUniform2i(location, x, y)
160+
override fun uniform2iv(location: UniformLocation, value: IntArray) =
161+
gl.glUniform2iv(location, value.vSize(2), value, 0)
162+
163+
override fun uniform3f(location: UniformLocation, x: Float, y: Float, z: Float) =
164+
gl.glUniform3f(location, x, y, z)
165+
override fun uniform3fv(location: UniformLocation, value: FloatArray) =
166+
gl.glUniform3fv(location, value.vSize(3), value, 0)
167+
override fun uniform3i(location: UniformLocation, x: Int, y: Int, z: Int) =
168+
gl.glUniform3i(location, x, y, z)
169+
override fun uniform3iv(location: UniformLocation, value: IntArray) =
170+
gl.glUniform3iv(location, value.vSize(3), value, 0)
168171

169172
override fun uniform4f(location: UniformLocation, x: Float, y: Float, z: Float, w: Float) =
170173
gl.glUniform4f(location, x, y, z, w)
171-
172-
override fun uniform4fv(location: UniformLocation, value: FloatArray) = gl.glUniform4fv(location, value.size / 4, value, 0)
173-
174+
override fun uniform4fv(location: UniformLocation, value: FloatArray) =
175+
gl.glUniform4fv(location, value.vSize(4), value, 0)
174176
override fun uniform4i(location: UniformLocation, x: Int, y: Int, z: Int, w: Int) =
175177
gl.glUniform4i(location, x, y, z, w)
176-
177-
override fun uniform4iv(location: UniformLocation, value: IntArray) = gl.glUniform4iv(location, value.size / 4, value, 0)
178+
override fun uniform4iv(location: UniformLocation, value: IntArray) =
179+
gl.glUniform4iv(location, value.vSize(4), value, 0)
178180

179181
override fun uniformMatrix3fv(location: UniformLocation, transpose: Boolean, value: FloatArray) =
180-
gl.glUniformMatrix3fv(location, value.size, transpose, value, 0)
181-
182+
gl.glUniformMatrix3fv(location, value.vSize(3*3), transpose, value, 0)
182183
override fun uniformMatrix4fv(location: UniformLocation, transpose: Boolean, value: FloatArray) =
183-
gl.glUniformMatrix4fv(location, value.size, transpose, value, 0)
184+
gl.glUniformMatrix4fv(location, value.vSize(4*4), transpose, value, 0)
184185

185186
override fun blendFunc(sFactor: Int, dFactor: Int) = gl.glBlendFunc(sFactor, dFactor)
186187

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.danielgergely.kgl
2+
3+
public fun FloatArray.vSize(vecSize: Int): Int {
4+
if (size % vecSize != 0)
5+
throw IllegalArgumentException("Array size must be a multiple of $vecSize.")
6+
return size / vecSize
7+
}
8+
9+
public fun IntArray.vSize(vecSize: Int): Int {
10+
if (size % vecSize != 0)
11+
throw IllegalArgumentException("Array size must be a multiple of $vecSize.")
12+
return size / vecSize
13+
}

0 commit comments

Comments
 (0)