1
1
use flutter_engine_sys:: {
2
- FlutterOpenGLTexture , FlutterPlatformMessage , FlutterPlatformMessageResponseHandle ,
2
+ FlutterPlatformMessage , FlutterPlatformMessageResponseHandle ,
3
3
} ;
4
- use log:: { error, trace } ;
4
+ use log:: error;
5
5
use std:: borrow:: Cow ;
6
6
use std:: ffi:: { CStr , CString } ;
7
- use std:: os:: raw:: c_void;
8
- use std:: sync:: atomic:: { AtomicI64 , Ordering } ;
9
7
use std:: { mem, ptr} ;
10
8
11
9
#[ derive( Debug ) ]
@@ -174,103 +172,4 @@ impl From<FlutterPointerMouseButtons> for flutter_engine_sys::FlutterPointerMous
174
172
}
175
173
}
176
174
}
177
- }
178
-
179
- pub type TextureId =i64 ;
180
-
181
- #[ derive( Clone , Debug ) ]
182
- pub struct ExternalTexture {
183
- engine_ptr : flutter_engine_sys:: FlutterEngine ,
184
- texture_id : TextureId ,
185
- }
186
-
187
- unsafe impl Send for ExternalTexture { }
188
- unsafe impl Sync for ExternalTexture { }
189
-
190
- impl ExternalTexture {
191
- pub fn new ( engine_ptr : flutter_engine_sys:: FlutterEngine ) ->Self {
192
- static TEXTURE_ID : AtomicI64 =AtomicI64 :: new ( 1 ) ;
193
- let texture_id =TEXTURE_ID . fetch_add ( 1 , Ordering :: Relaxed ) ;
194
- Self {
195
- engine_ptr,
196
- texture_id,
197
- }
198
- }
199
-
200
- pub fn id ( & self ) ->TextureId {
201
- self . texture_id
202
- }
203
-
204
- pub fn register ( & self ) {
205
- log:: trace!( "texture {}: register" , self . texture_id) ;
206
- unsafe {
207
- flutter_engine_sys:: FlutterEngineRegisterExternalTexture (
208
- self . engine_ptr ,
209
- self . texture_id ,
210
- ) ;
211
- }
212
- }
213
-
214
- pub fn mark_frame_available ( & self ) {
215
- log:: trace!( "texture {}: marking frame available" , self . texture_id) ;
216
- unsafe {
217
- flutter_engine_sys:: FlutterEngineMarkExternalTextureFrameAvailable (
218
- self . engine_ptr ,
219
- self . texture_id ,
220
- ) ;
221
- }
222
- }
223
-
224
- pub fn unregister ( & self ) {
225
- log:: trace!( "texture {}: unregister" , self . texture_id) ;
226
- unsafe {
227
- flutter_engine_sys:: FlutterEngineUnregisterExternalTexture (
228
- self . engine_ptr ,
229
- self . texture_id ,
230
- ) ;
231
- }
232
- }
233
- }
234
-
235
- type DestructorType =Box < dyn FnOnce ( ) > ;
236
-
237
- pub struct ExternalTextureFrame {
238
- pub target : u32 ,
239
- pub name : u32 ,
240
- pub format : u32 ,
241
- pub destruction_callback : Box < DestructorType > ,
242
- }
243
-
244
- impl ExternalTextureFrame {
245
- pub fn new < F > (
246
- target : u32 ,
247
- name : u32 ,
248
- format : u32 ,
249
- destruction_callback : F ,
250
- ) ->ExternalTextureFrame
251
- where
252
- F : FnOnce ( ) ->( ) +' static +Send ,
253
- {
254
- ExternalTextureFrame {
255
- target,
256
- name,
257
- format,
258
- destruction_callback : Box :: new ( Box :: new ( destruction_callback) ) ,
259
- }
260
- }
261
-
262
- pub ( crate ) fn into_ffi ( self , target : & mut FlutterOpenGLTexture ) {
263
- target. target =self . target ;
264
- target. name =self . name ;
265
- target. format =self . format ;
266
- target. destruction_callback =Some ( texture_destruction_callback) ;
267
- target. user_data =Box :: into_raw ( self . destruction_callback ) as _ ;
268
- }
269
- }
270
-
271
- unsafe extern "C" fn texture_destruction_callback ( user_data : * mut c_void ) {
272
- trace ! ( "texture_destruction_callback" ) ;
273
- let user_data = user_dataas * mut DestructorType ;
274
- let user_data =Box :: from_raw ( user_data) ;
275
- user_data ( ) ;
276
- }
175
+ }