mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-13 09:26:11 -04:00
player fixes
This commit is contained in:
parent
a29155cb96
commit
6f10bce914
@ -18,9 +18,9 @@ import de.bixilon.kotlinglm.vec3.Vec3
|
|||||||
import de.bixilon.kotlinglm.vec3.Vec3d
|
import de.bixilon.kotlinglm.vec3.Vec3d
|
||||||
import de.bixilon.minosoft.data.entities.EntityRotation
|
import de.bixilon.minosoft.data.entities.EntityRotation
|
||||||
import de.bixilon.minosoft.gui.rendering.entities.renderer.EntityRenderer
|
import de.bixilon.minosoft.gui.rendering.entities.renderer.EntityRenderer
|
||||||
import de.bixilon.minosoft.gui.rendering.skeletal.SkeletalShader
|
|
||||||
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.instance.SkeletalInstance
|
import de.bixilon.minosoft.gui.rendering.skeletal.instance.SkeletalInstance
|
||||||
|
import de.bixilon.minosoft.gui.rendering.skeletal.shader.BaseSkeletalShader
|
||||||
import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3dUtil.EMPTY
|
import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3dUtil.EMPTY
|
||||||
|
|
||||||
open class SkeletalFeature(
|
open class SkeletalFeature(
|
||||||
@ -28,7 +28,7 @@ open class SkeletalFeature(
|
|||||||
val instance: SkeletalInstance,
|
val instance: SkeletalInstance,
|
||||||
) : EntityRenderFeature(renderer) {
|
) : EntityRenderFeature(renderer) {
|
||||||
protected val manager = renderer.renderer.context.skeletal
|
protected val manager = renderer.renderer.context.skeletal
|
||||||
protected open val shader: SkeletalShader = manager.shader
|
protected open val shader: BaseSkeletalShader get() = manager.shader
|
||||||
|
|
||||||
protected var position = Vec3d.EMPTY
|
protected var position = Vec3d.EMPTY
|
||||||
protected var yaw = 0.0f
|
protected var yaw = 0.0f
|
||||||
|
@ -128,6 +128,7 @@ class HitboxFeature(renderer: EntityRenderer<*>) : EntityRenderFeature(renderer)
|
|||||||
override fun unload() {
|
override fun unload() {
|
||||||
val mesh = this.mesh ?: return
|
val mesh = this.mesh ?: return
|
||||||
this.mesh = null
|
this.mesh = null
|
||||||
|
if (mesh.state != Mesh.MeshStates.LOADED) return
|
||||||
renderer.renderer.queue += { mesh.unload() }
|
renderer.renderer.queue += { mesh.unload() }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,12 +16,20 @@ package de.bixilon.minosoft.gui.rendering.entities.model.biped
|
|||||||
import de.bixilon.minosoft.data.entities.entities.player.local.LocalPlayerEntity
|
import de.bixilon.minosoft.data.entities.entities.player.local.LocalPlayerEntity
|
||||||
import de.bixilon.minosoft.gui.rendering.entities.renderer.EntityRenderer
|
import de.bixilon.minosoft.gui.rendering.entities.renderer.EntityRenderer
|
||||||
import de.bixilon.minosoft.gui.rendering.skeletal.baked.BakedSkeletalModel
|
import de.bixilon.minosoft.gui.rendering.skeletal.baked.BakedSkeletalModel
|
||||||
|
import de.bixilon.minosoft.gui.rendering.system.base.texture.dynamic.DynamicTextureState
|
||||||
|
import de.bixilon.minosoft.gui.rendering.system.base.texture.skin.PlayerSkin
|
||||||
|
|
||||||
open class PlayerModel(renderer: EntityRenderer<*>, model: BakedSkeletalModel) : BipedModel(renderer, model) {
|
open class PlayerModel(
|
||||||
|
renderer: EntityRenderer<*>,
|
||||||
|
model: BakedSkeletalModel,
|
||||||
|
val skin: PlayerSkin,
|
||||||
|
) : BipedModel(renderer, model) {
|
||||||
|
override val shader get() = manager.playerShader
|
||||||
|
|
||||||
override fun draw() {
|
override fun draw() {
|
||||||
manager.context.system.reset(faceCulling = renderer.entity is LocalPlayerEntity) // TODO: and !renderSelf
|
manager.context.system.reset(faceCulling = renderer.entity is LocalPlayerEntity) // TODO: and !renderSelf
|
||||||
shader.use()
|
shader.use()
|
||||||
|
shader.texture = if (skin.texture.state == DynamicTextureState.LOADED) skin.texture.shaderId else 0 // TODO: use default skins if not loaded yet
|
||||||
manager.upload(instance)
|
manager.upload(instance)
|
||||||
instance.model.mesh.draw()
|
instance.model.mesh.draw()
|
||||||
}
|
}
|
||||||
|
@ -17,6 +17,7 @@ import de.bixilon.kutil.observer.DataObserver.Companion.observe
|
|||||||
import de.bixilon.minosoft.data.entities.entities.player.local.LocalPlayerEntity
|
import de.bixilon.minosoft.data.entities.entities.player.local.LocalPlayerEntity
|
||||||
import de.bixilon.minosoft.gui.rendering.entities.EntitiesRenderer
|
import de.bixilon.minosoft.gui.rendering.entities.EntitiesRenderer
|
||||||
import de.bixilon.minosoft.gui.rendering.entities.model.biped.PlayerModel
|
import de.bixilon.minosoft.gui.rendering.entities.model.biped.PlayerModel
|
||||||
|
import de.bixilon.minosoft.gui.rendering.system.base.texture.skin.PlayerSkin
|
||||||
|
|
||||||
open class LocalPlayerRenderer(renderer: EntitiesRenderer, entity: LocalPlayerEntity) : PlayerRenderer<LocalPlayerEntity>(renderer, entity) {
|
open class LocalPlayerRenderer(renderer: EntitiesRenderer, entity: LocalPlayerEntity) : PlayerRenderer<LocalPlayerEntity>(renderer, entity) {
|
||||||
|
|
||||||
@ -24,9 +25,9 @@ open class LocalPlayerRenderer(renderer: EntitiesRenderer, entity: LocalPlayerEn
|
|||||||
renderer.context.camera.view::view.observe(this, instant = true) { hitbox.enabled = it.renderSelf; model?.enabled = it.renderSelf }
|
renderer.context.camera.view::view.observe(this, instant = true) { hitbox.enabled = it.renderSelf; model?.enabled = it.renderSelf }
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun createModel(): PlayerModel? {
|
override fun createModel(skin: PlayerSkin): PlayerModel? {
|
||||||
val model = super.createModel()
|
val model = super.createModel(skin) ?: return null
|
||||||
model?.enabled = renderer.context.camera.view.view.renderSelf
|
model.enabled = renderer.context.camera.view.view.renderSelf
|
||||||
return model
|
return model
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,8 +13,8 @@
|
|||||||
|
|
||||||
package de.bixilon.minosoft.gui.rendering.entities.renderer.player
|
package de.bixilon.minosoft.gui.rendering.entities.renderer.player
|
||||||
|
|
||||||
|
import de.bixilon.kutil.observer.DataObserver.Companion.observe
|
||||||
import de.bixilon.minosoft.data.entities.entities.player.PlayerEntity
|
import de.bixilon.minosoft.data.entities.entities.player.PlayerEntity
|
||||||
import de.bixilon.minosoft.data.entities.entities.player.properties.PlayerProperties
|
|
||||||
import de.bixilon.minosoft.data.entities.entities.player.properties.textures.metadata.SkinModel
|
import de.bixilon.minosoft.data.entities.entities.player.properties.textures.metadata.SkinModel
|
||||||
import de.bixilon.minosoft.data.registries.identified.Identified
|
import de.bixilon.minosoft.data.registries.identified.Identified
|
||||||
import de.bixilon.minosoft.data.registries.identified.Namespaces.minecraft
|
import de.bixilon.minosoft.data.registries.identified.Namespaces.minecraft
|
||||||
@ -26,54 +26,48 @@ import de.bixilon.minosoft.gui.rendering.models.loader.ModelLoader
|
|||||||
import de.bixilon.minosoft.gui.rendering.models.loader.SkeletalLoader.Companion.sModel
|
import de.bixilon.minosoft.gui.rendering.models.loader.SkeletalLoader.Companion.sModel
|
||||||
import de.bixilon.minosoft.gui.rendering.skeletal.baked.BakedSkeletalModel
|
import de.bixilon.minosoft.gui.rendering.skeletal.baked.BakedSkeletalModel
|
||||||
import de.bixilon.minosoft.gui.rendering.system.base.texture.skin.PlayerSkin
|
import de.bixilon.minosoft.gui.rendering.system.base.texture.skin.PlayerSkin
|
||||||
import java.util.*
|
|
||||||
|
|
||||||
open class PlayerRenderer<E : PlayerEntity>(renderer: EntitiesRenderer, entity: E) : EntityRenderer<E>(renderer, entity) {
|
open class PlayerRenderer<E : PlayerEntity>(renderer: EntitiesRenderer, entity: E) : EntityRenderer<E>(renderer, entity) {
|
||||||
protected var model = createModel()?.register()
|
protected var model: PlayerModel? = null
|
||||||
private var properties: PlayerProperties? = null
|
private var refreshSkin = true
|
||||||
|
|
||||||
|
init {
|
||||||
|
entity.additional::properties.observe(this) { refreshSkin = true }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
override fun update(millis: Long) {
|
override fun update(millis: Long) {
|
||||||
updateSkeletalModel()
|
if (refreshSkin) updateModel()
|
||||||
super.update(millis)
|
super.update(millis)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun updateSkeletalModel() {
|
private fun getSkin(): PlayerSkin? {
|
||||||
if (this.model != null) return
|
return renderer.context.textures.skins.getSkin(entity, fetch = false, async = true)
|
||||||
val update = updateProperties()
|
}
|
||||||
|
|
||||||
val model = createModel() ?: return
|
private fun updateModel() {
|
||||||
|
this.model?.let { this.features -= it }
|
||||||
|
val model = createModel()
|
||||||
|
this.model = model
|
||||||
|
this.refreshSkin = false
|
||||||
|
if (model == null) return
|
||||||
|
|
||||||
this.features += model
|
this.features += model
|
||||||
}
|
}
|
||||||
|
|
||||||
protected open fun createModel(): PlayerModel? {
|
private fun createModel(): PlayerModel? {
|
||||||
val model = getModel() ?: return null
|
|
||||||
|
|
||||||
return PlayerModel(this, model)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun updateProperties(): Boolean {
|
|
||||||
val properties = entity.additional.properties
|
|
||||||
|
|
||||||
if (this.properties == properties) return false
|
|
||||||
unload()
|
|
||||||
this.properties = properties
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
open fun getSkin(): PlayerSkin? {
|
|
||||||
val skins = renderer.context.textures.skins
|
|
||||||
return skins.default[UUID.randomUUID()]
|
|
||||||
// val properties = this.properties?.textures?.skin
|
|
||||||
// if(properties == null){
|
|
||||||
// return renderer.context.textures.skins.getSkin(entity, properties, )
|
|
||||||
//}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private fun getModel(): BakedSkeletalModel? {
|
|
||||||
val skin = getSkin() ?: return null
|
val skin = getSkin() ?: return null
|
||||||
|
return createModel(skin)
|
||||||
|
}
|
||||||
|
|
||||||
|
protected open fun createModel(skin: PlayerSkin): PlayerModel? {
|
||||||
|
val model = getModel(skin) ?: return null
|
||||||
|
|
||||||
|
return PlayerModel(this, model, skin)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private fun getModel(skin: PlayerSkin): BakedSkeletalModel? {
|
||||||
val name = when (skin.model) {
|
val name = when (skin.model) {
|
||||||
SkinModel.WIDE -> WIDE
|
SkinModel.WIDE -> WIDE
|
||||||
SkinModel.SLIM -> SLIM
|
SkinModel.SLIM -> SLIM
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Minosoft
|
* Minosoft
|
||||||
* Copyright (C) 2020 Moritz Zwerger
|
* Copyright (C) 2020-2023 Moritz Zwerger
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
|
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
|
||||||
*
|
*
|
||||||
@ -11,20 +11,12 @@
|
|||||||
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
|
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#version 330 core
|
package de.bixilon.minosoft.gui.rendering.entities.renderer.player
|
||||||
|
|
||||||
out vec4 foutColor;
|
import de.bixilon.minosoft.gui.rendering.skeletal.shader.BaseSkeletalShader
|
||||||
|
import de.bixilon.minosoft.gui.rendering.system.base.buffer.uniform.FloatUniformBuffer
|
||||||
|
import de.bixilon.minosoft.gui.rendering.system.base.shader.NativeShader
|
||||||
|
|
||||||
in vec2 finUV;
|
class PlayerShader(native: NativeShader, buffer: FloatUniformBuffer) : BaseSkeletalShader(native, buffer) {
|
||||||
flat in uint finTextureIndex;
|
var texture by uniform("uIndexLayer", 0x00, NativeShader::setUInt)
|
||||||
in vec3 finTextureCoordinates;
|
|
||||||
|
|
||||||
|
|
||||||
#include "minosoft:texture"
|
|
||||||
#include "minosoft:alpha"
|
|
||||||
|
|
||||||
void main() {
|
|
||||||
vec4 texelColor = getTexture(finTextureIndex, finTextureCoordinates);
|
|
||||||
foutColor = texelColor;
|
|
||||||
// foutColor.a = 1.0f;
|
|
||||||
}
|
}
|
@ -16,7 +16,9 @@ package de.bixilon.minosoft.gui.rendering.skeletal
|
|||||||
import de.bixilon.kotlinglm.mat4x4.Mat4
|
import de.bixilon.kotlinglm.mat4x4.Mat4
|
||||||
import de.bixilon.minosoft.data.registries.identified.Namespaces.minosoft
|
import de.bixilon.minosoft.data.registries.identified.Namespaces.minosoft
|
||||||
import de.bixilon.minosoft.gui.rendering.RenderContext
|
import de.bixilon.minosoft.gui.rendering.RenderContext
|
||||||
|
import de.bixilon.minosoft.gui.rendering.entities.renderer.player.PlayerShader
|
||||||
import de.bixilon.minosoft.gui.rendering.skeletal.instance.SkeletalInstance
|
import de.bixilon.minosoft.gui.rendering.skeletal.instance.SkeletalInstance
|
||||||
|
import de.bixilon.minosoft.gui.rendering.skeletal.shader.SkeletalShader
|
||||||
import org.lwjgl.system.MemoryUtil.memAllocFloat
|
import org.lwjgl.system.MemoryUtil.memAllocFloat
|
||||||
|
|
||||||
class SkeletalManager(
|
class SkeletalManager(
|
||||||
@ -26,13 +28,15 @@ class SkeletalManager(
|
|||||||
val shader = context.system.createShader(minosoft("skeletal")) { SkeletalShader(it, uniformBuffer) }
|
val shader = context.system.createShader(minosoft("skeletal")) { SkeletalShader(it, uniformBuffer) }
|
||||||
private val temp = Mat4()
|
private val temp = Mat4()
|
||||||
|
|
||||||
|
val playerShader = context.system.createShader(minosoft("entities/player")) { PlayerShader(it, uniformBuffer) } // TODO: move somewhere else
|
||||||
|
|
||||||
fun init() {
|
fun init() {
|
||||||
uniformBuffer.init()
|
uniformBuffer.init()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun postInit() {
|
fun postInit() {
|
||||||
shader.native.defines["TRANSFORMS"] = MAX_TRANSFORMS
|
|
||||||
shader.load()
|
shader.load()
|
||||||
|
playerShader.load()
|
||||||
shader.light = 0xFF
|
shader.light = 0xFF
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -49,6 +53,6 @@ class SkeletalManager(
|
|||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private const val MAX_TRANSFORMS = 128
|
const val MAX_TRANSFORMS = 128
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,28 +11,33 @@
|
|||||||
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
|
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package de.bixilon.minosoft.gui.rendering.skeletal
|
package de.bixilon.minosoft.gui.rendering.skeletal.shader
|
||||||
|
|
||||||
import de.bixilon.kotlinglm.mat4x4.Mat4
|
import de.bixilon.kotlinglm.mat4x4.Mat4
|
||||||
import de.bixilon.kotlinglm.vec3.Vec3
|
import de.bixilon.kotlinglm.vec3.Vec3
|
||||||
import de.bixilon.minosoft.gui.rendering.camera.FogManager
|
import de.bixilon.minosoft.gui.rendering.camera.FogManager
|
||||||
import de.bixilon.minosoft.gui.rendering.light.LightmapBuffer
|
|
||||||
import de.bixilon.minosoft.gui.rendering.shader.Shader
|
import de.bixilon.minosoft.gui.rendering.shader.Shader
|
||||||
import de.bixilon.minosoft.gui.rendering.shader.types.*
|
import de.bixilon.minosoft.gui.rendering.shader.types.FogShader
|
||||||
|
import de.bixilon.minosoft.gui.rendering.shader.types.TextureShader
|
||||||
|
import de.bixilon.minosoft.gui.rendering.shader.types.ViewProjectionShader
|
||||||
|
import de.bixilon.minosoft.gui.rendering.skeletal.SkeletalManager
|
||||||
import de.bixilon.minosoft.gui.rendering.system.base.buffer.uniform.FloatUniformBuffer
|
import de.bixilon.minosoft.gui.rendering.system.base.buffer.uniform.FloatUniformBuffer
|
||||||
import de.bixilon.minosoft.gui.rendering.system.base.shader.NativeShader
|
import de.bixilon.minosoft.gui.rendering.system.base.shader.NativeShader
|
||||||
import de.bixilon.minosoft.gui.rendering.system.base.texture.TextureManager
|
import de.bixilon.minosoft.gui.rendering.system.base.texture.TextureManager
|
||||||
|
|
||||||
open class SkeletalShader(
|
abstract class BaseSkeletalShader(
|
||||||
override val native: NativeShader,
|
override val native: NativeShader,
|
||||||
buffer: FloatUniformBuffer,
|
buffer: FloatUniformBuffer,
|
||||||
) : Shader(), TextureShader, AnimatedShader, LightShader, ViewProjectionShader, FogShader {
|
) : Shader(), TextureShader, ViewProjectionShader, FogShader {
|
||||||
override var textures: TextureManager by textureManager()
|
override var textures: TextureManager by textureManager()
|
||||||
override val lightmap: LightmapBuffer by lightmap()
|
|
||||||
override var viewProjectionMatrix: Mat4 by viewProjectionMatrix()
|
override var viewProjectionMatrix: Mat4 by viewProjectionMatrix()
|
||||||
override var cameraPosition: Vec3 by cameraPosition()
|
override var cameraPosition: Vec3 by cameraPosition()
|
||||||
override var fog: FogManager by fog()
|
override var fog: FogManager by fog()
|
||||||
|
|
||||||
var light by uniform("uLight", 0x00, NativeShader::setUInt)
|
|
||||||
var skeletalBuffer by uniform("uSkeletalBuffer", buffer)
|
var skeletalBuffer by uniform("uSkeletalBuffer", buffer)
|
||||||
|
|
||||||
|
|
||||||
|
init {
|
||||||
|
native.defines["TRANSFORMS"] = SkeletalManager.MAX_TRANSFORMS
|
||||||
|
}
|
||||||
}
|
}
|
@ -0,0 +1,25 @@
|
|||||||
|
/*
|
||||||
|
* Minosoft
|
||||||
|
* Copyright (C) 2020-2023 Moritz Zwerger
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package de.bixilon.minosoft.gui.rendering.skeletal.shader
|
||||||
|
|
||||||
|
import de.bixilon.minosoft.gui.rendering.light.LightmapBuffer
|
||||||
|
import de.bixilon.minosoft.gui.rendering.shader.types.AnimatedShader
|
||||||
|
import de.bixilon.minosoft.gui.rendering.shader.types.LightShader
|
||||||
|
import de.bixilon.minosoft.gui.rendering.system.base.buffer.uniform.FloatUniformBuffer
|
||||||
|
import de.bixilon.minosoft.gui.rendering.system.base.shader.NativeShader
|
||||||
|
|
||||||
|
class SkeletalShader(native: NativeShader, buffer: FloatUniformBuffer) : BaseSkeletalShader(native, buffer), AnimatedShader, LightShader {
|
||||||
|
var light by uniform("uLight", 0xFF, NativeShader::setUInt)
|
||||||
|
override val lightmap: LightmapBuffer by lightmap() // TODO: remove (interpolate on cpu)
|
||||||
|
}
|
@ -22,16 +22,18 @@ out vec4 foutColor;
|
|||||||
#include "minosoft:alpha"
|
#include "minosoft:alpha"
|
||||||
#include "minosoft:fog"
|
#include "minosoft:fog"
|
||||||
|
|
||||||
flat in bool finSkinLayer;
|
in vec4 finTintColor;
|
||||||
|
|
||||||
uniform uint uTextureIndex;
|
// flat in bool finSkinLayer;
|
||||||
uniform vec3 uTextureCoordinates;
|
|
||||||
|
flat in uint finTextureIndex;
|
||||||
|
in vec3 finTextureCoordinates;
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
foutColor = getTexture(uTextureIndex, uTextureCoordinates);
|
foutColor = getTexture(finTextureIndex, finTextureCoordinates);
|
||||||
if (finSkinLayer) {
|
// if (finSkinLayer) {
|
||||||
if (foutColor.a < 0.5) discard;
|
// if (foutColor.a < 0.5) discard;
|
||||||
}
|
// }
|
||||||
foutColor.a = 1.0f;
|
foutColor.a = 1.0f;
|
||||||
set_fog();
|
set_fog();
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Minosoft
|
* Minosoft
|
||||||
* Copyright (C) 2020 Moritz Zwerger
|
* Copyright (C) 2020-2022 Moritz Zwerger
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
|
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
|
||||||
*
|
*
|
||||||
@ -15,17 +15,26 @@
|
|||||||
|
|
||||||
layout (location = 0) in vec3 vinPosition;
|
layout (location = 0) in vec3 vinPosition;
|
||||||
layout (location = 1) in vec2 vinUV;
|
layout (location = 1) in vec2 vinUV;
|
||||||
|
layout (location = 2) in float vinPartTransformNormal; // part(0x380000) transform (0x7F000), normal (0xFFF)
|
||||||
|
|
||||||
|
out vec3 finFragmentPosition;
|
||||||
|
|
||||||
|
|
||||||
|
uniform uint uIndexLayer;
|
||||||
|
|
||||||
|
// flat out bool finSkinLayer;
|
||||||
|
|
||||||
flat out uint finTextureIndex;
|
flat out uint finTextureIndex;
|
||||||
out vec3 finTextureCoordinates;
|
out vec3 finTextureCoordinates;
|
||||||
|
|
||||||
uniform uint uIndexLayer;
|
out vec4 finTintColor;
|
||||||
uniform mat4 uTransform;
|
|
||||||
|
#include "minosoft:skeletal/vertex"
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
gl_Position = uTransform * vec4(vinPosition, 1.0f);
|
uint partTransformNormal = floatBitsToUint(vinPartTransformNormal);
|
||||||
gl_Position.w = 1.0f;
|
run_skeletal(partTransformNormal, vinPosition);
|
||||||
|
// finSkinLayer = (partTransformNormal >> 13u & 0x07u) > 0u;
|
||||||
|
|
||||||
finTextureIndex = uIndexLayer >> 28u;
|
finTextureIndex = uIndexLayer >> 28u;
|
||||||
finTextureCoordinates = vec3(vinUV, ((uIndexLayer >> 12) & 0xFFFFu));
|
finTextureCoordinates = vec3(vinUV, ((uIndexLayer >> 12) & 0xFFFFu));
|
@ -1,34 +0,0 @@
|
|||||||
/*
|
|
||||||
* Minosoft
|
|
||||||
* Copyright (C) 2020-2022 Moritz Zwerger
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#version 330 core
|
|
||||||
|
|
||||||
layout (location = 0) in vec3 vinPosition;
|
|
||||||
layout (location = 1) in vec2 vinUV;
|
|
||||||
layout (location = 2) in float vinTransformNormal; // transform (0x7F000), normal (0xFFF)
|
|
||||||
|
|
||||||
#include "minosoft:animation/header_vertex"
|
|
||||||
#include "minosoft:skeletal/vertex"
|
|
||||||
|
|
||||||
|
|
||||||
#include "minosoft:animation/buffer"
|
|
||||||
#include "minosoft:animation/main_vertex"
|
|
||||||
|
|
||||||
flat out bool finSkinLayer;
|
|
||||||
|
|
||||||
|
|
||||||
void main() {
|
|
||||||
run_skeletal(floatBitsToUint(vinTransformNormal), vinPosition);
|
|
||||||
run_animation();
|
|
||||||
finSkinLayer = false;
|
|
||||||
}
|
|
@ -37,7 +37,7 @@ float calulate_fog_alpha(float distance2) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
float calculate_fog() {
|
float calculate_fog() {
|
||||||
if (uFogStart > 100000.0f) {
|
if (uFogStart > 10000.0f) {
|
||||||
return 1.0f;
|
return 1.0f;
|
||||||
};
|
};
|
||||||
#ifdef FOG_SPHERE
|
#ifdef FOG_SPHERE
|
||||||
|
Loading…
x
Reference in New Issue
Block a user