mirror of
https://github.com/Jozufozu/Flywheel.git
synced 2025-01-24 20:07:54 +01:00
To bug or not to bug
- Disable the debug stuff in the frag shader with compile flags - Also disable discard and conservative depth with CutoutShaders.OFF
This commit is contained in:
parent
897c350f41
commit
36b0ad4cf9
7 changed files with 40 additions and 6 deletions
|
@ -15,6 +15,7 @@ import dev.engine_room.flywheel.backend.compile.component.InstanceStructComponen
|
||||||
import dev.engine_room.flywheel.backend.compile.component.SsboInstanceComponent;
|
import dev.engine_room.flywheel.backend.compile.component.SsboInstanceComponent;
|
||||||
import dev.engine_room.flywheel.backend.compile.core.CompilationHarness;
|
import dev.engine_room.flywheel.backend.compile.core.CompilationHarness;
|
||||||
import dev.engine_room.flywheel.backend.compile.core.Compile;
|
import dev.engine_room.flywheel.backend.compile.core.Compile;
|
||||||
|
import dev.engine_room.flywheel.backend.engine.uniform.FrameUniforms;
|
||||||
import dev.engine_room.flywheel.backend.engine.uniform.Uniforms;
|
import dev.engine_room.flywheel.backend.engine.uniform.Uniforms;
|
||||||
import dev.engine_room.flywheel.backend.gl.GlCompat;
|
import dev.engine_room.flywheel.backend.gl.GlCompat;
|
||||||
import dev.engine_room.flywheel.backend.gl.shader.GlProgram;
|
import dev.engine_room.flywheel.backend.gl.shader.GlProgram;
|
||||||
|
@ -151,7 +152,7 @@ public class IndirectPrograms extends AtomicReferenceCounted {
|
||||||
}
|
}
|
||||||
|
|
||||||
public GlProgram getIndirectProgram(InstanceType<?> instanceType, ContextShader contextShader, LightShader light, CutoutShader cutout, MaterialShaders shaders) {
|
public GlProgram getIndirectProgram(InstanceType<?> instanceType, ContextShader contextShader, LightShader light, CutoutShader cutout, MaterialShaders shaders) {
|
||||||
return pipeline.get(new PipelineProgramKey(instanceType, contextShader, light, cutout, shaders));
|
return pipeline.get(new PipelineProgramKey(instanceType, contextShader, light, cutout, shaders, FrameUniforms.debugOn()));
|
||||||
}
|
}
|
||||||
|
|
||||||
public GlProgram getCullingProgram(InstanceType<?> instanceType) {
|
public GlProgram getCullingProgram(InstanceType<?> instanceType) {
|
||||||
|
|
|
@ -11,6 +11,7 @@ import dev.engine_room.flywheel.api.material.CutoutShader;
|
||||||
import dev.engine_room.flywheel.api.material.LightShader;
|
import dev.engine_room.flywheel.api.material.LightShader;
|
||||||
import dev.engine_room.flywheel.api.material.MaterialShaders;
|
import dev.engine_room.flywheel.api.material.MaterialShaders;
|
||||||
import dev.engine_room.flywheel.backend.compile.core.CompilationHarness;
|
import dev.engine_room.flywheel.backend.compile.core.CompilationHarness;
|
||||||
|
import dev.engine_room.flywheel.backend.engine.uniform.FrameUniforms;
|
||||||
import dev.engine_room.flywheel.backend.gl.GlCompat;
|
import dev.engine_room.flywheel.backend.gl.GlCompat;
|
||||||
import dev.engine_room.flywheel.backend.gl.shader.GlProgram;
|
import dev.engine_room.flywheel.backend.gl.shader.GlProgram;
|
||||||
import dev.engine_room.flywheel.backend.glsl.GlslVersion;
|
import dev.engine_room.flywheel.backend.glsl.GlslVersion;
|
||||||
|
@ -74,7 +75,7 @@ public class InstancingPrograms extends AtomicReferenceCounted {
|
||||||
}
|
}
|
||||||
|
|
||||||
public GlProgram get(InstanceType<?> instanceType, ContextShader contextShader, LightShader light, CutoutShader cutout, MaterialShaders materialShaders) {
|
public GlProgram get(InstanceType<?> instanceType, ContextShader contextShader, LightShader light, CutoutShader cutout, MaterialShaders materialShaders) {
|
||||||
return pipeline.get(new PipelineProgramKey(instanceType, contextShader, light, cutout, materialShaders));
|
return pipeline.get(new PipelineProgramKey(instanceType, contextShader, light, cutout, materialShaders, FrameUniforms.debugOn()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -16,6 +16,7 @@ import dev.engine_room.flywheel.backend.gl.shader.GlProgram;
|
||||||
import dev.engine_room.flywheel.backend.gl.shader.ShaderType;
|
import dev.engine_room.flywheel.backend.gl.shader.ShaderType;
|
||||||
import dev.engine_room.flywheel.backend.glsl.ShaderSources;
|
import dev.engine_room.flywheel.backend.glsl.ShaderSources;
|
||||||
import dev.engine_room.flywheel.backend.glsl.SourceComponent;
|
import dev.engine_room.flywheel.backend.glsl.SourceComponent;
|
||||||
|
import dev.engine_room.flywheel.lib.material.CutoutShaders;
|
||||||
import dev.engine_room.flywheel.lib.util.ResourceUtil;
|
import dev.engine_room.flywheel.lib.util.ResourceUtil;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
|
|
||||||
|
@ -39,12 +40,18 @@ public final class PipelineCompiler {
|
||||||
.vertexSource());
|
.vertexSource());
|
||||||
var context = key.contextShader()
|
var context = key.contextShader()
|
||||||
.nameLowerCase();
|
.nameLowerCase();
|
||||||
return "pipeline/" + pipeline.compilerMarker() + "/" + instance + "/" + material + "_" + context;
|
var debug = key.debugEnabled() ? "_debug" : "";
|
||||||
|
return "pipeline/" + pipeline.compilerMarker() + "/" + instance + "/" + material + "_" + context + debug;
|
||||||
})
|
})
|
||||||
.requireExtensions(extensions)
|
.requireExtensions(extensions)
|
||||||
.onCompile((key, comp) -> key.contextShader()
|
.onCompile((key, comp) -> key.contextShader()
|
||||||
.onCompile(comp))
|
.onCompile(comp))
|
||||||
.onCompile((key, comp) -> lightSmoothness.onCompile(comp))
|
.onCompile((key, comp) -> lightSmoothness.onCompile(comp))
|
||||||
|
.onCompile((key, comp) -> {
|
||||||
|
if (key.debugEnabled()) {
|
||||||
|
comp.define("_FLW_DEBUG");
|
||||||
|
}
|
||||||
|
})
|
||||||
.withResource(API_IMPL_VERT)
|
.withResource(API_IMPL_VERT)
|
||||||
.withComponent(key -> new InstanceStructComponent(key.instanceType()))
|
.withComponent(key -> new InstanceStructComponent(key.instanceType()))
|
||||||
.withResource(key -> key.instanceType()
|
.withResource(key -> key.instanceType()
|
||||||
|
@ -69,13 +76,24 @@ public final class PipelineCompiler {
|
||||||
|
|
||||||
var light = ResourceUtil.toDebugFileNameNoExtension(key.light()
|
var light = ResourceUtil.toDebugFileNameNoExtension(key.light()
|
||||||
.source());
|
.source());
|
||||||
return "pipeline/" + pipeline.compilerMarker() + "/frag/" + material + "/" + light + "_" + cutout + "_" + context;
|
var debug = key.debugEnabled() ? "_debug" : "";
|
||||||
|
return "pipeline/" + pipeline.compilerMarker() + "/frag/" + material + "/" + light + "_" + cutout + "_" + context + debug;
|
||||||
})
|
})
|
||||||
.requireExtensions(extensions)
|
.requireExtensions(extensions)
|
||||||
.enableExtension("GL_ARB_conservative_depth")
|
.enableExtension("GL_ARB_conservative_depth")
|
||||||
.onCompile((key, comp) -> key.contextShader()
|
.onCompile((key, comp) -> key.contextShader()
|
||||||
.onCompile(comp))
|
.onCompile(comp))
|
||||||
.onCompile((key, comp) -> lightSmoothness.onCompile(comp))
|
.onCompile((key, comp) -> lightSmoothness.onCompile(comp))
|
||||||
|
.onCompile((key, comp) -> {
|
||||||
|
if (key.debugEnabled()) {
|
||||||
|
comp.define("_FLW_DEBUG");
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.onCompile((key, comp) -> {
|
||||||
|
if (key.cutout() != CutoutShaders.OFF) {
|
||||||
|
comp.define("_FLW_USE_DISCARD");
|
||||||
|
}
|
||||||
|
})
|
||||||
.withResource(API_IMPL_FRAG)
|
.withResource(API_IMPL_FRAG)
|
||||||
.withResource(key -> key.materialShaders()
|
.withResource(key -> key.materialShaders()
|
||||||
.fragmentSource())
|
.fragmentSource())
|
||||||
|
|
|
@ -13,5 +13,5 @@ import dev.engine_room.flywheel.api.material.MaterialShaders;
|
||||||
* @param light The light shader to use.
|
* @param light The light shader to use.
|
||||||
*/
|
*/
|
||||||
public record PipelineProgramKey(InstanceType<?> instanceType, ContextShader contextShader, LightShader light,
|
public record PipelineProgramKey(InstanceType<?> instanceType, ContextShader contextShader, LightShader light,
|
||||||
CutoutShader cutout, MaterialShaders materialShaders) {
|
CutoutShader cutout, MaterialShaders materialShaders, boolean debugEnabled) {
|
||||||
}
|
}
|
||||||
|
|
|
@ -315,4 +315,8 @@ public final class FrameUniforms extends UniformWriter {
|
||||||
MemoryUtil.memPutFloat(ptr + 88, nzW);
|
MemoryUtil.memPutFloat(ptr + 88, nzW);
|
||||||
MemoryUtil.memPutFloat(ptr + 92, pzW);
|
MemoryUtil.memPutFloat(ptr + 92, pzW);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean debugOn() {
|
||||||
|
return debugMode != DebugMode.OFF.ordinal();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
#include "flywheel:internal/colorizer.glsl"
|
#include "flywheel:internal/colorizer.glsl"
|
||||||
|
|
||||||
// optimize discard usage
|
// optimize discard usage
|
||||||
#ifdef GL_ARB_conservative_depth
|
#if defined(GL_ARB_conservative_depth) && defined(_FLW_USE_DISCARD)
|
||||||
layout (depth_greater) out float gl_FragDepth;
|
layout (depth_greater) out float gl_FragDepth;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -13,7 +13,9 @@ uniform sampler2D _flw_crumblingTex;
|
||||||
in vec2 _flw_crumblingTexCoord;
|
in vec2 _flw_crumblingTexCoord;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef _FLW_DEBUG
|
||||||
flat in uint _flw_instanceID;
|
flat in uint _flw_instanceID;
|
||||||
|
#endif
|
||||||
|
|
||||||
out vec4 _flw_outputColor;
|
out vec4 _flw_outputColor;
|
||||||
|
|
||||||
|
@ -49,9 +51,11 @@ void _flw_main() {
|
||||||
|
|
||||||
vec4 color = flw_fragColor;
|
vec4 color = flw_fragColor;
|
||||||
|
|
||||||
|
#ifdef _FLW_USE_DISCARD
|
||||||
if (flw_discardPredicate(color)) {
|
if (flw_discardPredicate(color)) {
|
||||||
discard;
|
discard;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
float diffuseFactor = _flw_diffuseFactor();
|
float diffuseFactor = _flw_diffuseFactor();
|
||||||
color.rgb *= diffuseFactor;
|
color.rgb *= diffuseFactor;
|
||||||
|
@ -67,6 +71,7 @@ void _flw_main() {
|
||||||
color *= lightColor;
|
color *= lightColor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef _FLW_DEBUG
|
||||||
switch (_flw_debugMode) {
|
switch (_flw_debugMode) {
|
||||||
case 1u:
|
case 1u:
|
||||||
color = vec4(flw_vertexNormal * .5 + .5, 1.);
|
color = vec4(flw_vertexNormal * .5 + .5, 1.);
|
||||||
|
@ -87,6 +92,7 @@ void _flw_main() {
|
||||||
color = vec4(vec3(diffuseFactor), 1.);
|
color = vec4(vec3(diffuseFactor), 1.);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
_flw_outputColor = flw_fogFilter(color);
|
_flw_outputColor = flw_fogFilter(color);
|
||||||
}
|
}
|
||||||
|
|
|
@ -71,7 +71,9 @@ mat4 _flw_modelMatrix;
|
||||||
mat3 _flw_normalMatrix;
|
mat3 _flw_normalMatrix;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef _FLW_DEBUG
|
||||||
flat out uint _flw_instanceID;
|
flat out uint _flw_instanceID;
|
||||||
|
#endif
|
||||||
|
|
||||||
void _flw_main(in FlwInstance instance, in uint stableInstanceID) {
|
void _flw_main(in FlwInstance instance, in uint stableInstanceID) {
|
||||||
_flw_layoutVertex();
|
_flw_layoutVertex();
|
||||||
|
@ -93,5 +95,7 @@ void _flw_main(in FlwInstance instance, in uint stableInstanceID) {
|
||||||
|
|
||||||
gl_Position = flw_viewProjection * flw_vertexPos;
|
gl_Position = flw_viewProjection * flw_vertexPos;
|
||||||
|
|
||||||
|
#ifdef _FLW_DEBUG
|
||||||
_flw_instanceID = stableInstanceID;
|
_flw_instanceID = stableInstanceID;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue