47 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
import 'package:get/get.dart';
 | 
						|
import 'package:texture_rgba_renderer/texture_rgba_renderer.dart';
 | 
						|
 | 
						|
import '../../common.dart';
 | 
						|
import './platform_model.dart';
 | 
						|
 | 
						|
final useTextureRender = bind.mainUseTextureRender();
 | 
						|
 | 
						|
class RenderTexture {
 | 
						|
  final RxInt textureId = RxInt(-1);
 | 
						|
  int _textureKey = -1;
 | 
						|
  int _display = 0;
 | 
						|
  SessionID? _sessionId;
 | 
						|
 | 
						|
  final textureRenderer = TextureRgbaRenderer();
 | 
						|
 | 
						|
  RenderTexture();
 | 
						|
 | 
						|
  int get display => _display;
 | 
						|
 | 
						|
  create(int d, SessionID sessionId) {
 | 
						|
    if (useTextureRender) {
 | 
						|
      _display = d;
 | 
						|
      _textureKey = bind.getNextTextureKey();
 | 
						|
      _sessionId = sessionId;
 | 
						|
 | 
						|
      textureRenderer.createTexture(_textureKey).then((id) async {
 | 
						|
        if (id != -1) {
 | 
						|
          final ptr = await textureRenderer.getTexturePtr(_textureKey);
 | 
						|
          platformFFI.registerTexture(sessionId, display, ptr);
 | 
						|
          textureId.value = id;
 | 
						|
        }
 | 
						|
      });
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  destroy(bool unregisterTexture) async {
 | 
						|
    if (useTextureRender && _textureKey != -1 && _sessionId != null) {
 | 
						|
      if (unregisterTexture) {
 | 
						|
        platformFFI.registerTexture(_sessionId!, display, 0);
 | 
						|
      }
 | 
						|
      await textureRenderer.closeTexture(_textureKey);
 | 
						|
      _textureKey = -1;
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 |