iOS fixes
This commit is contained in:
@@ -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":
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user