Skip to content

Commit 047013e

Browse files
committed
大改Shader相关框架 (AI)
(着色器果然还是交给AI是最好的)
1 parent 5c6de75 commit 047013e

58 files changed

Lines changed: 4944 additions & 181 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

common/build.gradle

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ dependencies {
3636
implementation fileTree(dir: "../depend", includes: ["*.jar"])
3737

3838
implementation 'io.github.classgraph:classgraph:4.8.184'
39+
testImplementation 'org.jetbrains.kotlin:kotlin-test'
40+
testImplementation 'org.joml:joml:1.10.8'
3941
}
4042
tasks.named('jar', Jar) {
4143
destinationDirectory.set(file("../builds/jar"))
@@ -63,3 +65,7 @@ configurations {
6365
}
6466
}
6567

68+
tasks.withType(Test).configureEach {
69+
useJUnitPlatform()
70+
}
71+

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

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,15 @@
1010

1111
@Mixin(GameRenderer.class)
1212
public class GameRendererMixin {
13-
@Inject(method = "renderLevel", at = @At("RETURN"))
14-
private void renderAfterLevel(DeltaTracker deltaTracker, CallbackInfo ci) {
15-
ClientRenderEntityManager.INSTANCE.flushPostProcess();
13+
@Inject(
14+
method = "renderLevel",
15+
at = @At(
16+
value = "INVOKE",
17+
target = "Lnet/minecraft/client/renderer/LevelRenderer;renderLevel(Lnet/minecraft/client/DeltaTracker;ZLnet/minecraft/client/Camera;Lnet/minecraft/client/renderer/GameRenderer;Lnet/minecraft/client/renderer/LightTexture;Lorg/joml/Matrix4f;Lorg/joml/Matrix4f;)V",
18+
shift = At.Shift.AFTER
19+
)
20+
)
21+
private void renderAfterWorld(DeltaTracker deltaTracker, CallbackInfo ci) {
22+
ClientRenderEntityManager.INSTANCE.flushFrameComposites();
1623
}
1724
}

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

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,15 +35,16 @@ public void renderBeforeEntity(DeltaTracker deltaTracker,
3535
Matrix4f projectionMatrix,
3636
CallbackInfo info) {
3737

38-
if (CooParticlesAPIClient.checkIrisShaderPackUsed()) {
39-
return;
40-
}
4138
if (level == null) {
4239
return;
4340
}
4441
CooParticlesAPIClient.initShaderPrograms();
4542
boolean shouldTick = level.tickRateManager().runsNormally();
4643
float tickDelta = deltaTracker.getGameTimeDeltaPartialTick(!shouldTick);
44+
ClientRenderEntityManager.INSTANCE.cacheFrameState(tickDelta, frustumMatrix, projectionMatrix);
45+
if (CooParticlesAPIClient.checkIrisShaderPackUsed()) {
46+
return;
47+
}
4748
ClientRenderEntityManager.INSTANCE.renderWorldPass(tickDelta, frustumMatrix, projectionMatrix);
4849
}
4950

@@ -63,10 +64,10 @@ public void renderOnTail(DeltaTracker deltaTracker,
6364
CooParticlesAPIClient.initShaderPrograms();
6465
boolean shouldTick = level.tickRateManager().runsNormally();
6566
float tickDelta = deltaTracker.getGameTimeDeltaPartialTick(!shouldTick);
67+
ClientRenderEntityManager.INSTANCE.cacheFrameState(tickDelta, frustumMatrix, projectionMatrix);
6668
if (CooParticlesAPIClient.checkIrisShaderPackUsed()) {
6769
ClientRenderEntityManager.INSTANCE.renderWorldPass(tickDelta, frustumMatrix, projectionMatrix);
6870
}
6971
ClientRenderEntityManager.INSTANCE.preparePostProcess(tickDelta, frustumMatrix, projectionMatrix);
70-
ClientRenderEntityManager.INSTANCE.flushPostProcess();
7172
}
7273
}

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

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,10 @@ import cn.coostack.cooparticlesapi.particles.CooParticleTextureSheet
1010
import cn.coostack.cooparticlesapi.particles.control.group.ClientParticleGroupManager
1111
import cn.coostack.cooparticlesapi.platform.CooParticlesServices
1212
import cn.coostack.cooparticlesapi.renderer.client.ClientRenderEntityManager
13+
import cn.coostack.cooparticlesapi.renderer.client.ClientPersistentBloomManager
1314
import cn.coostack.cooparticlesapi.renderer.client.ClientRenderPipelineManager
15+
import cn.coostack.cooparticlesapi.renderer.client.ClientScreenGlowManager
16+
import cn.coostack.cooparticlesapi.renderer.client.ClientWorldLightManager
1417
import cn.coostack.cooparticlesapi.renderer.client.ShaderPipeManagers
1518
import cn.coostack.cooparticlesapi.scheduler.CooScheduler
1619
import cn.coostack.cooparticlesapi.test.TestManager
@@ -123,7 +126,18 @@ object CooParticlesAPIClient {
123126
CooParticlesConstants.logger.info("初始化渲染管线")
124127
}
125128

129+
@JvmStatic
130+
fun reloadShaderPrograms() {
131+
renderInit = false
132+
ClientRenderPipelineManager.release()
133+
ClientRenderEntityManager.onShaderReload()
134+
initShaderPrograms()
135+
}
136+
126137
private fun initRender() {
138+
ClientWorldLightManager.initOnClient()
139+
ClientPersistentBloomManager.initOnClient()
140+
ClientScreenGlowManager.initOnClient()
127141
ClientRenderEntityManager.register(TestRendererEntity.id, TestRendererEntity.codec)
128142
ClientRenderEntityManager.bindEntityRenderPipe(TestRendererEntity.id, ShaderPipeManagers.simpleBloom.pipeID)
129143
TestShaderInit.initOnClient()
@@ -134,6 +148,7 @@ object CooParticlesAPIClient {
134148
ParticleEmittersManager.clientEmitters.clear()
135149
ParticleStyleManager.clearAllVisible()
136150
ClientRenderEntityManager.clear()
151+
ClientWorldLightManager.clear()
137152
ClientParticleGroupManager.clearAllVisible()
138153
ParticleCompositionManager.clearClient()
139154
}
@@ -144,6 +159,7 @@ object CooParticlesAPIClient {
144159
ParticleStyleManager.clearAllVisible()
145160
ClientParticleGroupManager.clearAllVisible()
146161
ClientRenderEntityManager.clear()
162+
ClientWorldLightManager.clear()
147163
ParticleCompositionManager.clearClient()
148164

149165
DisplayEntityManager.clearClient()
@@ -183,4 +199,4 @@ object CooParticlesAPIClient {
183199
}
184200
}
185201
}
186-
}
202+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package cn.coostack.cooparticlesapi
2+
3+
import cn.coostack.cooparticlesapi.test.options.display.MCShaders
4+
import cn.coostack.cooparticlesapi.test.options.renderer.TestAccretionDiskEntity
5+
import cn.coostack.cooparticlesapi.test.options.renderer.TestBillboardSmokeEntity
6+
import cn.coostack.cooparticlesapi.test.options.renderer.TestBlackHoleEntity
7+
import cn.coostack.cooparticlesapi.test.options.renderer.TestGlowSphereEntity
8+
import cn.coostack.cooparticlesapi.test.options.renderer.TestHybridGlowPipeEntity
9+
import cn.coostack.cooparticlesapi.test.options.renderer.TestPersistentGlowSphereEntity
10+
import cn.coostack.cooparticlesapi.test.options.renderer.TestRendererEntity
11+
import cn.coostack.cooparticlesapi.test.options.renderer.TestTexturedBeamEntity
12+
import net.minecraft.server.packs.resources.ResourceManager
13+
14+
object CooShaderReloadSupport {
15+
@JvmStatic
16+
fun reload(resourceManager: ResourceManager) {
17+
TestRendererEntity.reloadStaticResources()
18+
TestTexturedBeamEntity.reloadStaticResources()
19+
TestHybridGlowPipeEntity.reloadStaticResources()
20+
TestBillboardSmokeEntity.reloadStaticResources()
21+
TestGlowSphereEntity.reloadStaticResources()
22+
TestPersistentGlowSphereEntity.reloadStaticResources()
23+
TestBlackHoleEntity.reloadStaticResources()
24+
TestAccretionDiskEntity.reloadStaticResources()
25+
MCShaders.init(resourceManager)
26+
CooParticlesAPIClient.reloadShaderPrograms()
27+
}
28+
}

0 commit comments

Comments
 (0)