рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рд▓рд┐рдЦреА рдЧрдИ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рд╢рд╛рдпрдж рдХреЛрдИ рдХрд╛рдо рдЖрдПрдЧрд╛ред
рдпрд╣ рд▓рд┐рдирдХреНрд╕ рдлреНрд░реЗрдо рдмрдлрд░ / dev / fb0 рдореЗрдВ рд╕реАрдзреЗ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ Rust 2D рдлреНрд░реЗрдорд╡рд░реНрдХ рд╣реИред
рдХрд╛рд░реНрдп рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рдкрд░ рд╕реНрдХреНрд░реАрди / рдЯреАрд╡реА рдкрд░ рд╕рд░рд▓ 2 рдбреА рджреГрд╢реНрдпреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдерд╛ред рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ YoctoProject рдХрд╕реНрдЯрдо рд╣реЗрдбрд▓реЗрд╕ рд▓рд┐рдирдХреНрд╕ рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдХреЗ рдирд┐рдпрдВрддреНрд░рдг рдореЗрдВ рдЪрд▓рддреА рд╣реИред рд╡рд┐рдВрдбреЛ рдкреНрд░рдмрдВрдзрдХ рдЕрдиреБрдкрд▓рдмреНрдз рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ OpenGL рд╣реИрдВред рдХреЗрд╡рд▓ рдлрд╝реНрд░реЗрдо рдмрдлрд╝рд░ рд░рд╣рддрд╛ рд╣реИред
рдлрд╝реНрд░реЗрдо рдмрдлрд░ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЪреВрдВрдХрд┐ рдореИрдВ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рдХреЗ рд▓рд┐рдП рдЧреЛрд▓рд╛рдВрдЧ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЧреЛ рдкрд░ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдореБрдЭреЗ рдЬрд▓реНрджреА рд╣реА рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдЧреЛ рдореЗрд░реЗ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИред рд╡рд╣ рдЙрдЪрд┐рдд рд╕рдордп рдореЗрдВ рд╕реНрдореГрддрд┐ рдХреЗ рд╕рд╛рде рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рд╕рдВрдЪрд╛рд▓рди рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛ред
рдлрд┐рд░ рдореИрдВрдиреЗ рд░рд╕реНрдЯ рдкрд░ рдзреНрдпрд╛рди рджрд┐рдпрд╛, рдЬрд┐рд╕рдиреЗ рдЗрд╕реА рддрд░рд╣ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдмрд╣реБрдд рддреЗрдЬреА рд╕реЗ рдХрд┐рдПред
рддреЛ, рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рд╡рд┐рдХрд╛рд╕ рд░рд╕реНрдЯ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЪреВрдБрдХрд┐ рдпрд╣ рд░рд╕реНрдЯ рдореЗрдВ рдореЗрд░рд╛ рдкрд╣рд▓рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬрд╝реНрдпрд╛рджрд╛ рдордд рдорд╛рд░реЛ, рд▓реЗрдХрд┐рди рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред
рдХрд┐рд╕реА рднреА 2 рдбреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ, рддреАрди рдореБрдЦреНрдп рдЗрдХрд╛рдЗрдпрд╛рдБ рд╣реИрдВ: рджреГрд╢реНрдп, рдиреЛрдбреНрд╕ рдФрд░ рд╕реНрдкреНрд░рд╛рдЗрдЯреНрд╕ред
рдПрдХ рджреГрд╢реНрдп рджреГрд╢реНрдп рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдВрдЯреЗрдирд░ рд╣реИред рдПрдХ рдиреЛрдб рдПрдХ рдЖрднрд╛рд╕реА рд╡рд╕реНрддреБ рд╣реИ рдЬреЛ рдХреБрдЫ рдЧреБрдгреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдкрдиреНрди рд╣реЛрддреА рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рд╕реНрдерд╛рди, рдЖрдХрд╛рд░, рдЖрджрд┐ред рдиреЛрдбреНрд╕ рдХреЛ рдирд╕реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдкреНрд░рддреНрдпреЗрдХ рдиреЛрдб рдореЗрдВ рдПрдХ рджреГрд╢реНрдп рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЛрддрд╛ рд╣реИ, рддрдерд╛рдХрдерд┐рдд рд╕реНрдкреНрд░рд╛рдЗрдЯред рд╕реНрдкреНрд░рд╛рдЗрдЯ рдХрдИ рд░реВрдкреЛрдВ рдореЗрдВ рдЖрддреЗ рд╣реИрдВред RectSprite, TextureSprite, TextSprite рдЬреИрд╕реЗ рд╕реНрдкреНрд░рд╛рдЗрдЯ рдЕрдм рд╕рдорд░реНрдерд┐рдд рд╣реИрдВред
рд░реЗрдХреНрдЯрд╕реНрдкреНрд░рд╛рдЗрдЯ - рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд░рдВрдЧ рдХреА рдПрдХ рдЖрдпрддред рдмреЗрд░рдВрдЧ рд░реЗрдХреНрдЯрд╕рдкреНрд░рд╛рдЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдорддреМрд░ рдкрд░ рдЕрдиреНрдп рдмрдЪреНрдЪреЗ рдХреЗ рдиреЛрдбреНрд╕ рдХреЗ рд╕рдореВрд╣ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд░реЗрдХреНрдЯрд╕реНрдкреНрд░рд┐рдЯ XML рдЯреИрдЧ < рдмреЙрдХреНрд╕ > рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ
TextureSprite - рдПрдХ рддрд╕реНрд╡реАрд░ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд╕реНрддреБред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреЗрд╡рд▓ рдкреАрдПрдирдЬреА (RGBA) рд╕рдорд░реНрдерд┐рдд рд╣реИред TextureSprite XML рдЯреИрдЧ < image > рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ
TechSprite - рдЪрдпрдирд┐рдд рдлрд╝реЙрдиреНрдЯ рдФрд░ рдЖрдХрд╛рд░ рдореЗрдВ рдкрд╛рда рдХреА рдПрдХ рдкрдВрдХреНрддрд┐ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд╕реНрддреБред RTL рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╕рдорд░реНрдерди рд╣реИред TechSprite XML < text > рдЯреИрдЧ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ
рд╕реНрдерд╛рди рдФрд░ рдЖрдХрд╛рд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдкреНрд░рддреНрдпреЗрдХ рдиреЛрдб рдореЗрдВ рдЧреБрд░реБрддреНрд╡рд╛рдХрд░реНрд╖рдг рдФрд░ рдПрдВрдХрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рд╣реЛрддреА рд╣реИрдВред рдпрд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЕрдВрджрд░ рд╕рд╣реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд▓рд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред рдЖрдХрд╛рд░ рдФрд░ рд╕реНрдерд╛рди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рднреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдореВрд▓ рдиреЛрдб рдХреЗ рдкреНрд░рддрд┐рд╢рдд рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЖрдкрдХреЛ рд╡рд┐рднрд┐рдиреНрди рдЖрдХрд╛рд░реЛрдВ рдФрд░ рдЕрдиреБрдкрд╛рддреЛрдВ рдХреА рд╕реНрдХреНрд░реАрди рдкрд░ рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╛ рддреЛ рджреГрд╢реНрдп рдмрдирд╛рдиреЗ рдпрд╛ рджреГрд╢реНрдп рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реА рдПрдХ xml рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рд╣реИред
рдПрдХ рджреГрд╢реНрдп рдмрдирд╛рдиреЗ рдФрд░ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рддрд░реАрдХрд╛ред
let mut fb = fb2d::screen_writer_for_framebuffer("/dev/fb0")?; fb2d::set_graphics_mode(); let mut scene = fb2d::scene::Scene::new(); let background_sprite = RectSprite::new(); let background_node = Node::new_rect_node(FLOAT_RECT_FULL, background_sprite); let sprite1 = RectSprite::new(); let mut node1 = Node::new_rect_node( FloatRect { pos: FLOAT_POS_ZERO, size: FLOAT_SIZE_HALF, }, sprite1, ); node1.anchor_point = ANCHOR_POINT_TOP_LEFT; let sprite2 = TextureSprite::new_for_texture("image.png"); let mut node2 = Node::new_texture_node( FloatRect { pos: FLOAT_POS_ZERO, size: FloatSize { width: 0.7, height: 0.7, }, }, sprite2, ); node2.anchor_point = ANCHOR_POINT_CENTER; let mut sprite3 = TextSprite::new(); sprite3.text = String::from("Hello, World !!!"); sprite3.gravity = GRAVITY_CENTER; sprite3.height = 0.2; let node3 = Node::new_text_node( FloatRect { pos: FLOAT_POS_ZERO, size: FLOAT_SIZE_FULL, }, sprite3, ); scene.add_node(node2, node1.key); scene.add_node(node1, background_node.key); scene.add_node(node3, background_node.key); scene.set_root_node(background_node); scene.writer = Some(Box::new(fb)); scene.run();
- XML рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рджреГрд╢реНрдп рдмрдирд╛рдирд╛ред
<scene color="#ffa500"> <box pos="0" size="95% 95%" anchor-point="0.5 0" color="#F0C0C0C0"> <text pos="0 -40%" size="100% 10%" anchor-point="0.5 0" height="100%" text="╫й╫Ь╫Х╫Э Hello " font="Times New Roman.ttf" color="red"/> </box> <box pos="0%" size="25% 25%" anchor-point="0 1" color="olive" alpha="0.5"> <image pos="0" size="100% 100%" anchor-point="0 1" image="image1.png" /> </box> </scene>
рдПрдХ рджреГрд╢реНрдп рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдпрд╛ рдЬрд╝рд┐рдк рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рджреГрд╢реНрдпред Xml рд╣реИред рдЖрд╢реНрд░рд┐рдд рдЫрд╡рд┐ рдФрд░ рдлрд╝реЙрдиреНрдЯ рдлрд╝рд╛рдЗрд▓реЗрдВ рдЗрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдпрд╛ рдЬрд╝рд┐рдк рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
match fb2d::scene::Scene::new_from_bundle("assets/scene1") { Ok(mut scene) => { let mut fb = fb2d::screen_writer_for_framebuffer("/dev/fb0")?; fb2d::set_graphics_mode(); scene.writer = Some(Box::new(fb)); scene.run(); } Err(e) => eprintln!("Error: {:?}", e), }
рдкрд░рд┐рдгрд╛рдореА рдЫрд╡рд┐ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдгред
рдбреАрдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП PNG рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдХ рдлрд╝реНрд░реЗрдо рд░реЗрдВрдбрд░ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред

рдЧрд┐рдЯрд╣рдм рднрдВрдбрд╛рд░ред
рдХрд┐рд╕реА рднреА рдорджрдж (рдпреЛрдЧрджрд╛рди) рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХреА рд╣реИред рдкреНрд░рддрд┐рдкрд╛рджрди рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдХрд░рдиреЗ рдФрд░ рдПрдиреАрдореЗрд╢рди рдЬреИрд╕реА рдирдИ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХрд╛рдо рд╣реИред