MCPcopy Create free account
hub / github.com/TheRedDeveloper/ply-engine / test_multiple_shaders_nested

Function test_multiple_shaders_nested

src/lib.rs:1784–1861  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

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");

Callers

nothing calls this directly

Calls 11

beginMethod · 0.80
childrenMethod · 0.80
shaderMethod · 0.80
background_colorMethod · 0.80
heightMethod · 0.80
elementMethod · 0.80
uniformMethod · 0.80
evalMethod · 0.80
widthMethod · 0.45
emptyMethod · 0.45

Tested by

no test coverage detected