Skip to content

Commit 09949d2

Browse files
committed
Fixed the block entiteis jiggling as well fixed transaprency with rare candy!
1 parent 1e146c8 commit 09949d2

File tree

11 files changed

+126
-58
lines changed

11 files changed

+126
-58
lines changed

common/src/main/java/generations/gg/generations/core/generationscore/common/client/GenerationsCoreClient.kt

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,10 @@ import com.mojang.blaze3d.systems.RenderSystem
1616
import com.mojang.blaze3d.vertex.BufferUploader
1717
import com.mojang.blaze3d.vertex.PoseStack
1818
import com.mojang.blaze3d.vertex.VertexConsumer
19-
import dev.architectury.registry.ReloadListenerRegistry
2019
import dev.architectury.registry.item.ItemPropertiesRegistry
2120
import dev.architectury.registry.menu.MenuRegistry
2221
import generations.gg.generations.core.generationscore.common.GenerationsCore
2322
import generations.gg.generations.core.generationscore.common.GenerationsCore.LOGGER
24-
import generations.gg.generations.core.generationscore.common.GenerationsDataProvider
25-
import generations.gg.generations.core.generationscore.common.GenerationsDataProvider.SimpleResourceReloader
2623
import generations.gg.generations.core.generationscore.common.client.model.GenerationsClientMolangFunctions
2724
import generations.gg.generations.core.generationscore.common.client.model.RareCandyBone
2825
import generations.gg.generations.core.generationscore.common.client.model.RunnableKeybind
@@ -88,7 +85,6 @@ import net.minecraft.world.phys.Vec3
8885
import net.minecraft.world.phys.shapes.CollisionContext
8986
import net.minecraft.world.phys.shapes.VoxelShape
9087
import org.joml.Matrix4f
91-
import org.joml.Quaternionf
9288
import org.joml.Vector4f
9389
import org.lwjgl.glfw.GLFW
9490
import java.io.File
@@ -107,6 +103,11 @@ private operator fun Vec3.minus(vec3: Vec3): Vec3 {
107103
return this.subtract(vec3)
108104
}
109105

106+
object MatrixCache {
107+
var projectionMatrix = Matrix4f()
108+
var viewMatrix = Matrix4f()
109+
}
110+
110111
object GenerationsCoreClient {
111112
fun onInitialize(minecraft: Minecraft) {
112113
if (GenerationsCore.CONFIG.client.useRenderDoc) {
@@ -531,16 +532,15 @@ object GenerationsCoreClient {
531532
.get() /*&& Minecraft.getInstance().options.renderDebugCharts*/ && !Minecraft.getInstance().options.hideGui
532533
}
533534

534-
fun renderRareCandy(level: ClientLevel) {
535+
fun renderRareCandy(stage: RenderStage, clear: Boolean) {
535536
if (GenerationsCore.CONFIG.client.useVanilla) return
536537

537538
var startTime = System.currentTimeMillis()
538-
level.profiler.popPush("render_models")
539+
// level.profiler.popPush("render_models")
539540
RenderSystem.enableDepthTest()
540541
BufferUploader.reset()
541542

542-
ModelRegistry.worldRareCandy.render(RenderStage.SOLID, false, MinecraftClientGameProvider.getTimePassed())
543-
ModelRegistry.worldRareCandy.render(RenderStage.TRANSPARENT, true, MinecraftClientGameProvider.getTimePassed())
543+
ModelRegistry.worldRareCandy.render(stage, clear, MinecraftClientGameProvider.getTimePassed())
544544
if (shouldRenderFpsPie()) LOGGER.warn("RareCandy render took " + (System.currentTimeMillis() - startTime) + "ms")
545545
}
546546
}

common/src/main/java/generations/gg/generations/core/generationscore/common/client/model/RareCandyBone.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ class RareCandyBone /*Remove when cobblemon doesn't have parts of code that assu
9292
if (variant != null) {
9393
instance.setVariant(variant)
9494
}
95+
9596
stack.pushPose()
9697
stack.mulPose(ROTATION_CORRECTION)
9798
stack.scale(-scale, -scale, scale)

common/src/main/java/generations/gg/generations/core/generationscore/common/client/render/block/entity/GeneralUseBlockEntityRenderer.kt

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package generations.gg.generations.core.generationscore.common.client.render.block.entity
22

3+
import com.cobblemon.mod.common.util.set
4+
import com.cobblemon.mod.common.util.toVec3d
35
import com.mojang.blaze3d.systems.RenderSystem
46
import com.mojang.blaze3d.vertex.PoseStack
57
import generations.gg.generations.core.generationscore.common.client.model.ModelContextProviders.FrameProvider
@@ -12,10 +14,14 @@ import generations.gg.generations.core.generationscore.common.world.level.block.
1214
import gg.generations.rarecandy.renderer.animation.AnimationInstance
1315
import gg.generations.rarecandy.renderer.rendering.ObjectInstance
1416
import gg.generations.rarecandy.renderer.storage.AnimatedObjectInstance
17+
import net.minecraft.client.Minecraft
1518
import net.minecraft.client.renderer.MultiBufferSource
1619
import net.minecraft.client.renderer.blockentity.BlockEntityRenderer
1720
import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider
1821
import net.minecraft.resources.ResourceLocation
22+
import org.joml.Matrix4f
23+
import org.joml.Quaternionf
24+
import org.joml.Vector3f
1925

2026
open class GeneralUseBlockEntityRenderer<T : ModelProvidingBlockEntity>(ctx: BlockEntityRendererProvider.Context) :
2127
BlockEntityRenderer<T> {
@@ -72,7 +78,6 @@ open class GeneralUseBlockEntityRenderer<T : ModelProvidingBlockEntity>(ctx: Blo
7278
}
7379

7480
instance.transformationMatrix().set(stack.last().pose())
75-
// instance.viewMatrix().set(RenderSystem.getModelViewMatrix())
7681

7782
(instance as BlockObjectInstance).light = packedLight
7883
if (blockEntity is TintProvider) instance.tint = blockEntity.tint
@@ -114,7 +119,11 @@ open class GeneralUseBlockEntityRenderer<T : ModelProvidingBlockEntity>(ctx: Blo
114119
}
115120
}
116121

117-
primeInstance.transformationMatrix().set(stack.last().pose())
122+
var offset = blockEntity.blockPos.toVec3d().subtract(Minecraft.getInstance().cameraEntity!!.position())
123+
124+
primeInstance.transformationMatrix().set(stack.last().pose()).translate(offset.x.toFloat(),
125+
offset.y.toFloat(), offset.z.toFloat()
126+
)
118127
(primeInstance as BlockLightValueProvider).light = packedLight
119128
if (blockEntity is TintProvider) (primeInstance as BlockAnimatedObjectInstance).tint = blockEntity.tint
120129

common/src/main/java/generations/gg/generations/core/generationscore/common/client/render/entity/ZygardeCellRenderer.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package generations.gg.generations.core.generationscore.common.client.render.entity;
22

3+
import com.mojang.blaze3d.systems.RenderSystem;
34
import com.mojang.blaze3d.vertex.PoseStack;
45
import com.mojang.math.Axis;
56
import generations.gg.generations.core.generationscore.common.GenerationsCore;

common/src/main/java/generations/gg/generations/core/generationscore/common/client/render/rarecandy/ModelRegistry.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import gg.generations.rarecandy.shaded.caffeine.cache.RemovalCause
1919
import net.minecraft.client.Minecraft
2020
import net.minecraft.core.Direction
2121
import net.minecraft.resources.ResourceLocation
22+
import org.joml.Matrix4f
2223
import java.time.Duration
2324
import java.time.Instant
2425
import java.util.concurrent.TimeUnit
@@ -82,7 +83,6 @@ object ModelRegistry {
8283
CompiledModel.init()
8384
}
8485

85-
@JvmStatic
8686
fun prepForBER(stack: PoseStack, supplier: AngleProvider) {
8787
stack.translate(0.5f, 0.0f, 0.5f)
8888
if (supplier is ModelProvidingBlockEntity) {

common/src/main/java/generations/gg/generations/core/generationscore/common/client/render/rarecandy/Pipelines.kt

Lines changed: 5 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import dev.architectury.event.Event
88
import dev.architectury.event.EventFactory
99
import generations.gg.generations.core.generationscore.common.GenerationsCore
1010
import generations.gg.generations.core.generationscore.common.client.GenerationsTextureLoader
11+
import generations.gg.generations.core.generationscore.common.client.MatrixCache
1112
import generations.gg.generations.core.generationscore.common.client.model.ModelContextProviders.TintProvider
1213
import gg.generations.rarecandy.pokeutils.BlendType
1314
import gg.generations.rarecandy.pokeutils.CullType
@@ -96,9 +97,9 @@ object Pipelines {
9697
fun createShader(manager: ResourceManager): Pipeline = Pipeline.Builder()
9798
.supplyBooleanUniform("legacy") { useLegacy }
9899
.supplyEnumUniform("FogShape", RenderSystem.getShaderFogShape())
99-
.supplyMat4("viewMatrix") { RenderSystem.getModelViewMatrix() }
100+
.supplyMat4("viewMatrix") { MatrixCache.viewMatrix }
100101
.supplyMat4("modelMatrix") { it.instance().transformationMatrix() }
101-
.supplyMat4("projectionMatrix") { RenderSystem.getProjectionMatrix() }
102+
.supplyMat4("projectionMatrix") { MatrixCache.projectionMatrix }
102103
.supplyVec2("uvOffset") { it.transform.offset() ?: Transform.DEFAULT_OFFSET }
103104
.supplyVec2("uvScale") { it.transform.scale() ?: Transform.DEFAULT_SCALE }
104105
.supplyMat4s("boneTransforms") { ctx -> ctx.instance.instanceOrNull<AnimatedObjectInstance>()?.transforms ?: AnimationController.NO_ANIMATION }
@@ -162,11 +163,11 @@ object Pipelines {
162163
if (material.blendType() == BlendType.Regular) {
163164
RenderSystem.enableBlend()
164165
RenderSystem.defaultBlendFunc()
165-
} }, { material ->
166+
} }, {/* material ->
166167
if (material.blendType() == BlendType.Regular) {
167168
RenderSystem.disableBlend()
168169
}
169-
})
170+
*/})
170171
.shader(manager, "shaders/animated.vs.glsl", "shaders/animated.fs.glsl")
171172
.build()
172173
}
@@ -212,29 +213,6 @@ object Pipelines {
212213

213214
private fun Pipeline.Builder.supplyBooleanUniform(name: String, function: (UniformUploadContext) -> Boolean): Pipeline.Builder { return this.supplyUniform(name) { it.uniform.uploadBoolean(function.invoke(it)) } }
214215

215-
private object BlendRecord {
216-
var enabled: Boolean = false
217-
var srcRgb: Int = 0
218-
var dstRgb: Int = 0
219-
var srcAlpha: Int = 0
220-
var dstAlpha: Int = 0
221-
222-
fun push() {
223-
enabled = GlStateManager.BLEND.mode.enabled
224-
srcRgb = GlStateManager.BLEND.srcRgb
225-
dstRgb = GlStateManager.BLEND.dstRgb
226-
srcAlpha = GlStateManager.BLEND.srcAlpha
227-
dstAlpha = GlStateManager.BLEND.dstAlpha
228-
}
229-
230-
fun pop() {
231-
if (enabled) RenderSystem.enableBlend()
232-
else RenderSystem.disableBlend()
233-
234-
RenderSystem.blendFuncSeparate(srcRgb, dstRgb, srcAlpha, dstAlpha)
235-
}
236-
}
237-
238216
fun read(manager: ResourceManager, name: ResourceLocation): String {
239217
try {
240218
manager.getResource(name).orElseThrow().open().use { `is` ->

common/src/main/resources/assets/generations_core/shaders/animated.fs.glsl

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
in vec2 texCoord0;
44
in vec4 vertexColor;
55
in float vertexDistance;
6+
in vec4 lightMapColor;
67

78
out vec4 outColor;
89

@@ -16,15 +17,12 @@ uniform vec4 FogColor;
1617
uniform sampler2D diffuse;
1718
uniform sampler2D mask;
1819
uniform sampler2D layer;
19-
uniform sampler2D lightmap;
2020
uniform sampler2D emission;
2121
uniform sampler2D paradoxMask;
2222

2323
uniform int colorMethod;
2424
uniform int effect;
2525

26-
uniform ivec2 light;
27-
2826
uniform vec3 tint;
2927

3028
uniform int frame;
@@ -377,10 +375,7 @@ void main() {
377375
outColor.rgb = calculateTersaalizationEffect(outColor.rgb);
378376
} else if (useLight) {
379377
outColor *= vertexColor;
380-
// Sample Minecraft's light level from the lightmap texture
381-
vec4 minecraftLight = minecraft_sample_lightmap(lightmap, light);
382-
383-
outColor *= mix(minecraftLight, vec4(1, 1, 1, 1), texture(emission, texCoord0).r);
378+
outColor *= mix(lightMapColor, vec4(1, 1, 1, 1), texture(emission, texCoord0).r);
384379
}
385380

386381
outColor = linear_fog(outColor, vertexDistance, FogStart, FogEnd, FogColor);

common/src/main/resources/assets/generations_core/shaders/animated.vs.glsl

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,16 @@ out vec2 texCoord0;
1515
out vec3 fragNormal;
1616
out vec3 fragViewDir;
1717
out vec3 worldPos;
18+
out vec4 lightMapColor;
19+
20+
uniform sampler2D lightmap;
1821

1922
uniform bool legacy;
2023

2124
uniform int FogShape;
2225

26+
uniform ivec2 light;
27+
2328
uniform mat4 viewMatrix;
2429
uniform mat4 modelMatrix;
2530
uniform mat4 projectionMatrix;
@@ -40,12 +45,12 @@ mat4 getBoneTransform() {
4045
return boneTransform;
4146
}
4247

43-
float fog_distance(mat4 modelViewMat, vec3 pos, int shape) {
48+
float fog_distance(vec3 pos, int shape) {
4449
if (shape == 0) {
45-
return length((modelViewMat * vec4(pos, 1.0)).xyz);
50+
return length(pos);
4651
} else {
47-
float distXZ = length((modelViewMat * vec4(pos.x, 0.0, pos.z, 1.0)).xyz);
48-
float distY = length((modelViewMat * vec4(0.0, pos.y, 0.0, 1.0)).xyz);
52+
float distXZ = length(pos.xz);
53+
float distY = abs(pos.y);
4954
return max(distXZ, distY);
5055
}
5156
}
@@ -66,10 +71,11 @@ void main() {
6671
mat4 modelTransform = modelMatrix * getBoneTransform();
6772
vec4 worldPosition = modelTransform * vec4(positions, 1.0);
6873

69-
texCoord0 = (texcoords * uvScale) + uvOffset;
7074
gl_Position = worldSpace * worldPosition;
71-
vertexDistance = fog_distance(worldSpace * modelTransform, positions, FogShape);
7275
vertexColor = getVertexColor();
76+
vertexDistance = fog_distance(positions, FogShape);
77+
lightMapColor = texelFetch(lightmap, light / 16, 0);
78+
texCoord0 = (texcoords * uvScale) + uvOffset;
7379

7480
fragViewDir = normalize(-(viewMatrix * worldPosition).xyz);
7581
worldPos = worldPosition.xyz;

common/src/main/resources/generationscore.accesswidener

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,11 @@ accessible field net/minecraft/world/level/block/entity/BlockEntityType validBlo
4040
mutable field net/minecraft/world/level/block/entity/BlockEntityType validBlocks Ljava/util/Set;
4141

4242
accessible field com/mojang/blaze3d/platform/GlStateManager BLEND Lcom/mojang/blaze3d/platform/GlStateManager$BlendState;
43+
accessible field com/mojang/blaze3d/platform/GlStateManager CULL Lcom/mojang/blaze3d/platform/GlStateManager$CullState;
44+
accessible class com/mojang/blaze3d/platform/GlStateManager$CullState
45+
accessible field com/mojang/blaze3d/platform/GlStateManager DEPTH Lcom/mojang/blaze3d/platform/GlStateManager$DepthState;
46+
accessible class com/mojang/blaze3d/platform/GlStateManager$DepthState
47+
4348
accessible class com/mojang/blaze3d/platform/GlStateManager$BlendState
4449
accessible field com/mojang/blaze3d/platform/GlStateManager$BooleanState enabled Z
4550

0 commit comments

Comments
 (0)