@@ -80,29 +80,6 @@ impl GlError {
80
80
}
81
81
}
82
82
83
- static RESET_CB : & ' static [ Command ] = & [
84
- Command :: BindProgram ( 0 ) ,
85
- Command :: BindArrayBuffer ( 0 ) ,
86
- //BindAttribute
87
- Command :: BindIndex ( 0 ) ,
88
- Command :: BindFrameBuffer ( Access :: Draw , 0 ) ,
89
- Command :: BindFrameBuffer ( Access :: Read , 0 ) ,
90
- //UnbindTarget
91
- //BindUniformBlock
92
- //BindUniform
93
- //BindTexture
94
- Command :: SetPrimitiveState ( :: state:: Primitive {
95
- front_face : WindingOrder :: CounterClockwise ,
96
- method : RasterMethod :: Fill ( CullMode :: Back ) ,
97
- offset : None ,
98
- } ) ,
99
- Command :: SetViewport ( :: target:: Rect { x : 0 , y : 0 , w : 0 , h : 0 } ) ,
100
- Command :: SetScissor ( None ) ,
101
- Command :: SetDepthStencilState ( None , None , CullMode :: Nothing ) ,
102
- Command :: SetBlendState ( None ) ,
103
- Command :: SetColorMask ( :: state:: MASK_ALL ) ,
104
- ] ;
105
-
106
83
fn primitive_to_gl ( prim_type : :: PrimitiveType ) -> gl:: types:: GLenum {
107
84
match prim_type {
108
85
PrimitiveType :: Point => gl:: POINTS ,
@@ -582,9 +559,26 @@ impl Device for GlDevice {
582
559
583
560
fn reset_state ( & mut self ) {
584
561
let data = :: draw:: DataBuffer :: new ( ) ;
585
- for com in RESET_CB . iter ( ) {
586
- self . process ( com, & data) ;
587
- }
562
+ self . process ( & Command :: BindProgram ( 0 ) , & data) ;
563
+ self . process ( & Command :: BindArrayBuffer ( 0 ) , & data) ;
564
+ // self.process(&command::BindAttribute, &data);
565
+ self . process ( & Command :: BindIndex ( 0 ) , & data) ;
566
+ self . process ( & Command :: BindFrameBuffer ( Access :: Draw , 0 ) , & data) ;
567
+ self . process ( & Command :: BindFrameBuffer ( Access :: Read , 0 ) , & data) ;
568
+ // self.process(&command::UnbindTarget, &data);
569
+ // self.process(&command::BindUniformBlock, &data);
570
+ // self.process(&command::BindUniform, &data);
571
+ // self.process(&command::BindTexture, &data);
572
+ self . process ( & Command :: SetPrimitiveState ( :: state:: Primitive {
573
+ front_face : WindingOrder :: CounterClockwise ,
574
+ method : RasterMethod :: Fill ( CullMode :: Back ) ,
575
+ offset : None ,
576
+ } ) , & data) ;
577
+ self . process ( & Command :: SetViewport ( :: target:: Rect { x : 0 , y : 0 , w : 0 , h : 0 } ) , & data) ;
578
+ self . process ( & Command :: SetScissor ( None ) , & data) ;
579
+ self . process ( & Command :: SetDepthStencilState ( None , None , CullMode :: Nothing ) , & data) ;
580
+ self . process ( & Command :: SetBlendState ( None ) , & data) ;
581
+ self . process ( & Command :: SetColorMask ( :: state:: MASK_ALL ) , & data) ;
588
582
}
589
583
590
584
fn submit ( & mut self , ( cb, db) : ( & CommandBuffer , & :: draw:: DataBuffer ) ) {
@@ -594,7 +588,7 @@ impl Device for GlDevice {
594
588
}
595
589
}
596
590
597
- fn create_buffer_raw ( & mut self , size : usize , usage : BufferUsage ) -> :: BufferHandle < ( ) > {
591
+ fn create_buffer_raw ( & mut self , size : usize , usage : BufferUsage ) -> :: BufferHandle < GlDevice , ( ) > {
598
592
let name = self . create_buffer_internal ( ) ;
599
593
let info = :: BufferInfo {
600
594
usage : usage,
@@ -604,7 +598,7 @@ impl Device for GlDevice {
604
598
:: BufferHandle :: from_raw ( :: Handle ( name, info) )
605
599
}
606
600
607
- fn create_buffer_static_raw ( & mut self , data : & [ u8 ] ) -> :: BufferHandle < ( ) > {
601
+ fn create_buffer_static_raw ( & mut self , data : & [ u8 ] ) -> :: BufferHandle < GlDevice , ( ) > {
608
602
let name = self . create_buffer_internal ( ) ;
609
603
610
604
let info = :: BufferInfo {
@@ -616,7 +610,7 @@ impl Device for GlDevice {
616
610
:: BufferHandle :: from_raw ( :: Handle ( name, info) )
617
611
}
618
612
619
- fn create_array_buffer ( & mut self ) -> Result < :: ArrayBufferHandle , ( ) > {
613
+ fn create_array_buffer ( & mut self ) -> Result < :: ArrayBufferHandle < GlDevice > , ( ) > {
620
614
if self . caps . array_buffer_supported {
621
615
let mut name = 0 as ArrayBuffer ;
622
616
unsafe {
@@ -631,7 +625,7 @@ impl Device for GlDevice {
631
625
}
632
626
633
627
fn create_shader ( & mut self , stage : :: shade:: Stage , code : & [ u8 ] )
634
- -> Result < :: ShaderHandle , :: shade:: CreateShaderError > {
628
+ -> Result < :: ShaderHandle < GlDevice > , :: shade:: CreateShaderError > {
635
629
let ( name, info) = shade:: create_shader ( & self . gl , stage, code) ;
636
630
info. map ( |info| {
637
631
let level = if name. is_err ( ) { LogLevel :: Error } else { LogLevel :: Warn } ;
@@ -640,7 +634,7 @@ impl Device for GlDevice {
640
634
name. map ( |sh| :: Handle ( sh, stage) )
641
635
}
642
636
643
- fn create_program ( & mut self , shaders : & [ :: ShaderHandle ] , targets : Option < & [ & str ] > ) -> Result < :: ProgramHandle , ( ) > {
637
+ fn create_program ( & mut self , shaders : & [ :: ShaderHandle < GlDevice > ] , targets : Option < & [ & str ] > ) -> Result < :: ProgramHandle < GlDevice > , ( ) > {
644
638
let ( prog, log) = shade:: create_program ( & self . gl , & self . caps , shaders, targets) ;
645
639
log. map ( |log| {
646
640
let level = if prog. is_err ( ) { LogLevel :: Error } else { LogLevel :: Warn } ;
@@ -649,7 +643,7 @@ impl Device for GlDevice {
649
643
prog
650
644
}
651
645
652
- fn create_frame_buffer ( & mut self ) -> :: FrameBufferHandle {
646
+ fn create_frame_buffer ( & mut self ) -> :: FrameBufferHandle < GlDevice > {
653
647
if !self . caps . render_targets_supported {
654
648
panic ! ( "No framebuffer objects, can't make a new one!" ) ;
655
649
}
@@ -663,12 +657,12 @@ impl Device for GlDevice {
663
657
}
664
658
665
659
fn create_surface ( & mut self , info : :: tex:: SurfaceInfo ) ->
666
- Result < :: SurfaceHandle , :: tex:: SurfaceError > {
660
+ Result < :: SurfaceHandle < GlDevice > , :: tex:: SurfaceError > {
667
661
tex:: make_surface ( & self . gl , & info) . map ( |suf| :: Handle ( suf, info) )
668
662
}
669
663
670
664
fn create_texture ( & mut self , info : :: tex:: TextureInfo ) ->
671
- Result < :: TextureHandle , :: tex:: TextureError > {
665
+ Result < :: TextureHandle < GlDevice > , :: tex:: TextureError > {
672
666
if info. width == 0 || info. height == 0 || info. levels == 0 {
673
667
return Err ( :: tex:: TextureError :: InvalidTextureInfo ( info) )
674
668
}
@@ -681,7 +675,7 @@ impl Device for GlDevice {
681
675
name. map ( |tex| :: Handle ( tex, info) )
682
676
}
683
677
684
- fn create_sampler ( & mut self , info : :: tex:: SamplerInfo ) -> :: SamplerHandle {
678
+ fn create_sampler ( & mut self , info : :: tex:: SamplerInfo ) -> :: SamplerHandle < GlDevice > {
685
679
let sam = if self . caps . sampler_objects_supported {
686
680
tex:: make_sampler ( & self . gl , & info)
687
681
} else {
@@ -690,61 +684,61 @@ impl Device for GlDevice {
690
684
:: Handle ( sam, info)
691
685
}
692
686
693
- fn delete_buffer_raw ( & mut self , handle : :: BufferHandle < ( ) > ) {
687
+ fn delete_buffer_raw ( & mut self , handle : :: BufferHandle < GlDevice , ( ) > ) {
694
688
let name = handle. get_name ( ) ;
695
689
unsafe {
696
690
self . gl . DeleteBuffers ( 1 , & name) ;
697
691
}
698
692
}
699
693
700
- fn delete_shader ( & mut self , handle : :: ShaderHandle ) {
694
+ fn delete_shader ( & mut self , handle : :: ShaderHandle < GlDevice > ) {
701
695
unsafe { self . gl . DeleteShader ( handle. get_name ( ) ) } ;
702
696
}
703
697
704
- fn delete_program ( & mut self , handle : :: ProgramHandle ) {
698
+ fn delete_program ( & mut self , handle : :: ProgramHandle < GlDevice > ) {
705
699
unsafe { self . gl . DeleteProgram ( handle. get_name ( ) ) } ;
706
700
}
707
701
708
- fn delete_surface ( & mut self , handle : :: SurfaceHandle ) {
702
+ fn delete_surface ( & mut self , handle : :: SurfaceHandle < GlDevice > ) {
709
703
let name = handle. get_name ( ) ;
710
704
unsafe {
711
705
self . gl . DeleteRenderbuffers ( 1 , & name) ;
712
706
}
713
707
}
714
708
715
- fn delete_texture ( & mut self , handle : :: TextureHandle ) {
709
+ fn delete_texture ( & mut self , handle : :: TextureHandle < GlDevice > ) {
716
710
let name = handle. get_name ( ) ;
717
711
unsafe {
718
712
self . gl . DeleteTextures ( 1 , & name) ;
719
713
}
720
714
}
721
715
722
- fn delete_sampler ( & mut self , handle : :: SamplerHandle ) {
716
+ fn delete_sampler ( & mut self , handle : :: SamplerHandle < GlDevice > ) {
723
717
let name = handle. get_name ( ) ;
724
718
unsafe {
725
719
self . gl . DeleteSamplers ( 1 , & name) ;
726
720
}
727
721
}
728
722
729
- fn update_buffer_raw ( & mut self , buffer : :: BufferHandle < ( ) > , data : & [ u8 ] ,
723
+ fn update_buffer_raw ( & mut self , buffer : :: BufferHandle < GlDevice , ( ) > , data : & [ u8 ] ,
730
724
offset_bytes : usize ) {
731
725
debug_assert ! ( offset_bytes + data. len( ) <= buffer. get_info( ) . size) ;
732
726
self . update_sub_buffer ( buffer. get_name ( ) , data. as_ptr ( ) , data. len ( ) ,
733
727
offset_bytes)
734
728
}
735
729
736
- fn update_texture_raw ( & mut self , texture : & :: TextureHandle ,
730
+ fn update_texture_raw ( & mut self , texture : & :: TextureHandle < GlDevice > ,
737
731
img : & :: tex:: ImageInfo , data : & [ u8 ] )
738
732
-> Result < ( ) , :: tex:: TextureError > {
739
733
tex:: update_texture ( & self . gl , texture. get_info ( ) . kind ,
740
734
texture. get_name ( ) , img, data. as_ptr ( ) , data. len ( ) )
741
735
}
742
736
743
- fn generate_mipmap ( & mut self , texture : & :: TextureHandle ) {
737
+ fn generate_mipmap ( & mut self , texture : & :: TextureHandle < GlDevice > ) {
744
738
tex:: generate_mipmap ( & self . gl , texture. get_info ( ) . kind , texture. get_name ( ) ) ;
745
739
}
746
740
747
- fn map_buffer_raw ( & mut self , buf : BufferHandle < ( ) > , access : MapAccess ) -> RawMapping {
741
+ fn map_buffer_raw ( & mut self , buf : BufferHandle < GlDevice , ( ) > , access : MapAccess ) -> RawMapping {
748
742
let ptr;
749
743
unsafe { self . gl . BindBuffer ( gl:: ARRAY_BUFFER , buf. get_name ( ) ) } ;
750
744
ptr = unsafe { self . gl . MapBuffer ( gl:: ARRAY_BUFFER , match access {
@@ -762,7 +756,7 @@ impl Device for GlDevice {
762
756
unsafe { self . gl . UnmapBuffer ( map. target ) } ;
763
757
}
764
758
765
- fn map_buffer_readable < T : Copy > ( & mut self , buf : BufferHandle < T > ) -> ReadableMapping < T , GlDevice > {
759
+ fn map_buffer_readable < T : Copy > ( & mut self , buf : BufferHandle < GlDevice , T > ) -> ReadableMapping < T , GlDevice > {
766
760
let map = self . map_buffer_raw ( buf. cast ( ) , MapAccess :: Readable ) ;
767
761
ReadableMapping {
768
762
raw : map,
@@ -771,7 +765,7 @@ impl Device for GlDevice {
771
765
}
772
766
}
773
767
774
- fn map_buffer_writable < T : Copy > ( & mut self , buf : BufferHandle < T > ) -> WritableMapping < T , GlDevice > {
768
+ fn map_buffer_writable < T : Copy > ( & mut self , buf : BufferHandle < GlDevice , T > ) -> WritableMapping < T , GlDevice > {
775
769
let map = self . map_buffer_raw ( buf. cast ( ) , MapAccess :: Writable ) ;
776
770
WritableMapping {
777
771
raw : map,
@@ -780,7 +774,7 @@ impl Device for GlDevice {
780
774
}
781
775
}
782
776
783
- fn map_buffer_rw < T : Copy > ( & mut self , buf : BufferHandle < T > ) -> RWMapping < T , GlDevice > {
777
+ fn map_buffer_rw < T : Copy > ( & mut self , buf : BufferHandle < GlDevice , T > ) -> RWMapping < T , GlDevice > {
784
778
let map = self . map_buffer_raw ( buf. cast ( ) , MapAccess :: RW ) ;
785
779
RWMapping {
786
780
raw : map,
0 commit comments