()
| 1782 | #[rustfmt::skip] |
| 1783 | #[test] |
| 1784 | fn test_multiple_shaders_nested() { |
| 1785 | use shaders::ShaderAsset; |
| 1786 | |
| 1787 | let shader_a = ShaderAsset::Source { |
| 1788 | file_name: "shader_a.glsl", |
| 1789 | fragment: "#version 100\nprecision lowp float;\nvoid main() { gl_FragColor = vec4(1.0); }", |
| 1790 | }; |
| 1791 | let shader_b = ShaderAsset::Source { |
| 1792 | file_name: "shader_b.glsl", |
| 1793 | fragment: "#version 100\nprecision lowp float;\nvoid main() { gl_FragColor = vec4(0.5); }", |
| 1794 | }; |
| 1795 | |
| 1796 | let mut ply = Ply::<()>::new_headless(Dimensions::new(800.0, 600.0)); |
| 1797 | ply.set_measure_text_function(|_, _| Dimensions::new(100.0, 24.0)); |
| 1798 | |
| 1799 | let mut ui = ply.begin(); |
| 1800 | |
| 1801 | // Element with two group shaders |
| 1802 | ui.element() |
| 1803 | .width(fixed!(200.0)).height(fixed!(200.0)) |
| 1804 | .background_color(0xFFFFFF) |
| 1805 | .shader(&shader_a, |s| { s.uniform("val", 1.0f32); }) |
| 1806 | .shader(&shader_b, |s| { s.uniform("val", 2.0f32); }) |
| 1807 | .children(|ui| { |
| 1808 | ui.element() |
| 1809 | .width(fixed!(50.0)).height(fixed!(50.0)) |
| 1810 | .background_color(0x0000FF) |
| 1811 | .empty(); |
| 1812 | }); |
| 1813 | |
| 1814 | let items = ui.eval(); |
| 1815 | |
| 1816 | for (i, item) in items.iter().enumerate() { |
| 1817 | println!("[{}] config: {:?}", i, item.config); |
| 1818 | } |
| 1819 | |
| 1820 | // Expected order (GroupBegin wraps before element drawing): |
| 1821 | // 0: GroupBegin(shader_b) — outermost, wraps everything |
| 1822 | // 1: GroupBegin(shader_a) — innermost, wraps element + children |
| 1823 | // 2: Rectangle (parent) |
| 1824 | // 3: Rectangle (child) |
| 1825 | // 4: GroupEnd — closes shader_a |
| 1826 | // 5: GroupEnd — closes shader_b |
| 1827 | assert!(items.len() >= 6, "Expected at least 6 items, got {}", items.len()); |
| 1828 | |
| 1829 | match &items[0].config { |
| 1830 | render_commands::RenderCommandConfig::GroupBegin { shader, .. } => { |
| 1831 | let config = shader.as_ref().unwrap(); |
| 1832 | // shader_b is outermost |
| 1833 | assert!(config.fragment.contains("0.5"), "Expected shader_b fragment"); |
| 1834 | } |
| 1835 | other => panic!("Expected GroupBegin(shader_b) for item 0, got {:?}", other), |
| 1836 | } |
| 1837 | match &items[1].config { |
| 1838 | render_commands::RenderCommandConfig::GroupBegin { shader, .. } => { |
| 1839 | let config = shader.as_ref().unwrap(); |
| 1840 | // shader_a is innermost |
| 1841 | assert!(config.fragment.contains("1.0"), "Expected shader_a fragment"); |
nothing calls this directly
no test coverage detected