[orx-kinect] Change shutdown handler to inner class
This commit is contained in:
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user