This repository was archived by the owner on Jan 31, 2023. It is now read-only.
File tree 3 files changed +30
-7
lines changed
3 files changed +30
-7
lines changed Original file line number Diff line number Diff line change @@ -86,6 +86,10 @@ pub fn run(ctx: &mut Context, key_state: u8) {
86
86
}
87
87
}
88
88
89
+ pub fn get_render_buf ( ctx : & mut Context ) -> & Vec < u8 > {
90
+ ctx. renderer . get_buf ( )
91
+ }
92
+
89
93
impl Context {
90
94
pub fn new ( buf : & mut [ Data ] ) -> Self {
91
95
let cassette = parser:: parse ( buf) ;
Original file line number Diff line number Diff line change @@ -28,6 +28,10 @@ impl Renderer {
28
28
}
29
29
}
30
30
31
+ pub fn get_buf ( & self ) -> & Vec < u8 > {
32
+ & self . buf
33
+ }
34
+
31
35
fn should_pixel_hide ( & self , x : usize , y : usize , background : & BackgroundField ) -> bool {
32
36
let tile_x = x / 8 ;
33
37
let tile_y = y / 8 ;
@@ -119,4 +123,4 @@ impl Renderer {
119
123
}
120
124
}
121
125
}
122
- }
126
+ }
Original file line number Diff line number Diff line change @@ -6,6 +6,7 @@ use sdl2::event::{Event};
6
6
use sdl2:: keyboard:: { Keycode } ;
7
7
use sdl2:: pixels:: { Color } ;
8
8
use sdl2:: render:: { WindowCanvas } ;
9
+ use sdl2:: rect:: { Point } ;
9
10
10
11
use std:: time:: { Duration } ;
11
12
@@ -48,7 +49,6 @@ impl App {
48
49
49
50
pub fn run ( & mut self ) {
50
51
let mut event_pump = self . sdl_context . event_pump ( ) . unwrap ( ) ;
51
- let mut i = 0 ;
52
52
' running: loop {
53
53
for event in event_pump. poll_iter ( ) {
54
54
match event {
@@ -61,11 +61,7 @@ impl App {
61
61
}
62
62
63
63
self . update ( ) ;
64
-
65
- i = ( i + 1 ) % 255 ;
66
- self . canvas . set_draw_color ( Color :: RGB ( i, 64 , 255 - i) ) ;
67
- self . canvas . clear ( ) ;
68
-
64
+ self . render ( ) ;
69
65
self . canvas . present ( ) ;
70
66
:: std:: thread:: sleep ( Duration :: new ( 0 , 1_000_000_000u32 / 60 ) ) ;
71
67
}
@@ -81,6 +77,25 @@ impl App {
81
77
None => ( ) ,
82
78
}
83
79
}
80
+
81
+ fn render ( & mut self ) {
82
+ match & mut self . ctx {
83
+ Some ( ctx) => {
84
+ let buf = nes:: get_render_buf ( ctx) ;
85
+ for i in 0 ..HEIGHT {
86
+ for j in 0 ..WIDTH {
87
+ let base = ( ( i * WIDTH + j) * 4 ) as usize ;
88
+ let r = buf[ base + 0 ] ;
89
+ let g = buf[ base + 1 ] ;
90
+ let b = buf[ base + 2 ] ;
91
+ self . canvas . set_draw_color ( Color :: RGB ( r, g, b) ) ;
92
+ let _ = self . canvas . draw_point ( Point :: new ( j as i32 , i as i32 ) ) ;
93
+ }
94
+ }
95
+ } ,
96
+ None => ( ) ,
97
+ }
98
+ }
84
99
}
85
100
86
101
#[ no_mangle]
You can’t perform that action at this time.
0 commit comments