more functions

This commit is contained in:
minjaesong
2020-03-06 21:51:06 +09:00
parent e77c52a86f
commit 1ab12ffa24

View File

@@ -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) private inline fun toAddr(x: Int, y: Int) = 16L * (y * width + x)
fun zerofill() = array.fillWith(0)
init { init {
zerofill() zerofill()
} }
// getters
fun getR(x: Int, y: Int) = array.getFloat(toAddr(x, y)) fun getR(x: Int, y: Int) = array.getFloat(toAddr(x, y))
fun getG(x: Int, y: Int) = array.getFloat(toAddr(x, y) + 4) 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 getB(x: Int, y: Int) = array.getFloat(toAddr(x, y) + 8)
fun getA(x: Int, y: Int) = array.getFloat(toAddr(x, y) + 12) 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 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 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 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 setA(x: Int, y: Int, value: Float) { array.setFloat(toAddr(x, y) + 12, value) }
fun setVec(x: Int, y: Int, value: Cvec) {
fun addA(x: Int, y: Int, value: Float) { array.setFloat(toAddr(x, y) + 12, getA(x, y) + value) } 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 * @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) array.setFloat(toAddr(x, y) + 4L * channel, value)
} }
/** // operators
* @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)
fun max(x: Int, y: Int, other: Cvec) { fun max(x: Int, y: Int, other: Cvec) {
setR(x, y, maxOf(getR(x, y), other.r)) setR(x, y, maxOf(getR(x, y), other.r))
setG(x, y, maxOf(getG(x, y), other.g)) setG(x, y, maxOf(getG(x, y), other.g))