1+ # This gets just 7.5 FPS on actual ESP32S3 hardware
2+ # Probably because the double buffer copies.
3+ # With a direct buffer, it's still only 10 FPS. (and flickering buttons on black screen)
4+ # direct framebuffer + without self.canvas.invalidate() and self.canvas.center(), it's still only 13.5 FPS (and black screen)
5+
16import lvgl as lv
27from mpos import Activity , DisplayMetrics , InputManager
38
712else :
813 import mpong_x64 as mpong
914
10- class MPong (Activity ):
15+ class Breakout (Activity ):
1116
1217 hor_res = 0
1318 ver_res = 0
@@ -28,19 +33,23 @@ class MPong(Activity):
2833
2934 def onCreate (self ):
3035 self .screen = lv .obj ()
31- self .canvas = lv .canvas (self .screen )
36+ self .screen .add_flag (lv .obj .FLAG .CLICKABLE )
37+ self .screen .add_event_cb (self .touch_cb , lv .EVENT .ALL , None )
38+
3239 d = lv .display_get_default ()
3340 self .hor_res = d .get_horizontal_resolution ()
3441 self .paddle_move_step = round (self .hor_res / 16 )
3542 self .ver_res = d .get_vertical_resolution ()
43+ '''
44+ self.canvas = lv.canvas(self.screen)
3645 self.canvas.set_size(self.hor_res, self.ver_res)
3746 self.buffer = bytearray(self.hor_res * self.ver_res * 2)
3847 self.canvas.set_buffer(self.buffer, self.hor_res, self.ver_res, lv.COLOR_FORMAT.NATIVE)
3948 self.canvas.add_flag(lv.obj.FLAG.CLICKABLE)
4049 self.canvas.add_event_cb(self.touch_cb, lv.EVENT.ALL, None)
4150 self.layer = lv.layer_t()
4251 self.canvas.init_layer(self.layer)
43-
52+ '''
4453 self .leftbutton = lv .button (self .screen )
4554 self .leftbutton .align (lv .ALIGN .BOTTOM_LEFT , 0 , 0 )
4655 leftlabel = lv .label (self .leftbutton )
@@ -64,8 +73,14 @@ def onCreate(self):
6473
6574 def onResume (self , screen ):
6675 lv .log_register_print_cb (self .log_callback )
67- mpong .init (self .buffer , self .hor_res , self .ver_res )
68- self .refresh_timer = lv .timer_create (self .run_mpong , 30 , None )
76+ #mpong.init(self.buffer, self.hor_res, self.ver_res)
77+
78+ import mpos .ui
79+ mpong .init (mpos .ui .main_display ._frame_buffer1 , self .hor_res , self .ver_res ) # stays black
80+
81+ self .refresh_timer = lv .timer_create (self .run_mpong , 16 , None ) # max 1000ms/60fps = 16ms/frame
82+ #mpos.ui.task_handler.add_event_cb(self.run_mpong, mpos.ui.task_handler.TASK_HANDLER_STARTED)
83+ #mpos.ui.task_handler.add_event_cb(self.run_mpong, mpos.ui.task_handler.TASK_HANDLER_FINISHED)
6984
7085 def onPause (self , screen ):
7186 if self .refresh_timer :
@@ -110,11 +125,27 @@ def unfocus(self):
110125 else :
111126 print ("focus isn't on next or previous, leaving it..." )
112127
113-
114- def run_mpong (self , timer = None ):
128+ def run_mpong (self , arg1 = None , arg2 = None ):
115129 mpong .render ()
116- self .canvas .invalidate () # force redraw
117- self .canvas .center ()
130+ #self.play_button.set_style_opa(lv.OPA.TRANSP, lv.PART.MAIN) # works to force refresh on desktop but not esp32
131+ #self.screen.invalidate()
132+ #lv.refr_now(None)
133+ #self.canvas.invalidate() # force redraw
134+ #self.canvas.center()
135+ #self.canvas.refre
136+ #self.screen.invalidate()
137+ #self.screen.center()
138+ #mpong.render()
139+ '''
140+ import lvgl as lv
141+ area = lv.area_t()
142+ area.x1 = 0
143+ area.y1 = 0
144+ area.x2 = 170
145+ area.y2 = 170
146+ import mpos.ui
147+ mpos.ui.main_display._flush_cb(None, area, mpos.ui.main_display._frame_buffer1) # color_p should be pointer, not memoryview
148+ '''
118149
119150 def touch_cb (self , event ):
120151 event_code = event .get_code ()
0 commit comments