diff --git a/tsvm_core/src/net/torvald/tsvm/peripheral/AudioAdapter.kt b/tsvm_core/src/net/torvald/tsvm/peripheral/AudioAdapter.kt index e45b073..78a1f77 100644 --- a/tsvm_core/src/net/torvald/tsvm/peripheral/AudioAdapter.kt +++ b/tsvm_core/src/net/torvald/tsvm/peripheral/AudioAdapter.kt @@ -269,7 +269,9 @@ class AudioAdapter(val vm: VM) : PeriBase(VM.PERITYPE_SOUND) { override fun dispose() { System.err.println("Dispose AudioAdapter") renderRunnables.forEach { it.stop() } + renderThreads.forEach { it.interrupt() } writeQueueingRunnables.forEach { it.stop() } + writeQueueingThreads.forEach { it.interrupt() } playheads.forEach { it.dispose() } sampleBin.destroy() pcmBin.destroy() @@ -432,8 +434,8 @@ class AudioAdapter(val vm: VM) : PeriBase(VM.PERITYPE_SOUND) { fun dispose() { // audioDevice.dispose() is called by RenderRunnable.stop() -// System.err.println("AudioDevice dispose ${parent.renderThreads[index]}") -// try { audioDevice.dispose() } catch (e: GdxRuntimeException) { println(" "+ e.message) } + System.err.println("AudioDevice dispose ${parent.renderThreads[index]}") + try { audioDevice.dispose() } catch (e: GdxRuntimeException) { println(" "+ e.message) } } companion object { diff --git a/tsvm_executable/src/net/torvald/tsvm/VMGUI.kt b/tsvm_executable/src/net/torvald/tsvm/VMGUI.kt index b5f1975..1137f08 100644 --- a/tsvm_executable/src/net/torvald/tsvm/VMGUI.kt +++ b/tsvm_executable/src/net/torvald/tsvm/VMGUI.kt @@ -403,6 +403,16 @@ const mat4 yuv_to_rgb = mat4( 0.0, 0.0, 0.0, 1.0 ); +const float ALFA = 0.2; +const float BETA = 0.2; + +const mat4 crosstalk_mat = mat4( + 1.0, 0.0, 0.0, 0.0, + ALFA, 1.0, 0.0, 0.0, + BETA, 0.0, 1.0, 0.0, + 0.0, 0.0, 0.0, 1.0 +); + const float gamma = 2.4; const float blurH = 0.8; const float blurV = 0.4; @@ -421,10 +431,12 @@ vec4 avr(vec4 a, vec4 b, float gam) { ); } -vec4 grading(vec4 col, vec4 args) { +vec4 grading(vec4 col0, vec4 args) { vec4 vel = vec4(1.0, 1.0 / args.y, 1.0 / args.z, 1.0); vec4 power = vec4(args.x, args.x, args.x, 1.0); + vec4 col = crosstalk_mat * col0; + vec4 sgn = sign(col); vec4 absval = abs(col); vec4 raised = pow(absval, vel); @@ -452,9 +464,9 @@ void main() { vec4 LRavr = avr(colourL, colourR, gamma); vec4 wgtavr = avr(LRavr, colourIn, gamma); - vec4 outCol = wgtavr * ((mod(gl_FragCoord.y, 2.0) >= 1.0) ? scanline : one); + vec4 outCol = wgtavr; - fragColor = grading(outCol, gradingarg); + fragColor = grading(outCol, gradingarg) * ((mod(gl_FragCoord.y, 2.0) >= 1.0) ? scanline : one); }