Skip to content

Commit

Permalink
fix: make flame_3d work with latest stable
Browse files Browse the repository at this point in the history
  • Loading branch information
wolfenrain committed Dec 13, 2024
1 parent d4094b2 commit 3534b7e
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 12 deletions.
2 changes: 2 additions & 0 deletions .github/workflows/cicd.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ jobs:
with:
flutter-version: ${{env.FLUTTER_MIN_VERSION}}
- uses: bluefireteam/melos-action@v3
# flame_3d has a higher lowest supported version so we just remove it here to prevent CI errors
- run: rm -rf packages/flame_3d
- name: "Analyze with lowest supported version"
uses: invertase/github-action-dart-analyzer@v3
with:
Expand Down
6 changes: 6 additions & 0 deletions packages/flame_3d/lib/src/extensions/vector4.dart
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import 'dart:ui';

import 'package:flame_3d/game.dart';

/// Represents an immutable [Vector3].
Expand All @@ -18,6 +20,10 @@ class Vector4Utils {
static Vector4 lerp(Vector4 a, Vector4 b, double t) {
return a + (b - a).scaled(t);
}

static Vector4 fromColor(Color color) {
return Vector4(color.r, color.g, color.b, color.a);
}
}

extension Vector4Math on ImmutableVector4 {
Expand Down
28 changes: 17 additions & 11 deletions packages/flame_3d/lib/src/graphics/graphics_device.dart
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,12 @@ enum DepthStencilState {
/// {@endtemplate}
class GraphicsDevice {
/// {@macro graphics_device}
GraphicsDevice({this.clearValue = const Color(0x00000000)});
GraphicsDevice({
this.clearValue = const Color(0x00000000),
gpu.GpuContext? gpuContext,
}) : _gpuContext = gpuContext ?? gpu.gpuContext;

final gpu.GpuContext _gpuContext;

/// The clear value, used to clear out the screen.
final Color clearValue;
Expand Down Expand Up @@ -71,8 +76,9 @@ class GraphicsDevice {
// TODO(wolfenrain): used incorrectly
DepthStencilState depthStencilState = DepthStencilState.depthRead,
}) {
_commandBuffer = gpu.gpuContext.createCommandBuffer();
_hostBuffer = gpu.gpuContext.createHostBuffer();
_commandBuffer = _gpuContext.createCommandBuffer();
_hostBuffer = _gpuContext.createHostBuffer();

_renderPass = _commandBuffer.createRenderPass(_getRenderTarget(size))
..setColorBlendEnable(true)
..setColorBlendEquation(
Expand All @@ -84,10 +90,9 @@ class GraphicsDevice {
)
..setDepthWriteEnable(depthStencilState == DepthStencilState.depthRead)
..setDepthCompareOperation(
// TODO(wolfenrain): this is not correctly implemented AT all.
switch (depthStencilState) {
DepthStencilState.none => gpu.CompareFunction.never,
DepthStencilState.standard => gpu.CompareFunction.always,
DepthStencilState.standard => gpu.CompareFunction.lessEqual,
DepthStencilState.depthRead => gpu.CompareFunction.less,
},
);
Expand All @@ -106,9 +111,7 @@ class GraphicsDevice {

/// Bind a [mesh].
void bindMesh(Mesh mesh) {
_renderPass.clearBindings();
mesh.bind(this);
_renderPass.draw();
}

/// Bind a [surface].
Expand Down Expand Up @@ -163,21 +166,24 @@ class GraphicsDevice {
if (_previousSize != size) {
_previousSize = size;

final colorTexture = gpu.gpuContext.createTexture(
final colorTexture = _gpuContext.createTexture(
gpu.StorageMode.devicePrivate,
size.width.toInt(),
size.height.toInt(),
);

final depthTexture = gpu.gpuContext.createTexture(
final depthTexture = _gpuContext.createTexture(
gpu.StorageMode.deviceTransient,
size.width.toInt(),
size.height.toInt(),
format: gpu.gpuContext.defaultDepthStencilFormat,
format: _gpuContext.defaultDepthStencilFormat,
);

_renderTarget = gpu.RenderTarget.singleColor(
gpu.ColorAttachment(texture: colorTexture!, clearValue: clearValue),
gpu.ColorAttachment(
texture: colorTexture!,
clearValue: Vector4Utils.fromColor(clearValue),
),
depthStencilAttachment: gpu.DepthStencilAttachment(
texture: depthTexture!,
depthClearValue: 1.0,
Expand Down
2 changes: 1 addition & 1 deletion packages/flame_3d/lib/src/resources/mesh/vertex.dart
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ class Vertex {
_storage = Float32List.fromList([
...position.storage, // 1, 2, 3
...texCoord.storage, // 4, 5
...color.storage, // 6, 7, 8, 9
...[color.r, color.g, color.b, color.a], // 6, 7, 8, 9
...(normal ?? Vector3.zero()).storage, // 10, 11, 12
...(joints ?? Vector4.zero()).storage, // 13, 14, 15, 16
...(weights ?? Vector4.zero()).storage, // 17, 18, 19, 20
Expand Down

0 comments on commit 3534b7e

Please sign in to comment.