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:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user