mrk-its / bevy_webgl2

WebGL2 renderer plugin for Bevy game engine
MIT License
172 stars 46 forks source link

Panic in setup_vao (parking not supported) when using meshes without index arrays #48

Open johanhelsing opened 3 years ago

johanhelsing commented 3 years ago

The panic:

panicked at 'Parking not supported on this platform', C:\Users\Johan\.cargo\registry\src\github.com-1ecc6299db9ec823\parking_lot_core-0.8.3\src\thread_parker\wasm.rs:26:9

Stack:

Error
    at imports.wbg.__wbg_new_59cb74e423758ede (http://127.0.0.1:4000/target/wasm.js:368:19)
    at console_error_panic_hook::hook::hbf023161a6dac3e1 (http://127.0.0.1:4000/target/wasm_bg.wasm:wasm-function[3346]:0x465a0e)
    at core::ops::function::Fn::call::h1ca14bbebcfe87b9 (http://127.0.0.1:4000/target/wasm_bg.wasm:wasm-function[26016]:0x6f1d15)
    at std::panicking::rust_panic_with_hook::h1cacc8da6d7d1d07 (http://127.0.0.1:4000/target/wasm_bg.wasm:wasm-function[7156]:0x5bbc8e)
    at std::panicking::begin_panic::{{closure}}::h1a0c076847e21f44 (http://127.0.0.1:4000/target/wasm_bg.wasm:wasm-function[16842]:0x6c87b6)
    at std::sys_common::backtrace::__rust_end_short_backtrace::hb665934a9d09528b (http://127.0.0.1:4000/target/wasm_bg.wasm:wasm-function[16468]:0x6c4548)
    at std::panicking::begin_panic::hdfad4ef5d0e31977 (http://127.0.0.1:4000/target/wasm_bg.wasm:wasm-function[16843]:0x6c87e3)
    at <parking_lot_core::thread_parker::imp::ThreadParker as parking_lot_core::thread_parker::ThreadParkerT>::prepare_park::h803f74716b9affe2 (http://127.0.0.1:4000/target/wasm_bg.wasm:wasm-function[21913]:0x6e6d91)
    at parking_lot::raw_rwlock::RawRwLock::wait_for_readers::he74301f24c6b8ffc (http://127.0.0.1:4000/target/wasm_bg.wasm:wasm-function[382]:0x137498)
    at parking_lot::raw_rwlock::RawRwLock::lock_exclusive_slow::hcbae9234ea6fcc16 (http://127.0.0.1:4000/target/wasm_bg.wasm:wasm-function[963]:0x26847a)

imports.wbg.__wbg_error_4bb6c2a97407129a    @   wasm.js:380
$console_error_panic_hook::hook::hbf023161a6dac3e1  @   wasm_bg.wasm:0x465afc
$core::ops::function::Fn::call::h1ca14bbebcfe87b9   @   wasm_bg.wasm:0x6f1d15
$std::panicking::rust_panic_with_hook::h1cacc8da6d7d1d07    @   wasm_bg.wasm:0x5bbc8e
$std::panicking::begin_panic::{{closure}}::h1a0c076847e21f44    @   wasm_bg.wasm:0x6c87b6
$std::sys_common::backtrace::__rust_end_short_backtrace::hb665934a9d09528b  @   wasm_bg.wasm:0x6c4548
$std::panicking::begin_panic::hdfad4ef5d0e31977 @   wasm_bg.wasm:0x6c87e3
$<parking_lot_core::thread_parker::imp::ThreadParker as parking_lot_core::thread_parker::ThreadParkerT>::prepare_park::h803f74716b9affe2    @   wasm_bg.wasm:0x6e6d91
$parking_lot::raw_rwlock::RawRwLock::wait_for_readers::he74301f24c6b8ffc    @   wasm_bg.wasm:0x137498
$parking_lot::raw_rwlock::RawRwLock::lock_exclusive_slow::hcbae9234ea6fcc16 @   wasm_bg.wasm:0x26847a
$bevy_webgl2::webgl2_render_pass::WebGL2RenderPass::setup_vao::h9077b991f8d3f71d    @   wasm_bg.wasm:0xed68b
$<bevy_webgl2::webgl2_render_pass::WebGL2RenderPass as bevy_render::pass::render_pass::RenderPass>::draw::h1cb0e0162340374e @   wasm_bg.wasm:0x51b678
$<bevy_render::render_graph::nodes::pass_node::PassNode<Q> as bevy_render::render_graph::node::Node>::update::{{closure}}::h9f8683abfcbcd0c7    @   wasm_bg.wasm:0x142fe7
$<bevy_webgl2::renderer::webgl2_render_context::WebGL2RenderContext as bevy_render::renderer::render_context::RenderContext>::begin_pass::hcd0fa5d3aec0a2d5 @   wasm_bg.wasm:0x1da7a4
$<bevy_render::render_graph::nodes::pass_node::PassNode<Q> as bevy_render::render_graph::node::Node>::update::h1fd598cff830f549 @   wasm_bg.wasm:0x150918
$bevy_ecs::world::World::resource_scope::h731c1bfd47d69791  @   wasm_bg.wasm:0xe1364
$bevy_webgl2::webgl2_renderer::WebGL2Renderer::update::h2aafb1fbc9883935    @   wasm_bg.wasm:0x47acac
$bevy_webgl2::webgl2_render_system::{{closure}}::haf638a172eebcee1  @   wasm_bg.wasm:0x6edfee
$<bevy_ecs::system::exclusive_system::ExclusiveSystemFn as bevy_ecs::system::exclusive_system::ExclusiveSystem>::run::h8c7141e5d50d575d @   wasm_bg.wasm:0x68faa9
$<bevy_ecs::schedule::stage::SystemStage as bevy_ecs::schedule::stage::Stage>::run::h9a10e262690ecfd5   @   wasm_bg.wasm:0x3ba0f

$<bevy_ecs::schedule::Schedule as bevy_ecs::schedule::stage::Stage>::run::h3f349963010e4d9c @   wasm_bg.wasm:0x558882
$bevy_app::app::App::update::h72c9226c09befbe8  @   wasm_bg.wasm:0x6e6c9c
$winit::platform_impl::platform::event_loop::EventLoop<T>::run::{{closure}}::h6d94cd94771d3614  @   wasm_bg.wasm:0x9627d
$winit::platform_impl::platform::event_loop::runner::Shared<T>::handle_event::h05075fde8523b8b5 @   wasm_bg.wasm:0x375d17
$winit::platform_impl::platform::event_loop::runner::Shared<T>::run_until_cleared::h48adc2b939bd7981    @   wasm_bg.wasm:0x368cbd
$winit::platform_impl::platform::event_loop::runner::Shared<T>::set_listener::hf9889df3a4cadda9 @   wasm_bg.wasm:0x4be04a
$winit::platform_impl::platform::event_loop::window_target::WindowTarget<T>::run::h6439e059a8c18b0d @   wasm_bg.wasm:0x5f9236
$winit::platform_impl::platform::event_loop::EventLoop<T>::run::hd643cac313942d48   @   wasm_bg.wasm:0x66627e
$winit::event_loop::EventLoop<T>::run::h20f4eb005b2e1e09    @   wasm_bg.wasm:0x6c7c2a
$bevy_winit::run::hf70fcdb45beac0a5 @   wasm_bg.wasm:0x6c7c52
async function (async)      
init    @   wasm.js:1095
(anonymous) @   (index):26
Show 16 more frames

Example mesh:

        let extent_x = 1.0 as f32;
        let extent_y = 1.0 as f32;

        let north_west = vec2(-extent_x, extent_y);
        let north_east = vec2(extent_x, extent_y);
        let south_west = vec2(-extent_x, -extent_y);
        let south_east = vec2(extent_x, -extent_y);
        let vertices = [ 
            [south_east.x, south_east.y, 0.0],
            [north_east.x, north_east.y, 0.0],
            [north_west.x, north_west.y, 0.0],
            [south_west.x, south_west.y, 0.0],
        ];

        let indices = Indices::U32(vec![0, 2, 1, 0, 3, 2]);

        let mut positions = Vec::<[f32; 3]>::new();
        for position in vertices.iter() {
            positions.push(*position);
        }

        let mut mesh = Mesh::new(PrimitiveTopology::TriangleStrip);
        // mesh.set_indices(Some(indices)); // ### Crashes without this line
        mesh.set_attribute(Mesh::ATTRIBUTE_POSITION, positions);
        mesh

I tracked it down to this line: https://github.com/mrk-its/bevy_webgl2/blob/fd5b83d8cd8b28b428772ef582a3d4a8de2b7c72/src/webgl2_render_pass.rs#L23

Not sure how to debug further, it's getting a bit too far outside my comfort zone. I'll just use index arrays instead even though I don't really need them.