{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":389831007,"defaultBranch":"main","name":"bevy","ownerLogin":"IceSentry","currentUserCanPush":false,"isFork":true,"isEmpty":false,"createdAt":"2021-07-27T03:00:07.000Z","ownerAvatar":"https://github.com/avatars/u/8348954?v=4","public":true,"private":false,"isOrgOwned":false},"refInfo":{"name":"","listCacheKey":"v0:1724268822.0","currentOid":""},"activityList":{"items":[{"before":"e600e2c1b14b520af65b6c32d5897724ba9aa8fb","after":"565324daa32fc4d84da14f3c68b994048f6a4d2e","ref":"refs/heads/main","pushedAt":"2024-08-29T17:03:41.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"IceSentry","name":"IceSentry","path":"/IceSentry","primaryAvatarUrl":"https://github.com/avatars/u/8348954?s=80&v=4"},"commit":{"message":"Improve the gizmo for `Plane3d`, reusing grid (#14650)\n\n# Objective\n\nWith the current implementation of `Plane3d` gizmos, it's really hard to\nget a good feeling for big planes. Usually I tend to add more axes as a\nuser but that doesn't scale well and is pretty wasteful. It's hard to\nrecognize the plane in the distance here. Especially if there would've\nbeen other rendered objects in the scene\n\n\n![image](https://github.com/user-attachments/assets/b65b7015-c08c-46d7-aa27-c7c0d49b2021)\n\n## Solution\n\n- Since we got grid gizmos in the mean time, I went ahead and just\nreused them here.\n\n## Testing\n\nI added an instance of the new `Plane3D` to the `3d_gizmos.rs` example.\nIf you want to look at it you need to look around a bit. I didn't\nposition it in the center since that was too crowded already.\n\n---\n\n## Showcase\n\n\n![image](https://github.com/user-attachments/assets/e4982afe-7296-416c-9801-7dd85cd975c1)\n\n## Migration Guide\n\nThe optional builder methods on \n\n```rust\n\ngizmos.primitive_3d(&Plane3d { }, ...);\n\n```\n\nchanged from\n\n- `segment_length`\n- `segment_count`\n- `axis_count`\n\nto \n\n- `cell_count`\n- `spacing`","shortMessageHtmlLink":"Improve the gizmo for Plane3d, reusing grid (bevyengine#14650)"}},{"before":"938d810766d34f1a300beb440273c3db1635ee5c","after":"e600e2c1b14b520af65b6c32d5897724ba9aa8fb","ref":"refs/heads/main","pushedAt":"2024-08-29T15:27:16.000Z","pushType":"push","commitsCount":61,"pusher":{"login":"IceSentry","name":"IceSentry","path":"/IceSentry","primaryAvatarUrl":"https://github.com/avatars/u/8348954?s=80&v=4"},"commit":{"message":"Move the default LogPlugin filter to a public constant (#14958)\n\n# Objective\n\nThis moves the default `LogPlugin` filter to be a public constant so\nthat it can be updated and referenced from outside code without changes\nacross releases:\n\n```\nfn main() {\n App::new().add_plugins(\n DefaultPlugins\n .set(bevy::log::LogPlugin {\n filter: format!(\"{},mylogs=error\", bevy::log::LogPlugin::DEFAULT_FILTER),\n ..default()\n })).run();\n}\n```\n\n## Testing\n\nTested with `cargo run -p ci`","shortMessageHtmlLink":"Move the default LogPlugin filter to a public constant (bevyengine#14958"}},{"before":"dc5292355bac24c2e591dd3da318a35dcfdfe28f","after":"9ec68da6adf619ddb03cbf305caa17e35c2c8a92","ref":"refs/heads/oit-upstreaming","pushedAt":"2024-08-22T17:29:40.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"IceSentry","name":"IceSentry","path":"/IceSentry","primaryAvatarUrl":"https://github.com/avatars/u/8348954?s=80&v=4"},"commit":{"message":"fix example readme","shortMessageHtmlLink":"fix example readme"}},{"before":"f7f41e01fd7c590f814795e86981455883328001","after":"dc5292355bac24c2e591dd3da318a35dcfdfe28f","ref":"refs/heads/oit-upstreaming","pushedAt":"2024-08-22T15:58:16.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"IceSentry","name":"IceSentry","path":"/IceSentry","primaryAvatarUrl":"https://github.com/avatars/u/8348954?s=80&v=4"},"commit":{"message":"typo","shortMessageHtmlLink":"typo"}},{"before":"234d42cc5395921bf65c24665ef5f3ce7a9176e7","after":"f7f41e01fd7c590f814795e86981455883328001","ref":"refs/heads/oit-upstreaming","pushedAt":"2024-08-22T15:54:32.000Z","pushType":"push","commitsCount":19,"pusher":{"login":"IceSentry","name":"IceSentry","path":"/IceSentry","primaryAvatarUrl":"https://github.com/avatars/u/8348954?s=80&v=4"},"commit":{"message":"Merge branch 'main' into oit-upstreaming","shortMessageHtmlLink":"Merge branch 'main' into oit-upstreaming"}},{"before":"dd6f009c7c26dff09ce52788ef249248b71942fd","after":"234d42cc5395921bf65c24665ef5f3ce7a9176e7","ref":"refs/heads/oit-upstreaming","pushedAt":"2024-08-22T15:54:03.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"IceSentry","name":"IceSentry","path":"/IceSentry","primaryAvatarUrl":"https://github.com/avatars/u/8348954?s=80&v=4"},"commit":{"message":"fix ordering","shortMessageHtmlLink":"fix ordering"}},{"before":"782e85ec8f118023af467171696ef2eefdd60dd6","after":"dd6f009c7c26dff09ce52788ef249248b71942fd","ref":"refs/heads/oit-upstreaming","pushedAt":"2024-08-21T19:58:13.000Z","pushType":"push","commitsCount":3,"pusher":{"login":"IceSentry","name":"IceSentry","path":"/IceSentry","primaryAvatarUrl":"https://github.com/avatars/u/8348954?s=80&v=4"},"commit":{"message":"pass layer_count to shader","shortMessageHtmlLink":"pass layer_count to shader"}},{"before":null,"after":"067a9da29bb796faf9837edbcf97bfcceab31e62","ref":"refs/heads/simplify_render_to_texture","pushedAt":"2024-08-21T19:33:42.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"IceSentry","name":"IceSentry","path":"/IceSentry","primaryAvatarUrl":"https://github.com/avatars/u/8348954?s=80&v=4"},"commit":{"message":"Simplify render_to_texture examples","shortMessageHtmlLink":"Simplify render_to_texture examples"}},{"before":"bd8faa7ae17dcd8b4df2beba28876759fb4fdef5","after":"938d810766d34f1a300beb440273c3db1635ee5c","ref":"refs/heads/main","pushedAt":"2024-08-21T19:26:51.000Z","pushType":"push","commitsCount":18,"pusher":{"login":"IceSentry","name":"IceSentry","path":"/IceSentry","primaryAvatarUrl":"https://github.com/avatars/u/8348954?s=80&v=4"},"commit":{"message":"Apply unused_qualifications lint (#14828)\n\n# Objective\n\nFixes #14782\n\n## Solution\n\nEnable the lint and fix all upcoming hints (`--fix`). Also tried to\nfigure out the false-positive (see review comment). Maybe split this PR\nup into multiple parts where only the last one enables the lint, so some\ncan already be merged resulting in less many files touched / less\npotential for merge conflicts?\n\nCurrently, there are some cases where it might be easier to read the\ncode with the qualifier, so perhaps remove the import of it and adapt\nits cases? In the current stage it's just a plain adoption of the\nsuggestions in order to have a base to discuss.\n\n## Testing\n\n`cargo clippy` and `cargo run -p ci` are happy.","shortMessageHtmlLink":"Apply unused_qualifications lint (bevyengine#14828)"}},{"before":"881d15dc6c8eba6aa800089c5d2878c2b6bb893d","after":"782e85ec8f118023af467171696ef2eefdd60dd6","ref":"refs/heads/oit-upstreaming","pushedAt":"2024-08-19T18:26:39.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"IceSentry","name":"IceSentry","path":"/IceSentry","primaryAvatarUrl":"https://github.com/avatars/u/8348954?s=80&v=4"},"commit":{"message":"Add Order Independent Transparency","shortMessageHtmlLink":"Add Order Independent Transparency"}},{"before":"51d841b186e7e0d32a0403993f56311a54bb996a","after":"881d15dc6c8eba6aa800089c5d2878c2b6bb893d","ref":"refs/heads/oit-upstreaming","pushedAt":"2024-08-19T18:26:06.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"IceSentry","name":"IceSentry","path":"/IceSentry","primaryAvatarUrl":"https://github.com/avatars/u/8348954?s=80&v=4"},"commit":{"message":"more clean up","shortMessageHtmlLink":"more clean up"}},{"before":"39b1c7da783007578ceeb10f48cf735b98cdb27d","after":"51d841b186e7e0d32a0403993f56311a54bb996a","ref":"refs/heads/oit-upstreaming","pushedAt":"2024-08-19T18:24:36.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"IceSentry","name":"IceSentry","path":"/IceSentry","primaryAvatarUrl":"https://github.com/avatars/u/8348954?s=80&v=4"},"commit":{"message":"wip","shortMessageHtmlLink":"wip"}},{"before":null,"after":"4bb8ab42d2ac9a2874da3d9eae91bf3dbfb5c4a1","ref":"refs/heads/opaque_sprites","pushedAt":"2024-08-19T18:05:59.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"IceSentry","name":"IceSentry","path":"/IceSentry","primaryAvatarUrl":"https://github.com/avatars/u/8348954?s=80&v=4"},"commit":{"message":"wip","shortMessageHtmlLink":"wip"}},{"before":"423285cf1cbd86d85db066dbfe26de4fd68333d9","after":"bd8faa7ae17dcd8b4df2beba28876759fb4fdef5","ref":"refs/heads/main","pushedAt":"2024-08-19T04:30:04.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"IceSentry","name":"IceSentry","path":"/IceSentry","primaryAvatarUrl":"https://github.com/avatars/u/8348954?s=80&v=4"},"commit":{"message":"Fix key bindings in 3d_gizmos example after camera controller (#14812)\n\n# Objective\n\nFixes #14811\n\n## Solution\n\n- Switch `D` to `T`: `T` for \"on top of\"\n- Switch `A` to `B`: `B` in \"AABB\", or \"boxes\"\n\n## Testing\n\n- Ran the example locally\n- Checked the key bindings that the camera controller uses and made sure\nwe're not using them in the 3d_gizmos example anymore\n\nAfter:\n\n\"image\"\nsrc=\"https://github.com/user-attachments/assets/4f558d09-5acf-4eb8-8ece-6d4297e62c9f\"","shortMessageHtmlLink":"Fix key bindings in 3d_gizmos example after camera controller (bevyen…"}},{"before":"e9e9e5e15da4528c3d33c0808e954cf7a8b874f7","after":"423285cf1cbd86d85db066dbfe26de4fd68333d9","ref":"refs/heads/main","pushedAt":"2024-08-18T05:38:56.000Z","pushType":"push","commitsCount":16,"pusher":{"login":"IceSentry","name":"IceSentry","path":"/IceSentry","primaryAvatarUrl":"https://github.com/avatars/u/8348954?s=80&v=4"},"commit":{"message":"bevy_reflect: Store functions as `DynamicClosure<'static>` in `FunctionRegistry` (#14704)\n\n# Objective\n\n#14098 added the `FunctionRegistry` for registering functions such that\nthey can be retrieved by name and used dynamically. One thing we chose\nto leave out in that initial PR is support for closures.\n\nWhy support closures? Mainly, we don't want to prohibit users from\ninjecting environmental data into their registered functions. This\nallows these functions to not leak their internals to the public API.\n\nFor example, let's say we're writing a library crate that allows users\nto register callbacks for certain actions. We want to perform some\nactions before invoking the user's callback so we can't just call it\ndirectly. We need a closure for this:\n\n```rust\nregistry.register(\"my_lib::onclick\", move |event: ClickEvent| {\n // ...other work...\n\n user_onclick.call(event); // <-- Captured variable\n});\n```\n\nWe could have made our callback take a reference to the user's callback.\nThis would remove the need for the closure, but it would change our\ndesired API to place the burden of fetching the correct callback on the\ncaller.\n\n## Solution\n\nModify the `FunctionRegistry` to store registered functions as\n`DynamicClosure<'static>` instead of `DynamicFunction` (now using\n`IntoClosure` instead of `IntoFunction`).\n\nDue to limitations in Rust and how function reflection works,\n`DynamicClosure<'static>` is functionally equivalent to\n`DynamicFunction`. And a normal function is considered a subset of\nclosures (it's a closure that doesn't capture anything), so there\nshouldn't be any difference in usage: all functions that satisfy\n`IntoFunction` should satisfy `IntoClosure`.\n\nThis means that the registration API introduced in #14098 should require\nlittle-to-no changes on anyone following `main`.\n\n### Closures vs Functions\n\nOne consideration here is whether we should keep closures and functions\nseparate.\n\nThis PR unifies them into `DynamicClosure<'static>`, but we can consider\nsplitting them up. The reasons we might want to do so are:\n\n- Simplifies mental model and terminology (users don't have to\nunderstand that functions turn into closures)\n- If Rust ever improves its function model, we may be able to add\nadditional guarantees to `DynamicFunction` that make it useful to\nseparate the two\n- Adding support for generic functions may be less confusing for users\nsince closures in Rust technically can't be generic\n\nThe reasons behind this PR's unification approach are:\n\n- Reduces the number of methods needed on `FunctionRegistry`\n- Reduces the number of lookups a user may have to perform (i.e.\n\"`get_function` or else `get_closure`\")\n- Establishes `DynamicClosure<'static>` as the de facto dynamic callable\n(similar to how most APIs in Rust code tend to prefer `impl Fn() ->\nString` over `fn() -> String`)\n\nI'd love to hear feedback on this matter, and whether we should continue\nwith this PR's approach or switch to a split model.\n\n## Testing\n\nYou can test locally by running:\n\n```\ncargo test --package bevy_reflect\n```\n\n---\n\n## Showcase\n\nClosures can now be registered into the `FunctionRegistry`:\n\n```rust\nlet punct = String::from(\"!!!\");\n\nregistry.register_with_name(\"my_crate::punctuate\", move |text: String| {\n format!(\"{}{}\", text, punct)\n});\n```","shortMessageHtmlLink":"bevy_reflect: Store functions as DynamicClosure<'static> in `Functi…"}},{"before":"7d3068e6c382e87a98ceac62c407621c79dbbecf","after":"e9e9e5e15da4528c3d33c0808e954cf7a8b874f7","ref":"refs/heads/main","pushedAt":"2024-08-15T18:27:15.000Z","pushType":"push","commitsCount":14,"pusher":{"login":"IceSentry","name":"IceSentry","path":"/IceSentry","primaryAvatarUrl":"https://github.com/avatars/u/8348954?s=80&v=4"},"commit":{"message":"Add query reborrowing (#14690)\n\n# Objective\n\n- Sometimes some method or function takes an owned `Query`, but we don't\nwant to give up ours;\n- transmuting it technically a solution, but it more costly than\nnecessary.\n- Make query iterators more flexible\n- this would allow the equivalent of\n`slice::split_first`/`slice::split_first_mut` for query iterators\n - helps with requests like #14685\n\n## Solution\n\n- Add a way for reborrowing queries, that is going from a `&'a mut\nQuery<'w, 's, D, F>` to a `Query<'a, 's, D, F>`:\n- this is safe because the original query will be borrowed while the new\nquery exists and thus no aliased access can happen;\n- it's basically the equivalent of going from `&'short mut &'long mut T`\nto `&'short mut T` the the compiler automatically implements.\n- Add a way for getting the remainder of a query iterator:\n- this is interesting also because the original iterator keeps its\nposition, which was not possible before;\n- this in turn requires a way to reborrow query fetches, which I had to\nadd to `WorldQuery`.\n\n## Showcase\n\n- You can now reborrow a `Query`, getting an equivalent `Query` with a\nshorter lifetime. Previously this was possible for read-only queries by\nusing `Query::to_readonly`, now it's possible for mutable queries too;\n- You can now separately iterate over the remainder of `QueryIter`.\n\n## Migration Guide\n\n- `WorldQuery` now has an additional `shrink_fetch` method you have to\nimplement if you were implementing `WorldQuery` manually.","shortMessageHtmlLink":"Add query reborrowing (bevyengine#14690)"}},{"before":"9d6a4fbc8545674d916ebe78f32b219846a6737b","after":"7d3068e6c382e87a98ceac62c407621c79dbbecf","ref":"refs/heads/main","pushedAt":"2024-08-15T05:20:06.000Z","pushType":"push","commitsCount":17,"pusher":{"login":"IceSentry","name":"IceSentry","path":"/IceSentry","primaryAvatarUrl":"https://github.com/avatars/u/8348954?s=80&v=4"},"commit":{"message":"Fix world borrow for DeferredWorld::query (#14744)\n\n# Objective\n\nAs is, calling\n[`DeferredWorld::query`](https://docs.rs/bevy/latest/bevy/ecs/world/struct.DeferredWorld.html#method.query)\nrequires you to first `reborrow()` the world in order to use it at all.\n\nSimple reproduction:\n```rust\nfn test<'w>(mut world: DeferredWorld<'w>, mut state: QueryState<(), ()>) {\n let query = world.query(&mut state);\n // let query = world.reborrow().query(&mut state); // << Required\n}\n```\n\nError message:\n```\nerror[E0597]: `world` does not live long enough\n |\n444 | fn test<'w>(mut world: DeferredWorld<'w>, mut state: QueryState<(), ()>) {\n | -- --------- binding `world` declared here\n | |\n | lifetime `'w` defined here\n445 | let query = world.query(&mut state);\n | ^^^^^------------------\n | |\n | borrowed value does not live long enough\n | argument requires that `world` is borrowed for `'w`\n446 | }\n | - `world` dropped here while still borrowed\n\n```\n\n## Solution\n\nFix the world borrow lifetime on the `query` method, which now correctly\nallows the above usage.","shortMessageHtmlLink":"Fix world borrow for DeferredWorld::query (bevyengine#14744)"}},{"before":"e65f076532f632144795ce1ba3c4dd82cbd5ece6","after":"3a7012271aa4d7b4f7d2abe934dede0e4ebbc377","ref":"refs/heads/2d-alpha-mask-phase","pushedAt":"2024-08-13T07:27:36.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"IceSentry","name":"IceSentry","path":"/IceSentry","primaryAvatarUrl":"https://github.com/avatars/u/8348954?s=80&v=4"},"commit":{"message":"Merge branch '2d-alpha-mask-phase' of https://github.com/IceSentry/bevy into 2d-alpha-mask-phase","shortMessageHtmlLink":"Merge branch '2d-alpha-mask-phase' of https://github.com/IceSentry/bevy…"}},{"before":"afa442949a5c481791848c65afa15ef603712210","after":"e65f076532f632144795ce1ba3c4dd82cbd5ece6","ref":"refs/heads/2d-alpha-mask-phase","pushedAt":"2024-08-12T22:32:36.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"IceSentry","name":"IceSentry","path":"/IceSentry","primaryAvatarUrl":"https://github.com/avatars/u/8348954?s=80&v=4"},"commit":{"message":"Update crates/bevy_sprite/src/mesh2d/color_material.rs\n\nCo-authored-by: Kristoffer Søholm ","shortMessageHtmlLink":"Update crates/bevy_sprite/src/mesh2d/color_material.rs"}},{"before":"074799cdf7c23ce121842b7106a67441f0c242ee","after":"afa442949a5c481791848c65afa15ef603712210","ref":"refs/heads/2d-alpha-mask-phase","pushedAt":"2024-08-12T17:18:27.000Z","pushType":"push","commitsCount":3,"pusher":{"login":"IceSentry","name":"IceSentry","path":"/IceSentry","primaryAvatarUrl":"https://github.com/avatars/u/8348954?s=80&v=4"},"commit":{"message":"Merge branch 'main' into 2d-alpha-mask-phase","shortMessageHtmlLink":"Merge branch 'main' into 2d-alpha-mask-phase"}},{"before":"6ec6695e40d67663b6b00b3ca0efcf67bc421585","after":"074799cdf7c23ce121842b7106a67441f0c242ee","ref":"refs/heads/2d-alpha-mask-phase","pushedAt":"2024-08-12T17:17:57.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"IceSentry","name":"IceSentry","path":"/IceSentry","primaryAvatarUrl":"https://github.com/avatars/u/8348954?s=80&v=4"},"commit":{"message":"update span name","shortMessageHtmlLink":"update span name"}},{"before":"e9f0a2a351e28b393991b371cad3e2f48f8e4144","after":"6ec6695e40d67663b6b00b3ca0efcf67bc421585","ref":"refs/heads/2d-alpha-mask-phase","pushedAt":"2024-08-12T17:17:13.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"IceSentry","name":"IceSentry","path":"/IceSentry","primaryAvatarUrl":"https://github.com/avatars/u/8348954?s=80&v=4"},"commit":{"message":"add docs to alpha mode","shortMessageHtmlLink":"add docs to alpha mode"}},{"before":"68801bd763968b4140f06b15d00cc23fbe2f041d","after":"e9f0a2a351e28b393991b371cad3e2f48f8e4144","ref":"refs/heads/2d-alpha-mask-phase","pushedAt":"2024-08-12T16:44:02.000Z","pushType":"push","commitsCount":9,"pusher":{"login":"IceSentry","name":"IceSentry","path":"/IceSentry","primaryAvatarUrl":"https://github.com/avatars/u/8348954?s=80&v=4"},"commit":{"message":"Merge branch 'main' into 2d-alpha-mask-phase","shortMessageHtmlLink":"Merge branch 'main' into 2d-alpha-mask-phase"}},{"before":"0e18d5cf249f3c3ebe2ae85b2e0b7606ebeff4c7","after":"68801bd763968b4140f06b15d00cc23fbe2f041d","ref":"refs/heads/2d-alpha-mask-phase","pushedAt":"2024-08-12T16:32:54.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"IceSentry","name":"IceSentry","path":"/IceSentry","primaryAvatarUrl":"https://github.com/avatars/u/8348954?s=80&v=4"},"commit":{"message":"Add AlphaMask2d phase","shortMessageHtmlLink":"Add AlphaMask2d phase"}},{"before":"5abc32ceda1a440271c9f9ef71279bd9f7f9ff5c","after":"9d6a4fbc8545674d916ebe78f32b219846a6737b","ref":"refs/heads/main","pushedAt":"2024-08-12T16:14:44.000Z","pushType":"push","commitsCount":14,"pusher":{"login":"IceSentry","name":"IceSentry","path":"/IceSentry","primaryAvatarUrl":"https://github.com/avatars/u/8348954?s=80&v=4"},"commit":{"message":"Use BinnedRenderPhase for Opaque2d (#13091)\n\nBased on top of #12982 and #13069 \n\n# Objective\n\n- Opaque2d was implemented with SortedRenderPhase but BinnedRenderPhase\nshould be much faster\n\n## Solution\n\n- Implement BinnedRenderPhase for Opaque2d\n\n## Notes\n\nWhile testing this PR, before the change I had ~14 fps in bevymark with\n100k entities. After this change I get ~71 fps, compared to using\nsprites where I only get ~63 fps. This means that after this PR mesh2d\nwith opaque meshes will be faster than the sprite path. This is not a 1\nto 1 comparison since sprites do alpha blending.","shortMessageHtmlLink":"Use BinnedRenderPhase for Opaque2d (bevyengine#13091)"}},{"before":"69e5fa445d0a7b4d15c63a5b2b311e72f76bc070","after":"4c105d361d6c204e4082ba42d4e4a144a62aa5e4","ref":"refs/heads/opaque2d-binned-render-phase","pushedAt":"2024-08-07T03:14:14.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"IceSentry","name":"IceSentry","path":"/IceSentry","primaryAvatarUrl":"https://github.com/avatars/u/8348954?s=80&v=4"},"commit":{"message":"fix docs","shortMessageHtmlLink":"fix docs"}},{"before":"2e53c8fd7ead9ea0593dba006cb5f06da5e59d42","after":"69e5fa445d0a7b4d15c63a5b2b311e72f76bc070","ref":"refs/heads/opaque2d-binned-render-phase","pushedAt":"2024-08-07T03:03:11.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"IceSentry","name":"IceSentry","path":"/IceSentry","primaryAvatarUrl":"https://github.com/avatars/u/8348954?s=80&v=4"},"commit":{"message":"Use BinnedRenderPhase for Opaque2d","shortMessageHtmlLink":"Use BinnedRenderPhase for Opaque2d"}},{"before":"abceebebba084c3df0f28ffd54a57bb13f959a7d","after":"5abc32ceda1a440271c9f9ef71279bd9f7f9ff5c","ref":"refs/heads/main","pushedAt":"2024-08-07T02:34:22.000Z","pushType":"push","commitsCount":81,"pusher":{"login":"IceSentry","name":"IceSentry","path":"/IceSentry","primaryAvatarUrl":"https://github.com/avatars/u/8348954?s=80&v=4"},"commit":{"message":"Add 2d opaque phase with depth buffer (#13069)\n\nThis PR is based on top of #12982\n\n# Objective\n\n- Mesh2d currently only has an alpha blended phase. Most sprites don't\nneed transparency though.\n- For some 2d games it can be useful to have a 2d depth buffer\n\n## Solution\n\n- Add an opaque phase to render Mesh2d that don't need transparency\n- This phase currently uses the `SortedRenderPhase` to make it easier to\nimplement based on the already existing transparent phase. A follow up\nPR will switch this to `BinnedRenderPhase`.\n- Add a 2d depth buffer\n- Use that depth buffer in the transparent phase to make sure that\nsprites and transparent mesh2d are displayed correctly\n\n## Testing\n\nI added the mesh2d_transforms example that layers many opaque and\ntransparent mesh2d to make sure they all get displayed correctly. I also\nconfirmed it works with sprites by modifying that example locally.\n\n---\n\n## Changelog\n\n- Added `AlphaMode2d`\n- Added `Opaque2d` render phase\n- Camera2d now have a `ViewDepthTexture` component\n\n## Migration Guide\n\n- `ColorMaterial` now contains `AlphaMode2d`. To keep previous\nbehaviour, use `AlphaMode::BLEND`. If you know your sprite is opaque,\nuse `AlphaMode::OPAQUE`\n\n## Follow up PRs\n\n- See tracking issue: #13265\n\n---------\n\nCo-authored-by: Alice Cecile \nCo-authored-by: Christopher Biscardi ","shortMessageHtmlLink":"Add 2d opaque phase with depth buffer (bevyengine#13069)"}},{"before":"5d2192800f2ba13a7a6aefbf4c56abacb72619b2","after":"39b1c7da783007578ceeb10f48cf735b98cdb27d","ref":"refs/heads/oit-upstreaming","pushedAt":"2024-08-06T23:50:51.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"IceSentry","name":"IceSentry","path":"/IceSentry","primaryAvatarUrl":"https://github.com/avatars/u/8348954?s=80&v=4"},"commit":{"message":"wip","shortMessageHtmlLink":"wip"}},{"before":"769d5374cec7d024429e1b831837c8cb695bbe08","after":"611c472505d15834cb0486e8a004fef56d5de02c","ref":"refs/heads/2d-opaque-phase","pushedAt":"2024-08-06T23:27:47.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"IceSentry","name":"IceSentry","path":"/IceSentry","primaryAvatarUrl":"https://github.com/avatars/u/8348954?s=80&v=4"},"commit":{"message":"Merge branch '2d-opaque-phase' of https://github.com/IceSentry/bevy into 2d-opaque-phase","shortMessageHtmlLink":"Merge branch '2d-opaque-phase' of https://github.com/IceSentry/bevy i…"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"Y3Vyc29yOnYyOpK7MjAyNC0wOC0yOVQxNzowMzo0MS4wMDAwMDBazwAAAASn3qOu","startCursor":"Y3Vyc29yOnYyOpK7MjAyNC0wOC0yOVQxNzowMzo0MS4wMDAwMDBazwAAAASn3qOu","endCursor":"Y3Vyc29yOnYyOpK7MjAyNC0wOC0wNlQyMzoyNzo0Ny4wMDAwMDBazwAAAASTnA6S"}},"title":"Activity · IceSentry/bevy"}