iOS fixes

This commit is contained in:
Nick Fisher
2023-04-23 11:33:23 +08:00
parent 96970095fc
commit 6ec9fc2988
2 changed files with 17 additions and 18 deletions

View File

@@ -25,10 +25,6 @@ public class SwiftPolyvoxFilamentPlugin: NSObject, FlutterPlugin, FlutterTexture
static var messenger : FlutterBinaryMessenger? = nil; static var messenger : FlutterBinaryMessenger? = nil;
var loadResourcePtr: UnsafeMutableRawPointer? = nil
var freeResourcePtr: UnsafeMutableRawPointer? = nil
var loadResource : @convention(c) (UnsafePointer<Int8>?, UnsafeMutableRawPointer?) -> ResourceBuffer = { uri, resourcesPtr in var loadResource : @convention(c) (UnsafePointer<Int8>?, UnsafeMutableRawPointer?) -> ResourceBuffer = { uri, resourcesPtr in
let instance:SwiftPolyvoxFilamentPlugin = Unmanaged<SwiftPolyvoxFilamentPlugin>.fromOpaque(resourcesPtr!).takeUnretainedValue() let instance:SwiftPolyvoxFilamentPlugin = Unmanaged<SwiftPolyvoxFilamentPlugin>.fromOpaque(resourcesPtr!).takeUnretainedValue()
@@ -130,9 +126,9 @@ public class SwiftPolyvoxFilamentPlugin: NSObject, FlutterPlugin, FlutterTexture
} }
@objc func doRender() { @objc func doRender() {
} }
func createDisplayLink() { func createDisplayLink() {
displayLink = CADisplayLink(target: self, displayLink = CADisplayLink(target: self,
selector: #selector(doRender)) selector: #selector(doRender))
@@ -141,9 +137,8 @@ public class SwiftPolyvoxFilamentPlugin: NSObject, FlutterPlugin, FlutterTexture
public func copyPixelBuffer() -> Unmanaged<CVPixelBuffer>? { public func copyPixelBuffer() -> Unmanaged<CVPixelBuffer>? {
if(pixelBuffer == nil) { if(pixelBuffer == nil) {
print("empty")
return nil; return nil;
} }
return Unmanaged.passRetained(pixelBuffer!); return Unmanaged.passRetained(pixelBuffer!);
} }
@@ -186,9 +181,8 @@ public class SwiftPolyvoxFilamentPlugin: NSObject, FlutterPlugin, FlutterTexture
case "createTexture": case "createTexture":
let args = call.arguments as! Array<Int32> let args = call.arguments as! Array<Int32>
createPixelBuffer(width:Int(args[0]), height:Int(args[1])) createPixelBuffer(width:Int(args[0]), height:Int(args[1]))
createDisplayLink() // we no longer need to call createDisplayLink() because we drive our render ticker from the Dart side, not the platform side
result(self.flutterTextureId) result(self.flutterTextureId)
// print("texture id \(pixelBufferflutterTextureId)")
case "getResourceLoader": case "getResourceLoader":
let callback = make_resource_loader(loadResource, freeResource, Unmanaged.passUnretained(self).toOpaque()) let callback = make_resource_loader(loadResource, freeResource, Unmanaged.passUnretained(self).toOpaque())
result(unsafeBitCast(callback, to:Int64.self)) result(unsafeBitCast(callback, to:Int64.self))
@@ -197,7 +191,6 @@ public class SwiftPolyvoxFilamentPlugin: NSObject, FlutterPlugin, FlutterTexture
case "getSurface": case "getSurface":
var pixelBufferTextureId = Int64(Int(bitPattern:unsafeBitCast(pixelBuffer!, to: UnsafeMutableRawPointer.self))) var pixelBufferTextureId = Int64(Int(bitPattern:unsafeBitCast(pixelBuffer!, to: UnsafeMutableRawPointer.self)))
result(pixelBufferTextureId) result(pixelBufferTextureId)
case "getContext": case "getContext":
result(0) //nullptr result(0) //nullptr
case "resize": case "resize":

View File

@@ -46,10 +46,16 @@ extern "C" {
typedef void (*FreeResource)(ResourceBuffer); typedef void (*FreeResource)(ResourceBuffer);
typedef void (*FreeResourceFromOwner)(ResourceBuffer, void* const owner); typedef void (*FreeResourceFromOwner)(ResourceBuffer, void* const owner);
// this may be compiled as either C or C++, depending on which compiler is being invoked (e.g. binding to Swift will compile as C).
// the former does not allow default initialization to be specified inline), so we need to explicitly set the unused members to nullptr
struct ResourceLoaderWrapper { struct ResourceLoaderWrapper {
#if defined(__cplusplus) #if defined(__cplusplus)
ResourceLoaderWrapper(LoadResource loader, FreeResource freeResource) : mLoadResource(loader), mFreeResource(freeResource) {}; ResourceLoaderWrapper(LoadResource loader, FreeResource freeResource) : mLoadResource(loader), mFreeResource(freeResource), mLoadResourceFromOwner(nullptr), mFreeResourceFromOwner(nullptr),
ResourceLoaderWrapper(LoadResourceFromOwner loader, FreeResourceFromOwner freeResource, void* const owner) : mOwner(owner), mLoadResourceFromOwner(loader), mFreeResourceFromOwner(freeResource) {}; mOwner(nullptr) {}
ResourceLoaderWrapper(LoadResourceFromOwner loader, FreeResourceFromOwner freeResource, void* const owner) : mLoadResource(nullptr), mFreeResource(nullptr), mLoadResourceFromOwner(loader), mFreeResourceFromOwner(freeResource), mOwner(owner) {
};
ResourceBuffer load(const char* uri) { ResourceBuffer load(const char* uri) {
if(mLoadResourceFromOwner) { if(mLoadResourceFromOwner) {
@@ -66,11 +72,11 @@ extern "C" {
} }
} }
#endif #endif
void* mOwner = nullptr; LoadResource mLoadResource;
LoadResource mLoadResource = nullptr; FreeResource mFreeResource;
FreeResource mFreeResource = nullptr; LoadResourceFromOwner mLoadResourceFromOwner;
LoadResourceFromOwner mLoadResourceFromOwner = nullptr; FreeResourceFromOwner mFreeResourceFromOwner;
FreeResourceFromOwner mFreeResourceFromOwner = nullptr; void* mOwner;
}; };
typedef struct ResourceLoaderWrapper ResourceLoaderWrapper; typedef struct ResourceLoaderWrapper ResourceLoaderWrapper;