Skip to content

Commit c80a55a

Browse files
committed
使用事件进行渲染着色器
提高兼容性 (虽然好像没什么区别)
1 parent d5d0626 commit c80a55a

9 files changed

Lines changed: 54 additions & 71 deletions

File tree

common/src/main/java/cn/coostack/cooparticlesapi/mixin/WorldRendererMixin.java

Lines changed: 0 additions & 45 deletions
This file was deleted.

common/src/main/kotlin/cn/coostack/cooparticlesapi/CooParticlesAPIClient.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ object CooParticlesAPIClient {
7272
renderInit = true
7373
ShaderPipeManagers.init() // 注册到pipeline
7474
ClientRenderPipelineManager.init() // 把注册的pipeline进行一个初始化
75+
ClientRenderEntityManager.init()
7576
CooParticlesConstants.logger.info("初始化渲染管线")
7677
}
7778

common/src/main/kotlin/cn/coostack/cooparticlesapi/items/TestTickItem.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ class TestTickItem : Item(Item.Properties().stacksTo(1)) {
3131
val server = world.server!!
3232
val tickManager = server.tickRateManager()
3333
val frozen = tickManager.isFrozen
34+
3435
if (frozen) {
3536
if (tickManager.isSprinting) {
3637
tickManager.stopSprinting()

common/src/main/kotlin/cn/coostack/cooparticlesapi/renderer/client/ClientRenderEntityManager.kt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package cn.coostack.cooparticlesapi.renderer.client
22

3+
import cn.coostack.cooparticlesapi.CooParticlesConstants
34
import cn.coostack.cooparticlesapi.exceptions.RenderPipeNotFoundException
45
import cn.coostack.cooparticlesapi.renderer.RenderEntity
6+
import com.mojang.blaze3d.systems.RenderSystem
57
import net.minecraft.client.Minecraft
68
import net.minecraft.client.Minecraft.*
79
import net.minecraft.network.FriendlyByteBuf
@@ -23,6 +25,10 @@ object ClientRenderEntityManager {
2325
*/
2426
private val entityPipeType = HashMap<ResourceLocation, ResourceLocation>()
2527
private val entityCodecs = HashMap<ResourceLocation, StreamCodec<FriendlyByteBuf, RenderEntity>>()
28+
29+
fun init() {
30+
}
31+
2632
fun getFrom(uuid: UUID): RenderEntity? {
2733
return entities[uuid]
2834
}
@@ -74,6 +80,7 @@ object ClientRenderEntityManager {
7480
}
7581

7682
val stack = Matrix4fStack(16)
83+
val target = minecraft.mainRenderTarget
7784
entitiesPipeClassifier.forEach {
7885
val pipeID = it.key
7986
val entities = it.value
@@ -88,7 +95,11 @@ object ClientRenderEntityManager {
8895
stack.popMatrix()
8996
}
9097
}
98+
target.bindWrite(false)
99+
RenderSystem.depthMask(false)
91100
pipe.render()
101+
RenderSystem.depthMask(true)
102+
target.unbindWrite()
92103
}
93104
}
94105

common/src/main/kotlin/cn/coostack/cooparticlesapi/renderer/shader/glsl/MinecraftHookFrameBuffer.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ open class MinecraftHookFrameBuffer(
6767
glClear(bit)
6868
}
6969

70+
7071
override fun bindFramebuffer() {
7172
prevFBO = glGetInteger(GL_FRAMEBUFFER_BINDING)
7273
glBindFramebuffer(GL_FRAMEBUFFER, fbo())

common/src/main/kotlin/cn/coostack/cooparticlesapi/test/renderer/TestRendererEntity.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ class TestRendererEntity(world: Level?) : RenderEntity(world) {
3131
setVertexes(ShaderUtil.genBall(5f, 64, 64), CooVertexFormat.POINT_FORMAT)
3232
}
3333
val ballShader = ShaderProgramBuilder()
34-
.vertex("core/vertex/point_random_offset.vsh")
34+
.vertex("core/vertex/point.vsh")
3535
.fragment("core/fragment/color.fsh")
3636
.build()
3737
var initialized = false
@@ -79,8 +79,8 @@ class TestRendererEntity(world: Level?) : RenderEntity(world) {
7979
setMatrix4("projMat", projMatrix)
8080
setMatrix4("viewMat", viewMatrix)
8181
setMatrix4("transMat", matrices)
82-
setFloat("offset", 5f)
83-
setFloat("time", Math.toRadians(world?.gameTime?.toDouble() ?: 0.0).toFloat())
82+
// setFloat("offset", 5f)
83+
// setFloat("time", Math.toRadians(world?.gameTime?.toDouble() ?: 0.0).toFloat())
8484
setFloat3("color", randomColor)
8585
ballBuffer.draw()
8686
matrices.popMatrix()

common/src/main/resources/cooparticlesapi.mixins.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
"package": "cn.coostack.cooparticlesapi.mixin",
44
"plugin": "cn.coostack.cooparticlesapi.mixin.plugin.CooParticleFabricMixinLoaderPlugin",
55
"compatibilityLevel": "JAVA_18",
6-
"mixins": [],
6+
"mixins": [
7+
],
78
"refmap": "cooparticlesapi.refmap.json",
89
"injectors": {
910
"defaultRequire": 1
@@ -12,7 +13,6 @@
1213
"CooParticleCameraMixin",
1314
"MainTargetMixin",
1415
"ParticleEngineAccessor",
15-
"ParticleEngineMixin",
16-
"WorldRendererMixin"
16+
"ParticleEngineMixin"
1717
]
1818
}

fabric/src/main/kotlin/cn/coostack/cooparticlesapi/CooParticlesAPIFabricClient.kt

Lines changed: 19 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,22 @@
11
package cn.coostack.cooparticlesapi
22

3-
import cn.coostack.cooparticlesapi.network.packet.PacketCameraShakeS2C
4-
import cn.coostack.cooparticlesapi.network.packet.PacketParticleEmittersS2C
5-
import cn.coostack.cooparticlesapi.network.packet.PacketParticleGroupS2C
6-
import cn.coostack.cooparticlesapi.network.packet.PacketParticleS2C
7-
import cn.coostack.cooparticlesapi.network.packet.PacketParticleStyleS2C
8-
import cn.coostack.cooparticlesapi.network.packet.PacketRenderEntityS2C
9-
import cn.coostack.cooparticlesapi.network.packet.client.listener.ClientCameraShakeHandler
10-
import cn.coostack.cooparticlesapi.network.packet.client.listener.ClientParticleEmittersPacketHandler
11-
import cn.coostack.cooparticlesapi.network.packet.client.listener.ClientParticleGroupPacketHandler
12-
import cn.coostack.cooparticlesapi.network.packet.client.listener.ClientParticlePacketHandler
13-
import cn.coostack.cooparticlesapi.network.packet.client.listener.ClientParticleStylePacketHandler
14-
import cn.coostack.cooparticlesapi.network.packet.client.listener.ClientRenderEntityPacketHandler
3+
import cn.coostack.cooparticlesapi.CooParticlesAPIClient.initShaderPrograms
4+
import cn.coostack.cooparticlesapi.network.packet.*
5+
import cn.coostack.cooparticlesapi.network.packet.client.listener.*
156
import cn.coostack.cooparticlesapi.particles.CooModParticles
16-
import cn.coostack.cooparticlesapi.particles.impl.ControlableCloudParticle
17-
import cn.coostack.cooparticlesapi.particles.impl.ControlableEnchantmentParticle
18-
import cn.coostack.cooparticlesapi.particles.impl.ControlableEndRodParticle
19-
import cn.coostack.cooparticlesapi.particles.impl.ControlableFireworkParticle
20-
import cn.coostack.cooparticlesapi.particles.impl.ControlableFlashParticle
7+
import cn.coostack.cooparticlesapi.particles.impl.*
218
import cn.coostack.cooparticlesapi.platform.network.FabricClientContext
22-
import cn.coostack.cooparticlesapi.renderer.client.ClientRenderPipelineManager
9+
import cn.coostack.cooparticlesapi.renderer.client.ClientRenderEntityManager.renderTick
2310
import net.fabricmc.api.ClientModInitializer
2411
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents
2512
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientWorldEvents
2613
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents
2714
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking
2815
import net.fabricmc.fabric.api.client.particle.v1.ParticleFactoryRegistry
16+
import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents
2917
import net.minecraft.client.Minecraft
30-
import org.lwjgl.glfw.GLFW
31-
import org.lwjgl.glfw.GLFWWindowSizeCallback
18+
import org.joml.Matrix4f
19+
3220

3321
object CooParticlesAPIFabricClient : ClientModInitializer {
3422
override fun onInitializeClient() {
@@ -48,6 +36,17 @@ object CooParticlesAPIFabricClient : ClientModInitializer {
4836
ClientWorldEvents.AFTER_CLIENT_WORLD_CHANGE.register { _, _ ->
4937
CooParticlesAPIClient.afterClientWorldChange()
5038
}
39+
40+
WorldRenderEvents.END.register {
41+
val view: Matrix4f = Matrix4f().rotate(it.camera().rotation())
42+
val projection: Matrix4f = it.projectionMatrix()
43+
val tickDelta: Float = it.tickCounter().gameTimeDeltaTicks
44+
val level = Minecraft.getInstance().level ?: return@register
45+
initShaderPrograms()
46+
val shouldTick: Boolean = level.tickRateManager().runsNormally()
47+
renderTick(tickDelta, it.positionMatrix(), projection)
48+
}
49+
5150
}
5251

5352
private fun registerParticleFabric() {

neoforge/src/main/kotlin/cn/coostack/cooparticlesapi/listener/client/CooParticlesAPINeoClientListener.kt

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
11
package cn.coostack.cooparticlesapi.listener.client
22

33
import cn.coostack.cooparticlesapi.CooParticlesAPIClient
4+
import cn.coostack.cooparticlesapi.CooParticlesAPIClient.initShaderPrograms
45
import cn.coostack.cooparticlesapi.CooParticlesConstants
6+
import cn.coostack.cooparticlesapi.renderer.client.ClientRenderEntityManager.renderTick
7+
import net.minecraft.client.Minecraft
58
import net.minecraft.client.multiplayer.ClientLevel
69
import net.neoforged.api.distmarker.Dist
710
import net.neoforged.bus.api.SubscribeEvent
811
import net.neoforged.fml.common.EventBusSubscriber
12+
import net.neoforged.neoforge.client.event.RenderLevelStageEvent
913
import net.neoforged.neoforge.event.entity.player.PlayerEvent
1014
import net.neoforged.neoforge.event.tick.LevelTickEvent
1115

@@ -32,4 +36,15 @@ object CooParticlesAPINeoClientListener {
3236
CooParticlesAPIClient.afterClientWorldChange()
3337
}
3438

39+
@SubscribeEvent
40+
fun onRender(event: RenderLevelStageEvent) {
41+
if (event.stage != RenderLevelStageEvent.Stage.AFTER_LEVEL) return
42+
val level = Minecraft.getInstance().level ?: return
43+
44+
initShaderPrograms()
45+
val shouldTick: Boolean = level.tickRateManager().runsNormally()
46+
val tickDelta: Float = event.partialTick.getGameTimeDeltaPartialTick(!shouldTick)
47+
renderTick(tickDelta, event.modelViewMatrix, event.projectionMatrix)
48+
}
49+
3550
}

0 commit comments

Comments
 (0)