Skip to content

Commit 071899f

Browse files
committed
add endGeometry function
1 parent f8a5b04 commit 071899f

File tree

4 files changed

+49
-11
lines changed

4 files changed

+49
-11
lines changed

crates/processing_pyo3/src/graphics.rs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -310,8 +310,14 @@ impl Graphics {
310310
}
311311

312312
pub fn begin_geometry(&self) -> PyResult<()> {
313-
geometry_begin(self.entity)
314-
.map_err(|e| PyRuntimeError::new_err(format!("{e}")))
313+
geometry_begin(self.entity).map_err(|e| PyRuntimeError::new_err(format!("{e}")))
314+
}
315+
316+
pub fn end_geometry(&self) -> PyResult<Geometry> {
317+
match geometry_end(self.entity) {
318+
Ok(geometry) => Ok(Geometry { entity: geometry }),
319+
Err(e) => Err(PyRuntimeError::new_err(format!("{e}"))),
320+
}
315321
}
316322
}
317323

crates/processing_pyo3/src/lib.rs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,8 @@ fn processing(m: &Bound<'_, PyModule>) -> PyResult<()> {
4141
m.add_function(wrap_pyfunction!(image, m)?)?;
4242
m.add_function(wrap_pyfunction!(draw_geometry, m)?)?;
4343
m.add_function(wrap_pyfunction!(begin_geometry, m)?)?;
44-
44+
m.add_function(wrap_pyfunction!(end_geometry, m)?)?;
45+
4546
Ok(())
4647
}
4748

@@ -229,4 +230,10 @@ fn image(module: &Bound<'_, PyModule>, image_file: &str) -> PyResult<Image> {
229230
#[pyo3(pass_module)]
230231
fn begin_geometry(module: &Bound<'_, PyModule>) -> PyResult<()> {
231232
get_graphics(module)?.begin_geometry()
232-
}
233+
}
234+
235+
#[pyfunction]
236+
#[pyo3(pass_module)]
237+
fn end_geometry(module: &Bound<'_, PyModule>) -> PyResult<Geometry> {
238+
get_graphics(module)?.end_geometry()
239+
}

crates/processing_render/src/geometry/mod.rs

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,10 @@ use bevy::{
1616
render::render_resource::PrimitiveTopology,
1717
};
1818

19-
use crate::{error::{ProcessingError, Result}, render::RenderState};
19+
use crate::{
20+
error::{ProcessingError, Result},
21+
render::RenderState,
22+
};
2023

2124
pub struct GeometryPlugin;
2225

@@ -372,7 +375,7 @@ pub fn begin(
372375
mut state_query: Query<&mut RenderState>,
373376
mut meshes: ResMut<Assets<Mesh>>,
374377
builtins: Res<BuiltinAttributes>,
375-
) -> Result<()> {
378+
) -> Result<()> {
376379
let layout_entity = commands
377380
.spawn(VertexLayout::with_attributes(vec![
378381
builtins.position,
@@ -387,11 +390,26 @@ pub fn begin(
387390
RenderAssetUsages::default(),
388391
);
389392
let handle = meshes.add(mesh);
390-
393+
391394
let mut state = state_query
392395
.get_mut(graphics_entity)
393396
.map_err(|_| ProcessingError::GraphicsNotFound)?;
394397

395398
state.running_geometry = Some(Geometry::new(handle, layout_entity));
396399
Ok(())
397-
}
400+
}
401+
402+
pub fn end(
403+
In(graphics_entity): In<Entity>,
404+
mut commands: Commands,
405+
mut state_query: Query<&mut RenderState>,
406+
) -> Result<Entity> {
407+
let geometry = state_query
408+
.get_mut(graphics_entity)
409+
.map_err(|_| ProcessingError::GraphicsNotFound)?
410+
.running_geometry
411+
.take()
412+
.ok_or(ProcessingError::GeometryNotFound)?;
413+
414+
Ok(commands.spawn(geometry).id())
415+
}

crates/processing_render/src/lib.rs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1074,9 +1074,16 @@ pub fn geometry_box(width: f32, height: f32, depth: f32) -> error::Result<Entity
10741074

10751075
pub fn geometry_begin(graphics_entity: Entity) -> error::Result<()> {
10761076
app_mut(|app| {
1077-
app
1078-
.world_mut()
1077+
app.world_mut()
10791078
.run_system_cached_with(geometry::begin, graphics_entity)
10801079
.unwrap()
10811080
})
1082-
}
1081+
}
1082+
1083+
pub fn geometry_end(graphics_entity: Entity) -> error::Result<Entity> {
1084+
app_mut(|app| {
1085+
app.world_mut()
1086+
.run_system_cached_with(geometry::end, graphics_entity)
1087+
.unwrap()
1088+
})
1089+
}

0 commit comments

Comments
 (0)