| // Copyright 2019 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #import "ContinuousTexture.h" |
| |
| @implementation ContinuousTexture |
| |
| + (void)registerWithRegistrar:(nonnull NSObject<FlutterPluginRegistrar>*)registrar { |
| NSObject<FlutterTextureRegistry>* textureRegistry = [registrar textures]; |
| FlutterScenarioTestTexture* texture = [[FlutterScenarioTestTexture alloc] init]; |
| int64_t textureId = [textureRegistry registerTexture:texture]; |
| [NSTimer scheduledTimerWithTimeInterval:0.05 |
| repeats:YES |
| block:^(NSTimer* _Nonnull timer) { |
| [textureRegistry textureFrameAvailable:textureId]; |
| }]; |
| } |
| |
| @end |
| |
| @implementation FlutterScenarioTestTexture |
| |
| - (CVPixelBufferRef _Nullable)copyPixelBuffer { |
| return [self pixelBuffer]; |
| } |
| |
| - (CVPixelBufferRef)pixelBuffer { |
| NSDictionary* options = @{ |
| // This key is required to generate SKPicture with CVPixelBufferRef in metal. |
| (NSString*)kCVPixelBufferMetalCompatibilityKey : @YES |
| }; |
| CVPixelBufferRef pxbuffer = NULL; |
| CVReturn status = CVPixelBufferCreate(kCFAllocatorDefault, 200, 200, kCVPixelFormatType_32BGRA, |
| (__bridge CFDictionaryRef)options, &pxbuffer); |
| |
| NSParameterAssert(status == kCVReturnSuccess && pxbuffer != NULL); |
| |
| CVPixelBufferLockBaseAddress(pxbuffer, 0); |
| return pxbuffer; |
| } |
| |
| @end |