Compare commits

..

No commits in common. "e2115397fea6169255b5d3fbf3734dfe020ba16e" and "e88c2ba9b045331bb94c23801ad05155a68434ee" have entirely different histories.

4 changed files with 77 additions and 81 deletions

View File

@ -4,7 +4,6 @@ import com.mojang.blaze3d.vertex.PoseStack
import net.minecraft.client.Camera import net.minecraft.client.Camera
import net.neoforged.neoforge.client.event.RenderLevelStageEvent import net.neoforged.neoforge.client.event.RenderLevelStageEvent
import ru.dbotthepony.mc.otm.capability.MatteryPlayer import ru.dbotthepony.mc.otm.capability.MatteryPlayer
import ru.dbotthepony.mc.otm.client.render.DynamicBufferSource
abstract class AndroidActiveFeature(type: AndroidFeatureType<*>, android: MatteryPlayer) : AndroidSwitchableFeature(type, android) { abstract class AndroidActiveFeature(type: AndroidFeatureType<*>, android: MatteryPlayer) : AndroidSwitchableFeature(type, android) {
/** /**
@ -23,5 +22,5 @@ abstract class AndroidActiveFeature(type: AndroidFeatureType<*>, android: Matter
* *
* pose stack has pose pushed already * pose stack has pose pushed already
*/ */
abstract fun renderPreview(poseStack: PoseStack, camera: Camera, bufferSource: DynamicBufferSource) abstract fun renderPreview(poseStack: PoseStack, camera: Camera)
} }

View File

@ -8,6 +8,7 @@ import net.minecraft.core.BlockPos
import net.minecraft.core.Direction import net.minecraft.core.Direction
import net.minecraft.core.Vec3i import net.minecraft.core.Vec3i
import net.minecraft.network.protocol.game.ClientboundSoundEntityPacket import net.minecraft.network.protocol.game.ClientboundSoundEntityPacket
import net.minecraft.resources.ResourceLocation
import net.minecraft.server.level.ServerPlayer import net.minecraft.server.level.ServerPlayer
import net.minecraft.sounds.SoundEvents import net.minecraft.sounds.SoundEvents
import net.minecraft.sounds.SoundSource import net.minecraft.sounds.SoundSource
@ -322,7 +323,7 @@ class EnderTeleporterFeature(capability: MatteryPlayer) : AndroidActiveFeature(A
override val previewRenderStage: RenderLevelStageEvent.Stage override val previewRenderStage: RenderLevelStageEvent.Stage
get() = RenderLevelStageEvent.Stage.AFTER_PARTICLES get() = RenderLevelStageEvent.Stage.AFTER_PARTICLES
override fun renderPreview(poseStack: PoseStack, camera: Camera, bufferSource: DynamicBufferSource) { override fun renderPreview(poseStack: PoseStack, camera: Camera) {
if (!canUse()) return if (!canUse()) return
val (pos, phasedBlocks) = trace() val (pos, phasedBlocks) = trace()
@ -349,7 +350,7 @@ class EnderTeleporterFeature(capability: MatteryPlayer) : AndroidActiveFeature(A
if (phasedBlocks.isNotEmpty()) { if (phasedBlocks.isNotEmpty()) {
poseStack.popPose() poseStack.popPose()
val collisionContext = CollisionContext.of(ply) val collisionContext = CollisionContext.of(ply)
val builder = bufferSource.getBuffer(linesIgnoreZRenderType) val builder = source.getBuffer(linesIgnoreZRenderType)
for (blockPos in phasedBlocks) { for (blockPos in phasedBlocks) {
val blockState = ply.level().getBlockState(blockPos) val blockState = ply.level().getBlockState(blockPos)
@ -366,7 +367,7 @@ class EnderTeleporterFeature(capability: MatteryPlayer) : AndroidActiveFeature(A
) )
} }
bufferSource.endBatch(linesIgnoreZRenderType) source.endBatch(linesIgnoreZRenderType)
} }
RenderSystem.enableDepthTest() RenderSystem.enableDepthTest()
@ -386,6 +387,10 @@ class EnderTeleporterFeature(capability: MatteryPlayer) : AndroidActiveFeature(A
} }
companion object { companion object {
private val source by lazy {
DynamicBufferSource(maximalInitialBufferSize = 256)
}
private val SHAPE_CHECK_NOT_FENCE = Block.box(6.0, 17.0, 6.0, 10.0, 31.0, 10.0) private val SHAPE_CHECK_NOT_FENCE = Block.box(6.0, 17.0, 6.0, 10.0, 31.0, 10.0)
private val SHAPE_CHECK_SUPPORT_PLAYER = Block.box(6.0, 0.0, 6.0, 10.0, 16.0, 10.0) private val SHAPE_CHECK_SUPPORT_PLAYER = Block.box(6.0, 0.0, 6.0, 10.0, 16.0, 10.0)

View File

@ -14,7 +14,6 @@ import ru.dbotthepony.mc.otm.client.render.MGUIGraphics
import ru.dbotthepony.mc.otm.client.render.Widgets18 import ru.dbotthepony.mc.otm.client.render.Widgets18
import ru.dbotthepony.mc.otm.client.render.is3DContext import ru.dbotthepony.mc.otm.client.render.is3DContext
import ru.dbotthepony.kommons.math.RGBAColor import ru.dbotthepony.kommons.math.RGBAColor
import ru.dbotthepony.mc.otm.client.render.DynamicBufferSource
import ru.dbotthepony.mc.otm.network.ActivateAndroidFeaturePacket import ru.dbotthepony.mc.otm.network.ActivateAndroidFeaturePacket
import kotlin.math.roundToInt import kotlin.math.roundToInt
@ -84,7 +83,7 @@ object AndroidAbilityKeyMapping : KeyMapping("key.otm.android_ability", KeyConfl
try { try {
is3DContext = true is3DContext = true
event.poseStack.pushPose() event.poseStack.pushPose()
feature.renderPreview(event.poseStack, event.camera, DynamicBufferSource.WORLD) feature.renderPreview(event.poseStack, event.camera)
} finally { } finally {
is3DContext = false is3DContext = false
event.poseStack.popPose() event.poseStack.popPose()

View File

@ -182,85 +182,78 @@ sealed class AbstractMatterySprite : IGUIRenderable, IUVCoords {
type.toActualNetwork(this, buff) type.toActualNetwork(this, buff)
} }
private inner class ClientData { val renderTypeNoDepth by lazy {
val renderTypeNoDepth by lazy { noDepthCache.computeIfAbsent(texture) {
noDepthCache.computeIfAbsent(texture) { val builder = RenderType.CompositeState.builder()
val builder = RenderType.CompositeState.builder()
builder.setTextureState(RenderStateShard.TextureStateShard(it, false, false)) builder.setTextureState(RenderStateShard.TextureStateShard(it, false, false))
builder.setShaderState(RenderStateShard.ShaderStateShard(GameRenderer::getPositionTexColorShader)) builder.setShaderState(RenderStateShard.ShaderStateShard(GameRenderer::getPositionTexColorShader))
builder.setDepthTestState(RenderStateShard.DepthTestStateShard("always", GL_ALWAYS)) builder.setDepthTestState(RenderStateShard.DepthTestStateShard("always", GL_ALWAYS))
builder.setTransparencyState(RenderStateShard.TransparencyStateShard("normal_blend", { builder.setTransparencyState(RenderStateShard.TransparencyStateShard("normal_blend", {
RenderSystem.enableBlend() RenderSystem.enableBlend()
RenderSystem.defaultBlendFunc() RenderSystem.defaultBlendFunc()
}, { }, {
RenderSystem.disableBlend() RenderSystem.disableBlend()
})) }))
@Suppress("INACCESSIBLE_TYPE") @Suppress("INACCESSIBLE_TYPE")
RenderType.create("otm_gui_element_no_depth", RenderType.create("otm_gui_element_no_depth",
DefaultVertexFormat.POSITION_TEX_COLOR, DefaultVertexFormat.POSITION_TEX_COLOR,
VertexFormat.Mode.QUADS, VertexFormat.Mode.QUADS,
2048, 2048,
false, false,
false, false,
builder.createCompositeState(false)) as RenderType builder.createCompositeState(false)) as RenderType
}
}
val renderTypeDepth by lazy {
depthCache.computeIfAbsent(texture) {
val builder = RenderType.CompositeState.builder()
builder.setTextureState(RenderStateShard.TextureStateShard(it, false, false))
builder.setShaderState(RenderStateShard.ShaderStateShard(GameRenderer::getPositionTexColorShader))
builder.setTransparencyState(RenderStateShard.TransparencyStateShard("normal_blend", {
RenderSystem.enableBlend()
RenderSystem.defaultBlendFunc()
}, {
RenderSystem.disableBlend()
}))
@Suppress("INACCESSIBLE_TYPE")
RenderType.create("otm_gui_element_depth",
DefaultVertexFormat.POSITION_TEX_COLOR,
VertexFormat.Mode.QUADS,
2048,
false,
false,
builder.createCompositeState(false)) as RenderType
}
}
val renderTypeWorld by lazy {
worldCache.computeIfAbsent(texture) {
val builder = RenderType.CompositeState.builder()
builder.setTextureState(RenderStateShard.TextureStateShard(it, false, false))
builder.setShaderState(RenderStateShard.ShaderStateShard(GameRenderer::getPositionTexColorShader))
builder.setTransparencyState(RenderStateShard.TransparencyStateShard("normal_blend", {
RenderSystem.enableBlend()
RenderSystem.defaultBlendFunc()
}, {
RenderSystem.disableBlend()
}))
@Suppress("INACCESSIBLE_TYPE")
RenderType.create("otm_gui_element_world",
DefaultVertexFormat.POSITION_TEX_COLOR,
VertexFormat.Mode.QUADS,
8192,
false,
false,
builder.createCompositeState(false)) as RenderType
}
} }
} }
private val clientData by lazy { ClientData() } val renderTypeDepth by lazy {
val renderTypeNoDepth get() = clientData.renderTypeNoDepth depthCache.computeIfAbsent(texture) {
val renderTypeDepth get() = clientData.renderTypeDepth val builder = RenderType.CompositeState.builder()
val renderTypeWorld get() = clientData.renderTypeWorld
builder.setTextureState(RenderStateShard.TextureStateShard(it, false, false))
builder.setShaderState(RenderStateShard.ShaderStateShard(GameRenderer::getPositionTexColorShader))
builder.setTransparencyState(RenderStateShard.TransparencyStateShard("normal_blend", {
RenderSystem.enableBlend()
RenderSystem.defaultBlendFunc()
}, {
RenderSystem.disableBlend()
}))
@Suppress("INACCESSIBLE_TYPE")
RenderType.create("otm_gui_element_depth",
DefaultVertexFormat.POSITION_TEX_COLOR,
VertexFormat.Mode.QUADS,
2048,
false,
false,
builder.createCompositeState(false)) as RenderType
}
}
val renderTypeWorld by lazy {
worldCache.computeIfAbsent(texture) {
val builder = RenderType.CompositeState.builder()
builder.setTextureState(RenderStateShard.TextureStateShard(it, false, false))
builder.setShaderState(RenderStateShard.ShaderStateShard(GameRenderer::getPositionTexColorShader))
builder.setTransparencyState(RenderStateShard.TransparencyStateShard("normal_blend", {
RenderSystem.enableBlend()
RenderSystem.defaultBlendFunc()
}, {
RenderSystem.disableBlend()
}))
@Suppress("INACCESSIBLE_TYPE")
RenderType.create("otm_gui_element_world",
DefaultVertexFormat.POSITION_TEX_COLOR,
VertexFormat.Mode.QUADS,
8192,
false,
false,
builder.createCompositeState(false)) as RenderType
}
}
companion object { companion object {
private val noDepthCache = ConcurrentHashMap<ResourceLocation, RenderType>() private val noDepthCache = ConcurrentHashMap<ResourceLocation, RenderType>()