atlas manager: cache textures

This commit is contained in:
Moritz Zwerger 2023-10-04 00:53:31 +02:00
parent a8bda0f257
commit 99409f924f
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
3 changed files with 18 additions and 6 deletions

View File

@ -42,7 +42,7 @@ object TestAssetsManager : AssetsManager {
fun AssetsManager.box(packFormat: Int = 0): ConnectionAssetsManager {
val manager = ConnectionAssetsManager(AssetsManagerProperties(PackProperties(0)))
val manager = ConnectionAssetsManager(AssetsManagerProperties(PackProperties(packFormat)))
manager += this
return manager

View File

@ -20,7 +20,6 @@ import de.bixilon.kutil.primitive.IntUtil.toInt
import de.bixilon.minosoft.assets.AssetsManager
import de.bixilon.minosoft.data.registries.identified.ResourceLocation
import de.bixilon.minosoft.gui.rendering.gui.atlas.textures.AtlasTextureManager
import de.bixilon.minosoft.gui.rendering.textures.TextureUtil.readTexture
import de.bixilon.minosoft.gui.rendering.util.vec.vec2.Vec2iUtil.toVec2i
import it.unimi.dsi.fastutil.ints.Int2ObjectMap
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap
@ -36,9 +35,7 @@ class RawAtlasElement(
) {
fun load(textures: AtlasTextureManager): AtlasElement {
val textureData = assets[texture].readTexture()
val (texture, uvStart, uvEnd) = textures.add(textureData, start, end, resolution)
val (texture, uvStart, uvEnd) = textures.add(texture, assets, start, end, resolution)
val size = (end + 1) - start

View File

@ -15,17 +15,31 @@ package de.bixilon.minosoft.gui.rendering.gui.atlas.textures
import de.bixilon.kotlinglm.vec2.Vec2
import de.bixilon.kotlinglm.vec2.Vec2i
import de.bixilon.minosoft.assets.AssetsManager
import de.bixilon.minosoft.data.registries.identified.ResourceLocation
import de.bixilon.minosoft.gui.rendering.RenderContext
import de.bixilon.minosoft.gui.rendering.system.base.texture.data.TextureData
import de.bixilon.minosoft.gui.rendering.system.base.texture.texture.memory.MemoryTexture
import de.bixilon.minosoft.gui.rendering.system.base.texture.texture.memory.TextureGenerator
import de.bixilon.minosoft.gui.rendering.textures.TextureUtil.readTexture
import de.bixilon.minosoft.gui.rendering.util.vec.vec2.Vec2iUtil.EMPTY
import java.nio.ByteBuffer
class AtlasTextureManager(private val context: RenderContext) {
private val cache: MutableMap<ResourceLocation, TextureData> = HashMap()
private val targets: MutableList<Target> = mutableListOf()
fun add(textureData: TextureData, start: Vec2i, end: Vec2i, resolution: Vec2i): AtlasTexture {
private fun getTexture(texture: ResourceLocation, assets: AssetsManager): TextureData {
this.cache[texture]?.let { return it }
val data = assets[texture].readTexture()
this.cache[texture] = data
return data
}
fun add(texture: ResourceLocation, assets: AssetsManager, start: Vec2i, end: Vec2i, resolution: Vec2i): AtlasTexture {
val textureData = getTexture(texture, assets)
val scale = textureData.size / resolution
val realStart = start * scale
@ -50,6 +64,7 @@ class AtlasTextureManager(private val context: RenderContext) {
for (target in targets) {
context.textures.staticTextures += target.texture
}
this.cache.clear()
targets.clear()
}