mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-06-09 18:14:06 +09:00
more functions
This commit is contained in:
@@ -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))
|
||||||
|
|||||||
Reference in New Issue
Block a user