Skip to content

Commit 755c624

Browse files
committed
fix: reduce double delete message log level to trace, add double delete protection to FBO
1 parent a54c2a6 commit 755c624

File tree

3 files changed

+14
-5
lines changed

3 files changed

+14
-5
lines changed

src/main/java/dev/silenium/compose/gl/fbo/FBO.kt

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import dev.silenium.compose.gl.objects.Renderbuffer
55
import dev.silenium.compose.gl.objects.Texture
66
import dev.silenium.compose.gl.util.checkGLError
77
import org.lwjgl.opengl.GL30.*
8+
import org.slf4j.LoggerFactory
9+
import java.util.concurrent.atomic.AtomicBoolean
810

911
data class FBO(
1012
val id: Int,
@@ -23,13 +25,20 @@ data class FBO(
2325
checkGLError("glBindFramebuffer")
2426
}
2527

28+
private val destroyed = AtomicBoolean(false)
2629
fun destroy() {
27-
colorAttachment.destroy()
28-
depthStencilAttachment.destroy()
29-
glDeleteFramebuffers(id)
30+
if (destroyed.compareAndExchange(false, true)) {
31+
glDeleteFramebuffers(id)
32+
colorAttachment.destroy()
33+
depthStencilAttachment.destroy()
34+
} else {
35+
logger.trace("FBO $id is already destroyed", Exception())
36+
}
3037
}
3138

3239
companion object {
40+
private val logger = LoggerFactory.getLogger(FBO::class.java)
41+
3342
fun create(
3443
colorAttachment: Texture,
3544
depthStencilAttachment: Renderbuffer,

src/main/java/dev/silenium/compose/gl/objects/Renderbuffer.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ data class Renderbuffer(
2929
if (destroyed.compareAndExchange(false, true)) {
3030
glDeleteRenderbuffers(id)
3131
} else {
32-
logger.warn("Texture $id is already destroyed")
32+
logger.trace("Texture $id is already destroyed")
3333
}
3434
}
3535

src/main/java/dev/silenium/compose/gl/objects/Texture.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ data class Texture(
3434
if (destroyed.compareAndExchange(false, true)) {
3535
glDeleteTextures(id)
3636
} else {
37-
logger.warn("Texture $id is already destroyed")
37+
logger.trace("Texture $id is already destroyed")
3838
}
3939
}
4040

0 commit comments

Comments
 (0)