I'm working on a small flutter app that requires texture rendering. My typical plugin looks like this:
.....
private var textures: FlutterTextureRegistry!
private var renderers = [Int64: FlutterRTCVideoRenderer]()
public static func register(with registrar: FlutterPluginRegistrar) {
let channel = FlutterMethodChannel(name: "mypluginchannel", binaryMessenger: registrar.messenger())
let instance = MyPlugin(registrar.textures(), registrar.messenger(), registrar)
registrar.addMethodCallDelegate(instance, channel: channel)
}
init(_ textures: FlutterTextureRegistry, _ messanger: FlutterBinaryMessenger, _ registry: FlutterPluginRegistrar) {
super.init()
self.textures = textures
self.messanger = messanger
self.registry = registry
}
- (void)handleMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result {
if ([@"createTexture" isEqualToString:call.method]) {
CGFloat width = [call.arguments[@"width"] floatValue];
CGFloat height = [call.arguments[@"height"] floatValue];
NSInteger __block textureId;
id<FlutterTextureRegistry> __weak registry = self.textures;
OpenGLRender *render = [[OpenGLRender alloc] initWithSize:CGSizeMake(width, height)
worker:[[SampleRenderWorker alloc] init]
onNewFrame:^{
[registry textureFrameAvailable:textureId];
}];
textureId = [self.textures registerTexture:render]; // Always fails and returns 0
self.renders[@(textureId)] = render;
result(@(textureId));
}
textureId is always 0 which (according to documentation) means texture is not registered.
I really have no idea how to fix this. Is there any logging mechanism or error code to obtain from somewhere to know what's going on? Any ideas appreciated thanks.