mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-14 09:56:37 -04:00
cleanup SkeletalModel baking
This commit is contained in:
parent
a0a52f57b4
commit
db786d932d
@ -17,6 +17,7 @@ import de.bixilon.kotlinglm.vec3.Vec3
|
|||||||
import de.bixilon.minosoft.data.registries.identified.ResourceLocation
|
import de.bixilon.minosoft.data.registries.identified.ResourceLocation
|
||||||
import de.bixilon.minosoft.gui.rendering.RenderContext
|
import de.bixilon.minosoft.gui.rendering.RenderContext
|
||||||
import de.bixilon.minosoft.gui.rendering.skeletal.SkeletalMesh
|
import de.bixilon.minosoft.gui.rendering.skeletal.SkeletalMesh
|
||||||
|
import de.bixilon.minosoft.gui.rendering.skeletal.SkeletalVertexConsumer
|
||||||
import de.bixilon.minosoft.gui.rendering.skeletal.baked.BakedSkeletalModel
|
import de.bixilon.minosoft.gui.rendering.skeletal.baked.BakedSkeletalModel
|
||||||
import de.bixilon.minosoft.gui.rendering.skeletal.baked.BakedSkeletalTransform
|
import de.bixilon.minosoft.gui.rendering.skeletal.baked.BakedSkeletalTransform
|
||||||
import de.bixilon.minosoft.gui.rendering.skeletal.model.animations.SkeletalAnimation
|
import de.bixilon.minosoft.gui.rendering.skeletal.model.animations.SkeletalAnimation
|
||||||
@ -47,9 +48,7 @@ data class SkeletalModel(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun bake(context: RenderContext, override: Map<ResourceLocation, ShaderTexture>): BakedSkeletalModel {
|
private fun buildTextures(override: Map<ResourceLocation, ShaderTexture>): Map<ResourceLocation, SkeletalTextureInstance> {
|
||||||
val mesh = SkeletalMesh(context, 1000)
|
|
||||||
|
|
||||||
val textures: MutableMap<ResourceLocation, SkeletalTextureInstance> = this.loadedTextures.toMutableMap()
|
val textures: MutableMap<ResourceLocation, SkeletalTextureInstance> = this.loadedTextures.toMutableMap()
|
||||||
|
|
||||||
for ((name, texture) in override) {
|
for ((name, texture) in override) {
|
||||||
@ -62,6 +61,10 @@ data class SkeletalModel(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return textures
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun buildTransforms(): Pair<BakedSkeletalTransform, Int> {
|
||||||
val transforms: MutableMap<String, BakedSkeletalTransform> = mutableMapOf()
|
val transforms: MutableMap<String, BakedSkeletalTransform> = mutableMapOf()
|
||||||
|
|
||||||
val transformId = AtomicInteger(1)
|
val transformId = AtomicInteger(1)
|
||||||
@ -70,10 +73,22 @@ data class SkeletalModel(
|
|||||||
}
|
}
|
||||||
val baseTransform = BakedSkeletalTransform(0, Vec3.EMPTY, transforms)
|
val baseTransform = BakedSkeletalTransform(0, Vec3.EMPTY, transforms)
|
||||||
|
|
||||||
for ((name, element) in elements) {
|
return Pair(baseTransform, transformId.get())
|
||||||
element.bake(mesh, textures, baseTransform)
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return BakedSkeletalModel(mesh, baseTransform, transformId.get(), animations)
|
private fun buildElements(consumer: SkeletalVertexConsumer, textures: Map<ResourceLocation, SkeletalTextureInstance>, transform: BakedSkeletalTransform) {
|
||||||
|
for ((name, element) in elements) {
|
||||||
|
element.bake(consumer, textures, transform)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun bake(context: RenderContext, override: Map<ResourceLocation, ShaderTexture>): BakedSkeletalModel {
|
||||||
|
val mesh = SkeletalMesh(context, 1000)
|
||||||
|
|
||||||
|
val textures = buildTextures(override)
|
||||||
|
val (transform, count) = buildTransforms()
|
||||||
|
buildElements(mesh, textures, transform)
|
||||||
|
|
||||||
|
return BakedSkeletalModel(mesh, transform, count, animations)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -31,7 +31,7 @@ data class SkeletalAnimator(
|
|||||||
if (split.size == 1 && split[0] == "base") return transform
|
if (split.size == 1 && split[0] == "base") return transform
|
||||||
|
|
||||||
for (name in split) {
|
for (name in split) {
|
||||||
transform = transform.children[name] ?: throw IllegalStateException("Animation is referencing unknown transform!")
|
transform = transform.children[name] ?: throw IllegalStateException("Animation is referencing unknown transform: $name")
|
||||||
}
|
}
|
||||||
return transform
|
return transform
|
||||||
}
|
}
|
||||||
|
@ -16,7 +16,7 @@ package de.bixilon.minosoft.gui.rendering.skeletal.model.elements
|
|||||||
import de.bixilon.kotlinglm.vec3.Vec3
|
import de.bixilon.kotlinglm.vec3.Vec3
|
||||||
import de.bixilon.minosoft.data.direction.Directions
|
import de.bixilon.minosoft.data.direction.Directions
|
||||||
import de.bixilon.minosoft.data.registries.identified.ResourceLocation
|
import de.bixilon.minosoft.data.registries.identified.ResourceLocation
|
||||||
import de.bixilon.minosoft.gui.rendering.skeletal.SkeletalMesh
|
import de.bixilon.minosoft.gui.rendering.skeletal.SkeletalVertexConsumer
|
||||||
import de.bixilon.minosoft.gui.rendering.skeletal.baked.BakedSkeletalTransform
|
import de.bixilon.minosoft.gui.rendering.skeletal.baked.BakedSkeletalTransform
|
||||||
import de.bixilon.minosoft.gui.rendering.skeletal.baked.SkeletalBakeContext
|
import de.bixilon.minosoft.gui.rendering.skeletal.baked.SkeletalBakeContext
|
||||||
import de.bixilon.minosoft.gui.rendering.skeletal.model.textures.SkeletalTextureInstance
|
import de.bixilon.minosoft.gui.rendering.skeletal.model.textures.SkeletalTextureInstance
|
||||||
@ -36,10 +36,10 @@ data class SkeletalElement(
|
|||||||
val children: Map<String, SkeletalElement> = emptyMap(),
|
val children: Map<String, SkeletalElement> = emptyMap(),
|
||||||
) {
|
) {
|
||||||
|
|
||||||
fun bake(mesh: SkeletalMesh, textures: Map<ResourceLocation, SkeletalTextureInstance>, transform: BakedSkeletalTransform) {
|
fun bake(consumer: SkeletalVertexConsumer, textures: Map<ResourceLocation, SkeletalTextureInstance>, transform: BakedSkeletalTransform) {
|
||||||
if (!enabled) return
|
if (!enabled) return
|
||||||
|
|
||||||
val context = SkeletalBakeContext(transform = transform, textures = textures, consumer = mesh)
|
val context = SkeletalBakeContext(transform = transform, textures = textures, consumer = consumer)
|
||||||
return bake(context)
|
return bake(context)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user