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.neoforged.neoforge.client.event.RenderLevelStageEvent
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) {
/**
@ -23,5 +22,5 @@ abstract class AndroidActiveFeature(type: AndroidFeatureType<*>, android: Matter
*
* 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.Vec3i
import net.minecraft.network.protocol.game.ClientboundSoundEntityPacket
import net.minecraft.resources.ResourceLocation
import net.minecraft.server.level.ServerPlayer
import net.minecraft.sounds.SoundEvents
import net.minecraft.sounds.SoundSource
@ -322,7 +323,7 @@ class EnderTeleporterFeature(capability: MatteryPlayer) : AndroidActiveFeature(A
override val previewRenderStage: RenderLevelStageEvent.Stage
get() = RenderLevelStageEvent.Stage.AFTER_PARTICLES
override fun renderPreview(poseStack: PoseStack, camera: Camera, bufferSource: DynamicBufferSource) {
override fun renderPreview(poseStack: PoseStack, camera: Camera) {
if (!canUse()) return
val (pos, phasedBlocks) = trace()
@ -349,7 +350,7 @@ class EnderTeleporterFeature(capability: MatteryPlayer) : AndroidActiveFeature(A
if (phasedBlocks.isNotEmpty()) {
poseStack.popPose()
val collisionContext = CollisionContext.of(ply)
val builder = bufferSource.getBuffer(linesIgnoreZRenderType)
val builder = source.getBuffer(linesIgnoreZRenderType)
for (blockPos in phasedBlocks) {
val blockState = ply.level().getBlockState(blockPos)
@ -366,7 +367,7 @@ class EnderTeleporterFeature(capability: MatteryPlayer) : AndroidActiveFeature(A
)
}
bufferSource.endBatch(linesIgnoreZRenderType)
source.endBatch(linesIgnoreZRenderType)
}
RenderSystem.enableDepthTest()
@ -386,6 +387,10 @@ class EnderTeleporterFeature(capability: MatteryPlayer) : AndroidActiveFeature(A
}
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_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.is3DContext
import ru.dbotthepony.kommons.math.RGBAColor
import ru.dbotthepony.mc.otm.client.render.DynamicBufferSource
import ru.dbotthepony.mc.otm.network.ActivateAndroidFeaturePacket
import kotlin.math.roundToInt
@ -84,7 +83,7 @@ object AndroidAbilityKeyMapping : KeyMapping("key.otm.android_ability", KeyConfl
try {
is3DContext = true
event.poseStack.pushPose()
feature.renderPreview(event.poseStack, event.camera, DynamicBufferSource.WORLD)
feature.renderPreview(event.poseStack, event.camera)
} finally {
is3DContext = false
event.poseStack.popPose()

View File

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