Refactor rendering architecture and replace rasterizer with renderer
- Introduced SoftwareRenderer as a pixel-accurate software rendering backend. - Removed the obsolete wolf_3d_rasterizer.dart file. - Created a new wolf_3d_renderer.dart file to centralize rendering exports. - Updated tests to accommodate the new rendering structure, including pushwall and projection sampling tests. - Modified the WolfAsciiRenderer and WolfFlutterRenderer to utilize the new SoftwareRenderer. - Enhanced enemy spawn tests to include new enemy states. Signed-off-by: Hans Kokx <hans.d.kokx@gmail.com>
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
/// Flutter widget that renders Wolf3D frames using the ASCII rasterizer.
|
||||
/// Flutter widget that renders Wolf3D frames using the ASCII renderer.
|
||||
library;
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:wolf_3d_dart/wolf_3d_rasterizer.dart';
|
||||
import 'package:wolf_3d_dart/wolf_3d_renderer.dart';
|
||||
import 'package:wolf_3d_renderer/base_renderer.dart';
|
||||
|
||||
/// Displays the game using a text-mode approximation of the original renderer.
|
||||
@@ -22,8 +22,8 @@ class _WolfAsciiRendererState extends BaseWolfRendererState<WolfAsciiRenderer> {
|
||||
static const int _renderHeight = 100;
|
||||
|
||||
List<List<ColoredChar>> _asciiFrame = [];
|
||||
final AsciiRasterizer _asciiRasterizer = AsciiRasterizer(
|
||||
mode: AsciiRasterizerMode.terminalGrid,
|
||||
final AsciiRenderer _asciiRenderer = AsciiRenderer(
|
||||
mode: AsciiRendererMode.terminalGrid,
|
||||
);
|
||||
|
||||
@override
|
||||
@@ -45,7 +45,7 @@ class _WolfAsciiRendererState extends BaseWolfRendererState<WolfAsciiRenderer> {
|
||||
@override
|
||||
void performRender() {
|
||||
setState(() {
|
||||
_asciiFrame = _asciiRasterizer.render(widget.engine);
|
||||
_asciiFrame = _asciiRenderer.render(widget.engine);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -63,7 +63,7 @@ class _WolfAsciiRendererState extends BaseWolfRendererState<WolfAsciiRenderer> {
|
||||
|
||||
/// Paints a pre-rasterized ASCII frame using grouped text spans per color run.
|
||||
class AsciiFrameWidget extends StatelessWidget {
|
||||
/// Two-dimensional text grid generated by [AsciiRasterizer.render].
|
||||
/// Two-dimensional text grid generated by [AsciiRenderer.render].
|
||||
final List<List<ColoredChar>> frameData;
|
||||
|
||||
/// Creates a widget that displays [frameData].
|
||||
|
||||
@@ -5,11 +5,11 @@ import 'dart:ui' as ui;
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:wolf_3d_dart/wolf_3d_data_types.dart';
|
||||
import 'package:wolf_3d_dart/wolf_3d_rasterizer.dart';
|
||||
import 'package:wolf_3d_dart/wolf_3d_renderer.dart';
|
||||
import 'package:wolf_3d_renderer/base_renderer.dart';
|
||||
import 'package:wolf_3d_renderer/wolf_3d_asset_painter.dart';
|
||||
|
||||
/// Presents the software rasterizer output by decoding the shared framebuffer.
|
||||
/// Presents the software renderer output by decoding the shared framebuffer.
|
||||
class WolfFlutterRenderer extends BaseWolfRenderer {
|
||||
/// Creates a pixel renderer bound to [engine].
|
||||
const WolfFlutterRenderer({
|
||||
@@ -25,7 +25,7 @@ class _WolfFlutterRendererState
|
||||
extends BaseWolfRendererState<WolfFlutterRenderer> {
|
||||
static const int _renderWidth = 320;
|
||||
static const int _renderHeight = 200;
|
||||
final SoftwareRasterizer _rasterizer = SoftwareRasterizer();
|
||||
final SoftwareRenderer _renderer = SoftwareRenderer();
|
||||
|
||||
ui.Image? _renderedFrame;
|
||||
bool _isRendering = false;
|
||||
@@ -51,7 +51,7 @@ class _WolfFlutterRendererState
|
||||
_isRendering = true;
|
||||
|
||||
final FrameBuffer frameBuffer = widget.engine.frameBuffer;
|
||||
_rasterizer.render(widget.engine);
|
||||
_renderer.render(widget.engine);
|
||||
|
||||
// Convert the engine-owned framebuffer into a GPU-friendly ui.Image on
|
||||
// the Flutter side while preserving nearest-neighbor pixel fidelity.
|
||||
|
||||
Reference in New Issue
Block a user