From 722a17d28d8f5ee9156252065947c82877b48d30 Mon Sep 17 00:00:00 2001 From: Stanislav Mishchenko Date: Fri, 1 Mar 2024 23:15:17 +0300 Subject: [PATCH] fix not loading frames bugs --- .../engine/core/renderers/FramesRenderer.kt | 13 +++++++++---- src/main/resources/engine/shaders/frame/frame.geom | 6 +++--- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/main/kotlin/solve/rendering/engine/core/renderers/FramesRenderer.kt b/src/main/kotlin/solve/rendering/engine/core/renderers/FramesRenderer.kt index 594939a6..05808e73 100644 --- a/src/main/kotlin/solve/rendering/engine/core/renderers/FramesRenderer.kt +++ b/src/main/kotlin/solve/rendering/engine/core/renderers/FramesRenderer.kt @@ -26,6 +26,7 @@ import solve.rendering.engine.utils.toIntVector import solve.scene.controller.SceneController import solve.scene.model.VisualizationFrame import solve.utils.ceilToInt +import java.util.Collections.synchronizedList import java.util.Date import kotlin.math.abs import kotlin.math.min @@ -59,7 +60,7 @@ class FramesRenderer( private var cameraLastGridCellPosition = getScreenCenterGridCellPosition() - private val bufferFramesToUpload = mutableListOf() + private val bufferFramesToUpload = synchronizedList(mutableListOf()) private val framesLoadingCoroutineScope = CoroutineScope(Dispatchers.Default) private var needToReinitializeBuffers = false @@ -136,8 +137,8 @@ class FramesRenderer( } if (haveNewFramesSelection) { - uploadAllFramesToBuffer() bufferFramesToUpload.clear() + uploadAllFramesToBuffer() haveNewFramesSelection = false enableVirtualization() } @@ -167,7 +168,9 @@ class FramesRenderer( private fun uploadLoadedFramesToBuffers() { bufferFramesToUpload.toList().forEach { frame -> - bufferFramesToUpload.remove(frame) + synchronized(bufferFramesToUpload) { + bufferFramesToUpload.remove(frame) + } bufferFramesArrayTexture?.uploadTexture(frame.textureData, frame.bufferIndex) Texture2D.freeData(frame.textureData) } @@ -293,7 +296,9 @@ class FramesRenderer( return@launch } - bufferFramesToUpload.add(LoadedBufferFrameData(textureData, index, loadTime)) + synchronized(bufferFramesToUpload) { + bufferFramesToUpload.add(LoadedBufferFrameData(textureData, index, loadTime)) + } } } diff --git a/src/main/resources/engine/shaders/frame/frame.geom b/src/main/resources/engine/shaders/frame/frame.geom index 4de5a370..00488b98 100644 --- a/src/main/resources/engine/shaders/frame/frame.geom +++ b/src/main/resources/engine/shaders/frame/frame.geom @@ -22,11 +22,11 @@ void main() { if (isColored) { int frameID = gs_in[0].frameID; - int frameX = int(mod(frameID, uGridWidth)); + int frameX = frameID % uGridWidth; int frameY = frameID / uGridWidth; - int bufferX = int(mod(frameX, uBuffersSize.x)); - int bufferY = int(mod(frameY, uBuffersSize.y)); + int bufferX = frameX % uBuffersSize.x; + int bufferY = frameY % uBuffersSize.y; float texID = float(bufferY * uBuffersSize.x + bufferX); vec4 initialPosition = vec4(