feat: Add GLSL effects toggle and enhance shader for CRT-like post-processing

Signed-off-by: Hans Kokx <hans.d.kokx@gmail.com>
This commit is contained in:
2026-03-20 11:03:33 +01:00
parent cbbcd3223a
commit abca679a99
4 changed files with 90 additions and 5 deletions

View File

@@ -35,6 +35,7 @@ class _GameScreenState extends State<GameScreen> {
late final WolfEngine _engine;
RendererMode _rendererMode = RendererMode.hardware;
AsciiTheme _asciiTheme = AsciiThemes.blocks;
bool _glslEffectsEnabled = false;
@override
void initState() {
@@ -109,7 +110,7 @@ class _GameScreenState extends State<GameScreen> {
top: 16,
right: 16,
child: Text(
'<${widget.wolf3d.input.rendererToggleKeyLabel}> ${_rendererMode.name}${_rendererMode == RendererMode.ascii ? ' <${widget.wolf3d.input.asciiThemeCycleKeyLabel}> ${_asciiTheme.name}' : ''} <${widget.wolf3d.input.fpsToggleKeyLabel}> FPS ${_engine.showFpsCounter ? 'On' : 'Off'}',
'<${widget.wolf3d.input.rendererToggleKeyLabel}> ${_rendererMode.name}${_activeModeOverlayHint()} <${widget.wolf3d.input.fpsToggleKeyLabel}> FPS ${_engine.showFpsCounter ? 'On' : 'Off'}',
style: TextStyle(
color: Colors.white.withValues(alpha: 0.5),
),
@@ -142,6 +143,7 @@ class _GameScreenState extends State<GameScreen> {
case RendererMode.hardware:
return WolfGlslRenderer(
engine: _engine,
effectsEnabled: _glslEffectsEnabled,
onKeyEvent: _handleRendererKeyEvent,
onUnavailable: _onGlslUnavailable,
);
@@ -164,10 +166,24 @@ class _GameScreenState extends State<GameScreen> {
}
if (event.logicalKey == widget.wolf3d.input.asciiThemeCycleKey) {
setState(_cycleAsciiTheme);
if (_rendererMode == RendererMode.ascii) {
setState(_cycleAsciiTheme);
} else if (_rendererMode == RendererMode.hardware) {
setState(_toggleGlslEffects);
}
}
}
String _activeModeOverlayHint() {
if (_rendererMode == RendererMode.ascii) {
return ' <${widget.wolf3d.input.asciiThemeCycleKeyLabel}> ${_asciiTheme.name}';
}
if (_rendererMode == RendererMode.hardware) {
return ' <${widget.wolf3d.input.asciiThemeCycleKeyLabel}> Effects ${_glslEffectsEnabled ? 'on' : 'off'}';
}
return '';
}
void _cycleRendererMode() {
switch (_rendererMode) {
case RendererMode.hardware:
@@ -198,4 +214,8 @@ class _GameScreenState extends State<GameScreen> {
void _cycleAsciiTheme() {
_asciiTheme = AsciiThemes.nextOf(_asciiTheme);
}
void _toggleGlslEffects() {
_glslEffectsEnabled = !_glslEffectsEnabled;
}
}