[orx-kinect] Change shutdown handler to inner class

This commit is contained in:
Edwin Jakobs
2021-04-10 17:35:49 +02:00
parent ddc81fc521
commit d2c77a0ba4

View File

@@ -13,23 +13,21 @@ import java.util.function.Supplier
import kotlin.concurrent.thread import kotlin.concurrent.thread
class DefaultKinects<CTX>( class DefaultKinects<CTX>(
private val program: Program, private val program: Program,
private val manager: KinectsManager<CTX> private val manager: KinectsManager<CTX>
) : Kinects<CTX> { ) : Kinects<CTX> {
private inner class Destroyer : Thread() {
override fun run() {
manager.shutdown()
}
}
init { init {
manager.initialize() manager.initialize()
// as we don't have explicit shutdown mechanism in OPENRNDR // as we don't have explicit shutdown mechanism in OPENRNDR
// we need to install a shutdown hook for now // we need to install a shutdown hook for now
Runtime.getRuntime().addShutdownHook( Runtime.getRuntime().addShutdownHook(Destroyer())
thread(
name = "${manager.javaClass.simpleName}-closer",
start = false,
isDaemon = false
) {
manager.shutdown()
}
)
} }
override fun countDevices(): Int { override fun countDevices(): Int {
@@ -65,8 +63,8 @@ interface KinectCommandsExecutor<CTX> {
} }
class DefaultKinectDevice<CTX>( class DefaultKinectDevice<CTX>(
override val depthCamera: DefaultKinectDepthCamera, override val depthCamera: DefaultKinectDepthCamera,
private val commandsExecutor: KinectCommandsExecutor<CTX> private val commandsExecutor: KinectCommandsExecutor<CTX>
) : KinectDevice<CTX> { ) : KinectDevice<CTX> {
override var enabled: Boolean = true override var enabled: Boolean = true
override fun beforeDraw(drawer: Drawer, program: Program) { override fun beforeDraw(drawer: Drawer, program: Program) {
@@ -79,13 +77,13 @@ class DefaultKinectDevice<CTX>(
} }
class DefaultKinectDepthCamera( class DefaultKinectDepthCamera(
override val width: Int, override val width: Int,
override val height: Int, override val height: Int,
depthScale: Double, depthScale: Double,
private val enabler: KinectFeatureEnabler, private val enabler: KinectFeatureEnabler,
private val bytesSupplier: Supplier<ByteBuffer?> private val bytesSupplier: Supplier<ByteBuffer?>
) : ) :
KinectDepthCamera, UpdatableKinectCamera { KinectDepthCamera, UpdatableKinectCamera {
override var enabled: Boolean override var enabled: Boolean
get() = enabler.enabled get() = enabler.enabled
@@ -94,16 +92,16 @@ class DefaultKinectDepthCamera(
} }
private val rawBuffer: ColorBuffer = colorBuffer( private val rawBuffer: ColorBuffer = colorBuffer(
width, width,
height, height,
format = ColorFormat.R, format = ColorFormat.R,
type = ColorType.UINT16 // it would be perfect if we could use isampler in the shader type = ColorType.UINT16 // it would be perfect if we could use isampler in the shader
) )
override val currentFrame: ColorBuffer = colorBuffer( override val currentFrame: ColorBuffer = colorBuffer(
width, width,
height, height,
format = ColorFormat.R, format = ColorFormat.R,
type = ColorType.FLOAT16 // in the future we might want to choose the precision here type = ColorType.FLOAT16 // in the future we might want to choose the precision here
) )
private val depthMapper = KinectRawDataToDepthMapper() private val depthMapper = KinectRawDataToDepthMapper()
@@ -132,15 +130,21 @@ class DefaultKinectDepthCamera(
override var mirror: Boolean override var mirror: Boolean
get() = depthMapper.mirror get() = depthMapper.mirror
set(value) { depthMapper.mirror = value } set(value) {
depthMapper.mirror = value
}
} }
private class KinectRawDataToDepthMapper : private class KinectRawDataToDepthMapper :
Filter(filterShaderFromUrl( Filter(
resourceUrl("kinect-raw-to-depth.frag", filterShaderFromUrl(
DefaultKinects::class.java)) resourceUrl(
) { "kinect-raw-to-depth.frag",
DefaultKinects::class.java
)
)
) {
var depthScale: Double by parameters var depthScale: Double by parameters
var mirror: Boolean by parameters var mirror: Boolean by parameters
var resolution: Vector2 by parameters var resolution: Vector2 by parameters