mirror of
https://github.com/Jozufozu/Flywheel.git
synced 2024-12-29 08:26:37 +01:00
Cool and normal
- Reimplement normal debug mode - Add debug mode for instance ID and light coordinates - Pass an id into _flw_main - Allow specifying how the debug color is applied, not sure if I want to keep it though - Do not store the debug mode in config
This commit is contained in:
parent
83119040d2
commit
0e00c7019d
10 changed files with 109 additions and 20 deletions
|
@ -15,8 +15,10 @@ import net.minecraft.world.phys.Vec3;
|
||||||
|
|
||||||
public class FrameUniforms implements UniformProvider {
|
public class FrameUniforms implements UniformProvider {
|
||||||
public static final int SIZE = 304;
|
public static final int SIZE = 304;
|
||||||
|
public int debugMode;
|
||||||
|
public int debugOverlay;
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private RenderContext context;
|
private RenderContext context;
|
||||||
|
|
||||||
private final Matrix4f viewProjection = new Matrix4f();
|
private final Matrix4f viewProjection = new Matrix4f();
|
||||||
|
@ -70,7 +72,10 @@ public class FrameUniforms implements UniformProvider {
|
||||||
MemoryUtil.memPutInt(ptr, getConstantAmbientLightFlag(context));
|
MemoryUtil.memPutInt(ptr, getConstantAmbientLightFlag(context));
|
||||||
ptr += 4;
|
ptr += 4;
|
||||||
|
|
||||||
writeTime(ptr);
|
ptr = writeTime(ptr);
|
||||||
|
|
||||||
|
MemoryUtil.memPutInt(ptr, debugMode);
|
||||||
|
MemoryUtil.memPutInt(ptr + 4, debugOverlay);
|
||||||
}
|
}
|
||||||
|
|
||||||
private long writeMatrices(long ptr) {
|
private long writeMatrices(long ptr) {
|
||||||
|
|
|
@ -3,6 +3,8 @@ package com.jozufozu.flywheel.backend.engine.uniform;
|
||||||
import com.jozufozu.flywheel.api.event.ReloadLevelRendererEvent;
|
import com.jozufozu.flywheel.api.event.ReloadLevelRendererEvent;
|
||||||
import com.jozufozu.flywheel.api.event.RenderContext;
|
import com.jozufozu.flywheel.api.event.RenderContext;
|
||||||
import com.jozufozu.flywheel.backend.gl.GlStateTracker;
|
import com.jozufozu.flywheel.backend.gl.GlStateTracker;
|
||||||
|
import com.jozufozu.flywheel.config.DebugMode;
|
||||||
|
import com.jozufozu.flywheel.config.DebugOverlay;
|
||||||
|
|
||||||
public class Uniforms {
|
public class Uniforms {
|
||||||
public static boolean frustumPaused = false;
|
public static boolean frustumPaused = false;
|
||||||
|
@ -53,6 +55,11 @@ public class Uniforms {
|
||||||
ubo.update();
|
ubo.update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void setDebugMode(DebugMode mode, DebugOverlay visual) {
|
||||||
|
frame().provider.debugMode = mode.ordinal();
|
||||||
|
frame().provider.debugOverlay = visual.ordinal();
|
||||||
|
}
|
||||||
|
|
||||||
public static void onReloadLevelRenderer(ReloadLevelRendererEvent event) {
|
public static void onReloadLevelRenderer(ReloadLevelRendererEvent event) {
|
||||||
if (frame != null) {
|
if (frame != null) {
|
||||||
frame.delete();
|
frame.delete();
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
package com.jozufozu.flywheel.config;
|
||||||
|
|
||||||
|
public enum DebugMode {
|
||||||
|
NONE,
|
||||||
|
NORMALS,
|
||||||
|
INSTANCE_ID,
|
||||||
|
LIGHT,
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
package com.jozufozu.flywheel.config;
|
||||||
|
|
||||||
|
public enum DebugOverlay {
|
||||||
|
NONE,
|
||||||
|
MUL,
|
||||||
|
OVERRIDE,
|
||||||
|
}
|
|
@ -23,6 +23,7 @@ import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.world.entity.Entity;
|
import net.minecraft.world.entity.Entity;
|
||||||
import net.minecraftforge.client.event.RegisterClientCommandsEvent;
|
import net.minecraftforge.client.event.RegisterClientCommandsEvent;
|
||||||
import net.minecraftforge.common.ForgeConfigSpec.ConfigValue;
|
import net.minecraftforge.common.ForgeConfigSpec.ConfigValue;
|
||||||
|
import net.minecraftforge.server.command.EnumArgument;
|
||||||
|
|
||||||
public class FlwCommands {
|
public class FlwCommands {
|
||||||
public static void registerClientCommands(RegisterClientCommandsEvent event) {
|
public static void registerClientCommands(RegisterClientCommandsEvent event) {
|
||||||
|
@ -101,18 +102,32 @@ public class FlwCommands {
|
||||||
}
|
}
|
||||||
));
|
));
|
||||||
|
|
||||||
// TODO
|
command.then(Commands.literal("debug")
|
||||||
command.then(Commands.literal("debugNormals"))
|
.then(Commands.argument("mode", EnumArgument.enumArgument(DebugMode.class))
|
||||||
.executes(context -> {
|
.executes(context -> {
|
||||||
LocalPlayer player = Minecraft.getInstance().player;
|
LocalPlayer player = Minecraft.getInstance().player;
|
||||||
if (player == null) return 0;
|
if (player == null) return 0;
|
||||||
|
|
||||||
player.displayClientMessage(Component.literal("This command is not yet implemented."), false);
|
DebugMode mode = context.getArgument("mode", DebugMode.class);
|
||||||
|
|
||||||
return Command.SINGLE_SUCCESS;
|
Uniforms.setDebugMode(mode, DebugOverlay.OVERRIDE);
|
||||||
});
|
|
||||||
|
|
||||||
command.then(Commands.literal("debugCrumbling")
|
return Command.SINGLE_SUCCESS;
|
||||||
|
})
|
||||||
|
.then(Commands.argument("overlay", EnumArgument.enumArgument(DebugOverlay.class))
|
||||||
|
.executes(context -> {
|
||||||
|
LocalPlayer player = Minecraft.getInstance().player;
|
||||||
|
if (player == null) return 0;
|
||||||
|
|
||||||
|
DebugMode mode = context.getArgument("mode", DebugMode.class);
|
||||||
|
DebugOverlay visual = context.getArgument("overlay", DebugOverlay.class);
|
||||||
|
|
||||||
|
Uniforms.setDebugMode(mode, visual);
|
||||||
|
|
||||||
|
return Command.SINGLE_SUCCESS;
|
||||||
|
}))));
|
||||||
|
|
||||||
|
command.then(Commands.literal("crumbling")
|
||||||
.then(Commands.argument("pos", BlockPosArgument.blockPos())
|
.then(Commands.argument("pos", BlockPosArgument.blockPos())
|
||||||
.then(Commands.argument("stage", IntegerArgumentType.integer(0, 9))
|
.then(Commands.argument("stage", IntegerArgumentType.integer(0, 9))
|
||||||
.executes(context -> {
|
.executes(context -> {
|
||||||
|
@ -132,12 +147,7 @@ public class FlwCommands {
|
||||||
return Command.SINGLE_SUCCESS;
|
return Command.SINGLE_SUCCESS;
|
||||||
}))));
|
}))));
|
||||||
|
|
||||||
command.then(Commands.literal("debugFrustum")
|
command.then(Commands.literal("frustum")
|
||||||
.then(Commands.literal("pause")
|
|
||||||
.executes(context -> {
|
|
||||||
Uniforms.frustumPaused = true;
|
|
||||||
return 1;
|
|
||||||
}))
|
|
||||||
.then(Commands.literal("unpause")
|
.then(Commands.literal("unpause")
|
||||||
.executes(context -> {
|
.executes(context -> {
|
||||||
Uniforms.frustumPaused = false;
|
Uniforms.frustumPaused = false;
|
||||||
|
|
|
@ -12,6 +12,8 @@ uniform sampler2D _flw_lightTex;
|
||||||
|
|
||||||
out vec4 _flw_outputColor;
|
out vec4 _flw_outputColor;
|
||||||
|
|
||||||
|
in vec4 _flw_debugColor;
|
||||||
|
|
||||||
void _flw_main() {
|
void _flw_main() {
|
||||||
flw_sampleColor = texture(_flw_diffuseTex, flw_vertexTexCoord);
|
flw_sampleColor = texture(_flw_diffuseTex, flw_vertexTexCoord);
|
||||||
flw_fragColor = flw_vertexColor * flw_sampleColor;
|
flw_fragColor = flw_vertexColor * flw_sampleColor;
|
||||||
|
@ -48,5 +50,14 @@ void _flw_main() {
|
||||||
discard;
|
discard;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
switch (_flw_debugOverlay) {
|
||||||
|
case 1u:
|
||||||
|
color *= _flw_debugColor;
|
||||||
|
break;
|
||||||
|
case 2u:
|
||||||
|
color = _flw_debugColor;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
_flw_outputColor = flw_fogFilter(color);
|
_flw_outputColor = flw_fogFilter(color);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,29 @@
|
||||||
#include "flywheel:internal/fog_distance.glsl"
|
#include "flywheel:internal/fog_distance.glsl"
|
||||||
|
|
||||||
void _flw_main(in FlwInstance instance) {
|
// https://stackoverflow.com/a/17479300
|
||||||
|
uint _flw_hash(in uint x) {
|
||||||
|
x += (x << 10u);
|
||||||
|
x ^= (x >> 6u);
|
||||||
|
x += (x << 3u);
|
||||||
|
x ^= (x >> 11u);
|
||||||
|
x += (x << 15u);
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
vec4 _flw_id2Color(in uint id) {
|
||||||
|
uint x = _flw_hash(id);
|
||||||
|
|
||||||
|
return vec4(
|
||||||
|
float(x & 0xFFu) / 255.0,
|
||||||
|
float((x >> 8u) & 0xFFu) / 255.0,
|
||||||
|
float((x >> 16u) & 0xFFu) / 255.0,
|
||||||
|
1.
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
out vec4 _flw_debugColor;
|
||||||
|
|
||||||
|
void _flw_main(in FlwInstance instance, in uint stableInstanceID) {
|
||||||
_flw_layoutVertex();
|
_flw_layoutVertex();
|
||||||
flw_beginVertex();
|
flw_beginVertex();
|
||||||
flw_instanceVertex(instance);
|
flw_instanceVertex(instance);
|
||||||
|
@ -12,4 +35,19 @@ void _flw_main(in FlwInstance instance) {
|
||||||
flw_distance = fogDistance(flw_vertexPos.xyz, flw_cameraPos, flw_fogShape);
|
flw_distance = fogDistance(flw_vertexPos.xyz, flw_cameraPos, flw_fogShape);
|
||||||
|
|
||||||
gl_Position = flw_viewProjection * flw_vertexPos;
|
gl_Position = flw_viewProjection * flw_vertexPos;
|
||||||
|
|
||||||
|
switch (_flw_debugMode) {
|
||||||
|
case 0u:
|
||||||
|
_flw_debugColor = vec4(1.);
|
||||||
|
break;
|
||||||
|
case 1u:
|
||||||
|
_flw_debugColor = vec4(flw_vertexNormal * .5 + .5, 1.);
|
||||||
|
break;
|
||||||
|
case 2u:
|
||||||
|
_flw_debugColor = _flw_id2Color(stableInstanceID);
|
||||||
|
break;
|
||||||
|
case 3u:
|
||||||
|
_flw_debugColor = vec4(vec2((flw_vertexLight * 15.0 + 0.5) / 16.), 0., 1.);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,5 +32,5 @@ void main() {
|
||||||
uint objectIndex = objectIndices[gl_BaseInstance + gl_InstanceID];
|
uint objectIndex = objectIndices[gl_BaseInstance + gl_InstanceID];
|
||||||
FlwInstance instance = _flw_unpackInstance(objects[objectIndex].instance);
|
FlwInstance instance = _flw_unpackInstance(objects[objectIndex].instance);
|
||||||
|
|
||||||
_flw_main(instance);
|
_flw_main(instance, objectIndex);
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,5 +9,5 @@ void main() {
|
||||||
|
|
||||||
FlwInstance instance = _flw_unpackInstance();
|
FlwInstance instance = _flw_unpackInstance();
|
||||||
|
|
||||||
_flw_main(instance);
|
_flw_main(instance, uint(gl_InstanceID));
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,6 +29,9 @@ layout(std140) uniform _FlwFrameUniforms {
|
||||||
|
|
||||||
float flw_renderTicks;
|
float flw_renderTicks;
|
||||||
float flw_renderSeconds;
|
float flw_renderSeconds;
|
||||||
|
|
||||||
|
uint _flw_debugMode;
|
||||||
|
uint _flw_debugOverlay;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define flw_cameraPos _flw_cameraPos.xyz
|
#define flw_cameraPos _flw_cameraPos.xyz
|
||||||
|
|
Loading…
Reference in a new issue