Improves ASCII rasterization speed and simplifies API
Signed-off-by: Hans Kokx <hans.d.kokx@gmail.com>
This commit is contained in:
@@ -1,5 +1,4 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:wolf_3d_dart/wolf_3d_data_types.dart';
|
||||
import 'package:wolf_3d_dart/wolf_3d_engine.dart';
|
||||
import 'package:wolf_3d_renderer/base_renderer.dart';
|
||||
|
||||
@@ -14,19 +13,28 @@ class WolfAsciiRenderer extends BaseWolfRenderer {
|
||||
}
|
||||
|
||||
class _WolfAsciiRendererState extends BaseWolfRendererState<WolfAsciiRenderer> {
|
||||
static const int _renderWidth = 160;
|
||||
static const int _renderHeight = 100;
|
||||
|
||||
List<List<ColoredChar>> _asciiFrame = [];
|
||||
final AsciiRasterizer _asciiRasterizer = AsciiRasterizer();
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
if (widget.engine.frameBuffer.width != _renderWidth ||
|
||||
widget.engine.frameBuffer.height != _renderHeight) {
|
||||
widget.engine.setFrameBuffer(_renderWidth, _renderHeight);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Color get scaffoldColor => const Color.fromARGB(255, 4, 64, 64);
|
||||
|
||||
@override
|
||||
void performRender() {
|
||||
setState(() {
|
||||
_asciiFrame = _asciiRasterizer.render(
|
||||
widget.engine,
|
||||
FrameBuffer(160, 100),
|
||||
);
|
||||
_asciiFrame = _asciiRasterizer.render(widget.engine);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -18,12 +18,22 @@ class WolfFlutterRenderer extends BaseWolfRenderer {
|
||||
|
||||
class _WolfFlutterRendererState
|
||||
extends BaseWolfRendererState<WolfFlutterRenderer> {
|
||||
final FrameBuffer _frameBuffer = FrameBuffer(320, 200);
|
||||
static const int _renderWidth = 320;
|
||||
static const int _renderHeight = 200;
|
||||
final SoftwareRasterizer _rasterizer = SoftwareRasterizer();
|
||||
|
||||
ui.Image? _renderedFrame;
|
||||
bool _isRendering = false;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
if (widget.engine.frameBuffer.width != _renderWidth ||
|
||||
widget.engine.frameBuffer.height != _renderHeight) {
|
||||
widget.engine.setFrameBuffer(_renderWidth, _renderHeight);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Color get scaffoldColor => const Color.fromARGB(255, 4, 64, 64);
|
||||
|
||||
@@ -32,12 +42,13 @@ class _WolfFlutterRendererState
|
||||
if (_isRendering) return;
|
||||
_isRendering = true;
|
||||
|
||||
_rasterizer.render(widget.engine, _frameBuffer);
|
||||
final FrameBuffer frameBuffer = widget.engine.frameBuffer;
|
||||
_rasterizer.render(widget.engine);
|
||||
|
||||
ui.decodeImageFromPixels(
|
||||
_frameBuffer.pixels.buffer.asUint8List(),
|
||||
_frameBuffer.width,
|
||||
_frameBuffer.height,
|
||||
frameBuffer.pixels.buffer.asUint8List(),
|
||||
frameBuffer.width,
|
||||
frameBuffer.height,
|
||||
ui.PixelFormat.rgba8888,
|
||||
(ui.Image image) {
|
||||
if (mounted) {
|
||||
|
||||
Reference in New Issue
Block a user