New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Specs aware Pipeline #317

Merged
merged 2 commits into from Sep 19, 2017

Conversation

Projects
None yet
6 participants
@omni-viral
Member

omni-viral commented Aug 29, 2017

Polymorphic Pipeline

What does polymorphic Pipeline do?
Just the same as the old Pipeline did, applies Passes.
What is the difference? Pass gets type parameter.

What is it for?

Pass with type parameter can receive different data to draw on frame.
One pass can get each entity with Mesh and Material, all Lights and single camera and draw shaded meshes.
Another can get only Mesh, Material pairs prepare everything to be drawn with deferred shading technique by next pass that gets called for each Light.
Special pass can draw animated 2d sprites from spritesheets. It requires no mesh but texture and additional data to pick sprite from spritesheet.

Integration with specs

This Pipeline defines input Data that implements specs::SystemData and may be fetched by RenderSystem.

Complications

In polymorphic Pipeline Pass is not object-safe trait and implementers can't be stored in Boxed trait objects. Therefore heterogeneous sequences are used.
Heterogeneous sequences require a little bit more effort to work with. But hetseq provides all functionality we need.

@Xaeroxe

This comment has been minimized.

Show comment
Hide comment
@Xaeroxe

Xaeroxe Aug 29, 2017

Member

Woops. The recent rustfmt merge probably messed this up. Do you mind fixing it?

Member

Xaeroxe commented Aug 29, 2017

Woops. The recent rustfmt merge probably messed this up. Do you mind fixing it?

@omni-viral

This comment has been minimized.

Show comment
Hide comment
@omni-viral

omni-viral Aug 29, 2017

Member

I will

Member

omni-viral commented Aug 29, 2017

I will

@omni-viral omni-viral requested review from ebkalderon, Xaeroxe and torkleyy Aug 29, 2017

@Xaeroxe

This comment has been minimized.

Show comment
Hide comment
@Xaeroxe

Xaeroxe Aug 29, 2017

Member

Got some compile errors :/

error[E0243]: wrong number of type arguments: expected 1, found 0
  --> src/ecs/rendering/systems.rs:73:45
   |
73 | impl<'a, 'b> SystemExt<'a, (&'b EventsLoop, PipelineBuilder, Option<DisplayConfig>)>
   |                                             ^^^^^^^^^^^^^^^ expected 1 type argument
error[E0243]: wrong number of type arguments: expected 1, found 0
  --> src/ecs/rendering/systems.rs:22:11
   |
22 |     pipe: Pipeline,
   |           ^^^^^^^^ expected 1 type argument
error[E0243]: wrong number of type arguments: expected 1, found 0
  --> src/ecs/rendering/systems.rs:78:50
   |
78 |         (events, pipe, config): (&'b EventsLoop, PipelineBuilder, Option<DisplayConfig>),
   |                                                  ^^^^^^^^^^^^^^^ expected 1 type argument
error[E0243]: wrong number of type arguments: expected 1, found 0
   --> src/app.rs:242:15
    |
242 |         pipe: PipelineBuilder,
    |               ^^^^^^^^^^^^^^^ expected 1 type argument

Can you fix these please?

Member

Xaeroxe commented Aug 29, 2017

Got some compile errors :/

error[E0243]: wrong number of type arguments: expected 1, found 0
  --> src/ecs/rendering/systems.rs:73:45
   |
73 | impl<'a, 'b> SystemExt<'a, (&'b EventsLoop, PipelineBuilder, Option<DisplayConfig>)>
   |                                             ^^^^^^^^^^^^^^^ expected 1 type argument
error[E0243]: wrong number of type arguments: expected 1, found 0
  --> src/ecs/rendering/systems.rs:22:11
   |
22 |     pipe: Pipeline,
   |           ^^^^^^^^ expected 1 type argument
error[E0243]: wrong number of type arguments: expected 1, found 0
  --> src/ecs/rendering/systems.rs:78:50
   |
78 |         (events, pipe, config): (&'b EventsLoop, PipelineBuilder, Option<DisplayConfig>),
   |                                                  ^^^^^^^^^^^^^^^ expected 1 type argument
error[E0243]: wrong number of type arguments: expected 1, found 0
   --> src/app.rs:242:15
    |
242 |         pipe: PipelineBuilder,
    |               ^^^^^^^^^^^^^^^ expected 1 type argument

Can you fix these please?

@omni-viral

This comment has been minimized.

Show comment
Hide comment
@omni-viral

omni-viral Aug 29, 2017

Member

Amethyst is not compiling. I've worked only in renderer crate yet.

Member

omni-viral commented Aug 29, 2017

Amethyst is not compiling. I've worked only in renderer crate yet.

amethyst_renderer/src/pipe/stage.rs
+}
+
+
+

This comment has been minimized.

@torkleyy

torkleyy Aug 31, 2017

Member

Could you please reduce the number of subsequent empty lines to 1? I can see why some people use two of them, but 4?

@torkleyy

torkleyy Aug 31, 2017

Member

Could you please reduce the number of subsequent empty lines to 1? I can see why some people use two of them, but 4?

This comment has been minimized.

@omni-viral

omni-viral Aug 31, 2017

Member

If this is biggest issue in this PR I call it success 😄

@omni-viral

omni-viral Aug 31, 2017

Member

If this is biggest issue in this PR I call it success 😄

@Xaeroxe

This comment has been minimized.

Show comment
Hide comment
@Xaeroxe

Xaeroxe Aug 31, 2017

Member

Can we update amethyst to use this new PR properly prior to merging? I like it when Travis is happy.

Member

Xaeroxe commented Aug 31, 2017

Can we update amethyst to use this new PR properly prior to merging? I like it when Travis is happy.

@Xaeroxe Xaeroxe removed their request for review Aug 31, 2017

@omni-viral

This comment has been minimized.

Show comment
Hide comment
@omni-viral

omni-viral Aug 31, 2017

Member

@Xaeroxe of course. Supporting new feature in RenderSystem and other parts of main crate will be step two. But will be done prior merging.

Member

omni-viral commented Aug 31, 2017

@Xaeroxe of course. Supporting new feature in RenderSystem and other parts of main crate will be step two. But will be done prior merging.

@omni-viral omni-viral changed the title from [draft] Polymorphic pipeline to [WIP] Specs aware Pipeline Sep 8, 2017

@Xaeroxe

Xaeroxe approved these changes Sep 8, 2017

I love it! This looks to have better performance and be more robust. Thanks!

@Xaeroxe

This comment has been minimized.

Show comment
Hide comment
@Xaeroxe

Xaeroxe Sep 8, 2017

Member

Things to resolve before I can r+ this:

  • Resolve merge conflicts
  • Update amethyst to use this correctly.
Member

Xaeroxe commented Sep 8, 2017

Things to resolve before I can r+ this:

  • Resolve merge conflicts
  • Update amethyst to use this correctly.
+
+impl Component for Light {
+ type Storage = DenseVecStorage<Self>;
+}

This comment has been minimized.

@Aceeri

Aceeri Sep 8, 2017

Member

Probably want to fix these missing newlines.

@Aceeri

Aceeri Sep 8, 2017

Member

Probably want to fix these missing newlines.

This comment has been minimized.

@omni-viral

omni-viral Sep 16, 2017

Member

Fixed

amethyst_renderer/src/mesh.rs
@@ -150,3 +152,7 @@ where
})
}
}
+
+impl Component for Mesh {
+ type Storage = VecStorage<Self>;

This comment has been minimized.

@Aceeri

Aceeri Sep 8, 2017

Member

Any reason for Vec over DenseVec?

@Aceeri

Aceeri Sep 8, 2017

Member

Any reason for Vec over DenseVec?

This comment has been minimized.

@omni-viral

omni-viral Sep 9, 2017

Member

It's just the same MeshComponent uses now.
I haven't dive deep into "what Storage to use?" yet.

@omni-viral

omni-viral Sep 9, 2017

Member

It's just the same MeshComponent uses now.
I haven't dive deep into "what Storage to use?" yet.

amethyst_renderer/src/pipe/pass.rs
-pub trait PassCompiler {
- fn compile(&self, effect: NewEffect) -> Result<Effect>;
+pub trait PassData<'a> {
+ type Data: SystemData<'a> + Send;

This comment has been minimized.

@Aceeri

Aceeri Sep 8, 2017

Member

Are these "parent" traits to SystemData for extensibility? Or is it just restricting the types more?

@Aceeri

Aceeri Sep 8, 2017

Member

Are these "parent" traits to SystemData for extensibility? Or is it just restricting the types more?

@omni-viral omni-viral requested a review from Xaeroxe Sep 9, 2017

@Xaeroxe

Xaeroxe approved these changes Sep 9, 2017

Looks great! I'm excited to see it in action!

@jojolepro

This comment has been minimized.

Show comment
Hide comment
@jojolepro

jojolepro Sep 15, 2017

Collaborator

This pr breaks pr #334 ,making is unusable.

Collaborator

jojolepro commented Sep 15, 2017

This pr breaks pr #334 ,making is unusable.

@Xaeroxe

This comment has been minimized.

Show comment
Hide comment
@Xaeroxe

Xaeroxe Sep 15, 2017

Member

@jojolepro This PR is going to have to be rebased anyways, given that #334 is closer to completion let's merge it first.

Member

Xaeroxe commented Sep 15, 2017

@jojolepro This PR is going to have to be rebased anyways, given that #334 is closer to completion let's merge it first.

@omni-viral omni-viral referenced this pull request Sep 15, 2017

Closed

Window resize fix #334

@jojolepro

This comment has been minimized.

Show comment
Hide comment
@jojolepro

jojolepro Sep 16, 2017

Collaborator

#334 Got closed as it would be useless to make it just to see it replaced soon after.
Hype for the new pipeline! 👍

Collaborator

jojolepro commented Sep 16, 2017

#334 Got closed as it would be useless to make it just to see it replaced soon after.
Hype for the new pipeline! 👍

@omni-viral omni-viral changed the title from [WIP] Specs aware Pipeline to Specs aware Pipeline Sep 16, 2017

src/ecs/rendering/systems.rs
+ for RenderSystem<P>
+ where B: PipelineBuild<Pipeline=P>,
+ P: Pipeline,
+{
/// Create new `RenderSystem`

This comment has been minimized.

@Rhuagh

Rhuagh Sep 16, 2017

Member

Can't you remove the P bound here, and just do for RenderSystem<B::Pipeline> where B: PipelineBuild?

@Rhuagh

Rhuagh Sep 16, 2017

Member

Can't you remove the P bound here, and just do for RenderSystem<B::Pipeline> where B: PipelineBuild?

@omni-viral omni-viral requested a review from Xaeroxe Sep 16, 2017

@jojolepro

As this is absolutely massive and I don't want to spend a week reading the code and checking every single thing I'm unsure of, I put in comments my questions, mostly about naming. Hope this helps.

amethyst_renderer/Cargo.toml
[dev-dependencies]
-genmesh = "0.4"
+genmesh = "0.4"

This comment has been minimized.

@jojolepro

jojolepro Sep 16, 2017

Collaborator

Should there be a new line on the last line? Git put a red symbol.

@jojolepro

jojolepro Sep 16, 2017

Collaborator

Should there be a new line on the last line? Git put a red symbol.

amethyst_renderer/examples/material.rs
@@ -103,7 +107,10 @@ fn main() {
_ => (),
});
- renderer.draw(&scene, &pipe, delta);
+ let data = List::new().push(List::new().push(

This comment has been minimized.

@jojolepro

jojolepro Sep 16, 2017

Collaborator

A list in a list? Mind explaining why you need to have them like this?

@jojolepro

jojolepro Sep 16, 2017

Collaborator

A list in a list? Mind explaining why you need to have them like this?

This comment has been minimized.

@omni-viral

omni-viral Sep 16, 2017

Member

It is List of List because Passes are in List in Stages which are in List in Pipeline. The data for Passes is arranged the same way.
Although examples from amethyst_renderer crate aren't refactored for latest changes in Pipeline.

@omni-viral

omni-viral Sep 16, 2017

Member

It is List of List because Passes are in List in Stages which are in List in Pipeline. The data for Passes is arranged the same way.
Although examples from amethyst_renderer crate aren't refactored for latest changes in Pipeline.

This comment has been minimized.

@Rhuagh

Rhuagh Sep 16, 2017

Member

It's a heterogenous list.

@Rhuagh

Rhuagh Sep 16, 2017

Member

It's a heterogenous list.

This comment has been minimized.

@omni-viral

omni-viral Sep 16, 2017

Member

@Rhuagh yeah. Thank you. I forgot to mention that.

@omni-viral

omni-viral Sep 16, 2017

Member

@Rhuagh yeah. Thank you. I forgot to mention that.

amethyst_renderer/examples/sphere.rs
@@ -70,7 +76,10 @@ fn main() {
_ => (),
});
- renderer.draw(&scene, &pipe, delta);
+ let data = List::new().push(List::new().push(

This comment has been minimized.

@jojolepro

jojolepro Sep 16, 2017

Collaborator

same

@jojolepro

jojolepro Sep 16, 2017

Collaborator

same

amethyst_renderer/src/pass/shaded.rs
@@ -76,7 +82,44 @@ struct PointLight2 {
unsafe impl Pod for PointLight2 {}

This comment has been minimized.

@jojolepro

jojolepro Sep 16, 2017

Collaborator

Naming? Doc? I have no idea what this is.

@jojolepro

jojolepro Sep 16, 2017

Collaborator

Naming? Doc? I have no idea what this is.

This comment has been minimized.

@omni-viral

omni-viral Sep 16, 2017

Member

Not part of public API. Just implementation detail of the pass.

@omni-viral

omni-viral Sep 16, 2017

Member

Not part of public API. Just implementation detail of the pass.

This comment has been minimized.

@omni-viral

omni-viral Sep 19, 2017

Member

Well. If you're curious. This type us POD representation with padding of PointLight to pass into shader.

@omni-viral

omni-viral Sep 19, 2017

Member

Well. If you're curious. This type us POD representation with padding of PointLight to pass into shader.

amethyst_renderer/src/prelude.rs
-pub use pipe::{Pipeline, PipelineBuilder, Stage, StageBuilder, Target};
-pub use scene::{Model, Scene};
+pub use pipe::{Pipeline, PipelineBuilder, Stage, StageBuilder, Target, TheStage, ThePipeline};
+//pub use scene::{Model, Scene};

This comment has been minimized.

@jojolepro

jojolepro Sep 16, 2017

Collaborator

Could be removed instead of commented?

@jojolepro

jojolepro Sep 16, 2017

Collaborator

Could be removed instead of commented?

This comment has been minimized.

@omni-viral

omni-viral Sep 16, 2017

Member

Sure.

src/ecs/rendering/systems.rs
- world.register::<LightComponent>();
- world.register::<MaterialComponent>();
- world.register::<MeshComponent>();
+ world.register::<Light>();

This comment has been minimized.

@jojolepro

jojolepro Sep 16, 2017

Collaborator

Any reason to remove the "Component" part of the Component? It made it pretty easy to know the data we are manipulating.

@jojolepro

jojolepro Sep 16, 2017

Collaborator

Any reason to remove the "Component" part of the Component? It made it pretty easy to know the data we are manipulating.

This comment has been minimized.

@jojolepro

jojolepro Sep 16, 2017

Collaborator

Simplicity vs expressiveness basically. Just make sure that we are consistent across the engine with that to avoid confusion.

@jojolepro

jojolepro Sep 16, 2017

Collaborator

Simplicity vs expressiveness basically. Just make sure that we are consistent across the engine with that to avoid confusion.

This comment has been minimized.

@omni-viral

omni-viral Sep 16, 2017

Member

I have a plan to remove (Mesh/Material/Light)Component wrapping. But it is not in the scope of this PR. I'll remove those changes

@omni-viral

omni-viral Sep 16, 2017

Member

I have a plan to remove (Mesh/Material/Light)Component wrapping. But it is not in the scope of this PR. I'll remove those changes

omni-viral added a commit to omni-viral/amethyst that referenced this pull request Sep 16, 2017

@jojolepro

This comment has been minimized.

Show comment
Hide comment
@jojolepro

jojolepro Sep 16, 2017

Collaborator

(Please note that I didn't do a throughout check of the code)
There, have my seal of approval!
https://media.giphy.com/media/uTv1bQNRPFYTS/giphy.gif

Collaborator

jojolepro commented Sep 16, 2017

(Please note that I didn't do a throughout check of the code)
There, have my seal of approval!
https://media.giphy.com/media/uTv1bQNRPFYTS/giphy.gif

@Aceeri

Aceeri approved these changes Sep 16, 2017

@Xaeroxe

Documentation is a little bare in some places on 2nd review, otherwise this looks great, thanks!

Side note: if some of these generic bounds from the impl sections were instead added to the structure itself a lot of doc comments wouldn't be necessary.

@@ -37,9 +37,9 @@ num_cpus = "1.2"
genmesh = "0.4"
imagefmt = "4.0"
shred = "0.4"
-specs = "0.9.5"
-rayon = "0.8"
+rayon = "0.7"

This comment has been minimized.

@Xaeroxe

Xaeroxe Sep 17, 2017

Member

What's up with this downgrade?

@Xaeroxe

Xaeroxe Sep 17, 2017

Member

What's up with this downgrade?

This comment has been minimized.

@omni-viral

omni-viral Sep 17, 2017

Member

We need to use same version specs does

@omni-viral

omni-viral Sep 17, 2017

Member

We need to use same version specs does

amethyst_renderer/src/pass/flat.rs
@@ -17,14 +23,17 @@ static FRAG_SRC: &[u8] = include_bytes!("shaders/fragment/flat.glsl");
/// Draw mesh without lighting
#[derive(Clone, Debug, PartialEq)]
-pub struct DrawFlat<V> {
+pub struct DrawFlat<V, M, N, T> {

This comment has been minimized.

@Xaeroxe

Xaeroxe Sep 17, 2017

Member

It would be nice to have a little documentation as to what all of these generic parameters are supposed to be

@Xaeroxe

Xaeroxe Sep 17, 2017

Member

It would be nice to have a little documentation as to what all of these generic parameters are supposed to be

amethyst_renderer/src/pass/pbm.rs
@@ -20,18 +26,18 @@ static FRAG_SRC: &[u8] = include_bytes!("shaders/fragment/pbm.glsl");
/// Draw mesh without lighting
#[derive(Clone, Debug, PartialEq)]
-pub struct DrawPbm<V> {
+pub struct DrawPbm<V, A, M, N, T, L> {

This comment has been minimized.

@Xaeroxe

Xaeroxe Sep 17, 2017

Member

I would also like to know what all of these parameters are at a glance

@Xaeroxe

Xaeroxe Sep 17, 2017

Member

I would also like to know what all of these parameters are at a glance

amethyst_renderer/src/pass/shaded.rs
@@ -20,17 +26,17 @@ static FRAG_SRC: &[u8] = include_bytes!("shaders/fragment/shaded.glsl");
/// Draw mesh without lighting
#[derive(Clone, Debug, PartialEq)]
-pub struct DrawShaded<V> {
+pub struct DrawShaded<V, A, M, N, T, L> {

This comment has been minimized.

@Xaeroxe

Xaeroxe Sep 17, 2017

Member

Please document all of these generic parameters

@Xaeroxe

Xaeroxe Sep 17, 2017

Member

Please document all of these generic parameters

amethyst_renderer/src/pipe/pass.rs
- effect,
- inner: self.0,
- })
+ unsafe fn get(&self) -> (&mut Encoder, &mut Effect) {

This comment has been minimized.

@Xaeroxe

Xaeroxe Sep 17, 2017

Member

I know this isn't part of the public API but just for the sake of future maintainers can we document why this is unsafe and what conditions need to be guaranteed by the developer before they call this?

@Xaeroxe

Xaeroxe Sep 17, 2017

Member

I know this isn't part of the public API but just for the sake of future maintainers can we document why this is unsafe and what conditions need to be guaranteed by the developer before they call this?

@omni-viral

This comment has been minimized.

Show comment
Hide comment
@omni-viral

omni-viral Sep 17, 2017

Member

@Xaeroxe I follow the idea to have minimum bounds possible. Therefore I almost never introduce bounds on struct definition.

Member

omni-viral commented Sep 17, 2017

@Xaeroxe I follow the idea to have minimum bounds possible. Therefore I almost never introduce bounds on struct definition.

@Xaeroxe

This comment has been minimized.

Show comment
Hide comment
@Xaeroxe

Xaeroxe Sep 17, 2017

Member

That makes sense, can we still add doc comments for what those parameters are supposed to be?

Member

Xaeroxe commented Sep 17, 2017

That makes sense, can we still add doc comments for what those parameters are supposed to be?

@@ -0,0 +1,10 @@
+(
+ dimensions: None,

This comment has been minimized.

@torkleyy

torkleyy Sep 17, 2017

Member

Let's use recommended formatting (so 4 spaces).

@torkleyy

torkleyy Sep 17, 2017

Member

Let's use recommended formatting (so 4 spaces).

This comment has been minimized.

@omni-viral

omni-viral Sep 17, 2017

Member

I've copied it from other examples. Should I fix formatting there too?

@omni-viral

omni-viral Sep 17, 2017

Member

I've copied it from other examples. Should I fix formatting there too?

examples/06_material/main.rs
+ let config = DisplayConfig::load(&path);
+ let mut game = Application::build(Example)?
+ .with_renderer(
+ ThePipeline::build().with_stage(

This comment has been minimized.

@torkleyy

torkleyy Sep 17, 2017

Member

I'm not sure we want a type named ThePipeline

@torkleyy

torkleyy Sep 17, 2017

Member

I'm not sure we want a type named ThePipeline

This comment has been minimized.

@omni-viral

omni-viral Sep 17, 2017

Member

I gave it the name just because Pipeline is occupied by trait 😛
If you have better idea you're welcome to share 😄

@omni-viral

omni-viral Sep 17, 2017

Member

I gave it the name just because Pipeline is occupied by trait 😛
If you have better idea you're welcome to share 😄

This comment has been minimized.

@Xaeroxe

Xaeroxe Sep 18, 2017

Member

I guess my question is why do we have a trait for this? Under what circumstances would someone want to use a pipeline other than ours?

@Xaeroxe

Xaeroxe Sep 18, 2017

Member

I guess my question is why do we have a trait for this? Under what circumstances would someone want to use a pipeline other than ours?

This comment has been minimized.

@omni-viral

omni-viral Sep 18, 2017

Member

We have a trait to simplify bounds on type parameters.
Either it is P where P: Pipeline or Pipeline<S> where S: Stages.
Well. Before refactoring the second variant was much more sophisticated...

@omni-viral

omni-viral Sep 18, 2017

Member

We have a trait to simplify bounds on type parameters.
Either it is P where P: Pipeline or Pipeline<S> where S: Stages.
Well. Before refactoring the second variant was much more sophisticated...

This comment has been minimized.

@omni-viral

omni-viral Sep 19, 2017

Member

And I think that PIpeline<S> where S: Stages looks unclear rather than P: Pipeline.

@omni-viral

omni-viral Sep 19, 2017

Member

And I think that PIpeline<S> where S: Stages looks unclear rather than P: Pipeline.

@Xaeroxe Xaeroxe referenced this pull request Sep 18, 2017

Closed

UI Framework #365

4 of 4 tasks complete

omni-viral added some commits Sep 19, 2017

@Xaeroxe

LGTM! Thanks! I've run this locally and it seems to work pretty well. Good work!

bors r+

@bors

This comment has been minimized.

Show comment
Hide comment
@bors

bors bot Sep 19, 2017

Contributor

👎 Rejected by label

Contributor

bors bot commented Sep 19, 2017

👎 Rejected by label

@Xaeroxe

This comment has been minimized.

Show comment
Hide comment
@Xaeroxe

Xaeroxe Sep 19, 2017

Member

bors r+

Member

Xaeroxe commented Sep 19, 2017

bors r+

bors bot added a commit that referenced this pull request Sep 19, 2017

Merge #317
317: Specs aware Pipeline r=Xaeroxe a=omni-viral

## Polymorphic `Pipeline`
What does polymorphic `Pipeline` do?
Just the same as the old `Pipeline` did, applies `Pass`es.
What is the difference? `Pass` gets type parameter.

### What is it for?
`Pass` with type parameter can receive different data to draw on frame.
One pass can get each entity with `Mesh` and `Material`, all `Light`s and single camera and draw shaded meshes.
Another can get only `Mesh`, `Material` pairs prepare everything to be drawn with deferred shading technique by next pass that gets called for each `Light`.
Special pass can draw animated 2d sprites from spritesheets. It requires no mesh but texture and additional data to pick sprite from spritesheet.

### Integration with `specs`
This `Pipeline` defines input `Data` that implements `specs::SystemData` and may be fetched by `RenderSystem`.

##### Complications
In polymorphic `Pipeline` `Pass` is not object-safe trait and implementers can't be stored in `Box`ed trait objects. Therefore heterogeneous sequences are used.
Heterogeneous sequences require a little bit more effort to work with. But `hetseq` provides all functionality we need.
@bors

This comment has been minimized.

Show comment
Hide comment
@bors

bors bot Sep 19, 2017

Contributor

Timed out

Contributor

bors bot commented Sep 19, 2017

Timed out

@Xaeroxe

This comment has been minimized.

Show comment
Hide comment
@Xaeroxe

Xaeroxe Sep 19, 2017

Member

Sigh.. overriding.

Member

Xaeroxe commented Sep 19, 2017

Sigh.. overriding.

@Xaeroxe Xaeroxe merged commit 1294bef into amethyst:develop Sep 19, 2017

1 of 3 checks passed

bors Timed out
continuous-integration/travis-ci/pr The Travis CI build is in progress
Details
continuous-integration/appveyor/pr AppVeyor build succeeded
Details

@omni-viral omni-viral deleted the omni-viral:polypipe branch Sep 26, 2017

Aceeri added a commit to Aceeri/amethyst that referenced this pull request Oct 18, 2017

Specs aware Pipeline (#317)
* Polypipe squashed again

* Clear warnings
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment