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:
@@ -11,12 +11,16 @@ import 'package:wolf_3d_renderer/wolf_3d_asset_painter.dart';
|
||||
|
||||
/// Displays software-rendered frames through a GLSL post-processing pass.
|
||||
class WolfGlslRenderer extends BaseWolfRenderer {
|
||||
/// Whether CRT-like post effects are enabled in the shader pass.
|
||||
final bool effectsEnabled;
|
||||
|
||||
/// Callback when shader loading fails and software fallback should be used.
|
||||
final VoidCallback? onUnavailable;
|
||||
|
||||
/// Creates a GLSL renderer bound to [engine].
|
||||
const WolfGlslRenderer({
|
||||
required super.engine,
|
||||
this.effectsEnabled = false,
|
||||
super.onKeyEvent,
|
||||
this.onUnavailable,
|
||||
super.key,
|
||||
@@ -113,6 +117,8 @@ class _WolfGlslRendererState extends BaseWolfRendererState<WolfGlslRenderer> {
|
||||
painter: _GlslFramePainter(
|
||||
frame: _renderedFrame!,
|
||||
shader: _shader!,
|
||||
effectsEnabled: widget.effectsEnabled,
|
||||
elapsedSeconds: widget.engine.timeAliveMs / 1000.0,
|
||||
),
|
||||
child: const SizedBox.expand(),
|
||||
),
|
||||
@@ -152,10 +158,14 @@ class _WolfGlslRendererState extends BaseWolfRendererState<WolfGlslRenderer> {
|
||||
class _GlslFramePainter extends CustomPainter {
|
||||
final ui.Image frame;
|
||||
final ui.FragmentShader shader;
|
||||
final bool effectsEnabled;
|
||||
final double elapsedSeconds;
|
||||
|
||||
_GlslFramePainter({
|
||||
required this.frame,
|
||||
required this.shader,
|
||||
required this.effectsEnabled,
|
||||
required this.elapsedSeconds,
|
||||
});
|
||||
|
||||
@override
|
||||
@@ -167,6 +177,8 @@ class _GlslFramePainter extends CustomPainter {
|
||||
..setFloat(1, size.height)
|
||||
..setFloat(2, texelX)
|
||||
..setFloat(3, texelY)
|
||||
..setFloat(4, effectsEnabled ? 1.0 : 0.0)
|
||||
..setFloat(5, elapsedSeconds)
|
||||
..setImageSampler(0, frame);
|
||||
|
||||
final Paint paint = Paint()
|
||||
@@ -178,6 +190,9 @@ class _GlslFramePainter extends CustomPainter {
|
||||
|
||||
@override
|
||||
bool shouldRepaint(covariant _GlslFramePainter oldDelegate) {
|
||||
return oldDelegate.frame != frame || oldDelegate.shader != shader;
|
||||
return oldDelegate.frame != frame ||
|
||||
oldDelegate.shader != shader ||
|
||||
oldDelegate.effectsEnabled != effectsEnabled ||
|
||||
oldDelegate.elapsedSeconds != elapsedSeconds;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user