mirror of
https://github.com/Jozufozu/Flywheel.git
synced 2024-11-15 06:54:21 +01:00
Compare commits
No commits in common. "f380256482429b093810e32fb589b1b277f1a576" and "5399b0fc50cd72ed6d2b5207d90ebcddee8ff257" have entirely different histories.
f380256482
...
5399b0fc50
@ -84,7 +84,6 @@ public class IndirectPrograms extends AtomicReferenceCounted {
|
||||
.withResource(CULL_SHADER_MAIN))
|
||||
.postLink((key, program) -> {
|
||||
program.setUniformBlockBinding("_FlwFrameUniforms", Uniforms.FRAME_INDEX);
|
||||
program.setUniformBlockBinding("_FlwFogUniforms", Uniforms.FOG_INDEX);
|
||||
program.setUniformBlockBinding("_FlwOptionsUniforms", Uniforms.OPTIONS_INDEX);
|
||||
program.setUniformBlockBinding("_FlwPlayerUniforms", Uniforms.PLAYER_INDEX);
|
||||
program.setUniformBlockBinding("_FlwLevelUniforms", Uniforms.LEVEL_INDEX);
|
||||
|
@ -38,6 +38,13 @@ public class FrameUniforms implements UniformProvider {
|
||||
private final Matrix4f viewProjectionInverse = new Matrix4f();
|
||||
private final Matrix4f viewProjectionPrev = new Matrix4f();
|
||||
|
||||
private final Matrix4f cleanProjection = new Matrix4f();
|
||||
private final Matrix4f cleanProjectionInverse = new Matrix4f();
|
||||
private final Matrix4f cleanProjectionPrev = new Matrix4f();
|
||||
private final Matrix4f cleanViewProjection = new Matrix4f();
|
||||
private final Matrix4f cleanViewProjectionInverse = new Matrix4f();
|
||||
private final Matrix4f cleanViewProjectionPrev = new Matrix4f();
|
||||
|
||||
private final Vector3f cameraPositionPrev = new Vector3f();
|
||||
private final Vector3f cameraLookPrev = new Vector3f();
|
||||
private final Vector2f cameraRotPrev = new Vector2f();
|
||||
@ -72,6 +79,7 @@ public class FrameUniforms implements UniformProvider {
|
||||
projection.set(context.projection());
|
||||
viewProjection.set(context.viewProjection());
|
||||
viewProjection.translate(-camX, -camY, -camZ);
|
||||
setupCleanMatrices(context.stack(), camera, context.partialTick());
|
||||
|
||||
if (!Uniforms.frustumPaused || Uniforms.frustumCapture) {
|
||||
MatrixMath.writePackedFrustumPlanes(ptr, viewProjection);
|
||||
@ -85,11 +93,15 @@ public class FrameUniforms implements UniformProvider {
|
||||
viewPrev.set(view);
|
||||
projectionPrev.set(projection);
|
||||
viewProjectionPrev.set(viewProjectionPrev);
|
||||
cleanProjectionPrev.set(cleanProjection);
|
||||
cleanViewProjectionPrev.set(cleanViewProjection);
|
||||
}
|
||||
ptr = writeMatrices(ptr);
|
||||
viewPrev.set(view);
|
||||
projectionPrev.set(projection);
|
||||
viewProjectionPrev.set(viewProjection);
|
||||
cleanProjectionPrev.set(cleanProjection);
|
||||
cleanViewProjectionPrev.set(cleanViewProjection);
|
||||
|
||||
// last values for camera
|
||||
if (!lastInit) {
|
||||
@ -116,6 +128,9 @@ public class FrameUniforms implements UniformProvider {
|
||||
MemoryUtil.memPutFloat(ptr, Minecraft.getInstance().gameRenderer.getDepthFar());
|
||||
ptr += 4;
|
||||
|
||||
MemoryUtil.memPutInt(ptr, getConstantAmbientLightFlag(context));
|
||||
ptr += 4;
|
||||
|
||||
ptr = writeTime(ptr);
|
||||
|
||||
ptr = writeCameraIn(ptr);
|
||||
@ -135,9 +150,35 @@ public class FrameUniforms implements UniformProvider {
|
||||
MatrixMath.writeUnsafe(viewProjection, ptr + 64 * 6);
|
||||
MatrixMath.writeUnsafe(viewProjection.invert(viewProjectionInverse), ptr + 64 * 7);
|
||||
MatrixMath.writeUnsafe(viewProjectionPrev, ptr + 64 * 8);
|
||||
MatrixMath.writeUnsafe(cleanProjection, ptr + 64 * 9);
|
||||
MatrixMath.writeUnsafe(cleanProjection.invert(cleanProjectionInverse), ptr + 64 * 10);
|
||||
MatrixMath.writeUnsafe(cleanProjectionPrev, ptr + 64 * 11);
|
||||
MatrixMath.writeUnsafe(cleanViewProjection, ptr + 64 * 12);
|
||||
MatrixMath.writeUnsafe(cleanViewProjection.invert(cleanViewProjectionInverse), ptr + 64 * 13);
|
||||
MatrixMath.writeUnsafe(cleanViewProjectionPrev, ptr + 64 * 14);
|
||||
return ptr + 64 * 15;
|
||||
}
|
||||
|
||||
private void setupCleanMatrices(PoseStack stack, Camera camera, float partialTicks) {
|
||||
Minecraft mc = Minecraft.getInstance();
|
||||
GameRenderer gr = mc.gameRenderer;
|
||||
GameRendererAccessor gra = (GameRendererAccessor) gr;
|
||||
|
||||
float fov = (float) gra.flywheel$getFov(camera, partialTicks, true);
|
||||
|
||||
cleanProjection.identity();
|
||||
|
||||
if (gra.flywheel$getZoom() != 1.0F) {
|
||||
cleanProjection.translate(gra.flywheel$getZoomX(), -gra.flywheel$getZoomY(), 0.0F);
|
||||
cleanProjection.scale(gra.flywheel$getZoom(), gra.flywheel$getZoom(), 1.0F);
|
||||
}
|
||||
|
||||
cleanProjection.mul(new Matrix4f().setPerspective(fov * ((float) Math.PI / 180F),
|
||||
(float) mc.getWindow().getWidth() / (float) mc.getWindow().getHeight(), 0.05F, gr.getDepthFar()));
|
||||
|
||||
cleanViewProjection.set(cleanProjection).mul(stack.last().pose());
|
||||
}
|
||||
|
||||
private long writeCamera(long ptr, float camX, float camY, float camZ) {
|
||||
Camera camera = context.camera();
|
||||
Vector3f lookVector = camera.getLookVector();
|
||||
@ -179,4 +220,11 @@ public class FrameUniforms implements UniformProvider {
|
||||
Vec3 cameraPos = camera.getPosition();
|
||||
return Uniforms.writeInFluidAndBlock(ptr, level, blockPos, cameraPos);
|
||||
}
|
||||
|
||||
private static int getConstantAmbientLightFlag(RenderContext context) {
|
||||
var constantAmbientLight = context.level()
|
||||
.effects()
|
||||
.constantAmbientLight();
|
||||
return constantAmbientLight ? 1 : 0;
|
||||
}
|
||||
}
|
||||
|
@ -28,15 +28,16 @@ public class LevelUniforms implements UniformProvider {
|
||||
|
||||
@Override
|
||||
public void write(long ptr) {
|
||||
if (context == null) {
|
||||
Minecraft mc = Minecraft.getInstance();
|
||||
ClientLevel level = mc.level;
|
||||
if (level == null || context == null) {
|
||||
MemoryUtil.memSet(ptr, 0, SIZE);
|
||||
return;
|
||||
}
|
||||
|
||||
ClientLevel level = context.level();
|
||||
float ptick = context.partialTick();
|
||||
|
||||
Vec3 skyColor = level.getSkyColor(context.camera().getPosition(), ptick);
|
||||
Vec3 skyColor = level.getSkyColor(mc.gameRenderer.getMainCamera().getPosition(), ptick);
|
||||
ptr = Uniforms.writeVec4(ptr, (float) skyColor.x, (float) skyColor.y, (float) skyColor.z, 1f);
|
||||
|
||||
Vec3 cloudColor = level.getCloudColor(ptick);
|
||||
@ -75,9 +76,6 @@ public class LevelUniforms implements UniformProvider {
|
||||
MemoryUtil.memPutFloat(ptr, level.getSkyDarken(ptick));
|
||||
ptr += 4;
|
||||
|
||||
MemoryUtil.memPutInt(ptr, getConstantAmbientLightFlag(context));
|
||||
ptr += 4;
|
||||
|
||||
// TODO: use defines for custom dimension ids
|
||||
int dimensionId;
|
||||
ResourceKey<Level> dimension = level.dimension();
|
||||
@ -92,11 +90,4 @@ public class LevelUniforms implements UniformProvider {
|
||||
}
|
||||
MemoryUtil.memPutInt(ptr, dimensionId);
|
||||
}
|
||||
|
||||
private static int getConstantAmbientLightFlag(RenderContext context) {
|
||||
var constantAmbientLight = context.level()
|
||||
.effects()
|
||||
.constantAmbientLight();
|
||||
return constantAmbientLight ? 1 : 0;
|
||||
}
|
||||
}
|
||||
|
@ -12,12 +12,12 @@ import net.minecraft.client.Options;
|
||||
@Mixin(Options.class)
|
||||
public class OptionsMixin {
|
||||
@Inject(method = "load()V", at = @At("RETURN"))
|
||||
private void flywheel$onLoad(CallbackInfo ci) {
|
||||
private void onLoad(CallbackInfo ci) {
|
||||
Uniforms.onOptionsUpdate();
|
||||
}
|
||||
|
||||
@Inject(method = "save", at = @At("HEAD"))
|
||||
private void flywheel$onSave(CallbackInfo ci) {
|
||||
private void onSave(CallbackInfo ci) {
|
||||
Uniforms.onOptionsUpdate();
|
||||
}
|
||||
}
|
||||
|
@ -1,7 +1,10 @@
|
||||
#include "flywheel:internal/indirect/buffers.glsl"
|
||||
#include "flywheel:internal/indirect/model_descriptor.glsl"
|
||||
#include "flywheel:internal/indirect/object.glsl"
|
||||
#include "flywheel:internal/uniforms/uniforms.glsl"
|
||||
#include "flywheel:internal/uniforms/frame.glsl"
|
||||
#include "flywheel:internal/uniforms/options.glsl"
|
||||
#include "flywheel:internal/uniforms/player.glsl"
|
||||
#include "flywheel:internal/uniforms/level.glsl"
|
||||
#include "flywheel:util/matrix.glsl"
|
||||
|
||||
layout(local_size_x = _FLW_SUBGROUP_SIZE) in;
|
||||
|
@ -1,3 +1,9 @@
|
||||
// Cull shaders may not need all uniforms, but it is
|
||||
// more consistent if we just provide all uniforms anyways.
|
||||
#include "flywheel:internal/uniforms/uniforms.glsl"
|
||||
#include "flywheel:internal/uniforms/frame.glsl"
|
||||
|
||||
// Fog doesn't seem like a valid thing to query during the cull pass. Other uniforms added in the
|
||||
// future may also be excluded, and we'll have to document each one.
|
||||
// #include "flywheel:internal/uniforms/fog.glsl"
|
||||
|
||||
#include "flywheel:internal/uniforms/options.glsl"
|
||||
#include "flywheel:internal/uniforms/player.glsl"
|
||||
#include "flywheel:internal/uniforms/level.glsl"
|
||||
|
@ -22,6 +22,13 @@ layout(std140) uniform _FlwFrameUniforms {
|
||||
mat4 flw_viewProjectionInverse;
|
||||
mat4 flw_viewProjectionPrev;
|
||||
|
||||
mat4 flw_cleanProjection;
|
||||
mat4 flw_cleanProjectionInverse;
|
||||
mat4 flw_cleanProjectionPrev;
|
||||
mat4 flw_cleanViewProjection;
|
||||
mat4 flw_cleanViewProjectionInverse;
|
||||
mat4 flw_cleanViewProjectionPrev;
|
||||
|
||||
vec4 _flw_cameraPos;
|
||||
vec4 _flw_cameraPosPrev;
|
||||
vec4 _flw_cameraLook;
|
||||
|
Loading…
Reference in New Issue
Block a user