Hacked to work with bevy 0.8, Nix flake

This commit is contained in:
polygon - 2022-09-17 01:21:20 +02:00
parent b94b95f7c3
commit 6ced0d32cd
8 changed files with 206 additions and 73 deletions

20
Cargo.lock generated
View File

@ -472,6 +472,16 @@ dependencies = [
"ndk-glue 0.5.2",
]
[[package]]
name = "bevy_julia"
version = "0.1.0"
dependencies = [
"bevy",
"bevy_better_exit",
"csv",
"palette",
]
[[package]]
name = "bevy_log"
version = "0.8.1"
@ -1848,16 +1858,6 @@ dependencies = [
"wasm-bindgen",
]
[[package]]
name = "julia"
version = "0.1.0"
dependencies = [
"bevy",
"bevy_better_exit",
"csv",
"palette",
]
[[package]]
name = "khronos-egl"
version = "4.1.0"

View File

@ -1,5 +1,5 @@
[package]
name = "julia"
name = "bevy_julia"
version = "0.1.0"
edition = "2021"

View File

@ -1,14 +1,14 @@
[[group(0), binding(0)]]
@group(0) @binding(0)
var input: texture_storage_2d<r32float, read>;
[[group(0), binding(1)]]
@group(0) @binding(1)
var output: texture_storage_2d<rgba8unorm, write>;
[[group(0), binding(2)]]
@group(0) @binding(2)
var mapping: texture_storage_1d<rgba8unorm, read>;
[[stage(compute), workgroup_size(8, 8, 1)]]
fn colormap([[builtin(global_invocation_id)]] invocation_id: vec3<u32>, [[builtin(num_workgroups)]] num_workgroups: vec3<u32>) {
@compute @workgroup_size(8, 8, 1)
fn colormap(@builtin(global_invocation_id) invocation_id: vec3<u32>, @builtin(num_workgroups) num_workgroups: vec3<u32>) {
let mapping_size = f32(textureDimensions(mapping));
let pos = vec2<i32>(i32(invocation_id.x), i32(invocation_id.y));
let val = textureLoad(input, pos).r;

110
flake.lock Normal file
View File

@ -0,0 +1,110 @@
{
"nodes": {
"flake-utils": {
"locked": {
"lastModified": 1656928814,
"narHash": "sha256-RIFfgBuKz6Hp89yRr7+NR5tzIAbn52h8vT6vXkYjZoM=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "7e2a3b3dfd9af950a856d66b0a7d01e3c18aa249",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"naersk": {
"inputs": {
"nixpkgs": "nixpkgs"
},
"locked": {
"lastModified": 1662220400,
"narHash": "sha256-9o2OGQqu4xyLZP9K6kNe1pTHnyPz0Wr3raGYnr9AIgY=",
"owner": "nix-community",
"repo": "naersk",
"rev": "6944160c19cb591eb85bbf9b2f2768a935623ed3",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "naersk",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1663264531,
"narHash": "sha256-2ncO5chPXlTxaebDlhx7MhL0gOEIWxzSyfsl0r0hxQk=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "454887a35de6317a30be284e8adc2d2f6d8a07c4",
"type": "github"
},
"original": {
"id": "nixpkgs",
"type": "indirect"
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 1663364893,
"narHash": "sha256-Ttz4WrohHKbWFK7ayjEdbo3CTQphpttcHIW9EpghT8k=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "5498855d03a71a4805f9d56265989a43e8a63e07",
"type": "github"
},
"original": {
"owner": "NixOS",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_3": {
"locked": {
"lastModified": 1659102345,
"narHash": "sha256-Vbzlz254EMZvn28BhpN8JOi5EuKqnHZ3ujFYgFcSGvk=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "11b60e4f80d87794a2a4a8a256391b37c59a1ea7",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"naersk": "naersk",
"nixpkgs": "nixpkgs_2",
"rust-overlay": "rust-overlay"
}
},
"rust-overlay": {
"inputs": {
"flake-utils": "flake-utils",
"nixpkgs": "nixpkgs_3"
},
"locked": {
"lastModified": 1663297375,
"narHash": "sha256-7pjd2x9fSXXynIzp9XiXjbYys7sR6MKCot/jfGL7dgE=",
"owner": "oxalica",
"repo": "rust-overlay",
"rev": "0678b6187a153eb0baa9688335b002fe14ba6712",
"type": "github"
},
"original": {
"owner": "oxalica",
"repo": "rust-overlay",
"type": "github"
}
}
},
"root": "root",
"version": 7
}

View File

@ -7,50 +7,61 @@
outputs = { self, naersk, nixpkgs, rust-overlay }:
let
system = "x86_64-linux";
systems = [
"aarch64-linux"
"i686-linux"
"x86_64-linux"
];
overlays = [ (import rust-overlay) ];
pkgs = import nixpkgs {
inherit overlays system;
};
rust-bin = pkgs.rust-bin.rust-nightly;
naersk-lib = naersk.lib.${system};#.override {
#cargo = rust-bin;
#rust = rust-bin;
# };
build-deps = with pkgs; [
lld
clang
pkg-config
makeWrapper
];
runtime-deps = with pkgs; [
alsa-lib
udev
xorg.libX11
xorg.libXcursor
xorg.libXrandr
xorg.libXi
xorg.libxcb
libGL
vulkan-loader
vulkan-headers
];
in
{
packages.${system}.bevy_julia = naersk-lib.buildPackage {
pname = "bevy_julia";
root = ./.;
buildInputs = runtime-deps;
nativeBuildInputs = build-deps;
overrideMain = attrs: {
fixupPhase = ''
wrapProgram $out/bin/bevy_julia \
--prefix LD_LIBRARY_PATH : ${pkgs.lib.makeLibraryPath runtime-deps} \
--set CARGO_MANIFEST_DIR $out/share/bevy_julia
mkdir -p $out/share/bevy_julia
cp -a assets $out/share/bevy_julia'';
};
};
defaultPackage.${system} = self.packages.${system}.bevy_julia;
};
builtins.foldl'
(outputs: system:
let
pkgs = import nixpkgs {
inherit overlays system;
};
rust-bin = pkgs.rust-bin.rust-nightly;
naersk-lib = naersk.lib.${system};#.override {
#cargo = rust-bin;
#rust = rust-bin;
# };
build-deps = with pkgs; [
lld
clang
pkg-config
makeWrapper
];
runtime-deps = with pkgs; [
alsa-lib
udev
xorg.libX11
xorg.libXcursor
xorg.libXrandr
xorg.libXi
xorg.libxcb
libGL
vulkan-loader
vulkan-headers
];
in
{
packages.${system}.bevy_julia = naersk-lib.buildPackage {
pname = "bevy_julia";
root = ./.;
buildInputs = runtime-deps;
nativeBuildInputs = build-deps;
overrideMain = attrs: {
fixupPhase = ''
wrapProgram $out/bin/bevy_julia \
--prefix LD_LIBRARY_PATH : ${pkgs.lib.makeLibraryPath runtime-deps} \
--set CARGO_MANIFEST_DIR $out/share/bevy_julia
mkdir -p $out/share/bevy_julia
cp -a assets $out/share/bevy_julia'';
};
};
defaultPackage.${system} = self.packages.${system}.bevy_julia;
}
)
{ }
systems;
}

View File

@ -6,7 +6,7 @@ use bevy::{
render_graph::{self, RenderGraph},
render_resource::*,
renderer::{RenderContext, RenderDevice},
RenderApp, RenderStage,
Extract, RenderApp, RenderStage,
},
};
@ -34,7 +34,9 @@ impl Plugin for ColormapPlugin {
let mut render_graph = render_app.world.get_resource_mut::<RenderGraph>().unwrap();
render_graph.add_node("colormap", ColormapDispatch);
render_graph.add_node_edge("colormap", MAIN_PASS).unwrap();
render_graph
.add_node_edge("colormap", bevy::render::main_graph::node::CAMERA_DRIVER)
.unwrap();
render_graph
.add_node_edge(self.prev_node, "colormap")
@ -157,9 +159,9 @@ impl render_graph::Node for ColormapDispatch {
fn extract_colormap(
mut commands: Commands,
input: Res<ColormapInputImage>,
output: Res<ColormapOutputImage>,
mapping: Res<ColormapMappingImage>,
input: Extract<Res<ColormapInputImage>>,
output: Extract<Res<ColormapOutputImage>>,
mapping: Extract<Res<ColormapMappingImage>>,
) {
commands.insert_resource(ColormapInputImage(input.0.clone()));
commands.insert_resource(ColormapOutputImage(output.0.clone()));

View File

@ -11,7 +11,7 @@ use bevy::{
render_resource::*,
renderer::{RenderContext, RenderDevice},
texture::GpuImage,
RenderApp, RenderStage,
Extract, RenderApp, RenderStage,
},
};
@ -30,7 +30,9 @@ impl Plugin for JuliaPlugin {
let mut render_graph = render_app.world.get_resource_mut::<RenderGraph>().unwrap();
render_graph.add_node("julia", JuliaDispatch);
render_graph.add_node_edge("julia", MAIN_PASS).unwrap();
render_graph
.add_node_edge("julia", bevy::render::main_graph::node::CAMERA_DRIVER)
.unwrap();
}
}
@ -117,9 +119,9 @@ struct JuliaBindGroup(BindGroup);
fn extract_julia(
mut commands: Commands,
data: Res<Handle<JuliaData>>,
params: Res<Assets<JuliaData>>,
images: Res<Assets<Image>>,
data: Extract<Res<Handle<JuliaData>>>,
params: Extract<Res<Assets<JuliaData>>>,
images: Extract<Res<Assets<Image>>>,
) {
commands.insert_resource(data.clone());
let data = params.get(&data).unwrap();

View File

@ -2,13 +2,17 @@ mod colormap;
mod colorramp;
mod julia;
use std::{ops::Add, path::Path};
use std::{
ops::Add,
path::{Path, PathBuf},
};
use colormap::{ColormapInputImage, ColormapMappingImage, ColormapOutputImage, ColormapPlugin};
use colorramp::ColorRamp;
use julia::{JuliaData, JuliaPlugin};
use bevy::{
asset::FileAssetIo,
diagnostic::{FrameTimeDiagnosticsPlugin, LogDiagnosticsPlugin},
prelude::*,
render::render_resource::*,
@ -137,10 +141,14 @@ fn setup(
commands.insert_resource(data);
}
fn load_path(mut commands: Commands) {
fn load_path(mut commands: Commands, server: Res<AssetServer>) {
let mut path = PathBuf::new();
path.push(FileAssetIo::get_base_path());
path.push("assets");
path.push("path.csv");
let mut reader = csv::ReaderBuilder::new()
.has_headers(false)
.from_reader(File::open("assets/path.csv").unwrap());
.from_reader(File::open(path).unwrap());
let mut points: Vec<Vec2> = Vec::new();