From 47d5d9c1b23b374f106dae276520acc318dd7a4b Mon Sep 17 00:00:00 2001 From: minjaesong Date: Fri, 6 Mar 2020 21:51:06 +0900 Subject: [PATCH] more functions --- .../torvald/gdx/graphics/UnsafeCvecArray.kt | 36 +++++++++++++------ 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/src/net/torvald/gdx/graphics/UnsafeCvecArray.kt b/src/net/torvald/gdx/graphics/UnsafeCvecArray.kt index 2c15ccece..12479b7f5 100644 --- a/src/net/torvald/gdx/graphics/UnsafeCvecArray.kt +++ b/src/net/torvald/gdx/graphics/UnsafeCvecArray.kt @@ -18,24 +18,44 @@ internal class UnsafeCvecArray(val width: Int, val height: Int) { private inline fun toAddr(x: Int, y: Int) = 16L * (y * width + x) - fun zerofill() = array.fillWith(0) - init { zerofill() } + // getters fun getR(x: Int, y: Int) = array.getFloat(toAddr(x, y)) fun getG(x: Int, y: Int) = array.getFloat(toAddr(x, y) + 4) fun getB(x: Int, y: Int) = array.getFloat(toAddr(x, y) + 8) fun getA(x: Int, y: Int) = array.getFloat(toAddr(x, y) + 12) + fun getVec(x: Int, y: Int) = Cvec( + array.getFloat(toAddr(x, y)), + array.getFloat(toAddr(x, y) + 4), + array.getFloat(toAddr(x, y) + 8), + array.getFloat(toAddr(x, y) + 12) + ) + /** + * @param channel 0 for R, 1 for G, 2 for B, 3 for A + */ + inline fun channelGet(x: Int, y: Int, channel: Int) = array.getFloat(toAddr(x, y) + 4L * channel) + // setters + fun zerofill() = array.fillWith(0) fun setR(x: Int, y: Int, value: Float) { array.setFloat(toAddr(x, y), value) } fun setG(x: Int, y: Int, value: Float) { array.setFloat(toAddr(x, y) + 4, value) } fun setB(x: Int, y: Int, value: Float) { array.setFloat(toAddr(x, y) + 8, value) } fun setA(x: Int, y: Int, value: Float) { array.setFloat(toAddr(x, y) + 12, value) } - - fun addA(x: Int, y: Int, value: Float) { array.setFloat(toAddr(x, y) + 12, getA(x, y) + value) } - + fun setVec(x: Int, y: Int, value: Cvec) { + array.setFloat(toAddr(x, y), value.r) + array.setFloat(toAddr(x, y) + 4, value.g) + array.setFloat(toAddr(x, y) + 8, value.b) + array.setFloat(toAddr(x, y) + 12, value.a) + } + fun setScalar(x: Int, y: Int, value: Float) { + array.setFloat(toAddr(x, y), value) + array.setFloat(toAddr(x, y) + 4, value) + array.setFloat(toAddr(x, y) + 8, value) + array.setFloat(toAddr(x, y) + 12, value) + } /** * @param channel 0 for R, 1 for G, 2 for B, 3 for A */ @@ -43,11 +63,7 @@ internal class UnsafeCvecArray(val width: Int, val height: Int) { array.setFloat(toAddr(x, y) + 4L * channel, value) } - /** - * @param channel 0 for R, 1 for G, 2 for B, 3 for A - */ - inline fun channelGet(x: Int, y: Int, channel: Int) = array.getFloat(toAddr(x, y) + 4L * channel) - + // operators fun max(x: Int, y: Int, other: Cvec) { setR(x, y, maxOf(getR(x, y), other.r)) setG(x, y, maxOf(getG(x, y), other.g))