From 32b8ad9a09003093d62f975f3deb0cae89ee6b06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mariusz=20Kry=C5=84ski?= Date: Tue, 6 Oct 2020 10:21:06 +0200 Subject: [PATCH] revert unnecessary changes, cleanup --- .../src/render_graph/forward_pipeline/mod.rs | 2 - crates/bevy_render/src/pipeline/bind_group.rs | 2 +- crates/bevy_render/src/pipeline/pipeline.rs | 25 ++---- .../src/pipeline/render_pipelines.rs | 1 + .../bevy_render/src/pipeline/vertex_format.rs | 2 +- crates/bevy_render/src/render_graph/edge.rs | 30 +------ crates/bevy_render/src/render_graph/graph.rs | 12 +-- .../src/render_graph/nodes/camera_node.rs | 1 + .../src/render_graph/nodes/pass_node.rs | 15 ++-- .../nodes/render_resources_node.rs | 18 +--- .../renderer/render_resource/bind_group.rs | 17 ++++ crates/bevy_render/src/shader/shader.rs | 11 ++- .../bevy_render/src/shader/shader_reflect.rs | 2 - crates/bevy_sprite/src/render/mod.rs | 16 ++-- .../bevy_sprite/src/render/sprite_sheet.vert | 2 +- .../bevy_sprite/src/render/v300/sprite.frag | 2 +- .../src/render/v300/sprite_sheet.frag | 2 +- .../src/render/v300/sprite_sheet.vert | 2 +- crates/bevy_sprite/src/sprite.rs | 2 +- crates/bevy_sprite/src/texture_atlas.rs | 2 +- crates/bevy_ui/src/render/mod.rs | 2 - crates/bevy_webgl2/src/lib.rs | 86 +++++++++---------- crates/bevy_webgl2/src/renderer/mod.rs | 8 +- crates/bevy_webgl2/src/renderer/shader.rs | 2 +- .../src/renderer/webgl2_render_context.rs | 25 +++--- crates/bevy_webgl2/src/webgl2_render_pass.rs | 7 +- crates/bevy_webgl2/src/webgl2_renderer.rs | 7 +- crates/bevy_webgl2/src/webgl2_resources.rs | 4 +- examples/2d/sprite_sheet.rs | 2 +- examples/shader/shader_custom_material.rs | 8 +- examples/shader/shader_defs.rs | 8 +- 31 files changed, 138 insertions(+), 187 deletions(-) diff --git a/crates/bevy_pbr/src/render_graph/forward_pipeline/mod.rs b/crates/bevy_pbr/src/render_graph/forward_pipeline/mod.rs index a33d7e9a7bc38..7fb19ae1cf3e3 100644 --- a/crates/bevy_pbr/src/render_graph/forward_pipeline/mod.rs +++ b/crates/bevy_pbr/src/render_graph/forward_pipeline/mod.rs @@ -51,12 +51,10 @@ pub(crate) fn build_forward_pipeline(shaders: &mut Assets) -> PipelineDe vertex: shaders.add(Shader::from_glsl( ShaderStage::Vertex, include_str!("forward.vert"), - None, )), fragment: Some(shaders.add(Shader::from_glsl( ShaderStage::Fragment, include_str!("forward.frag"), - None, ))), }) } diff --git a/crates/bevy_render/src/pipeline/bind_group.rs b/crates/bevy_render/src/pipeline/bind_group.rs index 4eeb646204c27..8f244d9322780 100644 --- a/crates/bevy_render/src/pipeline/bind_group.rs +++ b/crates/bevy_render/src/pipeline/bind_group.rs @@ -10,7 +10,7 @@ pub struct BindGroupDescriptor { } #[derive(Hash, Copy, Clone, Eq, PartialEq, Debug)] -pub struct BindGroupDescriptorId(pub u64); +pub struct BindGroupDescriptorId(u64); impl BindGroupDescriptor { pub fn new(index: u32, bindings: Vec) -> Self { diff --git a/crates/bevy_render/src/pipeline/pipeline.rs b/crates/bevy_render/src/pipeline/pipeline.rs index 7f485fc7e9c3b..9f59ca82280dc 100644 --- a/crates/bevy_render/src/pipeline/pipeline.rs +++ b/crates/bevy_render/src/pipeline/pipeline.rs @@ -4,16 +4,10 @@ use super::{ CompareFunction, CullMode, DepthStencilStateDescriptor, FrontFace, IndexFormat, PrimitiveTopology, RasterizationStateDescriptor, StencilStateFaceDescriptor, }, - BindGroupDescriptor, BindType, BindingDescriptor, BindingShaderStage, DynamicBinding, - InputStepMode, PipelineLayout, StencilStateDescriptor, VertexAttributeDescriptor, - VertexBufferDescriptor, VertexBufferDescriptors, VertexFormat, + BindType, DynamicBinding, PipelineLayout, StencilStateDescriptor, VertexBufferDescriptors, }; -use crate::pipeline::pipeline_layout::UniformProperty; -use crate::texture::{TextureComponentType, TextureViewDimension}; -use std::borrow::Cow; - use crate::{ - shader::{Shader, ShaderLayout, ShaderStages}, + shader::{Shader, ShaderStages}, texture::TextureFormat, }; use bevy_asset::Assets; @@ -145,16 +139,10 @@ impl PipelineDescriptor { .as_ref() .map(|handle| shaders.get(&handle).unwrap()); - let mut layouts = { - let mut layouts = vec![vertex_spirv.reflect_layout(bevy_conventions).unwrap()]; - log::info!("vertex shader layout: {:#?}", layouts[0]); - if let Some(ref fragment_spirv) = fragment_spirv { - layouts.push(fragment_spirv.reflect_layout(bevy_conventions).unwrap()); - log::info!("fragment shader layout: {:#?}", layouts[1]); - }; - - layouts - }; + let mut layouts = vec![vertex_spirv.reflect_layout(bevy_conventions).unwrap()]; + if let Some(ref fragment_spirv) = fragment_spirv { + layouts.push(fragment_spirv.reflect_layout(bevy_conventions).unwrap()); + } let mut layout = PipelineLayout::from_shader_layouts(&mut layouts); if let Some(vertex_buffer_descriptors) = vertex_buffer_descriptors { @@ -187,6 +175,7 @@ impl PipelineDescriptor { } } } + self.layout = Some(layout); } } diff --git a/crates/bevy_render/src/pipeline/render_pipelines.rs b/crates/bevy_render/src/pipeline/render_pipelines.rs index f1adecd634e8a..bc477a7bf6846 100644 --- a/crates/bevy_render/src/pipeline/render_pipelines.rs +++ b/crates/bevy_render/src/pipeline/render_pipelines.rs @@ -83,6 +83,7 @@ pub fn draw_render_pipelines_system( if !draw.is_visible { continue; } + let mesh = meshes.get(mesh_handle).unwrap(); let (index_range, index_format) = match mesh.indices.as_ref() { Some(Indices::U32(indices)) => (Some(0..indices.len() as u32), IndexFormat::Uint32), diff --git a/crates/bevy_render/src/pipeline/vertex_format.rs b/crates/bevy_render/src/pipeline/vertex_format.rs index fa4ca06c394d7..e60fff0904afd 100644 --- a/crates/bevy_render/src/pipeline/vertex_format.rs +++ b/crates/bevy_render/src/pipeline/vertex_format.rs @@ -71,7 +71,7 @@ impl VertexFormat { } pub fn get_size(&self) -> u64 { let (component_size, components) = self.get_sizes(); - return (component_size * components) as u64 + return (component_size * components) as u64; } } diff --git a/crates/bevy_render/src/render_graph/edge.rs b/crates/bevy_render/src/render_graph/edge.rs index 3d2a27a5b6c83..e73679759871c 100644 --- a/crates/bevy_render/src/render_graph/edge.rs +++ b/crates/bevy_render/src/render_graph/edge.rs @@ -1,6 +1,4 @@ -use super::{NodeId, NodeState}; -use bevy_utils::HashMap; -use std::borrow::Cow; +use super::NodeId; #[derive(Clone, Debug, Eq, PartialEq)] pub enum Edge { @@ -30,30 +28,4 @@ impl Edge { Edge::NodeEdge { output_node, .. } => *output_node, } } - - pub fn fmt_as_output_edge( - &self, - f: &mut std::fmt::Formatter<'_>, - nodes: &HashMap, - ) -> std::fmt::Result { - match self { - Edge::SlotEdge { input_index, output_index, .. } => write!(f, " SlotEdge(in #{}, out #{}", input_index, output_index)?, - Edge::NodeEdge { .. } => write!(f, " NodeEdge(")?, - } - let node = nodes.get(&self.get_input_node()).unwrap(); - write!(f, "{:?})", node) - } - - pub fn fmt_as_input_edge( - &self, - f: &mut std::fmt::Formatter<'_>, - nodes: &HashMap, - ) -> std::fmt::Result { - match self { - Edge::SlotEdge { input_index, output_index, .. } => write!(f, " SlotEdge( in #{}, out #{}, ", input_index, output_index)?, - Edge::NodeEdge {..} => write!(f, " NodeEdge(")?, - } - let node = nodes.get(&self.get_output_node()).unwrap(); - write!(f, "{:?})", node) - } } diff --git a/crates/bevy_render/src/render_graph/graph.rs b/crates/bevy_render/src/render_graph/graph.rs index 9cb9067ab4f93..983b6fcd0a3a2 100644 --- a/crates/bevy_render/src/render_graph/graph.rs +++ b/crates/bevy_render/src/render_graph/graph.rs @@ -283,19 +283,9 @@ impl RenderGraph { impl Debug for RenderGraph { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { for node in self.iter_nodes() { - writeln!(f, "node: {:?} {:?}", node.id, node.name)?; + writeln!(f, "{:?}", node.id)?; writeln!(f, " in: {:?}", node.input_slots)?; writeln!(f, " out: {:?}", node.output_slots)?; - write!(f, " in edges:"); - for edge in &node.edges.input_edges { - edge.fmt_as_input_edge(f, &self.nodes); - }; - writeln!(f, ""); - write!(f, " out edges:"); - for edge in &node.edges.output_edges { - edge.fmt_as_output_edge(f, &self.nodes); - }; - writeln!(f, ""); } Ok(()) diff --git a/crates/bevy_render/src/render_graph/nodes/camera_node.rs b/crates/bevy_render/src/render_graph/nodes/camera_node.rs index 3a402325678b1..d057311a0f7e7 100644 --- a/crates/bevy_render/src/render_graph/nodes/camera_node.rs +++ b/crates/bevy_render/src/render_graph/nodes/camera_node.rs @@ -86,6 +86,7 @@ pub fn camera_node_system( } else { return; }; + let staging_buffer = if let Some(staging_buffer) = state.staging_buffer { render_resource_context.map_buffer(staging_buffer); staging_buffer diff --git a/crates/bevy_render/src/render_graph/nodes/pass_node.rs b/crates/bevy_render/src/render_graph/nodes/pass_node.rs index 0976c6e9e820b..954a997a0496d 100644 --- a/crates/bevy_render/src/render_graph/nodes/pass_node.rs +++ b/crates/bevy_render/src/render_graph/nodes/pass_node.rs @@ -182,14 +182,14 @@ where } else { continue; }; + // get an ordered list of entities visible to the camera let visible_entities = if let Some(camera_entity) = active_cameras.get(&camera_info.name) { world.get::(camera_entity).unwrap() } else { continue; }; - let cnt = visible_entities.iter().count(); - // log::info!("visible entities:{:?}", cnt); + // attempt to draw each visible entity let mut draw_state = DrawState::default(); for visible_entity in visible_entities.iter() { @@ -209,7 +209,7 @@ where if !draw.is_visible { continue; } - // log::info!("render_commands: {:?}", draw.render_commands); + // each Draw component contains an ordered list of render commands. we turn those into actual render commands here for render_command in draw.render_commands.iter() { match render_command { @@ -245,14 +245,14 @@ where instances.clone(), ); } else { - log::info!("Could not draw indexed because the pipeline layout wasn't fully set for pipeline: {:?}", draw_state); + log::info!("Could not draw indexed because the pipeline layout wasn't fully set for pipeline: {:?}", draw_state.pipeline); } } RenderCommand::Draw { vertices, instances } => { if draw_state.can_draw() { render_pass.draw(vertices.clone(), instances.clone()); } else { - log::info!("Could not draw because the pipeline layout wasn't fully set for pipeline: {:?}", draw_state); + log::info!("Could not draw because the pipeline layout wasn't fully set for pipeline: {:?}", draw_state.pipeline); } } RenderCommand::SetVertexBuffer { @@ -295,7 +295,7 @@ where } /// Tracks the current pipeline state to ensure draw calls are valid. -#[derive(Default, Debug)] +#[derive(Default)] struct DrawState { pipeline: Option>, bind_groups: Vec>, @@ -306,17 +306,14 @@ struct DrawState { impl DrawState { pub fn set_bind_group(&mut self, index: u32, bind_group: BindGroupId) { self.bind_groups[index as usize] = Some(bind_group); -// log::info!("draw_state: {:?}", self); } pub fn set_vertex_buffer(&mut self, index: u32, buffer: BufferId) { self.vertex_buffers[index as usize] = Some(buffer); -// log::info!("draw_state: {:?}", self); } pub fn set_index_buffer(&mut self, buffer: BufferId) { self.index_buffer = Some(buffer); -// log::info!("draw_state: {:?}", self); } pub fn can_draw(&self) -> bool { diff --git a/crates/bevy_render/src/render_graph/nodes/render_resources_node.rs b/crates/bevy_render/src/render_graph/nodes/render_resources_node.rs index f65a600567a26..c0c067e04c915 100644 --- a/crates/bevy_render/src/render_graph/nodes/render_resources_node.rs +++ b/crates/bevy_render/src/render_graph/nodes/render_resources_node.rs @@ -244,13 +244,6 @@ where render_resource_bindings: &mut RenderResourceBindings, staging_buffer: &mut [u8], ) { - // log::info!( - // "write uniform buffer for {:?}, dynamic: {:?}, uniforms.len: {}", - // std::any::type_name::(), - // dynamic_uniforms, - // uniforms.iter().count(), - // ); - // log::info!("render_resource_bindings: {:#?}", render_resource_bindings); for (i, render_resource) in uniforms.iter().enumerate() { match render_resource.resource_type() { Some(RenderResourceType::Buffer) => { @@ -305,10 +298,7 @@ where uniforms.get_render_resource_hints(i) { if render_resource_hints.contains(RenderResourceHints::BUFFER) { - usage = BufferUsage::STORAGE; - // if min_size == 112 { - // min_size = 4096; - // } + usage = BufferUsage::STORAGE } } @@ -410,7 +400,7 @@ where impl SystemNode for RenderResourcesNode where - T: renderer::RenderResources + std::fmt::Debug, + T: renderer::RenderResources, { fn get_system(&self, commands: &mut Commands) -> Box { let system = render_resources_node_system::.system(); @@ -447,9 +437,7 @@ fn render_resources_node_system( mut state: Local>, render_resource_context: Res>, mut query: Query<(Entity, &T, &Draw, &mut RenderPipelines)>, -) where - T: std::fmt::Debug, -{ +) { let state = state.deref_mut(); let uniform_buffer_arrays = &mut state.uniform_buffer_arrays; let render_resource_context = &**render_resource_context; diff --git a/crates/bevy_render/src/renderer/render_resource/bind_group.rs b/crates/bevy_render/src/renderer/render_resource/bind_group.rs index 22c11cb0f5167..2e4f264e585d1 100644 --- a/crates/bevy_render/src/renderer/render_resource/bind_group.rs +++ b/crates/bevy_render/src/renderer/render_resource/bind_group.rs @@ -72,6 +72,23 @@ impl BindGroupBuilder { ) } + pub fn add_dynamic_buffer( + self, + index: u32, + buffer: BufferId, + range: Range, + dynamic_index: u32, + ) -> Self { + self.add_binding( + index, + RenderResourceBinding::Buffer { + buffer, + range, + dynamic_index: Some(dynamic_index), + }, + ) + } + pub fn finish(mut self) -> BindGroup { // this sort ensures that RenderResourceSets are insertion-order independent self.indexed_bindings.sort_by_key(|i| i.index); diff --git a/crates/bevy_render/src/shader/shader.rs b/crates/bevy_render/src/shader/shader.rs index 65dac95fa237a..cee3e878c86cd 100644 --- a/crates/bevy_render/src/shader/shader.rs +++ b/crates/bevy_render/src/shader/shader.rs @@ -118,9 +118,16 @@ impl Shader { Shader { stage, source } } - pub fn from_glsl(stage: ShaderStage, glsl: &str, layout: Option) -> Shader { + pub fn from_glsl(stage: ShaderStage, glsl: &str) -> Shader { Shader { - source: ShaderSource::Glsl(glsl.to_string(), layout), + source: ShaderSource::Glsl(glsl.to_string(), None), + stage, + } + } + + pub fn from_glsl_and_layout(stage: ShaderStage, glsl: &str, layout: ShaderLayout) -> Shader { + Shader { + source: ShaderSource::Glsl(glsl.to_string(), Some(layout)), stage, } } diff --git a/crates/bevy_render/src/shader/shader_reflect.rs b/crates/bevy_render/src/shader/shader_reflect.rs index 85e8a1e466179..d5be17aa3ec08 100644 --- a/crates/bevy_render/src/shader/shader_reflect.rs +++ b/crates/bevy_render/src/shader/shader_reflect.rs @@ -404,7 +404,6 @@ mod tests { gl_Position = ViewProj * v_Position; } "#, - None, ) .get_spirv_shader(None); @@ -498,7 +497,6 @@ mod tests { gl_Position = ViewProj * v_Position; } "#, - None, ) .get_spirv_shader(None); diff --git a/crates/bevy_sprite/src/render/mod.rs b/crates/bevy_sprite/src/render/mod.rs index 65f86b38da026..275686866aa9e 100644 --- a/crates/bevy_sprite/src/render/mod.rs +++ b/crates/bevy_sprite/src/render/mod.rs @@ -204,15 +204,15 @@ pub fn build_sprite_sheet_pipeline(shaders: &mut Assets) -> PipelineDesc write_mask: ColorWrite::ALL, }], ..PipelineDescriptor::new(ShaderStages { - vertex: shaders.add(Shader::from_glsl( + vertex: shaders.add(Shader::from_glsl_and_layout( ShaderStage::Vertex, glsl_source!("sprite_sheet.vert"), - Some(vert_layout), + vert_layout, )), - fragment: Some(shaders.add(Shader::from_glsl( + fragment: Some(shaders.add(Shader::from_glsl_and_layout( ShaderStage::Fragment, glsl_source!("sprite_sheet.frag"), - Some(frag_layout), + frag_layout, ))), }) } @@ -364,15 +364,15 @@ pub fn build_sprite_pipeline(shaders: &mut Assets) -> PipelineDescriptor write_mask: ColorWrite::ALL, }], ..PipelineDescriptor::new(ShaderStages { - vertex: shaders.add(Shader::from_glsl( + vertex: shaders.add(Shader::from_glsl_and_layout( ShaderStage::Vertex, glsl_source!("sprite.vert"), - Some(vert_layout), + vert_layout, )), - fragment: Some(shaders.add(Shader::from_glsl( + fragment: Some(shaders.add(Shader::from_glsl_and_layout( ShaderStage::Fragment, glsl_source!("sprite.frag"), - Some(frag_layout), + frag_layout, ))), }) } diff --git a/crates/bevy_sprite/src/render/sprite_sheet.vert b/crates/bevy_sprite/src/render/sprite_sheet.vert index b35a55d27b834..d967ac5411ba3 100644 --- a/crates/bevy_sprite/src/render/sprite_sheet.vert +++ b/crates/bevy_sprite/src/render/sprite_sheet.vert @@ -42,7 +42,7 @@ void main() { vec2 atlas_positions[4] = vec2[]( vec2(sprite_rect.begin.x, sprite_rect.end.y), sprite_rect.begin, - vec2(sprite_rect.end.x, sprite_rect.begin.y), + vec2(sprite_rect.end.x, sprite_rect.begin.y), sprite_rect.end ); v_Uv = (atlas_positions[gl_VertexIndex] + vec2(0.01, 0.01)) / AtlasSize; diff --git a/crates/bevy_sprite/src/render/v300/sprite.frag b/crates/bevy_sprite/src/render/v300/sprite.frag index a4d1e74489914..003f65634d207 100644 --- a/crates/bevy_sprite/src/render/v300/sprite.frag +++ b/crates/bevy_sprite/src/render/v300/sprite.frag @@ -19,4 +19,4 @@ void main() { v_Uv ); o_Target = color; -} \ No newline at end of file +} diff --git a/crates/bevy_sprite/src/render/v300/sprite_sheet.frag b/crates/bevy_sprite/src/render/v300/sprite_sheet.frag index 3a56c5de9892c..090cb18d1583f 100644 --- a/crates/bevy_sprite/src/render/v300/sprite_sheet.frag +++ b/crates/bevy_sprite/src/render/v300/sprite_sheet.frag @@ -14,4 +14,4 @@ void main() { o_Target = v_Color * texture( TextureAtlas_texture, v_Uv); -} \ No newline at end of file +} diff --git a/crates/bevy_sprite/src/render/v300/sprite_sheet.vert b/crates/bevy_sprite/src/render/v300/sprite_sheet.vert index 3de6c34596883..3c4440d21f9f0 100644 --- a/crates/bevy_sprite/src/render/v300/sprite_sheet.vert +++ b/crates/bevy_sprite/src/render/v300/sprite_sheet.vert @@ -48,4 +48,4 @@ void main() { v_Uv = (atlas_positions[gl_VertexID] + vec2(0.01, 0.01)) / AtlasSize; v_Color = TextureAtlasSprite_color; gl_Position = ViewProj * SpriteTransform * vec4(ceil(vertex_position), 1.0); -} \ No newline at end of file +} diff --git a/crates/bevy_sprite/src/sprite.rs b/crates/bevy_sprite/src/sprite.rs index f2baafa30e02a..03c9935859c34 100644 --- a/crates/bevy_sprite/src/sprite.rs +++ b/crates/bevy_sprite/src/sprite.rs @@ -4,7 +4,7 @@ use bevy_ecs::{Query, Res}; use bevy_math::Vec2; use bevy_render::{renderer::RenderResources, texture::Texture}; -#[derive(Default, RenderResources, Debug)] +#[derive(Default, RenderResources)] pub struct Sprite { pub size: Vec2, #[render_resources(ignore)] diff --git a/crates/bevy_sprite/src/texture_atlas.rs b/crates/bevy_sprite/src/texture_atlas.rs index e8a3ebe3bf679..65d8c51aae512 100644 --- a/crates/bevy_sprite/src/texture_atlas.rs +++ b/crates/bevy_sprite/src/texture_atlas.rs @@ -25,7 +25,7 @@ pub struct TextureAtlas { // NOTE: cannot do `unsafe impl Byteable` here because Vec3 takes up the space of a Vec4. If/when glam changes this we can swap out // Bytes for Byteable as a micro-optimization. https://github.com/bitshifter/glam-rs/issues/36 -#[derive(Bytes, RenderResources, RenderResource, Debug)] +#[derive(Bytes, RenderResources, RenderResource)] #[render_resources(from_self)] pub struct TextureAtlasSprite { pub color: Color, diff --git a/crates/bevy_ui/src/render/mod.rs b/crates/bevy_ui/src/render/mod.rs index 52daa17d83419..ab03dbc0bc972 100644 --- a/crates/bevy_ui/src/render/mod.rs +++ b/crates/bevy_ui/src/render/mod.rs @@ -59,12 +59,10 @@ pub fn build_ui_pipeline(shaders: &mut Assets) -> PipelineDescriptor { vertex: shaders.add(Shader::from_glsl( ShaderStage::Vertex, include_str!("ui.vert"), - None, )), fragment: Some(shaders.add(Shader::from_glsl( ShaderStage::Fragment, include_str!("ui.frag"), - None, ))), }) } diff --git a/crates/bevy_webgl2/src/lib.rs b/crates/bevy_webgl2/src/lib.rs index 1f43966222b19..a28bb7a43399f 100644 --- a/crates/bevy_webgl2/src/lib.rs +++ b/crates/bevy_webgl2/src/lib.rs @@ -1,55 +1,53 @@ // cfg_if::cfg_if! { // if #[cfg(target_arch = "wasm32")] { - pub mod renderer; - mod webgl2_render_pass; - mod webgl2_renderer; - mod webgl2_resources; - //mod webgl2_type_converter; +pub mod renderer; +mod webgl2_render_pass; +mod webgl2_renderer; +mod webgl2_resources; +//mod webgl2_type_converter; - pub use webgl2_render_pass::*; - pub use webgl2_renderer::*; - //pub use webgl2_resources::*; - pub use webgl2_resources::*; +pub use webgl2_render_pass::*; +pub use webgl2_renderer::*; +//pub use webgl2_resources::*; +pub use webgl2_resources::*; - use bevy_app::prelude::*; - use bevy_ecs::{IntoQuerySystem, IntoThreadLocalSystem, Resources, World}; - use bevy_render::renderer::{free_shared_buffers_system, RenderResourceContext, SharedBuffers}; - use renderer::WebGL2RenderResourceContext; +use bevy_app::prelude::*; +use bevy_ecs::{IntoQuerySystem, IntoThreadLocalSystem, Resources, World}; +use bevy_render::renderer::{free_shared_buffers_system, RenderResourceContext, SharedBuffers}; +use renderer::WebGL2RenderResourceContext; - #[derive(Default)] - pub struct WebGL2Plugin; +#[derive(Default)] +pub struct WebGL2Plugin; +impl Plugin for WebGL2Plugin { + fn build(&self, app: &mut AppBuilder) { + let render_system = webgl2_render_system(app.resources_mut()); + app.add_system_to_stage( + bevy_render::stage::RENDER, + render_system.thread_local_system(), + ); + // .add_system_to_stage( + // bevy_render::stage::POST_RENDER, + // free_shared_buffers_system.system(), + // ); + // let resource_context = WebGL2RenderResourceContext::default(); + // app.add_resource::>(Box::new(resource_context)); - impl Plugin for WebGL2Plugin { - fn build(&self, app: &mut AppBuilder) { - let render_system = webgl2_render_system(app.resources_mut()); - app.add_system_to_stage( - bevy_render::stage::RENDER, - render_system.thread_local_system(), - ); - // .add_system_to_stage( - // bevy_render::stage::POST_RENDER, - // free_shared_buffers_system.system(), - // ); - // let resource_context = WebGL2RenderResourceContext::default(); - // app.add_resource::>(Box::new(resource_context)); + // app.add_resource(SharedBuffers::new(Box::new(WebGL2RenderResourceContext::default()))); + } +} - // app.add_resource(SharedBuffers::new(Box::new(WebGL2RenderResourceContext::default()))); - - } - } - - pub fn webgl2_render_system(resources: &mut Resources) -> impl FnMut(&mut World, &mut Resources) { - let mut webgl2_renderer = WebGL2Renderer::default(); - let resource_context = WebGL2RenderResourceContext::new(webgl2_renderer.device.clone()); - resources.insert::>(Box::new(resource_context.clone())); - resources.insert(SharedBuffers::new(Box::new(resource_context))); - move |world, resources| { - webgl2_renderer.update(world, resources); - } - } - #[macro_export] - macro_rules! gl_call { +pub fn webgl2_render_system(resources: &mut Resources) -> impl FnMut(&mut World, &mut Resources) { + let mut webgl2_renderer = WebGL2Renderer::default(); + let resource_context = WebGL2RenderResourceContext::new(webgl2_renderer.device.clone()); + resources.insert::>(Box::new(resource_context.clone())); + resources.insert(SharedBuffers::new(Box::new(resource_context))); + move |world, resources| { + webgl2_renderer.update(world, resources); + } +} +#[macro_export] +macro_rules! gl_call { ($device:ident . $func:ident ( $( $i:expr, )*) ) => { { // log::info!("gl call: {}{:?}", stringify!($func), ($( $i ),*)); diff --git a/crates/bevy_webgl2/src/renderer/mod.rs b/crates/bevy_webgl2/src/renderer/mod.rs index 62a3784e5665d..71d9fdcad3950 100644 --- a/crates/bevy_webgl2/src/renderer/mod.rs +++ b/crates/bevy_webgl2/src/renderer/mod.rs @@ -1,16 +1,18 @@ mod webgl2_render_context; //mod webgl2_render_graph_executor; -mod webgl2_render_resource_context; mod shader; +mod webgl2_render_resource_context; pub use webgl2_render_context::*; //pub use webgl2_render_graph_executor::*; pub use webgl2_render_resource_context::*; - pub use js_sys; pub use wasm_bindgen::JsCast; -pub use web_sys::{WebGl2RenderingContext, WebGlProgram, WebGlShader, WebGlUniformLocation, WebGlBuffer, WebGlTexture}; +pub use web_sys::{ + WebGl2RenderingContext, WebGlBuffer, WebGlProgram, WebGlShader, WebGlTexture, + WebGlUniformLocation, +}; pub type Gl = WebGl2RenderingContext; diff --git a/crates/bevy_webgl2/src/renderer/shader.rs b/crates/bevy_webgl2/src/renderer/shader.rs index adcd7373e6366..9699fc0f2e403 100644 --- a/crates/bevy_webgl2/src/renderer/shader.rs +++ b/crates/bevy_webgl2/src/renderer/shader.rs @@ -1,4 +1,4 @@ -use super::{WebGl2RenderingContext, WebGlShader, WebGlProgram}; +use super::{WebGl2RenderingContext, WebGlProgram, WebGlShader}; pub fn compile_shader( context: &WebGl2RenderingContext, diff --git a/crates/bevy_webgl2/src/renderer/webgl2_render_context.rs b/crates/bevy_webgl2/src/renderer/webgl2_render_context.rs index 760e19e0e5f2e..ddce24305452e 100644 --- a/crates/bevy_webgl2/src/renderer/webgl2_render_context.rs +++ b/crates/bevy_webgl2/src/renderer/webgl2_render_context.rs @@ -100,23 +100,24 @@ impl RenderContext for WebGL2RenderContext { // 0xFF, 0x00, 0xFF, 0xFF, // magenta // ]; - // log::info!("render context: copy_buffer_to_texture, size: {:?}, texture: {:#?}", size, texture); crate::gl_call!(gl.bind_texture(Gl::TEXTURE_2D, Some(&texture))); crate::gl_call!(gl.bind_buffer(Gl::PIXEL_UNPACK_BUFFER, Some(&buffer))); - crate::gl_call!(gl.tex_image_2d_with_i32_and_i32_and_i32_and_format_and_type_and_f64( - Gl::TEXTURE_2D, - 0, //destination_mip_level as i32, - Gl::RGBA as i32, // TODO - size.width as i32, - size.height as i32, - 0, - Gl::RGBA, - Gl::UNSIGNED_BYTE, - source_offset as f64, - )) + crate::gl_call!( + gl.tex_image_2d_with_i32_and_i32_and_i32_and_format_and_type_and_f64( + Gl::TEXTURE_2D, + 0, //destination_mip_level as i32, + Gl::RGBA as i32, // TODO + size.width as i32, + size.height as i32, + 0, + Gl::RGBA, + Gl::UNSIGNED_BYTE, + source_offset as f64, + ) + ) .expect("tex image"); // gl.tex_parameteri(Gl::TEXTURE_2D, Gl::TEXTURE_MIN_FILTER, Gl::NEAREST as i32); // gl.tex_parameteri(Gl::TEXTURE_2D, Gl::TEXTURE_MAG_FILTER, Gl::NEAREST as i32); diff --git a/crates/bevy_webgl2/src/webgl2_render_pass.rs b/crates/bevy_webgl2/src/webgl2_render_pass.rs index 6cba0998870ab..48ebbc23f7e91 100644 --- a/crates/bevy_webgl2/src/webgl2_render_pass.rs +++ b/crates/bevy_webgl2/src/webgl2_render_pass.rs @@ -135,7 +135,12 @@ impl<'a> RenderPass for WebGL2RenderPass<'a> { let ctx = &self.render_context; let gl = &ctx.device.context; - crate::gl_call!(gl.draw_elements_with_i32(Gl::TRIANGLES, indices.end as i32, Gl::UNSIGNED_INT, 0)); + crate::gl_call!(gl.draw_elements_with_i32( + Gl::TRIANGLES, + indices.end as i32, + Gl::UNSIGNED_INT, + 0 + )); // self.render_pass // .draw_indexed(indices, base_vertex, instances); diff --git a/crates/bevy_webgl2/src/webgl2_renderer.rs b/crates/bevy_webgl2/src/webgl2_renderer.rs index 6237e11947779..d12798d57d7d6 100644 --- a/crates/bevy_webgl2/src/webgl2_renderer.rs +++ b/crates/bevy_webgl2/src/webgl2_renderer.rs @@ -20,7 +20,7 @@ use parking_lot::RwLock; #[derive(Debug)] pub struct Device { pub context: web_sys::WebGl2RenderingContext, -// pub context: web_sys::HtmlCanvasElement, + // pub context: web_sys::HtmlCanvasElement, } unsafe impl Send for Device {} unsafe impl Sync for Device {} @@ -33,10 +33,7 @@ impl std::default::Default for WebGL2Renderer { fn default() -> Self { let window = web_sys::window().unwrap(); let document = window.document().unwrap(); - let canvas = document - .query_selector("canvas") - .expect("canvas") - .unwrap(); + let canvas = document.query_selector("canvas").expect("canvas").unwrap(); let canvas: web_sys::HtmlCanvasElement = canvas.dyn_into::().unwrap(); let context = canvas diff --git a/crates/bevy_webgl2/src/webgl2_resources.rs b/crates/bevy_webgl2/src/webgl2_resources.rs index 0534108a7f55f..31954d06a5079 100644 --- a/crates/bevy_webgl2/src/webgl2_resources.rs +++ b/crates/bevy_webgl2/src/webgl2_resources.rs @@ -9,8 +9,8 @@ use bevy_render::{ VertexBufferDescriptor, }, renderer::{ - BindGroup, BufferId, BufferInfo, BufferUsage, RenderResourceBinding, RenderResourceContext, - RenderResourceId, SamplerId, TextureId, BindGroupId + BindGroup, BindGroupId, BufferId, BufferInfo, BufferUsage, RenderResourceBinding, + RenderResourceContext, RenderResourceId, SamplerId, TextureId, }, shader::Shader, texture::{Extent3d, SamplerDescriptor, TextureDescriptor}, diff --git a/examples/2d/sprite_sheet.rs b/examples/2d/sprite_sheet.rs index 0777720928150..ca1ae2c439dfa 100644 --- a/examples/2d/sprite_sheet.rs +++ b/examples/2d/sprite_sheet.rs @@ -1,6 +1,6 @@ extern crate console_error_panic_hook; -use bevy::prelude::*; use bevy::app::AppExit; +use bevy::prelude::*; fn main() { #[cfg(not(target_arch = "wasm32"))] diff --git a/examples/shader/shader_custom_material.rs b/examples/shader/shader_custom_material.rs index e83804051e7c4..784cdb7472674 100644 --- a/examples/shader/shader_custom_material.rs +++ b/examples/shader/shader_custom_material.rs @@ -58,12 +58,8 @@ fn setup( ) { // Create a new shader pipeline let pipeline_handle = pipelines.add(PipelineDescriptor::default_config(ShaderStages { - vertex: shaders.add(Shader::from_glsl(ShaderStage::Vertex, VERTEX_SHADER, None)), - fragment: Some(shaders.add(Shader::from_glsl( - ShaderStage::Fragment, - FRAGMENT_SHADER, - None, - ))), + vertex: shaders.add(Shader::from_glsl(ShaderStage::Vertex, VERTEX_SHADER)), + fragment: Some(shaders.add(Shader::from_glsl(ShaderStage::Fragment, FRAGMENT_SHADER))), })); // Add an AssetRenderResourcesNode to our Render Graph. This will bind MyMaterial resources to our shader diff --git a/examples/shader/shader_defs.rs b/examples/shader/shader_defs.rs index c5579c188a1ba..b46ca1c5fb731 100644 --- a/examples/shader/shader_defs.rs +++ b/examples/shader/shader_defs.rs @@ -70,12 +70,8 @@ fn setup( ) { // Create a new shader pipeline let pipeline_handle = pipelines.add(PipelineDescriptor::default_config(ShaderStages { - vertex: shaders.add(Shader::from_glsl(ShaderStage::Vertex, VERTEX_SHADER, None)), - fragment: Some(shaders.add(Shader::from_glsl( - ShaderStage::Fragment, - FRAGMENT_SHADER, - None, - ))), + vertex: shaders.add(Shader::from_glsl(ShaderStage::Vertex, VERTEX_SHADER)), + fragment: Some(shaders.add(Shader::from_glsl(ShaderStage::Fragment, FRAGMENT_SHADER))), })); // Add an AssetRenderResourcesNode to our Render Graph. This will bind MyMaterial resources to our shader