mirror of
https://github.com/Jozufozu/Flywheel.git
synced 2025-02-21 17:35:33 +01:00
Fix offset alignments
This commit is contained in:
parent
ce1d7dc44b
commit
3e55ae6aea
6 changed files with 62 additions and 43 deletions
|
@ -103,16 +103,13 @@ public class FrameUniforms implements UniformProvider {
|
||||||
cleanProjectionPrev.set(cleanProjection);
|
cleanProjectionPrev.set(cleanProjection);
|
||||||
cleanViewProjectionPrev.set(cleanViewProjection);
|
cleanViewProjectionPrev.set(cleanViewProjection);
|
||||||
|
|
||||||
ptr = writeCamera(ptr, camX, camY, camZ, camera.getLookVector(), camera.getXRot(), camera.getYRot());
|
|
||||||
|
|
||||||
// last values for camera
|
// last values for camera
|
||||||
if (!lastInit) {
|
if (!lastInit) {
|
||||||
cameraPositionPrev.set(camX, camY, camZ);
|
cameraPositionPrev.set(camX, camY, camZ);
|
||||||
cameraLookPrev.set(camera.getLookVector());
|
cameraLookPrev.set(camera.getLookVector());
|
||||||
cameraRotPrev.set(camera.getXRot(), camera.getYRot());
|
cameraRotPrev.set(camera.getXRot(), camera.getYRot());
|
||||||
}
|
}
|
||||||
ptr = writeCamera(ptr, cameraPositionPrev.x, cameraPositionPrev.y, cameraPositionPrev.z, cameraLookPrev,
|
ptr = writeCamera(ptr, camX, camY, camZ);
|
||||||
cameraRotPrev.x, cameraRotPrev.y);
|
|
||||||
cameraPositionPrev.set(camX, camY, camZ);
|
cameraPositionPrev.set(camX, camY, camZ);
|
||||||
cameraLookPrev.set(camera.getLookVector());
|
cameraLookPrev.set(camera.getLookVector());
|
||||||
cameraRotPrev.set(camera.getXRot(), camera.getYRot());
|
cameraRotPrev.set(camera.getXRot(), camera.getYRot());
|
||||||
|
@ -182,13 +179,18 @@ public class FrameUniforms implements UniformProvider {
|
||||||
cleanViewProjection.set(cleanProjection).mul(stack.last().pose());
|
cleanViewProjection.set(cleanProjection).mul(stack.last().pose());
|
||||||
}
|
}
|
||||||
|
|
||||||
private static long writeCamera(long ptr, float camX, float camY, float camZ, Vector3f lookVector, float xRot,
|
private long writeCamera(long ptr, float camX, float camY, float camZ) {
|
||||||
float yRot) {
|
Camera camera = context.camera();
|
||||||
|
Vector3f lookVector = camera.getLookVector();
|
||||||
|
|
||||||
ptr = Uniforms.writeVec3(ptr, camX, camY, camZ);
|
ptr = Uniforms.writeVec3(ptr, camX, camY, camZ);
|
||||||
|
ptr = Uniforms.writeVec3(ptr, cameraPositionPrev.x, cameraPositionPrev.y, cameraPositionPrev.z);
|
||||||
|
|
||||||
ptr = Uniforms.writeVec3(ptr, lookVector.x, lookVector.y, lookVector.z);
|
ptr = Uniforms.writeVec3(ptr, lookVector.x, lookVector.y, lookVector.z);
|
||||||
|
ptr = Uniforms.writeVec3(ptr, cameraLookPrev.x, cameraLookPrev.y, cameraLookPrev.z);
|
||||||
|
|
||||||
ptr = Uniforms.writeVec2(ptr, xRot, yRot);
|
ptr = Uniforms.writeVec2(ptr, camera.getXRot(), camera.getYRot());
|
||||||
|
ptr = Uniforms.writeVec2(ptr, cameraRotPrev.x, cameraRotPrev.y);
|
||||||
return ptr;
|
return ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -37,6 +37,12 @@ public class LevelUniforms implements UniformProvider {
|
||||||
|
|
||||||
float ptick = context.partialTick();
|
float ptick = context.partialTick();
|
||||||
|
|
||||||
|
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);
|
||||||
|
ptr = Uniforms.writeVec4(ptr, (float) cloudColor.x, (float) cloudColor.y, (float) cloudColor.z, 1f);
|
||||||
|
|
||||||
long dayTime = level.getDayTime();
|
long dayTime = level.getDayTime();
|
||||||
long levelDay = dayTime / 24000L;
|
long levelDay = dayTime / 24000L;
|
||||||
long timeOfDay = dayTime - levelDay * 24000L;
|
long timeOfDay = dayTime - levelDay * 24000L;
|
||||||
|
@ -70,12 +76,6 @@ public class LevelUniforms implements UniformProvider {
|
||||||
MemoryUtil.memPutFloat(ptr, level.getSkyDarken(ptick));
|
MemoryUtil.memPutFloat(ptr, level.getSkyDarken(ptick));
|
||||||
ptr += 4;
|
ptr += 4;
|
||||||
|
|
||||||
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);
|
|
||||||
ptr = Uniforms.writeVec4(ptr, (float) cloudColor.x, (float) cloudColor.y, (float) cloudColor.z, 1f);
|
|
||||||
|
|
||||||
// TODO: use defines for custom dimension ids
|
// TODO: use defines for custom dimension ids
|
||||||
int dimensionId;
|
int dimensionId;
|
||||||
ResourceKey<Level> dimension = level.dimension();
|
ResourceKey<Level> dimension = level.dimension();
|
||||||
|
|
|
@ -44,30 +44,16 @@ public class PlayerUniforms implements UniformProvider {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
int luminance = 0;
|
PlayerInfo info = ((AbstractClientPlayerAccessor) player).flywheel$getPlayerInfo();
|
||||||
for (InteractionHand hand : InteractionHand.values()) {
|
|
||||||
Item handItem = player.getItemInHand(hand).getItem();
|
|
||||||
if (handItem instanceof BlockItem bitem) {
|
|
||||||
Block block = bitem.getBlock();
|
|
||||||
int blockLight = block.defaultBlockState().getLightEmission(player.clientLevel, BlockPos.ZERO);
|
|
||||||
if (luminance < blockLight) {
|
|
||||||
luminance = blockLight;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
MemoryUtil.memPutFloat(ptr, (float) luminance / 15);
|
|
||||||
ptr += 4;
|
|
||||||
|
|
||||||
Vec3 eyePos = player.getEyePosition(context.partialTick());
|
Vec3 eyePos = player.getEyePosition(context.partialTick());
|
||||||
ptr = Uniforms.writeVec3(ptr, (float) eyePos.x, (float) eyePos.y, (float) eyePos.z);
|
ptr = Uniforms.writeVec3(ptr, (float) eyePos.x, (float) eyePos.y, (float) eyePos.z);
|
||||||
|
|
||||||
int blockBrightness = player.clientLevel.getBrightness(LightLayer.BLOCK, player.blockPosition());
|
ptr = writeTeamColor(ptr, info);
|
||||||
int skyBrightness = player.clientLevel.getBrightness(LightLayer.SKY, player.blockPosition());
|
|
||||||
int maxBrightness = player.clientLevel.getMaxLightLevel();
|
|
||||||
|
|
||||||
ptr = Uniforms.writeVec2(ptr, (float) blockBrightness / (float) maxBrightness,
|
ptr = writeEyeBrightness(ptr, player);
|
||||||
(float) skyBrightness / (float) maxBrightness);
|
|
||||||
|
ptr = writeHeldLight(ptr, player);
|
||||||
|
|
||||||
ptr = writeEyeIn(ptr, player);
|
ptr = writeEyeIn(ptr, player);
|
||||||
|
|
||||||
|
@ -83,10 +69,11 @@ public class PlayerUniforms implements UniformProvider {
|
||||||
MemoryUtil.memPutInt(ptr, player.isShiftKeyDown() ? 1 : 0);
|
MemoryUtil.memPutInt(ptr, player.isShiftKeyDown() ? 1 : 0);
|
||||||
ptr += 4;
|
ptr += 4;
|
||||||
|
|
||||||
PlayerInfo info = ((AbstractClientPlayerAccessor) player).flywheel$getPlayerInfo();
|
|
||||||
MemoryUtil.memPutInt(ptr, info.getGameMode().getId());
|
MemoryUtil.memPutInt(ptr, info.getGameMode().getId());
|
||||||
ptr += 4;
|
ptr += 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static long writeTeamColor(long ptr, PlayerInfo info) {
|
||||||
int red = 0, green = 0, blue = 0, alpha = 0;
|
int red = 0, green = 0, blue = 0, alpha = 0;
|
||||||
PlayerTeam team = info.getTeam();
|
PlayerTeam team = info.getTeam();
|
||||||
if (team != null) {
|
if (team != null) {
|
||||||
|
@ -100,10 +87,37 @@ public class PlayerUniforms implements UniformProvider {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ptr = Uniforms.writeVec4(ptr, (float) red / 255f, (float) blue / 255f, (float) green / 255f,
|
return Uniforms.writeVec4(ptr, (float) red / 255f, (float) blue / 255f, (float) green / 255f,
|
||||||
(float) alpha / 255f);
|
(float) alpha / 255f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static long writeEyeBrightness(long ptr, LocalPlayer player) {
|
||||||
|
int blockBrightness = player.clientLevel.getBrightness(LightLayer.BLOCK, player.blockPosition());
|
||||||
|
int skyBrightness = player.clientLevel.getBrightness(LightLayer.SKY, player.blockPosition());
|
||||||
|
int maxBrightness = player.clientLevel.getMaxLightLevel();
|
||||||
|
|
||||||
|
ptr = Uniforms.writeVec2(ptr, (float) blockBrightness / (float) maxBrightness,
|
||||||
|
(float) skyBrightness / (float) maxBrightness);
|
||||||
|
return ptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static long writeHeldLight(long ptr, LocalPlayer player) {
|
||||||
|
int luminance = 0;
|
||||||
|
for (InteractionHand hand : InteractionHand.values()) {
|
||||||
|
Item handItem = player.getItemInHand(hand).getItem();
|
||||||
|
if (handItem instanceof BlockItem bitem) {
|
||||||
|
Block block = bitem.getBlock();
|
||||||
|
int blockLight = block.defaultBlockState().getLightEmission(player.clientLevel, BlockPos.ZERO);
|
||||||
|
if (luminance < blockLight) {
|
||||||
|
luminance = blockLight;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
MemoryUtil.memPutFloat(ptr, (float) luminance / 15);
|
||||||
|
return ptr + 4;
|
||||||
|
}
|
||||||
|
|
||||||
private long writeEyeIn(long ptr, LocalPlayer player) {
|
private long writeEyeIn(long ptr, LocalPlayer player) {
|
||||||
ClientLevel level = player.clientLevel;
|
ClientLevel level = player.clientLevel;
|
||||||
Vec3 eyePos = player.getEyePosition();
|
Vec3 eyePos = player.getEyePosition();
|
||||||
|
|
|
@ -30,10 +30,10 @@ layout(std140) uniform _FlwFrameUniforms {
|
||||||
mat4 flw_cleanViewProjectionPrev;
|
mat4 flw_cleanViewProjectionPrev;
|
||||||
|
|
||||||
vec4 _flw_cameraPos;
|
vec4 _flw_cameraPos;
|
||||||
vec4 _flw_cameraLook;
|
|
||||||
vec2 flw_cameraRot;
|
|
||||||
vec4 _flw_cameraPosPrev;
|
vec4 _flw_cameraPosPrev;
|
||||||
|
vec4 _flw_cameraLook;
|
||||||
vec4 _flw_cameraLookPrev;
|
vec4 _flw_cameraLookPrev;
|
||||||
|
vec2 flw_cameraRot;
|
||||||
vec2 flw_cameraRotPrev;
|
vec2 flw_cameraRotPrev;
|
||||||
|
|
||||||
vec2 flw_viewportSize;
|
vec2 flw_viewportSize;
|
||||||
|
|
|
@ -1,4 +1,7 @@
|
||||||
layout(std140) uniform _FlwLevelUniforms {
|
layout(std140) uniform _FlwLevelUniforms {
|
||||||
|
vec4 flw_skyColor;
|
||||||
|
vec4 flw_cloudColor;
|
||||||
|
|
||||||
/** The current day number of the level. */
|
/** The current day number of the level. */
|
||||||
uint flw_levelDay;
|
uint flw_levelDay;
|
||||||
/** The current fraction of the current day that has elapsed. */
|
/** The current fraction of the current day that has elapsed. */
|
||||||
|
@ -18,8 +21,6 @@ layout(std140) uniform _FlwLevelUniforms {
|
||||||
float flw_thunderLevel;
|
float flw_thunderLevel;
|
||||||
|
|
||||||
float flw_skyDarken;
|
float flw_skyDarken;
|
||||||
vec4 flw_skyColor;
|
|
||||||
vec4 flw_cloudColor;
|
|
||||||
|
|
||||||
/** Use FLW_DIMENSION_* ids to determine the dimension. May eventually be implemented for custom dimensions. */
|
/** Use FLW_DIMENSION_* ids to determine the dimension. May eventually be implemented for custom dimensions. */
|
||||||
uint flw_dimension;
|
uint flw_dimension;
|
||||||
|
|
|
@ -1,11 +1,16 @@
|
||||||
// player.glsl - Holds uniforms for player state.
|
// player.glsl - Holds uniforms for player state.
|
||||||
|
|
||||||
layout (std140) uniform _FlwPlayerUniforms {
|
layout (std140) uniform _FlwPlayerUniforms {
|
||||||
/** Brightness of the brightest light that the player is holding, 0-1. */
|
|
||||||
float flw_heldLight;
|
|
||||||
vec4 _flw_eyePos;
|
vec4 _flw_eyePos;
|
||||||
|
|
||||||
|
/** Alpha is 1 if any team color is present, 0 otherwise. */
|
||||||
|
vec4 flw_teamColor;
|
||||||
|
|
||||||
/** The brightness at the player's eye position. */
|
/** The brightness at the player's eye position. */
|
||||||
vec2 flw_eyeBrightness;
|
vec2 flw_eyeBrightness;
|
||||||
|
|
||||||
|
/** Brightness of the brightest light that the player is holding, 0-1. */
|
||||||
|
float flw_heldLight;
|
||||||
/** 0 means no fluid. Use FLW_PLAYER_EYE_IN_FLUID_* defines to detect fluid type. */
|
/** 0 means no fluid. Use FLW_PLAYER_EYE_IN_FLUID_* defines to detect fluid type. */
|
||||||
uint flw_playerEyeInFluid;
|
uint flw_playerEyeInFluid;
|
||||||
/** 0 means no block. Use FLW_PLAYER_EYE_IN_BLOCK_* defines to detect block type. */
|
/** 0 means no block. Use FLW_PLAYER_EYE_IN_BLOCK_* defines to detect block type. */
|
||||||
|
@ -20,9 +25,6 @@ layout (std140) uniform _FlwPlayerUniforms {
|
||||||
|
|
||||||
/** 0 = survival, 1 = creative, 2 = adventure, 3 = spectator. */
|
/** 0 = survival, 1 = creative, 2 = adventure, 3 = spectator. */
|
||||||
uint flw_gameMode;
|
uint flw_gameMode;
|
||||||
|
|
||||||
/** Alpha is 1 if any team color is present, 0 otherwise. */
|
|
||||||
vec4 flw_teamColor;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#define flw_eyePos _flw_eyePos.xyz
|
#define flw_eyePos _flw_eyePos.xyz
|
||||||
|
|
Loading…
Add table
Reference in a new issue