use std::marker::PhantomData; use crate::{ backend::renderer::{gles::GlesRenderer, ImportDma, ImportMem, Renderer, Texture}, utils::{Buffer, Physical, Point, Rectangle, Scale}, }; use super::{CommitCounter, Element, Id, RenderElement, Wrap}; render_elements! { ImportMemTest where R: ImportMem; Memory=ImportMemRenderElement, } render_elements! { ImportMemTest2<=GlesRenderer>; Memory=ImportMemRenderElement, } render_elements! { ImportMemTest3<'a, R, T> where R: ImportMem, T: Texture; Memory=ImportMemRenderElement, Custom=&'a T, } render_elements! { ImportMemTest4 where R: ImportMem + ImportDma; Memory=ImportMemRenderElement, } render_elements! { ImportMemTest5<'a, R, T> where R: ImportMem + ImportDma, T: Texture; Memory=ImportMemRenderElement, Custom=&'a T, } render_elements! { TextureIdTest where R: ImportMem, R::TextureId: Clone; Memory=ImportMemRenderElement, } render_elements! { TextureIdTest1 where R: ImportMem, R::TextureId: 'static; Memory=ImportMemRenderElement, } render_elements! { TextureIdTest2<'a, R, C> where R: ImportMem, R::TextureId: 'a; Memory=ImportMemRenderElement, Custom=&'a C, } render_elements! { TextureIdTest3<'a, R, C> where R: ImportMem, R::TextureId: Clone + 'a; Memory=ImportMemRenderElement, Custom=&'a C, } render_elements! { Test<='a, GlesRenderer>; Surface=TestRenderElement<'a, GlesRenderer> } render_elements! { Test2<=GlesRenderer>; Surface=TestRenderElement2 } render_elements! { Test3<='a, GlesRenderer, C>; Surface=TestRenderElement<'a, GlesRenderer>, Custom=&'a C, } render_elements! { Test4<=GlesRenderer, C>; Surface=TestRenderElement2, Custom=C } render_elements! { TestG<'a, R>; Surface=TestRenderElement<'a, R> } render_elements! { TestG2; Surface=TestRenderElement2 } render_elements! { TestG3<'a, R, C>; Surface=TestRenderElement<'a, R>, Custom=&'a C, } render_elements! { TestG4; Surface=TestRenderElement2, Custom=Wrap } render_elements! { TestG5; What=Empty, } render_elements! { TestG6<'a, R, C>; Surface=TestRenderElement<'a, R>, Custom=&'a C, Custom2=Wrap, } render_elements! { TestG7<'a, R, C1, C2>; Surface=TestRenderElement<'a, R>, Custom=Wrap, Custom2=Wrap, } struct ImportMemRenderElement {} impl Element for ImportMemRenderElement { fn id(&self) -> &Id { todo!() } fn current_commit(&self) -> CommitCounter { todo!() } fn geometry(&self, _scale: Scale) -> Rectangle { todo!() } fn src(&self) -> Rectangle { todo!() } } impl RenderElement for ImportMemRenderElement where R: Renderer + ImportMem, { fn draw( &self, _frame: &mut R::Frame<'_, '_>, _src: Rectangle, _dst: Rectangle, _damage: &[Rectangle], _opaque_regions: &[Rectangle], ) -> Result<(), R::Error> { todo!() } } impl Element for Empty { fn id(&self) -> &Id { todo!() } fn current_commit(&self) -> CommitCounter { todo!() } fn location(&self, _scale: Scale) -> Point { todo!() } fn src(&self) -> Rectangle { todo!() } fn geometry(&self, _scale: Scale) -> Rectangle { todo!() } } impl RenderElement for Empty where R: Renderer, { fn draw( &self, _frame: &mut R::Frame<'_, '_>, _src: Rectangle, _dst: Rectangle, _damage: &[Rectangle], _opaque_regions: &[Rectangle], ) -> Result<(), R::Error> { todo!() } } struct Empty; struct TestRenderElement2 { _phantom: PhantomData, } impl Element for TestRenderElement2 where R: Renderer, { fn id(&self) -> &Id { todo!() } fn current_commit(&self) -> CommitCounter { todo!() } fn location(&self, _scale: Scale) -> Point { todo!() } fn src(&self) -> Rectangle { todo!() } fn geometry(&self, _scale: Scale) -> Rectangle { todo!() } } impl RenderElement for TestRenderElement2 where R: Renderer, { fn draw( &self, _frame: &mut R::Frame<'_, '_>, _src: Rectangle, _dst: Rectangle, _damage: &[Rectangle], _opaque_regions: &[Rectangle], ) -> Result<(), R::Error> { todo!() } } struct TestRenderElement<'a, R> { _test: &'a usize, _phantom: PhantomData, } impl Element for TestRenderElement<'_, R> where R: Renderer, { fn id(&self) -> &Id { todo!() } fn current_commit(&self) -> CommitCounter { todo!() } fn location(&self, _scale: Scale) -> Point { todo!() } fn src(&self) -> Rectangle { todo!() } fn geometry(&self, _scale: Scale) -> Rectangle { todo!() } } impl RenderElement for TestRenderElement<'_, R> where R: Renderer, { fn draw( &self, _frame: &mut R::Frame<'_, '_>, _src: Rectangle, _dst: Rectangle, _damage: &[Rectangle], _opaque_regions: &[Rectangle], ) -> Result<(), R::Error> { todo!() } }