@@ -28,7 +28,7 @@ use state::{CullMode, RasterMethod, WindingOrder};
28
28
use target:: { Access , Target } ;
29
29
30
30
use BufferUsage ;
31
- use Device ;
31
+ use { Device , Resources } ;
32
32
use { MapAccess , ReadableMapping , WritableMapping , RWMapping , BufferHandle , PrimitiveType } ;
33
33
use self :: draw:: { Command , CommandBuffer } ;
34
34
pub use self :: info:: { Info , PlatformName , Version } ;
@@ -55,6 +55,20 @@ pub type Surface = gl::types::GLuint;
55
55
pub type Sampler = gl:: types:: GLuint ;
56
56
pub type Texture = gl:: types:: GLuint ;
57
57
58
+ #[ derive( Copy ) ]
59
+ pub enum GlResources { }
60
+
61
+ impl Resources for GlResources {
62
+ type Buffer = Buffer ;
63
+ type ArrayBuffer = ArrayBuffer ;
64
+ type Shader = Shader ;
65
+ type Program = Program ;
66
+ type FrameBuffer = FrameBuffer ;
67
+ type Surface = Surface ;
68
+ type Texture = Texture ;
69
+ type Sampler = Sampler ;
70
+ }
71
+
58
72
#[ derive( Copy , Eq , PartialEq , Debug ) ]
59
73
pub enum GlError {
60
74
NoError ,
@@ -542,17 +556,9 @@ impl GlDevice {
542
556
}
543
557
544
558
impl Device for GlDevice {
559
+ type Resources = GlResources ;
545
560
type CommandBuffer = CommandBuffer ;
546
561
547
- type Buffer = Buffer ;
548
- type ArrayBuffer = ArrayBuffer ;
549
- type Shader = Shader ;
550
- type Program = Program ;
551
- type FrameBuffer = FrameBuffer ;
552
- type Surface = Surface ;
553
- type Texture = Texture ;
554
- type Sampler = Sampler ;
555
-
556
562
fn get_capabilities < ' a > ( & ' a self ) -> & ' a :: Capabilities {
557
563
& self . caps
558
564
}
@@ -588,7 +594,7 @@ impl Device for GlDevice {
588
594
}
589
595
}
590
596
591
- fn create_buffer_raw ( & mut self , size : usize , usage : BufferUsage ) -> :: BufferHandle < GlDevice , ( ) > {
597
+ fn create_buffer_raw ( & mut self , size : usize , usage : BufferUsage ) -> :: BufferHandle < GlResources , ( ) > {
592
598
let name = self . create_buffer_internal ( ) ;
593
599
let info = :: BufferInfo {
594
600
usage : usage,
@@ -598,7 +604,7 @@ impl Device for GlDevice {
598
604
:: BufferHandle :: from_raw ( :: Handle ( name, info) )
599
605
}
600
606
601
- fn create_buffer_static_raw ( & mut self , data : & [ u8 ] ) -> :: BufferHandle < GlDevice , ( ) > {
607
+ fn create_buffer_static_raw ( & mut self , data : & [ u8 ] ) -> :: BufferHandle < GlResources , ( ) > {
602
608
let name = self . create_buffer_internal ( ) ;
603
609
604
610
let info = :: BufferInfo {
@@ -610,7 +616,7 @@ impl Device for GlDevice {
610
616
:: BufferHandle :: from_raw ( :: Handle ( name, info) )
611
617
}
612
618
613
- fn create_array_buffer ( & mut self ) -> Result < :: ArrayBufferHandle < GlDevice > , ( ) > {
619
+ fn create_array_buffer ( & mut self ) -> Result < :: ArrayBufferHandle < GlResources > , ( ) > {
614
620
if self . caps . array_buffer_supported {
615
621
let mut name = 0 as ArrayBuffer ;
616
622
unsafe {
@@ -625,7 +631,7 @@ impl Device for GlDevice {
625
631
}
626
632
627
633
fn create_shader ( & mut self , stage : :: shade:: Stage , code : & [ u8 ] )
628
- -> Result < :: ShaderHandle < GlDevice > , :: shade:: CreateShaderError > {
634
+ -> Result < :: ShaderHandle < GlResources > , :: shade:: CreateShaderError > {
629
635
let ( name, info) = shade:: create_shader ( & self . gl , stage, code) ;
630
636
info. map ( |info| {
631
637
let level = if name. is_err ( ) { LogLevel :: Error } else { LogLevel :: Warn } ;
@@ -634,7 +640,7 @@ impl Device for GlDevice {
634
640
name. map ( |sh| :: Handle ( sh, stage) )
635
641
}
636
642
637
- fn create_program ( & mut self , shaders : & [ :: ShaderHandle < GlDevice > ] , targets : Option < & [ & str ] > ) -> Result < :: ProgramHandle < GlDevice > , ( ) > {
643
+ fn create_program ( & mut self , shaders : & [ :: ShaderHandle < GlResources > ] , targets : Option < & [ & str ] > ) -> Result < :: ProgramHandle < GlResources > , ( ) > {
638
644
let ( prog, log) = shade:: create_program ( & self . gl , & self . caps , shaders, targets) ;
639
645
log. map ( |log| {
640
646
let level = if prog. is_err ( ) { LogLevel :: Error } else { LogLevel :: Warn } ;
@@ -643,7 +649,7 @@ impl Device for GlDevice {
643
649
prog
644
650
}
645
651
646
- fn create_frame_buffer ( & mut self ) -> :: FrameBufferHandle < GlDevice > {
652
+ fn create_frame_buffer ( & mut self ) -> :: FrameBufferHandle < GlResources > {
647
653
if !self . caps . render_targets_supported {
648
654
panic ! ( "No framebuffer objects, can't make a new one!" ) ;
649
655
}
@@ -657,12 +663,12 @@ impl Device for GlDevice {
657
663
}
658
664
659
665
fn create_surface ( & mut self , info : :: tex:: SurfaceInfo ) ->
660
- Result < :: SurfaceHandle < GlDevice > , :: tex:: SurfaceError > {
666
+ Result < :: SurfaceHandle < GlResources > , :: tex:: SurfaceError > {
661
667
tex:: make_surface ( & self . gl , & info) . map ( |suf| :: Handle ( suf, info) )
662
668
}
663
669
664
670
fn create_texture ( & mut self , info : :: tex:: TextureInfo ) ->
665
- Result < :: TextureHandle < GlDevice > , :: tex:: TextureError > {
671
+ Result < :: TextureHandle < GlResources > , :: tex:: TextureError > {
666
672
if info. width == 0 || info. height == 0 || info. levels == 0 {
667
673
return Err ( :: tex:: TextureError :: InvalidTextureInfo ( info) )
668
674
}
@@ -675,7 +681,7 @@ impl Device for GlDevice {
675
681
name. map ( |tex| :: Handle ( tex, info) )
676
682
}
677
683
678
- fn create_sampler ( & mut self , info : :: tex:: SamplerInfo ) -> :: SamplerHandle < GlDevice > {
684
+ fn create_sampler ( & mut self , info : :: tex:: SamplerInfo ) -> :: SamplerHandle < GlResources > {
679
685
let sam = if self . caps . sampler_objects_supported {
680
686
tex:: make_sampler ( & self . gl , & info)
681
687
} else {
@@ -684,61 +690,61 @@ impl Device for GlDevice {
684
690
:: Handle ( sam, info)
685
691
}
686
692
687
- fn delete_buffer_raw ( & mut self , handle : :: BufferHandle < GlDevice , ( ) > ) {
693
+ fn delete_buffer_raw ( & mut self , handle : :: BufferHandle < GlResources , ( ) > ) {
688
694
let name = handle. get_name ( ) ;
689
695
unsafe {
690
696
self . gl . DeleteBuffers ( 1 , & name) ;
691
697
}
692
698
}
693
699
694
- fn delete_shader ( & mut self , handle : :: ShaderHandle < GlDevice > ) {
700
+ fn delete_shader ( & mut self , handle : :: ShaderHandle < GlResources > ) {
695
701
unsafe { self . gl . DeleteShader ( handle. get_name ( ) ) } ;
696
702
}
697
703
698
- fn delete_program ( & mut self , handle : :: ProgramHandle < GlDevice > ) {
704
+ fn delete_program ( & mut self , handle : :: ProgramHandle < GlResources > ) {
699
705
unsafe { self . gl . DeleteProgram ( handle. get_name ( ) ) } ;
700
706
}
701
707
702
- fn delete_surface ( & mut self , handle : :: SurfaceHandle < GlDevice > ) {
708
+ fn delete_surface ( & mut self , handle : :: SurfaceHandle < GlResources > ) {
703
709
let name = handle. get_name ( ) ;
704
710
unsafe {
705
711
self . gl . DeleteRenderbuffers ( 1 , & name) ;
706
712
}
707
713
}
708
714
709
- fn delete_texture ( & mut self , handle : :: TextureHandle < GlDevice > ) {
715
+ fn delete_texture ( & mut self , handle : :: TextureHandle < GlResources > ) {
710
716
let name = handle. get_name ( ) ;
711
717
unsafe {
712
718
self . gl . DeleteTextures ( 1 , & name) ;
713
719
}
714
720
}
715
721
716
- fn delete_sampler ( & mut self , handle : :: SamplerHandle < GlDevice > ) {
722
+ fn delete_sampler ( & mut self , handle : :: SamplerHandle < GlResources > ) {
717
723
let name = handle. get_name ( ) ;
718
724
unsafe {
719
725
self . gl . DeleteSamplers ( 1 , & name) ;
720
726
}
721
727
}
722
728
723
- fn update_buffer_raw ( & mut self , buffer : :: BufferHandle < GlDevice , ( ) > , data : & [ u8 ] ,
729
+ fn update_buffer_raw ( & mut self , buffer : :: BufferHandle < GlResources , ( ) > , data : & [ u8 ] ,
724
730
offset_bytes : usize ) {
725
731
debug_assert ! ( offset_bytes + data. len( ) <= buffer. get_info( ) . size) ;
726
732
self . update_sub_buffer ( buffer. get_name ( ) , data. as_ptr ( ) , data. len ( ) ,
727
733
offset_bytes)
728
734
}
729
735
730
- fn update_texture_raw ( & mut self , texture : & :: TextureHandle < GlDevice > ,
736
+ fn update_texture_raw ( & mut self , texture : & :: TextureHandle < GlResources > ,
731
737
img : & :: tex:: ImageInfo , data : & [ u8 ] )
732
738
-> Result < ( ) , :: tex:: TextureError > {
733
739
tex:: update_texture ( & self . gl , texture. get_info ( ) . kind ,
734
740
texture. get_name ( ) , img, data. as_ptr ( ) , data. len ( ) )
735
741
}
736
742
737
- fn generate_mipmap ( & mut self , texture : & :: TextureHandle < GlDevice > ) {
743
+ fn generate_mipmap ( & mut self , texture : & :: TextureHandle < GlResources > ) {
738
744
tex:: generate_mipmap ( & self . gl , texture. get_info ( ) . kind , texture. get_name ( ) ) ;
739
745
}
740
746
741
- fn map_buffer_raw ( & mut self , buf : BufferHandle < GlDevice , ( ) > , access : MapAccess ) -> RawMapping {
747
+ fn map_buffer_raw ( & mut self , buf : BufferHandle < GlResources , ( ) > , access : MapAccess ) -> RawMapping {
742
748
let ptr;
743
749
unsafe { self . gl . BindBuffer ( gl:: ARRAY_BUFFER , buf. get_name ( ) ) } ;
744
750
ptr = unsafe { self . gl . MapBuffer ( gl:: ARRAY_BUFFER , match access {
@@ -756,7 +762,7 @@ impl Device for GlDevice {
756
762
unsafe { self . gl . UnmapBuffer ( map. target ) } ;
757
763
}
758
764
759
- fn map_buffer_readable < T : Copy > ( & mut self , buf : BufferHandle < GlDevice , T > ) -> ReadableMapping < T , GlDevice > {
765
+ fn map_buffer_readable < T : Copy > ( & mut self , buf : BufferHandle < GlResources , T > ) -> ReadableMapping < T , GlDevice > {
760
766
let map = self . map_buffer_raw ( buf. cast ( ) , MapAccess :: Readable ) ;
761
767
ReadableMapping {
762
768
raw : map,
@@ -765,7 +771,7 @@ impl Device for GlDevice {
765
771
}
766
772
}
767
773
768
- fn map_buffer_writable < T : Copy > ( & mut self , buf : BufferHandle < GlDevice , T > ) -> WritableMapping < T , GlDevice > {
774
+ fn map_buffer_writable < T : Copy > ( & mut self , buf : BufferHandle < GlResources , T > ) -> WritableMapping < T , GlDevice > {
769
775
let map = self . map_buffer_raw ( buf. cast ( ) , MapAccess :: Writable ) ;
770
776
WritableMapping {
771
777
raw : map,
@@ -774,7 +780,7 @@ impl Device for GlDevice {
774
780
}
775
781
}
776
782
777
- fn map_buffer_rw < T : Copy > ( & mut self , buf : BufferHandle < GlDevice , T > ) -> RWMapping < T , GlDevice > {
783
+ fn map_buffer_rw < T : Copy > ( & mut self , buf : BufferHandle < GlResources , T > ) -> RWMapping < T , GlDevice > {
778
784
let map = self . map_buffer_raw ( buf. cast ( ) , MapAccess :: RW ) ;
779
785
RWMapping {
780
786
raw : map,
0 commit comments