Просмотр исходного кода

app/gfx: RenderApiSync force update if display changes

jkds 6 месяцев назад
Родитель
Сommit
4082bc4b4c
3 измененных файлов с 21 добавлено и 8 удалено
  1. 1 1
      bin/app/Makefile
  2. 14 2
      bin/app/src/gfx/api.rs
  3. 6 5
      bin/app/src/gfx/mod.rs

+ 1 - 1
bin/app/Makefile

@@ -22,7 +22,7 @@ DEBUG_FEATURES = --features=enable-filelog,enable-plugins
 
 
 #DEV_FEATURES = --features=enable-filelog,enable-netdebug,emulate-android
 #DEV_FEATURES = --features=enable-filelog,enable-netdebug,emulate-android
 #DEV_FEATURES = --features=enable-filelog,enable-netdebug,enable-plugins
 #DEV_FEATURES = --features=enable-filelog,enable-netdebug,enable-plugins
-DEV_FEATURES = --features=schema-app,enable-plugins
+DEV_FEATURES = --features=schema-app
 
 
 default: build-release
 default: build-release
 	./darkfi-app
 	./darkfi-app

+ 14 - 2
bin/app/src/gfx/api.rs

@@ -330,11 +330,12 @@ impl Default for GraphicsMethod {
 
 
 pub struct RenderApiSync<'a> {
 pub struct RenderApiSync<'a> {
     stage: &'a mut Stage,
     stage: &'a mut Stage,
+    is_dirty: bool,
 }
 }
 
 
 impl<'a> RenderApiSync<'a> {
 impl<'a> RenderApiSync<'a> {
     pub fn new(stage: &'a mut Stage) -> Self {
     pub fn new(stage: &'a mut Stage) -> Self {
-        Self { stage }
+        Self { stage, is_dirty: false }
     }
     }
 
 
     // Texture methods
     // Texture methods
@@ -370,6 +371,17 @@ impl<'a> RenderApiSync<'a> {
     // Draw calls (no batching)
     // Draw calls (no batching)
     pub fn replace_draw_calls(&mut self, dcs: Vec<(DcId, DrawCall)>) {
     pub fn replace_draw_calls(&mut self, dcs: Vec<(DcId, DrawCall)>) {
         let timest = unixtime();
         let timest = unixtime();
-        self.stage.method_replace_draw_calls(timest, dcs);
+        self.stage.apply_draw_calls(timest, dcs);
+        self.is_dirty = true;
+    }
+}
+
+impl Drop for RenderApiSync<'_> {
+    fn drop(&mut self) {
+        if self.is_dirty {
+            // Force an update
+            #[cfg(target_os = "android")]
+            miniquad::window::schedule_update();
+        }
     }
     }
 }
 }

+ 6 - 5
bin/app/src/gfx/mod.rs

@@ -927,11 +927,7 @@ impl Stage {
             d!("Invoked method: delete_anim({} => {:?})", gfx_anim_id, anim);
             d!("Invoked method: delete_anim({} => {:?})", gfx_anim_id, anim);
         }
         }
     }
     }
-    pub(self) fn method_replace_draw_calls(
-        &mut self,
-        batch_timest: Timestamp,
-        dcs: Vec<(DcId, DrawCall)>,
-    ) {
+    fn method_replace_draw_calls(&mut self, batch_timest: Timestamp, dcs: Vec<(DcId, DrawCall)>) {
         if DEBUG_GFXAPI {
         if DEBUG_GFXAPI {
             d!("Invoked method: replace_draw_calls({:?})", dcs);
             d!("Invoked method: replace_draw_calls({:?})", dcs);
         }
         }
@@ -953,6 +949,9 @@ impl Stage {
         }
         }
 
 
         // Phase 2: Apply entire batch atomically
         // Phase 2: Apply entire batch atomically
+        self.apply_draw_calls(batch_timest, dcs)
+    }
+    pub(self) fn apply_draw_calls(&mut self, batch_timest: Timestamp, dcs: Vec<(DcId, DrawCall)>) {
         for (key, val) in dcs {
         for (key, val) in dcs {
             let val = val.compile(&self.textures, &self.buffers, batch_timest);
             let val = val.compile(&self.textures, &self.buffers, batch_timest);
 
 
@@ -1297,6 +1296,8 @@ impl EventHandler for Stage {
             }
             }
         }
         }
 
 
+        drop(render_api_sync);
+
         self.event_pub.notify_touch(phase, id, pos);
         self.event_pub.notify_touch(phase, id, pos);
     }
     }