From 161b9842b5610fa6686a7af50472f6c29a6235b7 Mon Sep 17 00:00:00 2001 From: Alexey Orlov Date: Wed, 14 Oct 2020 09:52:10 +0300 Subject: [PATCH 1/6] updated graphics samples to be compatible with 2020 --- .../Assets/Plugins/iOS/ScreenshotCreator.mm | 9 ++-- .../AsyncScreenshot/Assets/TestScreenshot.cs | 2 +- Graphics/AsyncScreenshot/README.md | 2 +- .../Assets/Plugins/iOS/NativeTexture.mm | 42 ++----------------- .../Assets/TestNativeTexture.cs | 14 +++++-- Graphics/ExternalTexture/README.md | 2 +- .../Assets/Plugins/iOS/MetalPlugin.m | 23 ++++++---- 7 files changed, 37 insertions(+), 57 deletions(-) diff --git a/Graphics/AsyncScreenshot/Assets/Plugins/iOS/ScreenshotCreator.mm b/Graphics/AsyncScreenshot/Assets/Plugins/iOS/ScreenshotCreator.mm index da9889b..3eb044e 100644 --- a/Graphics/AsyncScreenshot/Assets/Plugins/iOS/ScreenshotCreator.mm +++ b/Graphics/AsyncScreenshot/Assets/Plugins/iOS/ScreenshotCreator.mm @@ -1,6 +1,6 @@ #import "ScreenshotCreator.h" -#include "GlesHelper.h" +#include "UnityMetalSupport.h" #include "DisplayManager.h" static ScreenshotCreator* _Creator = nil; @@ -56,7 +56,8 @@ - (void)onFrameResolved bufferW = CVPixelBufferGetWidth(pixelBuf); bufferH = CVPixelBufferGetHeight(pixelBuf); bufferRowLen = CVPixelBufferGetBytesPerRow(pixelBuf); - bufferFlipped = CVOpenGLESTextureIsFlipped((CVOpenGLESTextureRef)mainDisplaySurface->cvTextureCacheTexture); + // note that for metal rows ordering is opposite to gl + bufferFlipped = !CVMetalTextureIsFlipped((CVMetalTextureRef)mainDisplaySurface->cvTextureCacheTexture); imageW = mainDisplaySurface->targetW; imageH = mainDisplaySurface->targetH; @@ -98,7 +99,7 @@ - (void)saveImage char* srcRow = imageBuffer; char* dstRow = finalImageData; - if (bufferFlipped) srcRow = imageBuffer + (bufferH - 1) * srcRowSize; + if (bufferFlipped) srcRow = imageBuffer + (bufferH - 1) * srcRowSize; else srcRow = imageBuffer; for (int i = 0; i < imageH; ++i, srcRow += srcRowNext, dstRow += dstRowSize) @@ -119,7 +120,7 @@ - (void)saveImage CGImageRef cgImage = CGImageCreate(imageW, imageH, 8, 32, 4 * imageW, cgColorSpace, kCGBitmapByteOrderDefault, cgProvider, 0, NO, kCGRenderingIntentDefault - ); + ); CGDataProviderRelease(cgProvider); CGColorSpaceRelease(cgColorSpace); diff --git a/Graphics/AsyncScreenshot/Assets/TestScreenshot.cs b/Graphics/AsyncScreenshot/Assets/TestScreenshot.cs index c048310..72ebd38 100644 --- a/Graphics/AsyncScreenshot/Assets/TestScreenshot.cs +++ b/Graphics/AsyncScreenshot/Assets/TestScreenshot.cs @@ -29,7 +29,7 @@ void OnGUI() savingScreenshot = true; CaptureScreenshot(ScreenshotCompleteCallback, "test.png"); #else - Application.CaptureScreenshot("test.png"); + ScreenCapture.CaptureScreenshot("test.png"); #endif } } diff --git a/Graphics/AsyncScreenshot/README.md b/Graphics/AsyncScreenshot/README.md index 30133c6..680f90a 100644 --- a/Graphics/AsyncScreenshot/README.md +++ b/Graphics/AsyncScreenshot/README.md @@ -8,7 +8,7 @@ This is a sample of usage of native **RenderPluginDelegate**. It will make scree ##Prerequisites -Unity: 4.3 +Unity: 2020 iOS: any diff --git a/Graphics/ExternalTexture/Assets/Plugins/iOS/NativeTexture.mm b/Graphics/ExternalTexture/Assets/Plugins/iOS/NativeTexture.mm index 0530d49..ab61754 100644 --- a/Graphics/ExternalTexture/Assets/Plugins/iOS/NativeTexture.mm +++ b/Graphics/ExternalTexture/Assets/Plugins/iOS/NativeTexture.mm @@ -1,7 +1,4 @@ -#import -#import #import - #include "UnityMetalSupport.h" #include @@ -36,40 +33,9 @@ return textureData; } -static uintptr_t CreateGlesTexture(void* data, unsigned w, unsigned h) -{ - GLuint texture = 0; - glGenTextures(1, &texture); - - GLint curGLTex = 0; - glGetIntegerv(GL_TEXTURE_BINDING_2D, &curGLTex); - - glBindTexture(GL_TEXTURE_2D, texture); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, data); - - glBindTexture(GL_TEXTURE_2D, curGLTex); - - return texture; -} - -static void DestroyGlesTexture(uintptr_t tex) -{ - GLint curGLTex = 0; - glGetIntegerv(GL_TEXTURE_BINDING_2D, &curGLTex); - - GLuint glTex = tex; - glDeleteTextures(1, &glTex); - - glBindTexture(GL_TEXTURE_2D, curGLTex); -} - static uintptr_t CreateMetalTexture(void* data, unsigned w, unsigned h) { -#if defined(__IPHONE_8_0) && !TARGET_IPHONE_SIMULATOR +#if UNITY_CAN_USE_METAL Class MTLTextureDescriptorClass = [UnityGetMetalBundle() classNamed: @"MTLTextureDescriptor"]; MTLTextureDescriptor* texDesc = @@ -88,8 +54,10 @@ static uintptr_t CreateMetalTexture(void* data, unsigned w, unsigned h) static void DestroyMetalTexture(uintptr_t tex) { +#if UNITY_CAN_USE_METAL id mtltex = (__bridge_transfer id)(void*) tex; mtltex = nil; +#endif } extern "C" intptr_t CreateNativeTexture(const char* filename) @@ -100,8 +68,6 @@ static void DestroyMetalTexture(uintptr_t tex) uintptr_t ret = 0; if (UnitySelectedRenderingAPI() == apiMetal) ret = CreateMetalTexture(textureData, image.size.width, image.size.height); - else - ret = CreateGlesTexture(textureData, image.size.width, image.size.height); ::free(textureData); return ret; @@ -111,6 +77,4 @@ static void DestroyMetalTexture(uintptr_t tex) { if (UnitySelectedRenderingAPI() == apiMetal) DestroyMetalTexture(tex); - else - DestroyGlesTexture(tex); } diff --git a/Graphics/ExternalTexture/Assets/TestNativeTexture.cs b/Graphics/ExternalTexture/Assets/TestNativeTexture.cs index 12e2777..6674e47 100644 --- a/Graphics/ExternalTexture/Assets/TestNativeTexture.cs +++ b/Graphics/ExternalTexture/Assets/TestNativeTexture.cs @@ -38,16 +38,22 @@ void LoadTexture() curTexIndex = (curTexIndex + 1) % externalTexture.Length; curTex = CreateNativeTexture(externalTexture[curTexIndex]); - testTex.UpdateExternalTexture(curTex); + if(testTex == null) + { + testTex = Texture2D.CreateExternalTexture(128, 128, TextureFormat.ARGB32, false, false, curTex); + target.material.mainTexture = testTex; + } + else + { + testTex.UpdateExternalTexture(curTex); + } + if (texToDestroy != System.IntPtr.Zero) DestroyNativeTexture(texToDestroy); } void Start() { - testTex = Texture2D.CreateExternalTexture(128, 128, TextureFormat.ARGB32, false, false, System.IntPtr.Zero); - target.material.mainTexture = testTex; - curTexIndex = -1; curTex = System.IntPtr.Zero; LoadTexture(); diff --git a/Graphics/ExternalTexture/README.md b/Graphics/ExternalTexture/README.md index 1e122f0..9816188 100644 --- a/Graphics/ExternalTexture/README.md +++ b/Graphics/ExternalTexture/README.md @@ -8,7 +8,7 @@ This is a sample of usage of **Texture2D.CreateExternalTexture** and **Texture2D ##Prerequisites -Unity: 4.2 +Unity: 2020 iOS: any diff --git a/Graphics/MetalNativeRenderingPlugin/Assets/Plugins/iOS/MetalPlugin.m b/Graphics/MetalNativeRenderingPlugin/Assets/Plugins/iOS/MetalPlugin.m index c287701..39e2483 100644 --- a/Graphics/MetalNativeRenderingPlugin/Assets/Plugins/iOS/MetalPlugin.m +++ b/Graphics/MetalNativeRenderingPlugin/Assets/Plugins/iOS/MetalPlugin.m @@ -90,15 +90,18 @@ static void CreatePluginAssets() { // to simplify our lives: we will use similar setup for both "color rect" and "texture" draw calls // the only reason we cannot pre-alloc them is that we want to handle changing RT transparently -static id CreateCommonRenderPipeline(id fs, MTLPixelFormat format, int sampleCount) { +static id CreateCommonRenderPipeline(id fs, MTLPixelFormat colorFormat, MTLPixelFormat depthFormat, MTLPixelFormat stencilFormat, int sampleCount) { id device = g_MetalGraphics->MetalDevice(); NSBundle* mtlBundle = g_MetalGraphics->MetalBundle(); MTLRenderPipelineDescriptor* pipeDesc = [[mtlBundle classNamed:@"MTLRenderPipelineDescriptor"] new]; MTLRenderPipelineColorAttachmentDescriptor* colorDesc = [[mtlBundle classNamed:@"MTLRenderPipelineColorAttachmentDescriptor"] new]; - colorDesc.pixelFormat = format; + colorDesc.pixelFormat = colorFormat; pipeDesc.colorAttachments[0] = colorDesc; + pipeDesc.depthAttachmentPixelFormat = depthFormat; + pipeDesc.stencilAttachmentPixelFormat = stencilFormat; + pipeDesc.fragmentFunction = fs; pipeDesc.vertexFunction = g_VProg; pipeDesc.vertexDescriptor = g_VertexDesc; @@ -115,12 +118,18 @@ static void CreatePluginAssets() { static void DoExtraDrawCall() { // get current render pass setup - id rt = g_MetalGraphics->CurrentRenderPassDescriptor().colorAttachments[0].texture; + MTLRenderPassDescriptor* curDesc = g_MetalGraphics->CurrentRenderPassDescriptor(); + + id rtColor = curDesc.colorAttachments[0].texture; + id rtDepth = curDesc.depthAttachment.texture; + id rtStencil = curDesc.stencilAttachment.texture; - if(rt.pixelFormat != g_ExtraDrawCallPixelFormat || rt.sampleCount != g_ExtraDrawCallSampleCount) { + if(rtColor.pixelFormat != g_ExtraDrawCallPixelFormat || rtColor.sampleCount != g_ExtraDrawCallSampleCount) { // RT format changed - recreate render pipeline - g_ExtraDrawCallPixelFormat = rt.pixelFormat, g_ExtraDrawCallSampleCount = (int)rt.sampleCount; - g_ExtraDrawCallPipe = CreateCommonRenderPipeline(g_FShaderColor, g_ExtraDrawCallPixelFormat, g_ExtraDrawCallSampleCount); + // we silently assume that depth/stencil format does not change + // even though we dont need it we need to set it up as otherwise validation will whine + g_ExtraDrawCallPixelFormat = rtColor.pixelFormat, g_ExtraDrawCallSampleCount = (int)rtColor.sampleCount; + g_ExtraDrawCallPipe = CreateCommonRenderPipeline(g_FShaderColor, g_ExtraDrawCallPixelFormat, rtDepth.pixelFormat, rtStencil.pixelFormat, g_ExtraDrawCallSampleCount); } // get current command encoder, update render setup and do extra draw call @@ -193,7 +202,7 @@ static void DoCaptureRT() { if(dst.pixelFormat != g_RTCopyPixelFormat || dst.sampleCount != g_RTCopySampleCount) { // RT format changed - recreate render pipeline g_RTCopyPixelFormat = dst.pixelFormat, g_RTCopySampleCount = (int)dst.sampleCount; - g_RTCopyPipe = CreateCommonRenderPipeline(g_FShaderTexture, g_RTCopyPixelFormat, g_RTCopySampleCount); + g_RTCopyPipe = CreateCommonRenderPipeline(g_FShaderTexture, g_RTCopyPixelFormat, MTLPixelFormatInvalid, MTLPixelFormatInvalid, g_RTCopySampleCount); } // render From 443a5c1c5eaed5022d9d69148791427a06d49556 Mon Sep 17 00:00:00 2001 From: Alexey Orlov Date: Wed, 14 Oct 2020 12:33:36 +0300 Subject: [PATCH 2/6] wwwconnection customization is no longer supported since 2019.1 or rather in a different way: we expose a lot in cs and for very edge cases it is expected you edit mm file directly --- NativeIntegration/WWW/CustomConnection/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NativeIntegration/WWW/CustomConnection/README.md b/NativeIntegration/WWW/CustomConnection/README.md index 7b9e96a..1fa094e 100644 --- a/NativeIntegration/WWW/CustomConnection/README.md +++ b/NativeIntegration/WWW/CustomConnection/README.md @@ -8,7 +8,7 @@ This sample shows how to tweak WWW connection to better suit your needs. ##Prerequisites -Unity: 4.3.1 +Unity: 4.3.1 - 2019.1 iOS: any From 8f1b0fb9423ca0577694af4874758208a9002e46 Mon Sep 17 00:00:00 2001 From: Alexey Orlov Date: Wed, 14 Oct 2020 16:49:32 +0300 Subject: [PATCH 3/6] fixed ExternalTexture build added build postprocessor as we now need to add resources to the correct build phase in the main target --- Graphics/ExternalTexture/Assets/Editor.meta | 8 +++++ .../Assets/Editor/PostprocessBuild.cs | 29 +++++++++++++++++++ .../Assets/Editor/PostprocessBuild.cs.meta | 11 +++++++ 3 files changed, 48 insertions(+) create mode 100644 Graphics/ExternalTexture/Assets/Editor.meta create mode 100644 Graphics/ExternalTexture/Assets/Editor/PostprocessBuild.cs create mode 100644 Graphics/ExternalTexture/Assets/Editor/PostprocessBuild.cs.meta diff --git a/Graphics/ExternalTexture/Assets/Editor.meta b/Graphics/ExternalTexture/Assets/Editor.meta new file mode 100644 index 0000000..ad68059 --- /dev/null +++ b/Graphics/ExternalTexture/Assets/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bfa945941802e41b4b167df6c034196d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Graphics/ExternalTexture/Assets/Editor/PostprocessBuild.cs b/Graphics/ExternalTexture/Assets/Editor/PostprocessBuild.cs new file mode 100644 index 0000000..5a32501 --- /dev/null +++ b/Graphics/ExternalTexture/Assets/Editor/PostprocessBuild.cs @@ -0,0 +1,29 @@ +using System.IO; +using UnityEditor; +using UnityEditor.Build; +using UnityEditor.Callbacks; +using UnityEditor.iOS.Xcode; + +public class PostprocessBuild +{ + [PostProcessBuild] + public static void OnPostprocessBuild(BuildTarget buildTarget, string path) + { + if (buildTarget == BuildTarget.iOS) + { + string projPath = path + "/Unity-iPhone.xcodeproj/project.pbxproj"; + + PBXProject proj = new PBXProject(); + proj.ReadFromString(File.ReadAllText(projPath)); + + string target = proj.GetUnityMainTargetGuid(); + string resSection = proj.GetResourcesBuildPhaseByTarget(target); + + proj.AddFileToBuildSection(target, resSection, proj.AddFile("Libraries/Soft.png","Libraries/Soft.png", PBXSourceTree.Source)); + proj.AddFileToBuildSection(target, resSection, proj.AddFile("Libraries/Test_Icon.png","Libraries/Test_Icon.png", PBXSourceTree.Source)); + proj.AddFileToBuildSection(target, resSection, proj.AddFile("Libraries/Test_UnityLogoLarge.png","Libraries/Test_UnityLogoLarge.png", PBXSourceTree.Source)); + + File.WriteAllText(projPath, proj.WriteToString()); + } + } +} diff --git a/Graphics/ExternalTexture/Assets/Editor/PostprocessBuild.cs.meta b/Graphics/ExternalTexture/Assets/Editor/PostprocessBuild.cs.meta new file mode 100644 index 0000000..748b7f7 --- /dev/null +++ b/Graphics/ExternalTexture/Assets/Editor/PostprocessBuild.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d1fe8f1d04a8f4a42a9f52a49ef2383d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: From d9da26823c26f89dbf54447645dcdd7b4acbb971 Mon Sep 17 00:00:00 2001 From: Alexey Orlov Date: Thu, 15 Oct 2020 12:42:32 +0300 Subject: [PATCH 4/6] updated NativeIntegration samples to be compatible with 2020 --- .../Editor/Unity.iOS.Extensions.Xcode.dll | Bin 57344 -> 0 bytes .../Unity.iOS.Extensions.Xcode.dll.meta | 7 ------- .../Assets/Editor/XcodeProjectUpdater.cs | 4 ++-- .../TestLib.framework/Versions/A/TestLib | Bin 5688 -> 6608 bytes .../TestLib/TestLib.xcodeproj/project.pbxproj | 10 ++++++---- .../Misc/UpdateXcodeProject/README.md | 4 ++-- .../Assets/Plugins/iOS/ScreenshotCreator.mm | 5 +++-- .../UI/ResizedView/Assets/Screenshot.cs | 2 +- 8 files changed, 14 insertions(+), 18 deletions(-) delete mode 100755 NativeIntegration/Misc/UpdateXcodeProject/Assets/Editor/Unity.iOS.Extensions.Xcode.dll delete mode 100644 NativeIntegration/Misc/UpdateXcodeProject/Assets/Editor/Unity.iOS.Extensions.Xcode.dll.meta diff --git a/NativeIntegration/Misc/UpdateXcodeProject/Assets/Editor/Unity.iOS.Extensions.Xcode.dll b/NativeIntegration/Misc/UpdateXcodeProject/Assets/Editor/Unity.iOS.Extensions.Xcode.dll deleted file mode 100755 index 3e2c1698a9330df686b9bd783a418f8014969572..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57344 zcmd?SdwiT#wLiR`XJ($6OfJpjo?ak@7N+UF6i7mWrfqtGUP7Bffohv3(>658glCe{ zQd){)5f30J@Iyoo3VQUM{_uv1iV9j06%;+FphXeu5fwdN>Jg8K@Atd*erBFYQslhn zoX`8m8<_pt3*U3ir?ShyoW`~=$Wt#kv!KS{!re*6kG!0~XGjqzzlhZ8g z&JK~)PDIZ6LcA+z?Rlw~TIzTr-vb60{cA$XpE&p}HhI^`O)TZtzr`pAo`39@NTvQ? zxLQ!lL>ihz)@k06)p;hike4P$%0l4l%~m#vBtpc!fLDg#Im4Mf!+`I78VSm@uU2kA z`qw0~b&j9&djJ{P&^PMi87t`}^di(n&;AHykN=%-)TIBJ)W(3LW zX~5&DeEfF)``DA*G!&C;zSxbVe+*6T2NZQ9(JX}Unng^x*IYfXQqDnhC{7(fCK}0N zWRgkO%fh6R4Wv(IV@UP`j#_kM2o3URv;1?!2a6$hAKQthpGPb1KGq2GB+Ftzlg&~+ zuS{-5n?R*Veaa3-*3|TEIjkI$7OYFq{|b_92`Kz;kTywL&;M8C;?J4=hqT$PE3BRiH9RA4f;0m+nWmqw)RFNA$qCTB{tjT2DiZu0@cIjzN7v z*;-p`VF=~wi2p~3U#xQqlC3~p>bYEYgAS;aDma;g7QE89v4*&7q=+cPxIe*>p@}zR z{G91^@qH96Jpp{uQAfP@Pp`MAKY+vgr#Hm+u?J}bHAd4Ohzyj56H4x<7;y->+s&m2 z0~vL5Rm=j8s&tLHV!C6E!^Qbxte180N4Q%#q~v(>2523^RM=J;rJs7A|NcGpW} zYYLPBsun2fp;0=)LC3NM%)?`8>^!7nWm@X)qnPnAv!F1D**Y@+pXbflYIwgb(nb?^ zqg1Kaf?i6bVKJrwQ4r6=ysMr!K`sUc!mgF5({ct$A{;$TttpE^D(*gxKqT7$ ziWbf%*Ml>_czBggP|v8ve+qVxZUkN1Lx20*-!Mj3NB!>s7cn}CWGA9b$J*N2fpN-X z>H-Ww^}M)DN0a=Ew879Je=LpR@>(bw`jj-dif9@mMzcV_D&;&}`3JElp~+U5rZk(O zjhN9km;lAmj>IaW)Sib*lL4OwW($nq*(rd@d(ym9hw7-RqbjN_s$-Ef5cyaUm8CjzW{%Mn*(WbKRSSkiSfY*T;T3gkec_hr~%EL<))!h z&lnNf;<(ad!TF|gGvNS|US$8J%7k>@tKKXib2Csm3vwNc>Uk&0n@|UiD0QGs$F|^C zPcRpCbjkuNZGnO%VQqCHy3U1eW_A`^p>+pzmf|E*s5L(h{h40H6WQ6IjA$PwO76cW z4-6Ud=qmf#0(^fQ0jlREWi1%+uXwscIh-2S18};xa6lvVi!rZt2Ek6fO4rPx#$XPm zn-mMz06R}fFKCnW4gNGJB4W%}hc=?4n)KB6N?X{ADo0JPEb7DK4keTrIJLg#^Va8t ztuN}Y2C1>Wc8of03=#;MS6d5gY|^|cxdOP?B?}zPXj!a3;p__}`oZ6q2=gH%(>$={ zIuOWIJ+IWp!_<9|UqU2ARjrw3jlcjCTO?OU zUWu$nIZP&%!^A9(t8_tA-u^)j8J90lEkW7oB-3f(8OjfV$Ul~+M8gG{%VZVWIg!jS zqEaCL?~%9i`_V`NUs1>(gz4FSkviNjQ^Iiy=7>?NvdUtaOSV$~VI;JgY_zhCy%4TD9>a(#D#XwrI1ZGn2UplbDhK~_LVZs|XRW>=Zd9dr!w71_KdV4R*XvUm zp;1x2uocFr)^=)S?`w?1axe^Z|He>$IFt{M)h)mW2`v2Tbn$A#e3}+#h^cO74e@7}iwog4fW`(BILI4j6l(yYsLG ztpzfe3$NFDT=naA?u4dW$oEyr!0Xg)Sa0uzF!k1#Js8SAfqbC<=R^6B{tqI$Ji%Nu zC5WS;h2(xXXS2aY%FNA`7-)}6+GqcW6kVB@UWpV zR+eNdmlz8pddMHmgtn~aSO7t8G-`O%yy|VlSms_qasUy0bao1;%ZPdz$w8tNpZ*Vk zr?tQ#$bl9h&FN36J7%k0Xu_6-PKLBBy$PI}5pzzG&x0FQ?w~*L)X6sNc%KB|#n)Y>p{UEA1(L!xv*ikxE!h(8D9 zal=GIM=`vC&AHde*R?d+~_C>q;%> zQWx+^9A>dw*fLQ&P!HBOwFh6fB?w5lA%)$Xjog0hPxJe)>Ujy74_+sVu{t5>L~F-k zUx0wn`T~<1Z;j=gr%_Q(yG!Z^JKZIO=!LtFa(X&mUKU0( zddF2bKln1#j7`=H#Ty%JCq{27I58uEAI{uI7e- zf1~yZx+5F2PblsV_5@f3F!<|@)DfH;TndEh4#N+-N$OaWza_~cE=ab*o#zoa41uC) zMlINH<9H{U#u(D1P`_L-w*};wa~z$BsgL!psJ@zP4)H)T8EcKB(2Hdkldl1y*>(T{ z2R7*Cpa*7U5?g@&Ur)o zk;hmQBaHnBx%y#;kNSmp_qF#OzXh8hPOXd={Q0y{er+Lt5Jx}OpZ5aWj5yO^sLy`1 ziwT~}?R*Wn2T?67Hw7pP11UwY^l8s1iVXuzS1FGTO+#zjYxgs}kGdQ6gLNykr}7U2 zZ*_4H=LDnrX)u9rAip3^5BiQ3B9+4ed%`h$1Pz4yP9{Ztr({Kar$|M8r@W!QW3gkL z`r3Z)SfOA3?+f{ZO+glQq1sFrj=Tt8D8vRHniu=I^iu%D;Y(FpuV2ch66>_@j z>oMC>xvP}FyMHQ#z!BIfyy$#6MIMI?u&Th%E&+-h`KMP=PDfnHTcerl>-Y&&u zC@?o1ye#5_WNSCd#+;Frjya<)i~F~*9WF0sf1EJ)fGA%JJzU)XP@Vv-h-(Qbc_4{h z8NLum+_oKFRQC}bsKLL8|0NXaavAZziLASiEtoq#x-v(69P|OLeACZUdQjk4bq>(^ zbr$ys5P&52V`0EO0?d=-ew?&mDZ~UcdYmZlL3<}!3){eK(%Ai}-wAv$H?9ul-y6z5 zfqW1T{u}av|M<@kO+&K42d+9FgJZoKnrzxV2)}6O7%AvW3?`Ukd0;4}^FcGxflMpEpM-&23`QpA)e(TfBPQYTVGxT(<7)2!(Zgih&%z-| zEFY5O;}FhDaMHLSh(j0)VL6f}=-VhNyMnwN;F_cUT{MQ%fUsp){R?ps&g)EE1cfm! zf^QrZ7okOaPhz|?-89+&Z#{<#gwI=odq^U1 zT`4zrA=T>nUk4XWa;t&Ju0i7Y$B1N-TU$W#^v`FKTUS6bbnuzvItxgysXmh&G!^jV zfsD^2x4wYnNr}%S2fGd^d4%CJVZa_Bxo`KG|O;Z8C~#@)wmlw`Lc-*yhj>#AekK1$GvEWddFFm@+)LRdz#Dx(*9#v)czm=;?^CzKv%u}hXYfO( z<$3%9-%C6upLF2&-ck5Qz+5}d3*j#_y)zSu-5CL=NzD@Ab^a(GIt}4<1}VO>2(Mco z#Uow|(d&d#JVKlhUgweG5y^(|I$0GDg@^ETW2*KMoKl4FI^~rf`^6Amr>x=;PIJX$XB48>Ij{K1MR@fwibr(h@?5N1G8hjm{wX(o z7Yu1%FGe8?92V(WD8Zt<9Y85=Z|-0TCY%>BF+8RV?}zRLy6icuLZs~j(8gQZ=AiM!kxf;NWV z3;5;my9l%`pFoi)wj5hlSr9MxRWv}^ehWDRw$ zI$@einBJAR>36cZAvRZ%y|U0;810+pAc0gRMmLuz>K!C2YA$J-OPc0N-SnMo4ysS4 zO0&a-=ECR^(;R%eR3%3@mn>=yBvR9yim6?|^5{PfK`ZNU{VuM7T@YVy@!Ln?KZG*U z!$B9((+Y@xYY2~hvI}eCnMRD)>Ujp8iKd1(}*<4rHmTNq+$NX3fV; zp1uS2&F6MfZX~7^vr9mw%S=)q_ku^jQkjI^u#tH7Y5-*kUHlXFIm~%L=|Nw-Ja8g9 zAs)@ozoNtNn&uK1OK>h)jrLdJ2bY!~`!+icHLp5#uR6_g9uFlyismhXj1tD~NuiqXOPONTR?^2)3_~V6F?~NslWxR|S>=G9XNwF%@JmHbo}1l= z&LzFt#U5~a2dX(z=Vh+})|^AaJCC8Itw)+8*#2hslkgPVAI=f(wcuL#982C_YwY0f zI{@nJwMa^h=XTNu0hHlUuj_DCs|b5;H~l7{lPxe$y74yy2zhQiP6H=wJvWa#@;b*# zqkbE)VqWKyFpu5>cqa7)dDXfR+PYU4*}r1cLPiE(wDW6VemvbB8K{Qp?m;7ayE)-8=QIjZe$X0eQ8jW)buTxFBh9#&7R zJOQs*`u`O3ioIHgam(`psadTd@QSD3MJR!#5hfAvil^UQ%q#wC-TV-*d{B|S zhqX%#uafk82qm%Zy|=)tguXG{$C6j;&dBr9xdoTN@w@`+gH6hvxQ561B#Xab6#hG) zCH<@Th3R3siie*o!qZ=_#jiVrpER#tt^_;>_7X9tHe*9UPI{Q^cJ!mvh4nBN)I}na zevrdxBfn?!!&nsgnbj$hy%)7Gtv`Vp5gq=pUui%S(6IXRpf6lw&=l`;;w&#e2S+b1 zoWSwy`@lU|T(aPVl^gTMEG~)HzqkZ`qs+>(5!XPTYUt`sfWbHKe~tfeIr3iiIVSMI zo=TI9=<5M`_tI;QhE@t+5I+9xeG z74INzN%o&eTcV0Z1c(v$s_mMPO4@)Ctl-?dl<@`{#-?Jnjzamf<4&mXJp69KuP~p^ zljkrN{EPTrIS=rVWP8Cf;-5!&cL6>`_@4{#Lxf)_z`q;?*HsjkuO0=zjqnplYfPNM%PP__xB*N@Ik^KEx;?P0f%JG5xyCTrT-Vgp|-zL1k=w~&s#22 zxX9t}|0iP|(%0V`+n-ZkA^P$f!1|oC8J}|qk07!7R`@Li_#asws{jAFt%PjhyOb>i zzqaidTe%iDXhjxsZSntv`no$y`mtKP;iCCawqCc`rG6s{8JTcXi|7rT+7H2jxrtc% zbAbFAL2g zJKQ^*Su_nd=i#VX57cl@`_Gi3uwG;jvW1vgugEmrL3+=`%~&u0g$>2@L@QWNl?)IR)E)MdxBlp zLHFIKxgnHp=j(KTZ5AnesF5nuMG9S7LXKr2jm`1{}eqFI&*Y< zU`)f~<6T}BQCCup!)|GT3~gzR^&xiPmi8nR>0OT?AT1|Cg&DP@Eu1-yv!e~-Qdp#( zYwf``SVt$#n<#yN&-yRP%t#ZlyxoQuWX5x9bUG-Sh90yPg8Cw|zRPjBgisi!l?@245XB2mPZg zBWxFlvy0B>_-+w54SBn$1`yZDPZqdVp0~jNe*&mv%bNguS?qMj9A)lQiMS^*2by{Ui%Cx%M(`pxoQyfn zilsk^>e-)y(!2?)LAI^*DHL(PptmM$H8g%Dh(qV4KE!MFRIcg39?i$u zao}(cqW9lO#lK1OUJ^X;&gULexu2jW{PV52m{YHZDA;F^l(tL+F^2xL0LtvTm(abm z3XT%2q{+6Tcif<-{0Yl#GApJZsYB#NX|X9!=yIZ{^brB2u)+MH)5^}(SQLusXt3wSXO+!SPhDvy|IouEqlCZSpdvrS+x`J(dlgYQp zy3{mOntqB}Ct96K_@@jh*x&Dw0k1~0V ze5wrBs`QTtVVhlTxau8RHQOpay%^?N^=jSf5ZAlNwU-Q^XM$OmtgdN+VM|p_`UOI@ zUaHopqgL;$s!o8@2*dA#{K%t%mqvreb)f1oH5k4P>0c9S^iqw6 zZzG>ou#>PM{Tmd9CSk*?bzLF8?;+oRC(GY5`5ie;Y?)0hP2}Sx$?8d7YLe0Yw}KG` zCVL$!`o9h^ApQf0+rFCD%fwgfHig=uhcS1Wft^ zqws%-82o9Y@caM?Mnt}eYnadJfae3hX%zn3XoPro6#i1+HvoSa*D#;oIwH$}UpNYX zgT;RX*DyWLq)ESR6dul0`}JpB!}Rd9D$n~y;U@#0hacuno<4XV#AF;D$+#XD3-Xi*Mf8XD1_B2lgB;>(7ZgeNxp3Bb*9L#Uc+i%4GSuu0kGX?~m(RU;`54YnNj3e)FP6y0C zBX1=83cG_o}cqPgY+R07z^HcMF0N<_87vI8e%f-kq=%M8K0YmfswbB=Yh{J`Bu z&^-2wH_Hedn1e*$Ci@|1%(H4lDPEsdqpr(jIohm&u8nFzd`&5UwjYNFvpYYSqn@uR1Dl!ng=Grn5aa2SP==|SI&dZwN)6>wFeZqJ_70LZ`$vDMuzPH5pDdGbA)<1tf>K|MH8vjD% zaw$|l2nQbZZ^(n3;Qki@9w41A+lG!h_P-Gn_&-KYm1auMVrfZZz!W1E^(W=Q7J}#J z!B&FZc@VBH>hA@pO`3K;iS8NBa4b>(D?w>UAXr`0{~ZeIZiW^ee#^&JfzG1-go%ML z=K*Y99x@XB>=p*3U`w7fK|{0;SD)oiwr~$(^Pc%a)^A|5eBP#9@5NK02gun>54}MK zYkHL5jq+!pZGScr^K~pDLm$gJgQaH|mFkzWz}q~JLf)>j%2r{BTG6urt_G|dKDXJe zce6DB8!pwyF|;7Coq4{30j{^MU8= zUxNdOdQ-VN5a0>$b_%=#Nqr9P$IIebDq!D0><%P#VJuHu{kH=5XSzP z*q@EYMkWDUilm5k{KKSt~qM`NEO_UEIqe<3zDWfX^cApBED zV{y1JPRNbEaD(|&;1PmjhvN9-R*V{19&zxP}f0b7sK-a(A;6 z!I3b}k+53pU#Li5Ewk_>knUT@`gL3rJbhl76<&*eE$LOgrVi$`{)Ovc3I;s#ZKxBg zXG@foQoGs7R@RHnVu(PM+}-GY6{_Gv7r4V%s@;8^Y@7An;aP+c?*}l#9CzP(3!mf; zV+nQf9OE$DiQ9~CU}06nLltlc^c8Iu#*2-L0F2mzfwF0#0Gk#HuxSD7_!Nk~ANvHX zmvX3DAY*PI_mExx1L-{NRh)oP=5ht_bHO=6w1kr4hYGQ2wb9M3zvVg;aJO&3B zZgCtxhDPVpuR*aq!&2s^oZZ$jCe32fz}t^UgT75=-?~D5yTIK?Fp^UdPElF&I2Cmi zPQ@}fzF&`+GAx%e!^3Xi!!^&8hh!=$-)(I}<=wxLQu)uq{P$l>ZJV_v4gT%y)2U#Y z^y;$H$hsyw9T!*M+VIk+A&&<>Psasq!fG9TP7iA`0jT4PDn|&jk?o|Ac(K%|}k=OPvOvLcY=Fry@Vm=4T>5$>a}`v$FT9 z-0XQ^*SZ%CCOROUJ`n#|Twx4?(U3Lxb>Y`?F%ma>KByUk%`8_7tH!G{?LalWp?+~G zYWZiQ8M7_Mi!?1+ph|G_aS2GYgMK&4(@V)@84~jdbfHc_n?~!Neng_$0}cC{g{T=f4S&3?6(830EP?0EEqGa0x3IQu}h0++TY!PnfV!1L$3@;jzfNwceh>%6yloM5g* z9rJ)wxjHI%vicmSd~=<-aMKd(llMT&w69O%N(uPKcmD=)#rX)H%fh6EBl2|W_;GLOD+VASxmi^*(ZSBo*y7LF+z85oWwr53Ujhi7!JraY2Ix4Fl6bV zjgD~HXvJD0CW~(w(8ISTf$?c0mbi|P zS1?07^Vu0RUL6N?5uh~O3vPO+60KFN6@`JV2O61#$;8aPlfyKG3CdU>ItTyh2&a$I z=tj7twhpO$%vP7^lnn{UhoNX)*$tGbw1o<)Dotau;bc8kW`rnDmFxSkQ1n`mw)CpTU$<1y8%=abGYO?t( zd~Nkowla@UA$}qLvJjraE!l7ZTmY)!uMEH43+Bw5bLPCW7o1HDUZg_W06RGK0N&BS zbt^Vdr*0Vb`v!O9Nb%w-k*7`uZsP`ds1Jxr)ky zo|acg6*E^)l6V3;iIawDNSA85O4D9Vb4Wcr7k?|#`$6f+cQyYTyhG?orSnJBnt{~A zdrY^&cf1+-xjOEi{9oi}%Gc14Cx3ESx71C6W~w{O^`r~=Go%mQz1-5g3m8xCbJ^CT zNYAkN=UnoiA7Ofa zKil~2Mo)gKsZ3=4WKCN%y-3r3O>dZZ$3#ya)cm(6{u=r6Nla&Ix_r{N8#y{(<)C4t z961P+iFyAXiz!5lsRoq5=_W}krAeVEzxoP2&j<7*M!8(;ou_4$7Fr3Y0h+>z73ysS zG#U1CnnHaF)#&rqmEr@MhB$Shmc2>KYUNCY-l0&PAc6&#`vA?u*KugSmGY2N_i^YqIbaa-CA}Uo{2dK=z|K)ly52J#{unxoqk85uP8KI zKaO81-v)HCGgppk*-y3JT=|hgzq8O!6mk=6eV+VGT#N(mu*tV^r{I@b)}Uqcb+F*aqr@T$4fqm^c77LN#^S` zO>4SH(~C6Sjx;K}lAl4kJNXFGt4rJC^JRJ24Sy%~L|c?|%Rl3#q`mxCmfn-^yJd;7 z96Y(Pg7Uu|sVVj3?utW+s2r~Nj5k&GPk2vas@yPv`CB!87t)k`Xu_}J`pMVOe>gy~`TFLGCDHzwRjexX1Ke) z_vI;>*Z9}+h~%_kP@L8rB0DBWEpH;O|KJo0E@wwQ{?bT_^u1`5izn8%p^^@)*{Mu4$yaUcL&b zUOuYO5$7k#AA1e*w1HIWNupmn2IU`;zxJlcrs<|$qV%|Tvg}dlh;wS`U%gZ0utL{K zTWKPGn!IewE-kIY`;`g0ZZUmmmWI=ni)sncuKpb<|A*2veEKX?mbj;MO?;LtR_Ks? zxbzsxIxX~RK(pm~Ln&V>y*xfgYSPM6egJ5m+^*0OVUHHbZ*AGjrN8#hlxt=f%2e5L z?`)|=R0W+0`_Lx+7NXSW$xRBG(L7IXS18r6q3l+aJ#Huyl=?h*%1|aQD_euIXKWeA z;XHX>p*!W|=zCGN7{Plm(&x!ag#w=UDs;s1{E(qc>{gy1wPl9qL$>VAWo*4hm3Sy| zQ`s>=yM@*UOda*oS1U;pYX??M5!qx?v(AF2rR)r2F?nmp3Wv7K6Kzobj z8Vh|1?JbsDEks$`<$eo&5B1vRA%%`4D0RC$q7Wtf1j-nL2Ab%QTNN_0bjVSKj4T~; z%upt#mamC-$V;}2JUisLDbxOS$SVr5g-1a-G&kJB9)(!;4RR?eJDxB5F3NTy+Ac^o zq);H)^9q?Bb;yf`GQqxgNDXiQ3tRXxxExW)SkDT1LLtLtg{)+7Y<0atIu$yk{aYcM zY#IBvLbjSR?cWL+R_IRYEZ-_C@H$}f+1 z${vNxj9V`c+OkiUAIB$1TX4TEm}8sdphAb_d*xFTo8>MGy$I-y@{EO!m!F>4DvNdJ zazr>Adt^uM;=nhXt!4$QOHQ$D-GPvS?%^plZB|yUP&uNE*B5$#P=h&(S%?38;`68*9acNPPy8ouiaG(!ShfAZ>409#Y7(H!Qul?HFic zSo$r*J`BsSLWdHcM<0getrq%5#hUoA++!im_hI>{g*e}b<%mMp%l9iTkB>;F9`#)> z#{pd>Pbp-qV6SXCkF8%X10rD{qCFO84Gcw56QH}EIT9@O_-X% zs%s$a-&xi+3CHlIfx}A;^w@;7+$gUsBXnKj=?Onf+$c322KwoQV}NE^=(iJo z4QQE#{xab|0ByEVMdjZB4O?hRWuoLpxyeE^DpP>&w@^#vL_iN)XnEzSfS$HcSLG}~ zFIgy4c_yGJw;7P^s><^KO}5Z2l`8-(w9vhkoq$$b=wp?a0_wHU=PS1Xx<;Wx^0mqv zqBly}3gsz3sN7rfHtAnQ=uY{0H{UWNX-SNUQ_CPxlNiB zIwVafd#B8@W$Dx>OYW3=ZP}XC)WqF#*g~6Azl+`@4_V6L)K^OWQ93Uq&qMNmQeEGWj`qrOQyB zQvL7AN94te4YUQ&m!#%WLT{G0RR2fvh}_C;BI?~+eZG8EmTflB$E$xA{hBp&dUZ$e7^F%WpStfiUQBLGpx{^@}=6X*vsB)q3z|LD@!;} zgea5F^9F*{H$;<8beD3$dDzrMsgt(Q0Z3i$v=~UGu5cDBWPEvr)1}az@>1<7u?pv) zg`B$YlvOxywb10cQ(}1H27eLVO&pg1dd%s-=MGY~>@jC`-Lqu{=$g8pmQ_2qD;KjG z);RYlWLmFr?(ZkpJ7re=R;h6wQpix&I*-`0miph6)jBU(XdNi)oRtHnUJsyp=ZJ-_ ztUq4X;Jjp^_td-PlbrORq5NWfbvbTl;xFjK)V$Okc$O8X`&!06oK!w74_#9?qZ~Km zLiKotN-pgC4N=^2vJmUxhMR@h_c_i=ZQb-}uG6WI>HAzKeI;p)Z=LJ3Sm=y~?(%ug zP79siuoX9h?y(U4?gHm&3tiZ-v-}L_m_lqJTfWeFMIp0uJIjgsY~hgXY)H#lPK|}G zY&gd`%b8}OeGPk2w$MUvX}GHVEN790Zf@8QXqkavXKx17WucYM+se;&dJUv=tkoIL zLs!Szoa^(@m!ju5x91^87C9d>P~yW4A1q(weAGg0VUcsxLTuq&=OqKlgAE@q$2~AT zQ$8eLY?zv8cWNy3wT6evmpW++J>Bqy@(yRUg`RKtM)`7Q$Ur&+Ryfz&vfnoxlNHWg z7J8-O>ex!>u!Z7{Uy81B99H^ z_b7Cm+|>BhicaT#Q>Lw7qZ7gegllF@j*D}I;acO!LWzvge${M$8uqW+pbhD*cw*VEI& z*!{h}zi|R(GxC^GFk@$AW{(_sxw4QF<4R46I(b1$3m8WV`G}al^Cr40%aoq;C~D_X z0q;m5AIvh-`aftb)4Gww@Hd%$G=QK}@BZo9KJdIRlPMMS# zSKe9AKHi1Y(N!S8d={AK7<_SChBH%F*lt863EB-y_1cu-86D1>8NH=}{4Yc5$nE(w z@V$2_CY+9?A;!gBn1I8H@&SKC8BV_pT{*I~k!gP@HTWA9b9Yf%qBqYQaqqAm_pL9* z^Z!%v?F~~w)l1ApLU*tq%SznBK-|oxecFXG^NKNJ8Lae zo{Nw_4*GgmocBqKn{?V`u{+6GsFEzyR^Er+O$C0XdoSc<-N}&Q9gu;Nm&v8zTqaxG zbDT2pJl|QSG|QC3GTG~{aaKc~O->i&*@cwyEYrHnY`+?y#c6WA%k=F?sijBcQKZN4 z1~pr3N8h`Ur%pC&Tbs3yz1qiK<=L;4!&<9fCA>!S*K2x{rnhT)kEZu)dRWs3HGNpq zBbq*;>C>7X)%2LA{VMaj5)5m2JEcWEcA6%S>;#6XlOpk2Ec^vb%YkE}EW11e( z^d3zQYkI$?4{G{^rpJ`?QOo}k`A_#SB$3F2kmOm|=g*}!a=VuPPRDeSL(6{{G@G0w zpxK3#`n*Xs_Jo!`t))k`^r)8JuBFGc^d&7luBFGdv_|o-C_d_vXVfLnGR2pvgOIK^@6K1TnbhDQBYH6>QzN9m~ zU-83=r%sMWhPCu*t$U5uyA>HS)Izm^_$X@L)F>BCxjL`#oo z=``)j6N-OY@lP9`F6ZDet^1P8`|B@h{;11YcGTr8`?F*t7e|k}^twk~dNBG=2YG7X z73CR?sGcL#^HKLeWIx^?rC)jwrE#|mr4!wn2xm>1($rYrNJ__fTjaW^<9yS-A=)nQ zh;UtC-FCS<(uMQ`nm!OY$LW*LAe|gh?;4?Zou>I|nx7n@%#$O!3TQe@OBX7Bp<)(B z*o#GqUxZqBZ9j{YV{x6cA@&rc+7bJH>_+Fx*z>X5oOi{39=i_O#{EzB zE7prz66x1k!x8$lVI8S%C*w@^7AenbwDcO~d85{1A04?8z9lW6LH?LLs_EA>{kEph zYWfpRf1&B`H2t%tj#@~GT3|}kM#UtgNoIHnta5XZrsWKzv!n&-JUJKXLRo^eMOGkP zB&)p&tR5F3FAi%(9o9-XtX1Z)R;9yQ4O%)`OPjQGnwF-ube6Nkn}qx8OU)t$5$94Tn)zl%5^Od){UHke*w1 zZ9ad6=EJ4$4q=`wA-$7D zD{sK_s4kvfJ`?E`Xvf7@iCU3n!5jY;3%I)Y2JQJsN5C8BJK*Zd0qiDR{JT;skRC+r z;^5n>7b1V1rnjIqoVMVJ0T)lzUWD{EwC2h?@T48~fpQ7b+vQTEcgW>P?}QXCzKpX4 z>0Q!|^j-M(CS9y_8Km#VcV=C=2fGdz|Ekw6q~FDplCC@l8D0E)16QK;2~H0A3QcRA z5n$?^tAMFR+K=x`zga#aKayYIo>7O>;|w`_oNJv!&MnRz&OOe3&ObXJa~^WO=se~; ziOA)Lh-ZG`{MM;*r@OP=Gu?CD4tI^a%gwp_+&8=b;J(v+w|k%aFYYJY&$(ZAzv2F? z`$PAq?yuaE$b`t`$h63;2v)twvdHR4S7dXf7v6n1a!us=$W4*kBlkq^j~tFX7=#^}`OjOhGmYqUMO3jb}0c1Qc7S4Q_nZ;IX#eQ)%i zq92Q{id`G~NbK?0pJN_AOgGhw9^~FJ{C7CUU1{Nu&)D)WjH`g1@h_s!+iDi~Sg%sT zFx_YH%<*WtXYnjCaZ}-0roq~#<2M5qJs+0602a!pUC)v?Ou7Vjakj|W&R?C)(E)d9 z>`J#kmUGW`u5&+(r?jzVhz#U;&=Od@hlJfuwkU92R)SyS${awTT~1YhP(R)a~EdzN)DvjJN9LLrn?t?;YB;p z-rFnLp)IQhGgppu_xC}1qvbhEv(UrJ?%d7|8Ojwf6mTpEr(yt;lT{sqBLf+~ds}}7 z)Zn_ldvFKz1JT45an#szLr937SUTeSnZaRMlii(J3jt--vcB9k&et)R31 zUaC=>=R%YwA%Z8C{Ieopt_T5ly7{YK-q09UFGi$pCGWjup zYN4lKM5yTemTEZ71z^|SAv3Rw5Sx}|df+p< z^L{~zY4%A6$Yv-p=(Hsx!CS#=EV?(?&Qc~WRlr`x8r z+1`w7va<>OBV06lWZiZZbrWZ+EFT%{fq87m(09oN**@dFR%d&<`?cXNe=khH_$n(~ z4l{t>MCbJYtfU8avTAVnj0Knydpo;*OsGxm!?37rBf}XfXBVx>_Kx&t&f^3+0nMCV%w{d_=T3J%Lo019H5$+wbch9L~dQVH&$LUEMwgT-aO@H&ob=9r59XRjkgPR>(Aw(Wtm)$boRq&0s{{N0n<=9rWZmDzo^cVY!(a6U=fZ^ zu?S(7D&-zHCOk5xOB}m?UeA^-?SonL3d`}{c`WMgUG8TGj10xa^JNFUb)LkAJ3S-5 z`ktI`0vD`AwgmrJYL6KKhDw&PDO&}{Avr&XFG1vnxA*Ol?PjW3w@VRdu>o3#>8eck zE;1ZK!SeoYybU-^A2!60XOIijkTEP)ROf}k%jhaDyBTb4*#apvh6}DbJqt#{-W5Sw zZsvxW`+b?5;;gymeOnlrw`)bN%_58&*s{dLLtGb8mu>{C)c5bAQHOAFw-!=IgYZqY z+s|;2O0-=FXcSi@bWuqj7(%ONd`2_S0AhR&T2#bBO}q$wiQlb@HX7iJ$n-L12qRFkYYEp-w~Ze-i`Y(Ikg4MUk8PAFM) z-u5k9x(BB9bocDcEI=$f?05IrSRv>4=r9jJEyw@T?)Mu;im2Mp>w4KLn9O^|7THr0+RJ(L^9K4L~Z!$h6Gu5`o zEc&Dw&aA+@#@+pDk_NGAaC=tAQe6>MrYbgtw`sj_t6S8Md(4O$AfBsM=V~k5@O(9E#2}4Q$QG zSCBN2a$rlaNDORQ39p8=ZD7lC1iYHDW$S$6i_C1HT2*0%$}c%)14BiqWpfQM{*}W4 zu?(Q9Hrf0TGkh^9KM3^J zaDlr+!J#1x%~FGa)QB!ke#nfnbg4c_JgdI%6tVGnTk3tE8+$atm@NXBO-g853%<5Gxxm7@PbmZx zw7{|@d$Hp6t2A(>dg5Tv)(*7PK(_1G+8A7X4m!!To%(g!!Fk)|qj{L0HR+eUVTszT^6Z=t6!_AE*THNxJlIzX&Q zbWb;8){9cXxxASMg)lEuna&(MbQlU*>^rS31{KC23LMO`QQY=8xI%^HeS0?a<8UjJ zTQ#WKu$|HE2(})eR18&($*dj7!72;W*Tx~-ri>2Cu~aTFF@>ql;WHkN3rT44GM+8u z)dHuLpCw%O0%XC96?w2??=_C+D)w623UQB0qTXuAdMd`RfnU-UCji)YY_GKY*=<*d zo+lPL{`p1?wgSTivlQ6P(!dto`t+FXhUB(zc`oeftQpe=3P>10F=7W#LUj*li88VV z#*dT194114W(Q&ifp`#B1~S7t@vmX58r+@Tm60Wx9esl~zp6dAcd!Rraa0w}FYWH{ z-`3rO%}bEMxuK;yIrUdj5lJFKX*Tn{ie&6XNdfrpWHlY^)hbJT1ym3HGGcFuWX9CIUhf;pM! zQYq+ADLT%&%;KV}T46~rJ`!<*F?8(k%xQ?UZ^NMXnYno&}gy!LT%WWov80f7&X@1$^jKZEa+&G`)J< zFFsEoaZIW=5_CG|uIj^mk!b_nc-vTy`fzNwHp^30o_Y@=lRt>=#UN2hj5qe+V3xxl z9CzsC4}c7|5|)tj`b^n_m=BqG80gGyYvig*MW2C5mCFol>)+eeH{74e2f4vPB1|~A z6B7_}RCvq<7gHb)3SnGuQubhLyyAhO?!mod3$Si*V>Pyb2Ilwe*f~y7myb|)pxfV7 zsKrTMfb3!DdfYeY8_3MzAYrlFknwl-VRxPHIqm&oGcJX?N{rP%cX3~?4|gqaqauF_ zJBlwH1y51@JY(A+@rYKp_3>6sp>{wXxW$mb*0Zj`fMonajV|0@+fjo1%=>UZc|Y#e zor~W-{MUy~Ublriai@3_ej~v4OE12*#A^okew*-hag$#UczeG7eDGrFKHTfuum9mS zVn^n-<7ra7i-LQ>OK_LB3-^aN*g9$4@6DjaU3iiNPnT$InZ6Wvhu7fyEvs;Ux&!sL zpzYPT!@MG2?-bmg#4olPPq#|^6jQG;2VU5`K{jmO(UYKG5;t;5e+7Hoj&V?J>gSg>*71DsdOZMUhc_uFc)yx`$s4)=22Pzu^ei$!- z2O?8}q|brx2wG)}UD|qq=NXoUs+Jh(WfD6$dRT22YsZ%CgYwLfO9@MrM`RYbaVSJ< z6mv`ClVzrj01xU?gV8#tZ_69ZQpi52rm{o(z#jG~E{EqQHsN7`6H}}PB{eJO^rGk6 zp`8(Ed-yeKtOEVTTB}dCsi8^)-&H6HG%l$g=+~IC8AT}xv@W&d=~+@{3ao(MISNDg zg4-e(Rsfxcf8D;&+fHz&HQ=}ink(SftK^DpWM60%gP2anj`|FJ{g86)1#J&{xz<{V zjKT+2B~y#($6BY%E=ce?w0yGZDcj{3?S@oc$m2dKau|h^3*6dOLNktQw8y((0f9q6 z-#dKtVh~e!5TmdcGa?H<%fM#{a26Qa{~)+_0^%5(zR<#R_|HsUnPDW_pqe-Kp9?vo zg0`i0fy~FlXJ_Nrf(KU4(!9(y^_QbKtq@gEspM64e)Q8!%!%dOU=>GNpL-2L8tSi2CtLG3ToTd}!8}2RNPglL{8H0kVYM zu$+40vY>sLVYs~xO6zUZSIwXoDU9cdEnQCTf#zv--D+VR8`__*n11xoSm7RwO@5Zm zpr053)iACr)Oxp}em@qbWf<9E)hd@7sSQ)ELOZkp`X08K!B<=hqhBn;D&;)@S?E>R zx}<`+l$WDA%$*jx9p6+e*z0y+NMY8c5T|nXHa~~!!%&Fobi*k;-_2|d`zgp3!D?~I zB`PQT+@vj12YZpHC*|zT!0wySrz}#_#udQPry04!lFm_FH)=?up$+_B$m70BkX$uA4xAXT3ZrXfX`}ktHBLK z7q$}m&osjLLeM&Qi$qZ8OJ;5HyK zUJFig_EOYqN1V0-bW1Vbn{W*<8&R?XHMfACFG{RMYvj5NvuFoKa0HLr&cw!R4`$K$ ze7I3suXQdJDeu=2?a^8?BV3~cyxT#`ZPFHOnM@xELDKl8<~sAlHP)f-1(1J>wuP@C zof)R3Ue=?9EudP5|5hW%t=U?5H0osobVx|f9lw^L4RpY97`Jx&__fUlb)XJw79?GT zcH4pB=omdqwdv^=m5L*ckuBvFyTln_ewL?nJ$&b~l3l1ahA-zTB%&>x6wh zfqo0Uqx9=+ecICo{8wykg}!V=OY70+cIap&(!dU=K2$M_P``Zr=utj72)MLllF zX+0gtt<<`Nh$ml}N`9THu}*D=v%=UmxAgcH(u`s|Tnm|LQIwr_(q-)gJvp^b8zT&=OVwKEXJj zIhF%;y$(8L9gaX3@@A&cvO0m0*0HrXUK|%QDy+8*_1R0#Sn5D6_XIU*SCn!UG|Q2@ z%+_yLIo5%XObO-z=fw(@jAO7$=c~*gUn1k>D9LhgTB~x{c|C<~F4xg#iySRdnPV9_ zlVeYNSqn+nKJBUlxYd9zReLfsfj)4(dc-bxr53!-fPMMg)!O^@+GgNijW!A%IKZQC z2k)4M=g1k#aI3?mmkVAm&WxI5u`U7(GZ~I`+wK1r8;tEd!6Nv2>dk?$bMa$3-hwGJ z*FY(BjKzjcMQ{P)@(?JIL2h^%+5*M3tD0mA`xaJHp=<_%;|(}qqOuJy<4{+lRhfFR zH3lv)W*Qf_A=86Fr=v6Nak`N|&7Ws%aQm|ZDo%8o*c$vUQ=Y~YIPE&rjL>S{K-m@t zoV{9#9F2`8Yz%>h5|}KF1cNxCpqF#8X_v+mjj7}(-3B!!PPf%+Vr-2D9rU*YOD}uQ z=_ga!&T7=4`{9H#rXMVCaAxImU>|s#LoG(CM+Z9yj3zKlQA9oOos zxzR2@#*q5)gJ{VV!ssTPZ=Fx zXQADEh&u4!m0>jZQ!uv&Auq>zHm=+tn5{l!!7)vt?a(PS&b7H+I32Zuz@J+HZkoA4 zw%bFz8^iG0Y_Ug`&7F%k!kVBJvsE->X-@EqDVsnCTb^m?xn*QaffbBPJ1HnNb&QQz zJ`v2V#>+9MX2aIzA#KH5Sv=)mNIN>`jc9B07|GJWU4@{P9(r_(q@Ig6gyif(-9XCM zRS(}wHuAzhRu}Sl+n!-0+KiTG!naHH8S8|nheRw4Xd0=%myntF{b`G zw)Q!cd#b^mYjMH$bq?C#aTqA-NAukbKEPjCke1ZJMuu}QxRXK(&d?buH`{I2n*nKf z8}i?bGCls9Sm79kc_a9wB<`~y zjo=e8$l(Yh@{bowjQ)*>Av~Pr!8(sLi1Tsq#Vh@koPHJHz~lN_PCVy2k2dmFKXZJ# zaeXIRhF_c#_EhvMJXT@5cpeXO&H?`u(e!{0rTE@=53ke5=Y($s<3G}9PtYfu!y1x< zrur~m@U2tFuN|U5&0h2vhm0k`XiM!J)E>Ptms3Y;VH_It44eKF^qxIKDOwzYw8)jt zQBCtGL2#(dV*?)Php?dKs&Ha$*;2F%y`DOLZ`rQ#dPc7Uq@8&pTBFy1KF}`x={C%p z(K@hrXg#!|O=0xM)iR8o1I&QxnOHrTtq%9u;?QHRo;XBJ6}VUo^hKM*LvN$>mB*qs z?wI2zB|&YD<{oI!*kEuxBGX6rWC;D64atg*Prz@F>3RO(w}7Fg6^@xPhSP&Ki~Bu_ zs@~M&D!LbKW-;nMY*0=P?C%8ScvGH{4p$4tHgfXV9`tJ@#5E6o0AtdN7R&*K%%lc* z1Ztv@UW^UxjdnO2B}KHgi%_x+z2mJCbBK!DX_FWq@^FD$2yUZHEU8B|h*p*%4h}ZR zj5oLi<6#ZAqj^03y$ju7l#=UqwA_M`;$bP*SSh6@IPY+vT^`n&Okj_wUCs~sFzS7T zTENXM9&m9DlNsY5c7#`DQ5-0KLt2bZVxbXQK^O;zaQ&mzCZIY@Kv$YA3Rm7X3PQ~QOlcVCe z6?pNyqM{`; z^WBP6jo0K{?@k}y4}TB&kfs&X-#dV^+BdZ}AcwUQD!abf{L3p1Rm%^n4;+6)rtq-rOy{Z3Vx zxm23VG;`@Rmo9TzXf7@0vdCN(o69nDnPo1U%q49utIeg!g9;Lm93XUGEh_FnATCf< zvlMluMWqIag78PB9TD0BG6JLxR4vKcoK9%;fJ;E-Cp3N%P&lFC5=^+%sq!SS za6;p|kkbi`E?njHb2_2X1FmLL{aZXv6Av_c6*Xwdk}=z=?{V4t22mazC)*mh1oiGBZ3^+Dk*MghPuz^lwq02*BIYy56}(w?#{3d4 zOTLVc5jX96!85r~qi?wE9R5lf&Xsu4V+Aj^e_vg;@+5Iz$ya!H;IeNjBap60!fTX% zCE433dXJGOv53iNvcPL074N;Fc_sBfs$8Q;wAPS2%Zu2&$BK9uU*rq2Qa1D2Z*p9V z%Pu5!ydxoB)QKa>h`?VqUyRdIeY<(MKTOe-^kXoQhvzU)D z-YRRbC>L}o>VjILvWR6`Fe+Dd;hdDHb-TZy zp%DvJRpeSS{!5Z;ImopvtQWAJis}1e`hr(Hyh1af9BV}lho!hs8}XvK6}OUi54V;; z^CP5bYb>TJKf4*!yH?v9*VJUgt>a;H?HW!4&?0LuaB1)v*%*#OK1U_Jl~0cZ!H zAAnW>mI9D6?7Nc_w7iW%ZQr@t>W8jFJ3bhXVcVbc^-{aet!koq6+J*!tr63lSCK|2 z!GRGGE0;-(#^s#JnE2Bh$fA}@ifC3O|;KLK&{F#=)p9wQJo>#^B}np%XQ6)B}j*<*u>fQ?8v*qO-^N+_s8Stz%B8Yy0+`OIXCO( z-LmVuF{uQxm_9N_ChEjFhO(JIFsY485~*%&A@Sr*h!8kR8cY%oOG5OhNd@ghSv{G< z>FnKjQYNcDMm;>R?3O*yb3G4qrBkJulR5>=N_PV0>DC@va0?#jyS@k75><&>uH^x0 z=z&$Y>VXE@lJBwpkplxtGej*1pcjB{0A>R)7l8QyECiq(fPMg40ayw^%E5c?Bo1m< z6xOd>+`NLnH%xs8h$maFtsUC!3M<7c|! zAxMb}ekwaJez$?~_Ih$PCgkt$w&O8-W%B~-m9nhIjUfA^iXeY{luw_ zLcI``?O80U_v?2rJiUJArz77!dg_M{zgT}qRlfWAw=|%4$?DbBQTEpo{hPEgf*o|F zTjak_3;(V;c>ejlgr!B#N7_#R>uokeJISQDR{re|f4ZAlcgSvUDHc-ZU-SFn&jLsR zu3BAsDqp2L!m5|utV&$da`lMSKGg!TG zTS??Wf9hp7WRkAWIfyrxcWXXc1J^AKkFb`wa}V|rIEB?+mH#T5DzHYWwL+~7N>c5H z>aK)WkcD-|ThP+zBDK36*;97bI(AcgsDoNbYm@7QDsj6O+x-4n9ac>@q3yKC%>$uU z1KlQ`??qCNJLSJdYlk*eyGedL+7Q2VNUOSyPivvNad@2_Qtg`V+%*?9><#<&;*?QN z3oHz*`DSb44nJEB){3yL3e!3dkp9`ct+eJVeFi-U^Hz2z^&af=P|vp6`nHYuUZp)M it%x_yPyA^2L1$SQ9Zi= diff --git a/NativeIntegration/Misc/UpdateXcodeProject/Assets/Editor/Unity.iOS.Extensions.Xcode.dll.meta b/NativeIntegration/Misc/UpdateXcodeProject/Assets/Editor/Unity.iOS.Extensions.Xcode.dll.meta deleted file mode 100644 index d19f66f..0000000 --- a/NativeIntegration/Misc/UpdateXcodeProject/Assets/Editor/Unity.iOS.Extensions.Xcode.dll.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 4b9607f4d1ede4513baef82b894f6ab0 -MonoAssemblyImporter: - serializedVersion: 1 - iconMap: {} - executionOrder: {} - userData: diff --git a/NativeIntegration/Misc/UpdateXcodeProject/Assets/Editor/XcodeProjectUpdater.cs b/NativeIntegration/Misc/UpdateXcodeProject/Assets/Editor/XcodeProjectUpdater.cs index ce58c2b..0f398a5 100644 --- a/NativeIntegration/Misc/UpdateXcodeProject/Assets/Editor/XcodeProjectUpdater.cs +++ b/NativeIntegration/Misc/UpdateXcodeProject/Assets/Editor/XcodeProjectUpdater.cs @@ -26,14 +26,14 @@ internal static void CopyAndReplaceDirectory(string srcPath, string dstPath) [PostProcessBuild] public static void OnPostprocessBuild(BuildTarget buildTarget, string path) { - if (buildTarget == BuildTarget.iPhone) + if (buildTarget == BuildTarget.iOS) { string projPath = path + "/Unity-iPhone.xcodeproj/project.pbxproj"; PBXProject proj = new PBXProject(); proj.ReadFromString(File.ReadAllText(projPath)); - string target = proj.TargetGuidByName("Unity-iPhone"); + string target = proj.GetUnityFrameworkTargetGuid(); // Add user packages to project. Most other source or resource files and packages // can be added the same way. diff --git a/NativeIntegration/Misc/UpdateXcodeProject/NativeAssets/TestLib.framework/Versions/A/TestLib b/NativeIntegration/Misc/UpdateXcodeProject/NativeAssets/TestLib.framework/Versions/A/TestLib index 4ec7dc60e295597ac8fb573e915fd489078d660d..b82b6803bf50562b2ae574784d468ec6831621f7 100644 GIT binary patch literal 6608 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 zp&jmcvTextureCacheTexture); + // note that for metal rows ordering is opposite to gl + bufferFlipped = !CVMetalTextureIsFlipped((CVMetalTextureRef)mainDisplaySurface->cvTextureCacheTexture); imageW = mainDisplaySurface->targetW; imageH = mainDisplaySurface->targetH; diff --git a/NativeIntegration/UI/ResizedView/Assets/Screenshot.cs b/NativeIntegration/UI/ResizedView/Assets/Screenshot.cs index b20e21d..eba46ea 100644 --- a/NativeIntegration/UI/ResizedView/Assets/Screenshot.cs +++ b/NativeIntegration/UI/ResizedView/Assets/Screenshot.cs @@ -45,7 +45,7 @@ void OnGUI() savingScreenshot = true; CaptureScreenshot(ScreenshotCompleteCallback, "test.png"); #else - Application.CaptureScreenshot("test.png"); + ScreenCapture.CaptureScreenshot("test.png"); #endif } } From 833f17be7ff3be293835120dbd11e866ba96b98e Mon Sep 17 00:00:00 2001 From: Alexey Orlov Date: Wed, 3 Aug 2022 12:01:55 +0300 Subject: [PATCH 5/6] updated samples to 2022, added common unity gitignore --- .gitignore | 72 ++ .../Assets/Plugins/iOS/NativeTexture.mm | 6 - .../Assets/Plugins/iOS/NativeTexture.mm.meta | 31 +- .../ProjectSettings/GraphicsSettings.asset | Bin 4188 -> 5952 bytes .../ProjectSettings/ProjectSettings.asset | Bin 31788 -> 72704 bytes Graphics/ExternalTexture/README.md | 33 +- .../BackgroundFetch/Assets/BackgroundFetch.cs | 9 +- .../Assets/BackgroundFetch.unity | 293 ++++-- .../Assets/BackgroundFetch.unity.meta | 1 + .../Assets/Plugins/iOS/MyAppController.mm | 2 +- .../Plugins/iOS/MyAppController.mm.meta | 30 +- .../ProjectSettings/ProjectSettings.asset | 864 +++++++++++++----- .../BackgroundTasks/BackgroundFetch/README.md | 19 +- .../TextureFromGallery/Assets/Editor.meta | 8 + .../Assets/Editor/PostprocessBuild.cs | 22 + .../Assets/Editor/PostprocessBuild.cs.meta | 11 + .../iOS/GalleryTextureLoaderImpl.mm.meta | 60 +- .../Assets/Plugins/iOS/MyAppController.mm | 2 +- .../Plugins/iOS/MyAppController.mm.meta | 31 +- .../UI/ResizedView/Assets/TestOrientation.cs | 2 +- .../ProjectSettings/GraphicsSettings.asset | Bin 4112 -> 5952 bytes .../ProjectSettings/ProjectSettings.asset | Bin 27540 -> 72560 bytes .../Plugins/iOS/VideoPlayerInterface.mm | 3 + .../Plugins/iOS/VideoPlayerInterface.mm.meta | 31 +- .../VideoPlayer/Assets/TestVideoPlayer.cs | 1 - .../ProjectSettings/GraphicsSettings.asset | Bin 4112 -> 5952 bytes .../ProjectSettings/ProjectSettings.asset | Bin 18712 -> 72544 bytes 27 files changed, 1179 insertions(+), 352 deletions(-) create mode 100644 .gitignore create mode 100644 NativeIntegration/Misc/TextureFromGallery/Assets/Editor.meta create mode 100644 NativeIntegration/Misc/TextureFromGallery/Assets/Editor/PostprocessBuild.cs create mode 100644 NativeIntegration/Misc/TextureFromGallery/Assets/Editor/PostprocessBuild.cs.meta diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3e682d6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,72 @@ +# This .gitignore file should be placed at the root of your Unity project directory +# +# Get latest from https://github.com/github/gitignore/blob/main/Unity.gitignore +# +**/[Ll]ibrary/ +**/[Tt]emp/ +**/[Oo]bj/ +**/[Bb]uild/ +**/[Bb]uilds/ +**/[Ll]ogs/ +**/[Uu]ser[Ss]ettings/ + +# MemoryCaptures can get excessive in size. +# They also could contain extremely sensitive data +**/[Mm]emoryCaptures/ + +# Recordings can get excessive in size +**/[Rr]ecordings/ + +# Uncomment this line if you wish to ignore the asset store tools plugin +# /[Aa]ssets/AssetStoreTools* + +# Autogenerated Jetbrains Rider plugin +**/[Aa]ssets/Plugins/Editor/JetBrains* + +# Visual Studio cache directory +.vs/ + +# Gradle cache directory +.gradle/ + +# Autogenerated VS/MD/Consulo solution and project files +ExportedObj/ +.consulo/ +*.csproj +*.unityproj +*.sln +*.suo +*.tmp +*.user +*.userprefs +*.pidb +*.booproj +*.svd +*.pdb +*.mdb +*.opendb +*.VC.db + +# Unity3D generated meta files +*.pidb.meta +*.pdb.meta +*.mdb.meta + +# Unity3D generated file on crash reports +sysinfo.txt + +# Builds +*.apk +*.aab +*.unitypackage +*.app + +# Crashlytics generated file +crashlytics-build.properties + +# Packed Addressables +**/[Aa]ssets/[Aa]ddressable[Aa]ssets[Dd]ata/*/*.bin* + +# Temporary auto-generated Android Assets +**/[Aa]ssets/[Ss]treamingAssets/aa.meta +**/[Aa]ssets/[Ss]treamingAssets/aa/* diff --git a/Graphics/ExternalTexture/Assets/Plugins/iOS/NativeTexture.mm b/Graphics/ExternalTexture/Assets/Plugins/iOS/NativeTexture.mm index ab61754..71ade7b 100644 --- a/Graphics/ExternalTexture/Assets/Plugins/iOS/NativeTexture.mm +++ b/Graphics/ExternalTexture/Assets/Plugins/iOS/NativeTexture.mm @@ -35,7 +35,6 @@ static uintptr_t CreateMetalTexture(void* data, unsigned w, unsigned h) { -#if UNITY_CAN_USE_METAL Class MTLTextureDescriptorClass = [UnityGetMetalBundle() classNamed: @"MTLTextureDescriptor"]; MTLTextureDescriptor* texDesc = @@ -47,17 +46,12 @@ static uintptr_t CreateMetalTexture(void* data, unsigned w, unsigned h) [tex replaceRegion: r mipmapLevel: 0 withBytes: data bytesPerRow: w * 4]; return (uintptr_t)(__bridge_retained void*)tex; -#else - return 0; -#endif } static void DestroyMetalTexture(uintptr_t tex) { -#if UNITY_CAN_USE_METAL id mtltex = (__bridge_transfer id)(void*) tex; mtltex = nil; -#endif } extern "C" intptr_t CreateNativeTexture(const char* filename) diff --git a/Graphics/ExternalTexture/Assets/Plugins/iOS/NativeTexture.mm.meta b/Graphics/ExternalTexture/Assets/Plugins/iOS/NativeTexture.mm.meta index 27e2e39..c17df86 100644 --- a/Graphics/ExternalTexture/Assets/Plugins/iOS/NativeTexture.mm.meta +++ b/Graphics/ExternalTexture/Assets/Plugins/iOS/NativeTexture.mm.meta @@ -1,4 +1,33 @@ fileFormatVersion: 2 guid: 25b8e0ad8f1b14944b9e35681a660745 -DefaultImporter: +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + iPhone: iOS + second: + enabled: 1 + settings: + AddToEmbeddedBinaries: false userData: + assetBundleName: + assetBundleVariant: diff --git a/Graphics/ExternalTexture/ProjectSettings/GraphicsSettings.asset b/Graphics/ExternalTexture/ProjectSettings/GraphicsSettings.asset index 27b98bf16a4a075e1efa95fb943ac8a03799fdc2..ce70b7204e4535f6161fcb6d34ef58007b4ce6ab 100644 GIT binary patch literal 5952 zcmaKw%a0sK9mi`n>m-DbKpq$fV26Z20@%*lyn{XavUi21PIyG%#>$3?&+TN z!@C<^eL!5u1#yZvMJOP|3V6>R6XITcGJRf%0!dYdSI(-OrzJnWKBnaJOV z!YA;&7tdS?>}Ly}x6t$3EOd?&^D&3t{{E?$W-Zs^#l@cY_;!d+<{q*T7A_zW2Bg zwy*D=2CuIl_q)D6_4T8MIyd@WgP)9h?IvH}eJ+IU>$|_f>-rwhZHlUvzkUxkxY74x z_^EGt7)%$wzT?JS<-WcTRHSTQ*Y`oV>+4frzYjII(f14ZsqY~?Zu0eg*oClteIIG? zx;`HFchYyF!HvG(!B2fB@wmy?_pl3L`}#iC;B|eE=r%=F%irHe8@#2@|L@`F`Tuy; z(ipsd{)qGc7ZiDaJw|uI%p~Y*JqZsVa^6#-Z5Z?N{62&}*#9S|NL%DQ|1YCG&*tL| zK3}_^o&c|}|9tI!`c#7({r`cV`aaG63uY$y`aeT=+c4(7{!>$=E%G~YVVC+(H+WtD z8Qo`5)oO{leypQ6KeIoNVGOPx?|CaWTT3mx@v!}`E#ItB z_G$QUEx$5@-?E(N%uQwcw=D0t5O&G`ZTYh^_@U)nOiS zr@^`Z+a>V$vgKE2@GZ-CX7G{a&mF<3Zx5XM_#Wvd>LdSwVI(tf7J5b8T?7hUm|ZaGl}!#{cr)C_k*OnFpRl>KlJFl z$;>4Ge(0CL;a&92`+@xr=r1h92jgcA;}1}WToDz_OhSCt?x$;Tx7rrc#xDZiFXi|9 zQ2Xi}F%` zGk9+KxWVW3_l3>Yos%B{yw~A z`%k8*;ygcpv+YxQ+ZySN?f(V-HaPb;qqopVXMTL;^cEWF%#W`dQ&jO2ct0rPYmeSS zBb}A;h2IZ4{`ToDG}4(LUkC8MQ+&NjK5Y*BcHzd?HyeCj96;Y)Si`%)zU8!~$@pRX zmhVU3*1m#BCvx}w=sWP%-#^Xw|NZ#kJP-C=)2zxbC2}$f`e|2XSr83Vv6KfPtnNq- zR8o1zyDRFNN)j~?mM3WH!=9*>X!=3spZ0;wWW< zexg*=oyfjo+jx)86*b95SK?$WLl!q<*4{y*IAM7s7>=?v8OF3#lwJ&FqG0a?0~H$u z>3Y-;^MTSD$GeN+o;)ah16u_xI*AHn%&>Af)7g=inkLPr4y)+`Ul-O$*f%8 zy|^EwVqYAHSJB3HZu-Jrae=4q&A5k^_u+QnY+|i2-sMgYwq-I@oB^R==10WpAi(mY zMimTcCZmB&?Akq>%P`0e1m=P{mbylRM9(Qv65%vfm)4g%SFfgWs6?JZW*G{dB<`uD zcpslHo8UN#hv*wU6RoXm@nc10G6+qmY|05;%QEekTN>}dnTkoms6D%|6l5mIv{yy4 z7pjd;XGixGWFwVq%JllhI9UuQBe}%kOlX*}T+FeDG7I`x1s#K9Iq7CeFqu#kVm=!eVCI@$O>ww5{Cbq(s58RsG7#Z##>uuCPgEkaTwenI@z{_D zW?R`V9zHk1ZKE%>^%M&`!C~RTcDFjVVHMtX7#*3<?Mx%kY51h74Kg3 z^tK&`V^06e%1T=*jq{|h($jf_S?%`Bg}bZvF#s#n6Z_#){_rWwmuj`( zqpWXUWK7@m@x_U04iEoHN*_O&XbbbpRogAco^$Nh6Rc?J-{;sTtWCx*dGt@ S;sWdGv71n|%H%M=?*9QeCQ%#! literal 4188 zcmeH~OKuZE5Qb}rd4^|r$C9@M7A6S_2nnG8#!-X=mMkF_NLJhK*p2M*sAnwVo!2aL z0G2sG&cT)~OBS2~#r*&D_%*oziz%zpRo_%~_59;lwn(lda{aT2T*Zn-WUIJdTyJd2 z$#^{WJb(iH=Gx)M{XZM;_l*B!=kRDX5B3xn&tRoJ6B(g?948|Y53i#o86A5v$^mj8 z=bqd^`~c2zlYS4;FYK`i#`+~Vjr=**GW;@}*JvIpSpNYr+1Z#mUc}r_$S=UpO}U$^ zkaO;NI4wPwJ+$=Piw>Wfdnv9xJ$HG^J^6|ASme})_dvt`-UiN3C%@wGbpJehcwcxb zvGIPX!xz+Zk82L2KDVF)@6G9)lX)Ge`9y!}_6<4rUxCy3yei<|;~397rZaw=@LMVV zBjLAG{CC3dkZ-$vIQK77&bGvAOk54w) zfz`ND(}A)o(&?U|uX?5lTJE>!haqKW1-mKhE;E075G*8{vEuGeA}>D(3bDI?Wj>Or zP2O_^R)_t8ZR+sxz&Fvb-f(i)^+9CSv?B{L1u_LP1u_LP1u_LP1u_LP1u_NxGX)mD dQm3DKHXmL^?m=n1?hCx@6>Zw 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 literal 31788 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 diff --git a/Graphics/ExternalTexture/README.md b/Graphics/ExternalTexture/README.md index 9816188..c9fb27b 100644 --- a/Graphics/ExternalTexture/README.md +++ b/Graphics/ExternalTexture/README.md @@ -3,43 +3,40 @@ ## Description -This is a sample of usage of **Texture2D.CreateExternalTexture** and **Texture2D.UpdateExternalTexture**. It will load png into gles texture in native plugin and give it back to Unity to be used like normal Unity Texture. +This is a sample of usage of **Texture2D.CreateExternalTexture** and **Texture2D.UpdateExternalTexture**. It will load png into metal texture in native plugin and give it back to Unity to be used like normal Unity Texture. ##Prerequisites -Unity: 2020 +Unity: 2022 -iOS: any +iOS: iOS 13+ ## How does it work -There are two pieces of interest: TestGLESTexture.cs and Plugins/iOS/GlesTexture.mm. +There are two pieces of interest: TestNativeTexture.cs and Plugins/iOS/NativeTexture.mm. -In Plugins/iOS folder you can see three files: GlesTexture.mm (native plugin) and two images that we will use: Test_UnityLogoLarge.png and Test_Icon.png. All of them will be copied to your project, so we can load png from App Bundle. +In Plugins/iOS folder you can see three files: NativeTexture.mm (native plugin) and images that we will use. All the will be copied to your project, so we can load png from App Bundle. -GlesTexture.mm contains just one function: +NativeTexture.mm contains just two functions: one for creating texture and the other one for destroying it. The only interesting place is texture creation extern "C" void* GLESTexture_CreateTexture(const char* image_filename, int* w, int* h) -It will load png image from App Bundle to UIImage and pass this data to OpenGL ES: +It will load png image from App Bundle to UIImage and pass this data to Metal: - glBindTexture(GL_TEXTURE_2D, texture); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + MTLTextureDescriptor* texDesc = + [MTLTextureDescriptorClass texture2DDescriptorWithPixelFormat: MTLPixelFormatRGBA8Unorm width: w height: h mipmapped: NO]; - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, imageW, imageH, 0, GL_RGBA, GL_UNSIGNED_BYTE, textureData); + id tex = [UnityGetMetalDevice() newTextureWithDescriptor: texDesc]; -The returned texture id is later used in TestGLESTexture.cs to create Unity Texture2D from it: + MTLRegion r = MTLRegionMake3D(0, 0, 0, w, h, 1); + [tex replaceRegion: r mipmapLevel: 0 withBytes: data bytesPerRow: w * 4]; - testTex = Texture2D.CreateExternalTexture(externalTexture[0].w, externalTexture[0].h, TextureFormat.ARGB32, false, false, externalTexture[0].tex); - tex.filterMode = FilterMode.Bilinear; - tex.wrapMode = TextureWrapMode.Repeat; +The returned texture id is later used in TestNativeTexture.cs to create Unity Texture2D from it: -Please note, that we made sure that texture settings (wrap mode and filtering) do match. + testTex = Texture2D.CreateExternalTexture(128, 128, TextureFormat.ARGB32, false, false, curTex); + target.material.mainTexture = testTex; When you press "Show Next" button it will cycle through loaded textures and reuse Texture object to point to different gles texture. Please note, that both textures have exact same setup: same extensions, format etc. diff --git a/NativeIntegration/BackgroundTasks/BackgroundFetch/Assets/BackgroundFetch.cs b/NativeIntegration/BackgroundTasks/BackgroundFetch/Assets/BackgroundFetch.cs index 7f1c5b8..325e8ac 100644 --- a/NativeIntegration/BackgroundTasks/BackgroundFetch/Assets/BackgroundFetch.cs +++ b/NativeIntegration/BackgroundTasks/BackgroundFetch/Assets/BackgroundFetch.cs @@ -20,13 +20,10 @@ void Update() { fetchedText = QueryFetchedText(); if (fetchedText != null) + { Debug.Log("Just Fetched: " + fetchedText); + text.text = fetchedText; + } } } - - void OnGUI() - { - if (fetchedText != null) - text.text = fetchedText; - } } diff --git a/NativeIntegration/BackgroundTasks/BackgroundFetch/Assets/BackgroundFetch.unity b/NativeIntegration/BackgroundTasks/BackgroundFetch/Assets/BackgroundFetch.unity index 06d4c32..adce9d0 100644 --- a/NativeIntegration/BackgroundTasks/BackgroundFetch/Assets/BackgroundFetch.unity +++ b/NativeIntegration/BackgroundTasks/BackgroundFetch/Assets/BackgroundFetch.unity @@ -1,32 +1,33 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: --- !u!29 &1 -SceneSettings: +OcclusionCullingSettings: m_ObjectHideFlags: 0 - m_PVSData: - m_PVSObjectsArray: [] - m_PVSPortalsArray: [] + serializedVersion: 2 m_OcclusionBakeSettings: smallestOccluder: 5 - smallestHole: .25 + smallestHole: 0.25 backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} --- !u!104 &2 RenderSettings: m_ObjectHideFlags: 0 - serializedVersion: 6 + serializedVersion: 9 m_Fog: 0 - m_FogColor: {r: .5, g: .5, b: .5, a: 1} + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} m_FogMode: 3 - m_FogDensity: .00999999978 + m_FogDensity: 0.01 m_LinearFogStart: 0 m_LinearFogEnd: 300 - m_AmbientSkyColor: {r: .211999997, g: .226999998, b: .259000003, a: 1} - m_AmbientEquatorColor: {r: .114, g: .125, b: .133000001, a: 1} - m_AmbientGroundColor: {r: .0469999984, g: .0430000015, b: .0350000001, a: 1} + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} m_AmbientIntensity: 1 m_AmbientMode: 1 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} m_SkyboxMaterial: {fileID: 0} - m_HaloStrength: .5 + m_HaloStrength: 0.5 m_FlareStrength: 1 m_FlareFadeSpeed: 3 m_HaloTexture: {fileID: 0} @@ -37,66 +38,102 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} ---- !u!127 &3 -LevelGameManager: - m_ObjectHideFlags: 0 + m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} + m_UseRadianceAmbientProbe: 0 --- !u!157 &4 LightmapSettings: m_ObjectHideFlags: 0 - serializedVersion: 5 + serializedVersion: 12 m_GIWorkflowMode: 1 - m_LightmapsMode: 1 m_GISettings: serializedVersion: 2 m_BounceScale: 1 m_IndirectOutputScale: 1 m_AlbedoBoost: 1 - m_TemporalCoherenceThreshold: 1 m_EnvironmentLightingMode: 0 m_EnableBakedLightmaps: 1 m_EnableRealtimeLightmaps: 0 m_LightmapEditorSettings: - serializedVersion: 3 + serializedVersion: 12 m_Resolution: 1 m_BakeResolution: 50 - m_TextureWidth: 1024 - m_TextureHeight: 1024 + m_AtlasSize: 1024 + m_AO: 0 m_AOMaxDistance: 1 - m_Padding: 2 m_CompAOExponent: 0 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 m_TextureCompression: 0 m_FinalGather: 0 + m_FinalGatherFiltering: 1 m_FinalGatherRayCount: 1024 - m_LightmapSnapshot: {fileID: 0} - m_RuntimeCPUUsage: 25 + m_ReflectionCompression: 2 + m_MixedBakeMode: 1 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 512 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 0 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 1227555799} --- !u!196 &5 NavMeshSettings: serializedVersion: 2 m_ObjectHideFlags: 0 m_BuildSettings: - serializedVersion: 2 - agentRadius: .5 + serializedVersion: 3 + agentTypeID: 0 + agentRadius: 0.5 agentHeight: 2 agentSlope: 45 - agentClimb: .400000006 + agentClimb: 0.4 ledgeDropHeight: 0 maxJumpAcrossDistance: 0 - accuratePlacement: 0 minRegionArea: 2 - cellSize: .166666672 manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 m_NavMeshData: {fileID: 0} --- !u!1 &125920478 GameObject: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 4 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 m_Component: - - 4: {fileID: 125920481} - - 23: {fileID: 125920480} - - 102: {fileID: 125920479} + - component: {fileID: 125920481} + - component: {fileID: 125920480} + - component: {fileID: 125920479} m_Layer: 0 m_Name: Text m_TagString: Untagged @@ -108,8 +145,9 @@ GameObject: TextMesh: serializedVersion: 3 m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 125920478} m_Text: Unknown m_OffsetZ: 0 @@ -128,52 +166,136 @@ TextMesh: --- !u!23 &125920480 MeshRenderer: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 125920478} m_Enabled: 1 m_CastShadows: 0 m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 0 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 m_Materials: - {fileID: 10100, guid: 0000000000000000e000000000000000, type: 0} - m_SubsetIndices: + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 m_StaticBatchRoot: {fileID: 0} - m_UseLightProbes: 0 - m_ReflectionProbeUsage: 0 m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 - m_AutoUVMaxDistance: .5 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} m_SortingLayerID: 0 + m_SortingLayer: 0 m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} --- !u!4 &125920481 Transform: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 125920478} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 1, z: -8} - m_LocalScale: {x: .300000012, y: .300000012, z: .300000012} + m_LocalPosition: {x: 0, y: 1, z: -9} + m_LocalScale: {x: 0.1, y: 0.1, z: 0.1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!850595691 &1227555799 +LightingSettings: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Settings.lighting + serializedVersion: 6 + m_GIWorkflowMode: 1 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_RealtimeEnvironmentLighting: 1 + m_BounceScale: 1 + m_AlbedoBoost: 1 + m_IndirectOutputScale: 1 + m_UsingShadowmask: 0 + m_BakeBackend: 0 + m_LightmapMaxSize: 1024 + m_BakeResolution: 50 + m_Padding: 2 + m_LightmapCompression: 0 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 0 + m_CompAOExponentDirect: 0 + m_ExtractAO: 0 + m_MixedBakeMode: 1 + m_LightmapsBakeMode: 1 + m_FilterMode: 1 + m_LightmapParameters: {fileID: 15204, guid: 0000000000000000f000000000000000, type: 0} + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_RealtimeResolution: 1 + m_ForceWhiteAlbedo: 0 + m_ForceUpdates: 0 + m_FinalGather: 0 + m_FinalGatherRayCount: 1024 + m_FinalGatherFiltering: 1 + m_PVRCulling: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVREnvironmentSampleCount: 512 + m_PVREnvironmentReferencePointCount: 2048 + m_LightProbeSampleCountMultiplier: 4 + m_PVRBounces: 2 + m_PVRMinBounces: 2 + m_PVREnvironmentImportanceSampling: 0 + m_PVRFilteringMode: 0 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_PVRTiledBaking: 0 + m_NumRaysToShootPerTexel: -1 --- !u!1 &1236988171 GameObject: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 4 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 m_Component: - - 4: {fileID: 1236988176} - - 20: {fileID: 1236988175} - - 92: {fileID: 1236988174} - - 124: {fileID: 1236988173} - - 81: {fileID: 1236988172} - - 114: {fileID: 1236988177} + - component: {fileID: 1236988176} + - component: {fileID: 1236988175} + - component: {fileID: 1236988173} + - component: {fileID: 1236988172} + - component: {fileID: 1236988177} m_Layer: 0 m_Name: Main Camera m_TagString: MainCamera @@ -184,41 +306,51 @@ GameObject: --- !u!81 &1236988172 AudioListener: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1236988171} m_Enabled: 1 --- !u!124 &1236988173 Behaviour: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1236988171} - m_Enabled: 1 ---- !u!92 &1236988174 -Behaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1236988171} m_Enabled: 1 --- !u!20 &1236988175 Camera: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1236988171} m_Enabled: 1 serializedVersion: 2 m_ClearFlags: 1 - m_BackGroundColor: {r: .192156866, g: .301960796, b: .474509805, a: .0196078438} + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} m_NormalizedViewPortRect: serializedVersion: 2 x: 0 y: 0 width: 1 height: 1 - near clip plane: .300000012 + near clip plane: 0.3 far clip plane: 1000 field of view: 60 orthographic: 0 @@ -230,28 +362,35 @@ Camera: m_RenderingPath: -1 m_TargetTexture: {fileID: 0} m_TargetDisplay: 0 + m_TargetEye: 3 m_HDR: 0 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 m_OcclusionCulling: 1 m_StereoConvergence: 10 - m_StereoSeparation: .0219999999 - m_StereoMirrorMode: 0 + m_StereoSeparation: 0.022 --- !u!4 &1236988176 Transform: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1236988171} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 1, z: -10} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &1236988177 MonoBehaviour: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1236988171} m_Enabled: 1 m_EditorHideFlags: 0 diff --git a/NativeIntegration/BackgroundTasks/BackgroundFetch/Assets/BackgroundFetch.unity.meta b/NativeIntegration/BackgroundTasks/BackgroundFetch/Assets/BackgroundFetch.unity.meta index 7df05e0..61823b2 100644 --- a/NativeIntegration/BackgroundTasks/BackgroundFetch/Assets/BackgroundFetch.unity.meta +++ b/NativeIntegration/BackgroundTasks/BackgroundFetch/Assets/BackgroundFetch.unity.meta @@ -1,6 +1,7 @@ fileFormatVersion: 2 guid: 0f5b62f77d553436b839a5b4fb564a19 DefaultImporter: + externalObjects: {} userData: assetBundleName: assetBundleVariant: diff --git a/NativeIntegration/BackgroundTasks/BackgroundFetch/Assets/Plugins/iOS/MyAppController.mm b/NativeIntegration/BackgroundTasks/BackgroundFetch/Assets/Plugins/iOS/MyAppController.mm index 4e1f88f..11a3c71 100644 --- a/NativeIntegration/BackgroundTasks/BackgroundFetch/Assets/Plugins/iOS/MyAppController.mm +++ b/NativeIntegration/BackgroundTasks/BackgroundFetch/Assets/Plugins/iOS/MyAppController.mm @@ -25,7 +25,7 @@ - (BOOL)application:(UIApplication*)application willFinishLaunchingWithOptions:( - (void)application:(UIApplication*)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler { - NSURL* url = [NSURL URLWithString: @"http://unity3d.com"]; + NSURL* url = [NSURL URLWithString: @"https://unity.com"]; NSURLRequest* request = [NSURLRequest requestWithURL: url cachePolicy: NSURLRequestReloadIgnoringLocalCacheData timeoutInterval: 10.0]; NSData* data = [NSURLConnection sendSynchronousRequest: request returningResponse: nil error: nil]; NSString* text = [NSString stringWithUTF8String: (const char*)data.bytes]; diff --git a/NativeIntegration/BackgroundTasks/BackgroundFetch/Assets/Plugins/iOS/MyAppController.mm.meta b/NativeIntegration/BackgroundTasks/BackgroundFetch/Assets/Plugins/iOS/MyAppController.mm.meta index d118d44..4d78b54 100644 --- a/NativeIntegration/BackgroundTasks/BackgroundFetch/Assets/Plugins/iOS/MyAppController.mm.meta +++ b/NativeIntegration/BackgroundTasks/BackgroundFetch/Assets/Plugins/iOS/MyAppController.mm.meta @@ -1,5 +1,33 @@ fileFormatVersion: 2 guid: 356656511764c4c859451ec0f9ed873a -DefaultImporter: +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + iPhone: iOS + second: + enabled: 1 + settings: + AddToEmbeddedBinaries: false userData: assetBundleName: + assetBundleVariant: diff --git a/NativeIntegration/BackgroundTasks/BackgroundFetch/ProjectSettings/ProjectSettings.asset b/NativeIntegration/BackgroundTasks/BackgroundFetch/ProjectSettings/ProjectSettings.asset index af9080c..6bf7f4d 100644 --- a/NativeIntegration/BackgroundTasks/BackgroundFetch/ProjectSettings/ProjectSettings.asset +++ b/NativeIntegration/BackgroundTasks/BackgroundFetch/ProjectSettings/ProjectSettings.asset @@ -3,54 +3,94 @@ --- !u!129 &1 PlayerSettings: m_ObjectHideFlags: 0 - serializedVersion: 6 + serializedVersion: 24 + productGUID: e4fd3e742048646968dea9f619fbc3b1 AndroidProfiler: 0 - defaultScreenOrientation: 0 + AndroidFilterTouchesWhenObscured: 0 + AndroidEnableSustainedPerformanceMode: 0 + defaultScreenOrientation: 4 targetDevice: 2 - targetGlesGraphics: -1 - targetIOSGraphics: -1 - targetResolution: 0 + useOnDemandResources: 0 accelerometerFrequency: 60 companyName: DefaultCompany productName: BackgroundFetch - cloudProjectId: defaultCursor: {fileID: 0} cursorHotspot: {x: 0, y: 0} + m_SplashScreenBackgroundColor: {r: 0.12156863, g: 0.12156863, b: 0.1254902, a: 1} m_ShowUnitySplashScreen: 1 + m_ShowUnitySplashLogo: 1 + m_SplashScreenOverlayOpacity: 1 + m_SplashScreenAnimation: 1 + m_SplashScreenLogoStyle: 1 + m_SplashScreenDrawMode: 0 + m_SplashScreenBackgroundAnimationZoom: 1 + m_SplashScreenLogoAnimationZoom: 1 + m_SplashScreenBackgroundLandscapeAspect: 1 + m_SplashScreenBackgroundPortraitAspect: 1 + m_SplashScreenBackgroundLandscapeUvs: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + m_SplashScreenBackgroundPortraitUvs: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + m_SplashScreenLogos: [] + m_VirtualRealitySplashScreen: {fileID: 0} + m_HolographicTrackingLossScreen: {fileID: 0} defaultScreenWidth: 1024 defaultScreenHeight: 768 defaultScreenWidthWeb: 960 defaultScreenHeightWeb: 600 - m_RenderingPath: 1 - m_MobileRenderingPath: 1 + m_StereoRenderingPath: 0 m_ActiveColorSpace: 0 + m_SpriteBatchVertexThreshold: 300 m_MTRendering: 1 - m_MobileMTRendering: 0 - m_UseDX11: 1 - m_Stereoscopic3D: 0 + mipStripping: 0 + numberOfMipsStripped: 0 + m_StackTraceTypes: 010000000100000001000000010000000100000001000000 iosShowActivityIndicatorOnLoading: -1 androidShowActivityIndicatorOnLoading: -1 - iosAppInBackgroundBehavior: -1 - displayResolutionDialog: 1 + iosUseCustomAppBackgroundBehavior: 1 allowedAutorotateToPortrait: 1 allowedAutorotateToPortraitUpsideDown: 1 allowedAutorotateToLandscapeRight: 1 allowedAutorotateToLandscapeLeft: 1 useOSAutorotation: 1 use32BitDisplayBuffer: 1 + preserveFramebufferAlpha: 0 disableDepthAndStencilBuffers: 0 - defaultIsFullScreen: 1 + androidStartInFullscreen: 1 + androidRenderOutsideSafeArea: 1 + androidUseSwappy: 0 + androidBlitType: 0 + androidResizableWindow: 0 + androidDefaultWindowWidth: 1920 + androidDefaultWindowHeight: 1080 + androidMinimumWindowWidth: 400 + androidMinimumWindowHeight: 300 + androidFullscreenMode: 1 defaultIsNativeResolution: 1 + macRetinaSupport: 1 runInBackground: 0 captureSingleScreen: 0 - Override IPod Music: 0 + muteOtherAudioSources: 0 Prepare IOS For Recording: 0 + Force IOS Speakers When Recording: 0 + deferSystemGesturesMode: 0 + hideHomeButton: 0 submitAnalytics: 1 usePlayerLog: 1 bakeCollisionMeshes: 0 forceSingleInstance: 0 + useFlipModelSwapchain: 1 resizableWindow: 0 useMacAppStoreValidation: 0 + macAppStoreCategory: public.app-category.games gpuSkinning: 0 xboxPIXTextureCapture: 0 xboxEnableAvatar: 0 @@ -58,60 +98,107 @@ PlayerSettings: xboxEnableKinectAutoTracking: 0 xboxEnableFitness: 0 visibleInBackground: 0 - macFullscreenMode: 2 - d3d9FullscreenMode: 1 - d3d11FullscreenMode: 1 + allowFullscreenSwitch: 1 + fullscreenMode: 2 xboxSpeechDB: 0 xboxEnableHeadOrientation: 0 xboxEnableGuest: 0 + xboxEnablePIXSampling: 0 + metalFramebufferOnly: 0 xboxOneResolution: 0 - ps3SplashScreen: {fileID: 0} - videoMemoryForVertexBuffers: 0 - psp2PowerMode: 0 - psp2AcquireBGM: 1 - m_SupportedAspectRatios: - 4:3: 1 - 5:4: 1 - 16:10: 1 - 16:9: 1 - Others: 1 - bundleIdentifier: com.Company.ProductName + xboxOneSResolution: 0 + xboxOneXResolution: 3 + xboxOneMonoLoggingLevel: 0 + xboxOneLoggingLevel: 1 + xboxOneDisableEsram: 0 + xboxOneEnableTypeOptimization: 0 + xboxOnePresentImmediateThreshold: 0 + switchQueueCommandMemory: 1048576 + switchQueueControlMemory: 16384 + switchQueueComputeMemory: 262144 + switchNVNShaderPoolsGranularity: 33554432 + switchNVNDefaultPoolsGranularity: 16777216 + switchNVNOtherPoolsGranularity: 16777216 + switchGpuScratchPoolGranularity: 2097152 + switchAllowGpuScratchShrinking: 0 + switchNVNMaxPublicTextureIDCount: 0 + switchNVNMaxPublicSamplerIDCount: 0 + switchNVNGraphicsFirmwareMemory: 32 + stadiaPresentMode: 0 + stadiaTargetFramerate: 0 + vulkanNumSwapchainBuffers: 3 + vulkanEnableSetSRGBWrite: 0 + vulkanEnablePreTransform: 0 + vulkanEnableLateAcquireNextImage: 0 + vulkanEnableCommandBufferRecycling: 1 + loadStoreDebugModeEnabled: 0 bundleVersion: 1.0 preloadedAssets: [] - metroEnableIndependentInputSource: 0 - metroEnableLowLatencyPresentationAPI: 0 + metroInputSource: 0 + wsaTransparentSwapchain: 0 + m_HolographicPauseOnTrackingLoss: 1 xboxOneDisableKinectGpuReservation: 0 - productGUID: e4fd3e742048646968dea9f619fbc3b1 + xboxOneEnable7thCore: 1 + vrSettings: + enable360StereoCapture: 0 + isWsaHolographicRemotingEnabled: 0 + enableFrameTimingStats: 0 + enableOpenGLProfilerGPURecorders: 1 + useHDRDisplay: 0 + D3DHDRBitDepth: 0 + m_ColorGamuts: 00000000 + targetPixelDensity: 30 + resolutionScalingMode: 0 + resetResolutionOnWindowResize: 0 + androidSupportedAspectRatio: 1 + androidMaxAspectRatio: 2.1 + applicationIdentifier: + Android: com.Company.ProductName + Standalone: unity.DefaultCompany.BackgroundFetch + iPhone: com.Company.ProductName + tvOS: com.Company.ProductName + buildNumber: + Standalone: 0 + iPhone: 0 + tvOS: 0 + overrideDefaultApplicationIdentifier: 1 AndroidBundleVersionCode: 1 - AndroidMinSdkVersion: 9 + AndroidMinSdkVersion: 22 + AndroidTargetSdkVersion: 0 AndroidPreferredInstallLocation: 1 aotOptions: - apiCompatibilityLevel: 2 + stripEngineCode: 1 iPhoneStrippingLevel: 0 iPhoneScriptCallOptimization: 0 ForceInternetPermission: 0 ForceSDCardPermission: 0 CreateWallpaper: 0 APKExpansionFiles: 0 - preloadShaders: 0 + keepLoadedShadersAlive: 0 StripUnusedMeshComponents: 0 + strictShaderVariantMatching: 0 + VertexChannelCompressionMask: 4054 iPhoneSdkVersion: 988 - iPhoneTargetOSVersion: 22 + iOSTargetOSVersionString: 12.0 + tvOSSdkVersion: 0 + tvOSRequireExtendedGameController: 0 + tvOSTargetOSVersionString: 12.0 uIPrerenderedIcon: 0 uIRequiresPersistentWiFi: 0 + uIRequiresFullScreen: 1 uIStatusBarHidden: 1 uIExitOnSuspend: 0 uIStatusBarStyle: 0 - iPhoneSplashScreen: {fileID: 0} - iPhoneHighResSplashScreen: {fileID: 0} - iPhoneTallHighResSplashScreen: {fileID: 0} - iPhone47inSplashScreen: {fileID: 0} - iPhone55inPortraitSplashScreen: {fileID: 0} - iPhone55inLandscapeSplashScreen: {fileID: 0} - iPadPortraitSplashScreen: {fileID: 0} - iPadHighResPortraitSplashScreen: {fileID: 0} - iPadLandscapeSplashScreen: {fileID: 0} - iPadHighResLandscapeSplashScreen: {fileID: 0} + appleTVSplashScreen: {fileID: 0} + appleTVSplashScreen2x: {fileID: 0} + tvOSSmallIconLayers: [] + tvOSSmallIconLayers2x: [] + tvOSLargeIconLayers: [] + tvOSLargeIconLayers2x: [] + tvOSTopShelfImageLayers: [] + tvOSTopShelfImageLayers2x: [] + tvOSTopShelfImageWideLayers: [] + tvOSTopShelfImageWideLayers2x: [] iOSLaunchScreenType: 0 iOSLaunchScreenPortrait: {fileID: 0} iOSLaunchScreenLandscape: {fileID: 0} @@ -121,60 +208,415 @@ PlayerSettings: iOSLaunchScreenFillPct: 100 iOSLaunchScreenSize: 100 iOSLaunchScreenCustomXibPath: - AndroidTargetDevice: 0 + iOSLaunchScreeniPadType: 0 + iOSLaunchScreeniPadImage: {fileID: 0} + iOSLaunchScreeniPadBackgroundColor: + serializedVersion: 2 + rgba: 0 + iOSLaunchScreeniPadFillPct: 100 + iOSLaunchScreeniPadSize: 100 + iOSLaunchScreeniPadCustomXibPath: + iOSLaunchScreenCustomStoryboardPath: + iOSLaunchScreeniPadCustomStoryboardPath: + iOSDeviceRequirements: [] + iOSURLSchemes: [] + macOSURLSchemes: [] + iOSBackgroundModes: 128 + iOSMetalForceHardShadows: 0 + metalEditorSupport: 1 + metalAPIValidation: 1 + iOSRenderExtraFrameOnPause: 1 + iosCopyPluginsCodeInsteadOfSymlink: 0 + appleDeveloperTeamID: + iOSManualSigningProvisioningProfileID: + tvOSManualSigningProvisioningProfileID: + iOSManualSigningProvisioningProfileType: 0 + tvOSManualSigningProvisioningProfileType: 0 + appleEnableAutomaticSigning: 0 + iOSRequireARKit: 0 + iOSAutomaticallyDetectAndAddCapabilities: 1 + appleEnableProMotion: 0 + shaderPrecisionModel: 0 + clonedFromGUID: 00000000000000000000000000000000 + templatePackageId: + templateDefaultScene: + useCustomMainManifest: 0 + useCustomLauncherManifest: 0 + useCustomMainGradleTemplate: 0 + useCustomLauncherGradleManifest: 0 + useCustomBaseGradleTemplate: 0 + useCustomGradlePropertiesTemplate: 0 + useCustomProguardFile: 0 + AndroidTargetArchitectures: 1 + AndroidTargetDevices: 0 AndroidSplashScreenScale: 0 - AndroidKeystoreName: + androidSplashScreen: {fileID: 0} + AndroidKeystoreName: '{inproject}: ' AndroidKeyaliasName: + AndroidEnableArmv9SecurityFeatures: 0 + AndroidBuildApkPerCpuArchitecture: 0 AndroidTVCompatibility: 1 AndroidIsGame: 1 + AndroidEnableTango: 0 androidEnableBanner: 1 + androidUseLowAccuracyLocation: 0 + androidUseCustomKeystore: 0 m_AndroidBanners: - width: 320 height: 180 banner: {fileID: 0} androidGamepadSupportLevel: 0 - resolutionDialogBanner: {fileID: 0} + chromeosInputEmulation: 1 + AndroidMinifyRelease: 0 + AndroidMinifyDebug: 0 + AndroidValidateAppBundleSize: 1 + AndroidAppBundleSizeToValidate: 150 m_BuildTargetIcons: - m_BuildTarget: m_Icons: - - m_Icon: {fileID: 0} - m_Size: 128 + - serializedVersion: 2 + m_Icon: {fileID: 0} + m_Width: 128 + m_Height: 128 + m_Kind: 0 + m_BuildTargetPlatformIcons: + - m_BuildTarget: iPhone + m_Icons: + - m_Textures: [] + m_Width: 180 + m_Height: 180 + m_Kind: 0 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 120 + m_Height: 120 + m_Kind: 0 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 167 + m_Height: 167 + m_Kind: 0 + m_SubKind: iPad + - m_Textures: [] + m_Width: 152 + m_Height: 152 + m_Kind: 0 + m_SubKind: iPad + - m_Textures: [] + m_Width: 76 + m_Height: 76 + m_Kind: 0 + m_SubKind: iPad + - m_Textures: [] + m_Width: 120 + m_Height: 120 + m_Kind: 3 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 80 + m_Height: 80 + m_Kind: 3 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 80 + m_Height: 80 + m_Kind: 3 + m_SubKind: iPad + - m_Textures: [] + m_Width: 40 + m_Height: 40 + m_Kind: 3 + m_SubKind: iPad + - m_Textures: [] + m_Width: 87 + m_Height: 87 + m_Kind: 1 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 58 + m_Height: 58 + m_Kind: 1 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 29 + m_Height: 29 + m_Kind: 1 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 58 + m_Height: 58 + m_Kind: 1 + m_SubKind: iPad + - m_Textures: [] + m_Width: 29 + m_Height: 29 + m_Kind: 1 + m_SubKind: iPad + - m_Textures: [] + m_Width: 60 + m_Height: 60 + m_Kind: 2 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 40 + m_Height: 40 + m_Kind: 2 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 40 + m_Height: 40 + m_Kind: 2 + m_SubKind: iPad + - m_Textures: [] + m_Width: 20 + m_Height: 20 + m_Kind: 2 + m_SubKind: iPad + - m_Textures: [] + m_Width: 1024 + m_Height: 1024 + m_Kind: 4 + m_SubKind: App Store m_BuildTargetBatching: [] - webPlayerTemplate: APPLICATION:Default + m_BuildTargetGraphicsJobs: + - m_BuildTarget: WindowsStandaloneSupport + m_GraphicsJobs: 1 + - m_BuildTarget: MacStandaloneSupport + m_GraphicsJobs: 0 + - m_BuildTarget: LinuxStandaloneSupport + m_GraphicsJobs: 1 + - m_BuildTarget: AndroidPlayer + m_GraphicsJobs: 0 + - m_BuildTarget: iOSSupport + m_GraphicsJobs: 0 + - m_BuildTarget: PS4Player + m_GraphicsJobs: 1 + - m_BuildTarget: PS5Player + m_GraphicsJobs: 1 + - m_BuildTarget: XboxOnePlayer + m_GraphicsJobs: 1 + - m_BuildTarget: GameCoreXboxOneSupport + m_GraphicsJobs: 1 + - m_BuildTarget: GameCoreScarlettSupport + m_GraphicsJobs: 1 + - m_BuildTarget: Switch + m_GraphicsJobs: 1 + - m_BuildTarget: WebGLSupport + m_GraphicsJobs: 0 + - m_BuildTarget: MetroSupport + m_GraphicsJobs: 1 + - m_BuildTarget: AppleTVSupport + m_GraphicsJobs: 0 + - m_BuildTarget: BJMSupport + m_GraphicsJobs: 1 + - m_BuildTarget: LuminSupport + m_GraphicsJobs: 0 + - m_BuildTarget: CloudRendering + m_GraphicsJobs: 1 + - m_BuildTarget: EmbeddedLinux + m_GraphicsJobs: 1 + - m_BuildTarget: QNX + m_GraphicsJobs: 0 + m_BuildTargetGraphicsJobMode: + - m_BuildTarget: PS4Player + m_GraphicsJobMode: -1218746304 + - m_BuildTarget: XboxOnePlayer + m_GraphicsJobMode: -1218746304 + m_BuildTargetGraphicsAPIs: + - m_BuildTarget: iOSSupport + m_APIs: 10000000 + m_Automatic: 1 + - m_BuildTarget: AndroidPlayer + m_APIs: 0b00000008000000 + m_Automatic: 0 + m_BuildTargetVRSettings: [] + openGLRequireES31: 0 + openGLRequireES31AEP: 0 + openGLRequireES32: 0 m_TemplateCustomTags: {} + mobileMTRendering: + iPhone: 1 + tvOS: 1 + m_BuildTargetGroupLightmapEncodingQuality: + - m_BuildTarget: Standalone + m_EncodingQuality: 1 + - m_BuildTarget: XboxOne + m_EncodingQuality: 1 + - m_BuildTarget: PS4 + m_EncodingQuality: 1 + - m_BuildTarget: GameCoreScarlett + m_EncodingQuality: 1 + - m_BuildTarget: GameCoreXboxOne + m_EncodingQuality: 1 + m_BuildTargetGroupHDRCubemapEncodingQuality: + - m_BuildTarget: Standalone + m_EncodingQuality: 2 + - m_BuildTarget: XboxOne + m_EncodingQuality: 2 + - m_BuildTarget: PS4 + m_EncodingQuality: 2 + - m_BuildTarget: GameCoreScarlett + m_EncodingQuality: 2 + - m_BuildTarget: GameCoreXboxOne + m_EncodingQuality: 2 + m_BuildTargetGroupLightmapSettings: [] + m_BuildTargetGroupLoadStoreDebugModeSettings: [] + m_BuildTargetNormalMapEncoding: [] + m_BuildTargetDefaultTextureCompressionFormat: [] + playModeTestRunnerEnabled: 0 + runPlayModeTestAsEditModeTest: 0 actionOnDotNetUnhandledException: 1 enableInternalProfiler: 0 logObjCUncaughtExceptions: 1 enableCrashReportAPI: 0 + cameraUsageDescription: locationUsageDescription: - XboxTitleId: - XboxImageXexPath: - XboxSpaPath: - XboxGenerateSpa: 0 - XboxDeployKinectResources: 0 - XboxSplashScreen: {fileID: 0} - xboxEnableSpeech: 0 - xboxAdditionalTitleMemorySize: 0 - xboxDeployKinectHeadOrientation: 0 - xboxDeployKinectHeadPosition: 0 - ps3TitleConfigPath: - ps3DLCConfigPath: - ps3ThumbnailPath: - ps3BackgroundPath: - ps3SoundPath: - ps3NPAgeRating: 12 - ps3TrophyCommId: - ps3NpCommunicationPassphrase: - ps3TrophyPackagePath: - ps3BootCheckMaxSaveGameSizeKB: 128 - ps3TrophyCommSig: - ps3SaveGameSlots: 1 - ps3TrialMode: 0 - ps3VideoMemoryForAudio: 0 - ps3EnableVerboseMemoryStats: 0 - ps3UseSPUForUmbra: 0 - ps3EnableMoveSupport: 1 - ps3DisableDolbyEncoding: 0 + microphoneUsageDescription: + bluetoothUsageDescription: + macOSTargetOSVersion: 10.13.0 + switchNMETAOverride: + switchNetLibKey: + switchSocketMemoryPoolSize: 6144 + switchSocketAllocatorPoolSize: 128 + switchSocketConcurrencyLimit: 14 + switchScreenResolutionBehavior: 2 + switchUseCPUProfiler: 0 + switchUseGOLDLinker: 0 + switchLTOSetting: 0 + switchApplicationID: 0x01004b9000490000 + switchNSODependencies: + switchCompilerFlags: + switchTitleNames_0: + switchTitleNames_1: + switchTitleNames_2: + switchTitleNames_3: + switchTitleNames_4: + switchTitleNames_5: + switchTitleNames_6: + switchTitleNames_7: + switchTitleNames_8: + switchTitleNames_9: + switchTitleNames_10: + switchTitleNames_11: + switchTitleNames_12: + switchTitleNames_13: + switchTitleNames_14: + switchTitleNames_15: + switchPublisherNames_0: + switchPublisherNames_1: + switchPublisherNames_2: + switchPublisherNames_3: + switchPublisherNames_4: + switchPublisherNames_5: + switchPublisherNames_6: + switchPublisherNames_7: + switchPublisherNames_8: + switchPublisherNames_9: + switchPublisherNames_10: + switchPublisherNames_11: + switchPublisherNames_12: + switchPublisherNames_13: + switchPublisherNames_14: + switchPublisherNames_15: + switchIcons_0: {fileID: 0} + switchIcons_1: {fileID: 0} + switchIcons_2: {fileID: 0} + switchIcons_3: {fileID: 0} + switchIcons_4: {fileID: 0} + switchIcons_5: {fileID: 0} + switchIcons_6: {fileID: 0} + switchIcons_7: {fileID: 0} + switchIcons_8: {fileID: 0} + switchIcons_9: {fileID: 0} + switchIcons_10: {fileID: 0} + switchIcons_11: {fileID: 0} + switchIcons_12: {fileID: 0} + switchIcons_13: {fileID: 0} + switchIcons_14: {fileID: 0} + switchIcons_15: {fileID: 0} + switchSmallIcons_0: {fileID: 0} + switchSmallIcons_1: {fileID: 0} + switchSmallIcons_2: {fileID: 0} + switchSmallIcons_3: {fileID: 0} + switchSmallIcons_4: {fileID: 0} + switchSmallIcons_5: {fileID: 0} + switchSmallIcons_6: {fileID: 0} + switchSmallIcons_7: {fileID: 0} + switchSmallIcons_8: {fileID: 0} + switchSmallIcons_9: {fileID: 0} + switchSmallIcons_10: {fileID: 0} + switchSmallIcons_11: {fileID: 0} + switchSmallIcons_12: {fileID: 0} + switchSmallIcons_13: {fileID: 0} + switchSmallIcons_14: {fileID: 0} + switchSmallIcons_15: {fileID: 0} + switchManualHTML: + switchAccessibleURLs: + switchLegalInformation: + switchMainThreadStackSize: 1048576 + switchPresenceGroupId: + switchLogoHandling: 0 + switchReleaseVersion: 0 + switchDisplayVersion: 1.0.0 + switchStartupUserAccount: 0 + switchTouchScreenUsage: 0 + switchSupportedLanguagesMask: 0 + switchLogoType: 0 + switchApplicationErrorCodeCategory: + switchUserAccountSaveDataSize: 0 + switchUserAccountSaveDataJournalSize: 0 + switchApplicationAttribute: 0 + switchCardSpecSize: -1 + switchCardSpecClock: -1 + switchRatingsMask: 0 + switchRatingsInt_0: 0 + switchRatingsInt_1: 0 + switchRatingsInt_2: 0 + switchRatingsInt_3: 0 + switchRatingsInt_4: 0 + switchRatingsInt_5: 0 + switchRatingsInt_6: 0 + switchRatingsInt_7: 0 + switchRatingsInt_8: 0 + switchRatingsInt_9: 0 + switchRatingsInt_10: 0 + switchRatingsInt_11: 0 + switchRatingsInt_12: 0 + switchLocalCommunicationIds_0: + switchLocalCommunicationIds_1: + switchLocalCommunicationIds_2: + switchLocalCommunicationIds_3: + switchLocalCommunicationIds_4: + switchLocalCommunicationIds_5: + switchLocalCommunicationIds_6: + switchLocalCommunicationIds_7: + switchParentalControl: 0 + switchAllowsScreenshot: 1 + switchAllowsVideoCapturing: 1 + switchAllowsRuntimeAddOnContentInstall: 0 + switchDataLossConfirmation: 0 + switchUserAccountLockEnabled: 0 + switchSystemResourceMemory: 16777216 + switchSupportedNpadStyles: 22 + switchNativeFsCacheSize: 32 + switchIsHoldTypeHorizontal: 1 + switchSupportedNpadCount: 8 + switchSocketConfigEnabled: 0 + switchTcpInitialSendBufferSize: 32 + switchTcpInitialReceiveBufferSize: 64 + switchTcpAutoSendBufferSizeMax: 256 + switchTcpAutoReceiveBufferSizeMax: 256 + switchUdpSendBufferSize: 9 + switchUdpReceiveBufferSize: 42 + switchSocketBufferEfficiency: 4 + switchSocketInitializeEnabled: 1 + switchNetworkInterfaceManagerInitializeEnabled: 1 + switchPlayerConnectionEnabled: 1 + switchUseNewStyleFilepaths: 1 + switchUseMicroSleepForYield: 1 + switchEnableRamDiskSupport: 0 + switchMicroSleepForYieldTime: 25 + switchRamDiskSpaceSize: 12 ps4NPAgeRating: 12 ps4NPTitleSecret: ps4NPTrophyPackPath: @@ -186,82 +628,119 @@ PlayerSettings: ps4AppType: 0 ps4ParamSfxPath: ps4VideoOutPixelFormat: 0 - ps4VideoOutResolution: 4 + ps4VideoOutInitialWidth: 1920 + ps4VideoOutBaseModeInitialWidth: 1920 + ps4VideoOutReprojectionRate: 60 ps4PronunciationXMLPath: ps4PronunciationSIGPath: ps4BackgroundImagePath: ps4StartupImagePath: + ps4StartupImagesFolder: + ps4IconImagesFolder: ps4SaveDataImagePath: + ps4SdkOverride: ps4BGMPath: ps4ShareFilePath: + ps4ShareOverlayImagePath: + ps4PrivacyGuardImagePath: + ps4ExtraSceSysFile: ps4NPtitleDatPath: ps4RemotePlayKeyAssignment: -1 + ps4RemotePlayKeyMappingDir: + ps4PlayTogetherPlayerCount: 0 ps4EnterButtonAssignment: 1 ps4ApplicationParam1: 0 ps4ApplicationParam2: 0 ps4ApplicationParam3: 0 ps4ApplicationParam4: 0 + ps4DownloadDataSize: 0 + ps4GarlicHeapSize: 2048 + ps4ProGarlicHeapSize: 2560 + playerPrefsMaxSize: 32768 ps4Passcode: 5xr84P2R391UXaLHbavJvFZGfO47XWS2 ps4pnSessions: 1 ps4pnPresence: 1 ps4pnFriends: 1 ps4pnGameCustomData: 1 playerPrefsSupport: 0 + enableApplicationExit: 0 + resetTempFolder: 1 + restrictedAudioUsageRights: 0 + ps4UseResolutionFallback: 0 + ps4ReprojectionSupport: 0 + ps4UseAudio3dBackend: 0 + ps4UseLowGarlicFragmentationMode: 1 + ps4SocialScreenEnabled: 0 + ps4ScriptOptimizationLevel: 2 + ps4Audio3dVirtualSpeakerCount: 14 + ps4attribCpuUsage: 0 + ps4PatchPkgPath: + ps4PatchLatestPkgPath: + ps4PatchChangeinfoPath: + ps4PatchDayOne: 0 + ps4attribUserManagement: 0 + ps4attribMoveSupport: 0 + ps4attrib3DSupport: 0 + ps4attribShareSupport: 0 + ps4attribExclusiveVR: 0 + ps4disableAutoHideSplash: 0 + ps4videoRecordingFeaturesUsed: 0 + ps4contentSearchFeaturesUsed: 0 + ps4CompatibilityPS5: 0 + ps4AllowPS5Detection: 0 + ps4GPU800MHz: 1 + ps4attribEyeToEyeDistanceSettingVR: 0 + ps4IncludedModules: [] + ps4attribVROutputEnabled: 0 monoEnv: - psp2Splashimage: {fileID: 0} - psp2NPTrophyPackPath: - psp2NPSupportGBMorGJP: 0 - psp2NPAgeRating: 12 - psp2NPTitleDatPath: - psp2NPCommsID: - psp2NPCommunicationsID: - psp2NPCommsPassphrase: - psp2NPCommsSig: - psp2ParamSfxPath: - psp2ManualPath: - psp2LiveAreaGatePath: - psp2LiveAreaBackroundPath: - psp2LiveAreaPath: - psp2LiveAreaTrialPath: - psp2PatchChangeInfoPath: - psp2PatchOriginalPackage: - psp2PackagePassword: tncxBYJWjApJsTEruU2xthWkMNJQNCfy - psp2KeystoneFile: - psp2MemoryExpansionMode: 0 - psp2DRMType: 0 - psp2StorageType: 0 - psp2MediaCapacity: 0 - psp2DLCConfigPath: - psp2ThumbnailPath: - psp2BackgroundPath: - psp2SoundPath: - psp2TrophyCommId: - psp2TrophyPackagePath: - psp2PackagedResourcesPath: - psp2SaveDataQuota: 10240 - psp2ParentalLevel: 1 - psp2ShortTitle: Not Set - psp2ContentID: IV0000-ABCD12345_00-0123456789ABCDEF - psp2Category: 0 - psp2MasterVersion: 01.00 - psp2AppVersion: 01.00 - psp2TVBootMode: 0 - psp2EnterButtonAssignment: 2 - psp2TVDisableEmu: 0 - psp2AllowTwitterDialog: 1 - psp2Upgradable: 0 - psp2HealthWarning: 0 - psp2UseLibLocation: 0 - psp2InfoBarOnStartup: 0 - psp2InfoBarColor: 0 - psmSplashimage: {fileID: 0} + splashScreenBackgroundSourceLandscape: {fileID: 0} + splashScreenBackgroundSourcePortrait: {fileID: 0} + blurSplashScreenBackground: 1 spritePackerPolicy: + webGLMemorySize: 32 + webGLExceptionSupport: 1 + webGLNameFilesAsHashes: 0 + webGLShowDiagnostics: 0 + webGLDataCaching: 1 + webGLDebugSymbols: 0 + webGLEmscriptenArgs: + webGLModulesDirectory: + webGLTemplate: APPLICATION:Default + webGLAnalyzeBuildSize: 0 + webGLUseEmbeddedResources: 0 + webGLCompressionFormat: 0 + webGLWasmArithmeticExceptions: 0 + webGLLinkerTarget: 1 + webGLThreadsSupport: 0 + webGLDecompressionFallback: 0 + webGLInitialMemorySize: 32 + webGLMaximumMemorySize: 2048 + webGLMemoryGrowthMode: 2 + webGLMemoryLinearGrowthStep: 16 + webGLMemoryGeometricGrowthStep: 0.2 + webGLMemoryGeometricGrowthCap: 96 scriptingDefineSymbols: {} + additionalCompilerArguments: {} + platformArchitecture: + iOS: 2 + scriptingBackend: + iOS: 1 + il2cppCompilerConfiguration: {} + il2cppCodeGeneration: {} + managedStrippingLevel: {} + incrementalIl2cppBuild: {} + suppressCommonWarnings: 1 + allowUnsafeCode: 0 + useDeterministicCompilation: 1 + enableRoslynAnalyzers: 1 + additionalIl2CppArgs: + scriptingRuntimeVersion: 1 + gcIncremental: 1 + gcWBarrierValidation: 0 + apiCompatibilityLevelPerPlatform: {} + m_RenderingPath: 1 + m_MobileRenderingPath: 1 metroPackageName: BackgroundFetch - metroPackageLogo: - metroPackageLogo140: - metroPackageLogo180: - metroPackageLogo240: metroPackageVersion: metroCertificatePath: metroCertificatePassword: @@ -269,90 +748,25 @@ PlayerSettings: metroCertificateIssuer: metroCertificateNotAfter: 0000000000000000 metroApplicationDescription: BackgroundFetch - metroStoreTileLogo80: - metroStoreTileLogo: - metroStoreTileLogo140: - metroStoreTileLogo180: - metroStoreTileWideLogo80: - metroStoreTileWideLogo: - metroStoreTileWideLogo140: - metroStoreTileWideLogo180: - metroStoreTileSmallLogo80: - metroStoreTileSmallLogo: - metroStoreTileSmallLogo140: - metroStoreTileSmallLogo180: - metroStoreSmallTile80: - metroStoreSmallTile: - metroStoreSmallTile140: - metroStoreSmallTile180: - metroStoreLargeTile80: - metroStoreLargeTile: - metroStoreLargeTile140: - metroStoreLargeTile180: - metroStoreSplashScreenImage: - metroStoreSplashScreenImage140: - metroStoreSplashScreenImage180: - metroPhoneAppIcon: - metroPhoneAppIcon140: - metroPhoneAppIcon240: - metroPhoneSmallTile: - metroPhoneSmallTile140: - metroPhoneSmallTile240: - metroPhoneMediumTile: - metroPhoneMediumTile140: - metroPhoneMediumTile240: - metroPhoneWideTile: - metroPhoneWideTile140: - metroPhoneWideTile240: - metroPhoneSplashScreenImage: - metroPhoneSplashScreenImage140: - metroPhoneSplashScreenImage240: + wsaImages: {} metroTileShortName: - metroCommandLineArgsFile: metroTileShowName: 0 metroMediumTileShowName: 0 metroLargeTileShowName: 0 metroWideTileShowName: 0 + metroSupportStreamingInstall: 0 + metroLastRequiredScene: 0 metroDefaultTileSize: 1 metroTileForegroundText: 1 metroTileBackgroundColor: {r: 0, g: 0, b: 0, a: 1} metroSplashScreenBackgroundColor: {r: 0, g: 0, b: 0, a: 1} metroSplashScreenUseBackgroundColor: 0 platformCapabilities: {} + metroTargetDeviceFamilies: {} metroFTAName: metroFTAFileTypes: [] metroProtocolName: - metroCompilationOverrides: 1 - blackberryDeviceAddress: - blackberryDevicePassword: - blackberryTokenPath: - blackberryTokenExires: - blackberryTokenAuthor: - blackberryTokenAuthorId: - blackberryCskPassword: - blackberrySaveLogPath: - blackberrySharedPermissions: 0 - blackberryCameraPermissions: 0 - blackberryGPSPermissions: 0 - blackberryDeviceIDPermissions: 0 - blackberryMicrophonePermissions: 0 - blackberryGamepadSupport: 0 - blackberryBuildId: 0 - blackberryLandscapeSplashScreen: {fileID: 0} - blackberryPortraitSplashScreen: {fileID: 0} - blackberrySquareSplashScreen: {fileID: 0} - tizenProductDescription: - tizenProductURL: - tizenCertificatePath: - tizenCertificatePassword: - tizenGPSPermissions: 0 - tizenMicrophonePermissions: 0 - stvDeviceAddress: - stvProductDescription: - stvProductAuthor: - stvProductAuthorEmail: - stvProductLink: - stvProductCategory: 0 + vcxProjDefaultLanguage: XboxOneProductId: XboxOneUpdateKey: XboxOneSandboxId: @@ -362,20 +776,50 @@ PlayerSettings: XboxOneGameOsOverridePath: XboxOnePackagingOverridePath: XboxOneAppManifestOverridePath: + XboxOneVersion: 1.0.0.0 XboxOnePackageEncryption: 0 XboxOnePackageUpdateGranularity: 2 XboxOneDescription: + XboxOneLanguage: + - enus + XboxOneCapability: [] + XboxOneGameRating: {} XboxOneIsContentPackage: 0 + XboxOneEnhancedXboxCompatibilityMode: 0 XboxOneEnableGPUVariability: 0 XboxOneSockets: {} XboxOneSplashScreen: {fileID: 0} XboxOneAllowedProductIds: [] XboxOnePersistentLocalStorageSize: 0 - intPropertyNames: - - iOS::Architecture - - iOS::ScriptingBackend - iOS::Architecture: 2 - iOS::ScriptingBackend: 1 - boolPropertyNames: [] - stringPropertyNames: [] - firstStreamedLevelWithResources: 0 + XboxOneXTitleMemory: 8 + XboxOneOverrideIdentityName: + XboxOneOverrideIdentityPublisher: + vrEditorSettings: {} + cloudServicesEnabled: {} + luminIcon: + m_Name: + m_ModelFolderPath: + m_PortalFolderPath: + luminCert: + m_CertPath: + m_SignPackage: 1 + luminIsChannelApp: 0 + luminVersion: + m_VersionCode: 1 + m_VersionName: + apiCompatibilityLevel: 6 + activeInputHandler: 0 + cloudProjectId: + framebufferDepthMemorylessMode: 0 + qualitySettingsNames: [] + projectName: + organizationId: + cloudEnabled: 0 + legacyClampBlendShapeWeights: 1 + playerDataPath: + forceSRGBBlit: 1 + enableGamepadInput: 1 + cpuConfiguration: + hmiLoadingImage: {fileID: 0} + virtualTexturingSupportEnabled: 0 + insecureHttpOption: 0 diff --git a/NativeIntegration/BackgroundTasks/BackgroundFetch/README.md b/NativeIntegration/BackgroundTasks/BackgroundFetch/README.md index ccffec8..e5fad73 100644 --- a/NativeIntegration/BackgroundTasks/BackgroundFetch/README.md +++ b/NativeIntegration/BackgroundTasks/BackgroundFetch/README.md @@ -8,22 +8,13 @@ This sample shows how to add support for background executions (in this case - f ##Prerequisites -Unity: 5.1 +Unity: 2022 -iOS: any +iOS: iOS 13+ #Caveats -After generating xcode project you should manually tweak info.plist: -if you prefer tweaking it with xcode - add key "Required background modes" and one value "App downloads content from the network" -if you want to manually edit info.plist, add: - - UIBackgroundModes - - fetch - - Background fetch happens at "random" intervals (it is up to iOS to call you), so for debugging you want to use Debug -> Simulate Simulate Background Fetch @@ -46,8 +37,14 @@ In our case Update looks like that: { fetchedText = QueryFetchedText(); if (fetchedText != null) + if (fetchedText != null) + { Debug.Log("Just Fetched: " + fetchedText); + text.text = fetchedText; + } } } so you will see it logged immediately (even though app is in background) + +Note that we have enabled "Enable Custom Background Behaviors" and "Background fetch" in Player Settings. diff --git a/NativeIntegration/Misc/TextureFromGallery/Assets/Editor.meta b/NativeIntegration/Misc/TextureFromGallery/Assets/Editor.meta new file mode 100644 index 0000000..8e92dd8 --- /dev/null +++ b/NativeIntegration/Misc/TextureFromGallery/Assets/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: af355b1651de04bc78a2f56ee057223f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/NativeIntegration/Misc/TextureFromGallery/Assets/Editor/PostprocessBuild.cs b/NativeIntegration/Misc/TextureFromGallery/Assets/Editor/PostprocessBuild.cs new file mode 100644 index 0000000..5b14393 --- /dev/null +++ b/NativeIntegration/Misc/TextureFromGallery/Assets/Editor/PostprocessBuild.cs @@ -0,0 +1,22 @@ +using System.IO; +using UnityEditor; +using UnityEditor.Build; +using UnityEditor.Callbacks; +using UnityEditor.iOS.Xcode; + +public class PostprocessBuild +{ + [PostProcessBuild] + public static void OnPostprocessBuild(BuildTarget buildTarget, string path) + { + if (buildTarget == BuildTarget.iOS) + { + string plistPath = path + "/Info.plist"; + + PlistDocument doc = new PlistDocument(); + doc.ReadFromFile(plistPath); + doc.root.SetString("NSPhotoLibraryUsageDescription", "TEST"); + doc.WriteToFile(plistPath); + } + } +} diff --git a/NativeIntegration/Misc/TextureFromGallery/Assets/Editor/PostprocessBuild.cs.meta b/NativeIntegration/Misc/TextureFromGallery/Assets/Editor/PostprocessBuild.cs.meta new file mode 100644 index 0000000..748b7f7 --- /dev/null +++ b/NativeIntegration/Misc/TextureFromGallery/Assets/Editor/PostprocessBuild.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d1fe8f1d04a8f4a42a9f52a49ef2383d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/NativeIntegration/Misc/TextureFromGallery/Assets/Plugins/iOS/GalleryTextureLoaderImpl.mm.meta b/NativeIntegration/Misc/TextureFromGallery/Assets/Plugins/iOS/GalleryTextureLoaderImpl.mm.meta index ea580d3..f24d0b9 100644 --- a/NativeIntegration/Misc/TextureFromGallery/Assets/Plugins/iOS/GalleryTextureLoaderImpl.mm.meta +++ b/NativeIntegration/Misc/TextureFromGallery/Assets/Plugins/iOS/GalleryTextureLoaderImpl.mm.meta @@ -1,56 +1,84 @@ fileFormatVersion: 2 guid: 34541fc03278f428391a3a1b3116287e PluginImporter: - serializedVersion: 1 + externalObjects: {} + serializedVersion: 2 iconMap: {} executionOrder: {} + defineConstraints: [] isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 platformData: - Any: - enabled: 0 - settings: {} - Editor: + - first: + : Linux + second: enabled: 0 settings: CPU: AnyCPU - DefaultValueInitialized: true - OS: AnyOS - Linux: + - first: + : LinuxUniversal + second: enabled: 0 settings: CPU: AnyCPU - Linux64: + - first: + : OSXIntel + second: enabled: 0 settings: CPU: AnyCPU - LinuxUniversal: + - first: + : OSXIntel64 + second: enabled: 0 settings: CPU: AnyCPU - OSXIntel: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: enabled: 0 settings: CPU: AnyCPU - OSXIntel64: + DefaultValueInitialized: true + OS: AnyOS + - first: + Standalone: Linux64 + second: enabled: 0 settings: CPU: AnyCPU - OSXUniversal: + - first: + Standalone: OSXUniversal + second: enabled: 0 settings: CPU: AnyCPU - Win: + - first: + Standalone: Win + second: enabled: 0 settings: CPU: AnyCPU - Win64: + - first: + Standalone: Win64 + second: enabled: 0 settings: CPU: AnyCPU - iOS: + - first: + iPhone: iOS + second: enabled: 1 settings: CompileFlags: FrameworkDependencies: AssetsLibrary; userData: assetBundleName: + assetBundleVariant: diff --git a/NativeIntegration/UI/NavigationController/Assets/Plugins/iOS/MyAppController.mm b/NativeIntegration/UI/NavigationController/Assets/Plugins/iOS/MyAppController.mm index 8297763..fcd9c2e 100644 --- a/NativeIntegration/UI/NavigationController/Assets/Plugins/iOS/MyAppController.mm +++ b/NativeIntegration/UI/NavigationController/Assets/Plugins/iOS/MyAppController.mm @@ -30,7 +30,7 @@ - (void)willStartWithViewController:(UIViewController*)controller [[UIBarButtonItem alloc] initWithTitle: @"Left" style: UIBarButtonItemStyleBordered target: self action: @selector(moveLeft:)]; _embedController2.view = [[UIWebView alloc] initWithFrame: [[UIScreen mainScreen] bounds]]; - [(UIWebView*)_embedController2.view loadRequest: [NSURLRequest requestWithURL: [NSURL URLWithString: @"http://www.unity3d.com"]]]; + [(UIWebView*)_embedController2.view loadRequest: [NSURLRequest requestWithURL: [NSURL URLWithString: @"https://unity.com"]]]; _rootController.view = _rootView; diff --git a/NativeIntegration/UI/NavigationController/Assets/Plugins/iOS/MyAppController.mm.meta b/NativeIntegration/UI/NavigationController/Assets/Plugins/iOS/MyAppController.mm.meta index edb035a..838fb72 100644 --- a/NativeIntegration/UI/NavigationController/Assets/Plugins/iOS/MyAppController.mm.meta +++ b/NativeIntegration/UI/NavigationController/Assets/Plugins/iOS/MyAppController.mm.meta @@ -1,4 +1,33 @@ fileFormatVersion: 2 guid: 3cadb9c197a3b482d915d42b2d34b832 -DefaultImporter: +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + iPhone: iOS + second: + enabled: 1 + settings: + AddToEmbeddedBinaries: false userData: + assetBundleName: + assetBundleVariant: diff --git a/NativeIntegration/UI/ResizedView/Assets/TestOrientation.cs b/NativeIntegration/UI/ResizedView/Assets/TestOrientation.cs index 85a57c2..62c0e1d 100644 --- a/NativeIntegration/UI/ResizedView/Assets/TestOrientation.cs +++ b/NativeIntegration/UI/ResizedView/Assets/TestOrientation.cs @@ -19,7 +19,7 @@ IEnumerator ChangeOrientation() ScreenOrientation orientation = (ScreenOrientation)UnityInterfaceOrientation(); bool isPortrait = orientation == ScreenOrientation.Portrait || orientation == ScreenOrientation.PortraitUpsideDown; - UnityChangeInterfaceOrientation((int)(isPortrait ? ScreenOrientation.Landscape : ScreenOrientation.Portrait)); + UnityChangeInterfaceOrientation((int)(isPortrait ? ScreenOrientation.LandscapeLeft : ScreenOrientation.Portrait)); #endif } diff --git a/NativeIntegration/UI/ResizedView/ProjectSettings/GraphicsSettings.asset b/NativeIntegration/UI/ResizedView/ProjectSettings/GraphicsSettings.asset index 03ff3324f9e5fd24759ea88f6f426ae44e4fbd85..ce70b7204e4535f6161fcb6d34ef58007b4ce6ab 100644 GIT binary patch literal 5952 zcmaKw%a0sK9mi`n>m-DbKpq$fV26Z20@%*lyn{XavUi21PIyG%#>$3?&+TN z!@C<^eL!5u1#yZvMJOP|3V6>R6XITcGJRf%0!dYdSI(-OrzJnWKBnaJOV z!YA;&7tdS?>}Ly}x6t$3EOd?&^D&3t{{E?$W-Zs^#l@cY_;!d+<{q*T7A_zW2Bg zwy*D=2CuIl_q)D6_4T8MIyd@WgP)9h?IvH}eJ+IU>$|_f>-rwhZHlUvzkUxkxY74x z_^EGt7)%$wzT?JS<-WcTRHSTQ*Y`oV>+4frzYjII(f14ZsqY~?Zu0eg*oClteIIG? zx;`HFchYyF!HvG(!B2fB@wmy?_pl3L`}#iC;B|eE=r%=F%irHe8@#2@|L@`F`Tuy; z(ipsd{)qGc7ZiDaJw|uI%p~Y*JqZsVa^6#-Z5Z?N{62&}*#9S|NL%DQ|1YCG&*tL| zK3}_^o&c|}|9tI!`c#7({r`cV`aaG63uY$y`aeT=+c4(7{!>$=E%G~YVVC+(H+WtD z8Qo`5)oO{leypQ6KeIoNVGOPx?|CaWTT3mx@v!}`E#ItB z_G$QUEx$5@-?E(N%uQwcw=D0t5O&G`ZTYh^_@U)nOiS zr@^`Z+a>V$vgKE2@GZ-CX7G{a&mF<3Zx5XM_#Wvd>LdSwVI(tf7J5b8T?7hUm|ZaGl}!#{cr)C_k*OnFpRl>KlJFl z$;>4Ge(0CL;a&92`+@xr=r1h92jgcA;}1}WToDz_OhSCt?x$;Tx7rrc#xDZiFXi|9 zQ2Xi}F%` zGk9+KxWVW3_l3>Yos%B{yw~A z`%k8*;ygcpv+YxQ+ZySN?f(V-HaPb;qqopVXMTL;^cEWF%#W`dQ&jO2ct0rPYmeSS zBb}A;h2IZ4{`ToDG}4(LUkC8MQ+&NjK5Y*BcHzd?HyeCj96;Y)Si`%)zU8!~$@pRX zmhVU3*1m#BCvx}w=sWP%-#^Xw|NZ#kJP-C=)2zxbC2}$f`e|2XSr83Vv6KfPtnNq- zR8o1zyDRFNN)j~?mM3WH!=9*>X!=3spZ0;wWW< zexg*=oyfjo+jx)86*b95SK?$WLl!q<*4{y*IAM7s7>=?v8OF3#lwJ&FqG0a?0~H$u z>3Y-;^MTSD$GeN+o;)ah16u_xI*AHn%&>Af)7g=inkLPr4y)+`Ul-O$*f%8 zy|^EwVqYAHSJB3HZu-Jrae=4q&A5k^_u+QnY+|i2-sMgYwq-I@oB^R==10WpAi(mY zMimTcCZmB&?Akq>%P`0e1m=P{mbylRM9(Qv65%vfm)4g%SFfgWs6?JZW*G{dB<`uD zcpslHo8UN#hv*wU6RoXm@nc10G6+qmY|05;%QEekTN>}dnTkoms6D%|6l5mIv{yy4 z7pjd;XGixGWFwVq%JllhI9UuQBe}%kOlX*}T+FeDG7I`x1s#K9Iq7CeFqu#kVm=!eVCI@$O>ww5{Cbq(s58RsG7#Z##>uuCPgEkaTwenI@z{_D zW?R`V9zHk1ZKE%>^%M&`!C~RTcDFjVVHMtX7#*3<?Mx%kY51h74Kg3 z^tK&`V^06e%1T=*jq{|h($jf_S?%`Bg}bZvF#s#n6Z_#){_rWwmuj`( zqpWXUWK7@m@x_U04iEoHN*_O&XbbbpRogAco^$Nh6Rc?J-{;sTtWCx*dGt@ S;sWdGv71n|%H%M=?*9QeCQ%#! literal 4112 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 literal 27540 zcmchg2b9~!wT2;E?!9+g?p>Bva+4dkNGn>qT6(!Eu4^obUBXKOGyraK3mrSXCr)p6 zdU1Mhj?$bsy;rAKr#Q{&iS_QiGXq|NcSyZFpNDfs3y}YR@lCAd35{s?Mq<$c1VS)yXZwlFG>7hCUyqg*mL0P?Wo6PXZ)w> zI1j;}MiBcmfmdGU2Z>Xg9GkkqD<$jwvbV14f_EuMFf1`*l1DCwy^&x+>AgA7^HaR+x zMyKjMri+wdvW8>rhE1_Iv~}f5ihG=0R)jvm3*%B)_e-mWNWF}!b7}*t)DPogC7h>B z`pIHGDElQBn&DV561rvVGq86%p1burx?R=R?m&bSED_3nT!(?7)$0xUZZ%YUJyGyb zA-mOTIPaDF8vq(YkL^u_g)mAY*H0+3C;b=3P4yVYm!WVzpb#hjFG7q!F~lXe?v2wC zfd~C5|BZdbn^yd%+T4xU8!M*S#(@fVc3Kzts=fg~8B&Ej(3qaq1LEmjEPbod;?b7;sCoGf~(G z%CwKOZDObl?8S@FeybjXT5dCp&3RD-^}j4%2+PYx8?j%aJ)C1R6e6$gMxY-nE?XBy z%f`J@7}4>9xmaPdd4W4s_114G;yfcxa7uvsl{P(8xSBVOz%hZ!KARH9(|Vz@2;?f} zDw}dTj7qv_@8I-UCiY$dc8lcLzRtVgNtFpRczGjFfPDI!9U0O_aHYn z9S1+7jICa?ifVj_3-me(&Rw&b1Z!=AmFKNlxq>9?x=1c0#js5=mQ=h*HHr0HlT#ad z^6VEXVc-owcL=l3GMv2l(>`?YIBU;yS5r+{v-9Z7L4(yrDc73LrZf8u@FgxrgzN3| z=n?z~7OtRTg7cCnR4oMN6kZ*tXhD(>>W!orHlPC{%cyeGx?WY)!0aR8{0I#3aCQTI zZfwrb`U`n-ZR8PhYGZg4%(C@~1+C+}eT)m?%mSx1ZH*t#R<2%gEqzhQh;g%1yi$p; z*dcMB5|8hYc$E?t1+h@|aBRfb!(zQpa7$BFOt#)PfyPvrc>c7R1wkP$?e)GzeVB&9 zO+0Az$+v2fnrqN>S6i7$uX59<9~8^8CNo$+S9Ui*dw}^&;52~mM1=(nZOi$#GCV~)Cwn= zL$6YKsl&dA1AZOGnU>-D?uHT=l0ld}WA1A(q^E`D3Pw7Nq311m`2fx*0xv0eQO%F3 zsbLnUx|)hZgKkvLSV}g_VC2Cuz6IFoFppM4blE2EFKk%50M{{)1W&wGKk3=zR8X4& zn3$ADy|{vf4ZUWNDBCo*<*x|l3h)r6!bh_jbfbiu+|UtG~sbG)_^WUM>EHtwhG+Dgbo<|tDl zc5S6Dh-8TMaJ~lTAH^)ojVuDLiYyTmSy^I1B(qFF+qdx~EDElQJPjtY^2`aMP9C>x zPNzGHW}XGWRS{)@iL5A#f=EKqg<>VTiN(QHk?3Y7vJ%}Qh$N!)e7~b~;6gYpW)~vM zZA@f@9gX;Lf=FV~rDI2GvOu^hBHhkJR;0&UM0(6uy&t18xw&IEy{+ zGngG$#TN2RCNdNqjrLiBXpXLGLpMIq@T+CjNN~7QbFXJJhpmL31DdqZn=QVy?w-qo z==F}h(T@>0Lw+7t>u|ar+aPIfcvnV@9N8LtK73~Q#2S173u4Nyy#`+>DAIy!mDY=x z3|A$Z7wgZ>j!bQ)rS+0b5ZuIFZ1Iyy5r5O6lG+ z#n9urw8ON)y&4s;n20;Wy0yW*hNLYqnz9Yl zre=xZ5;vR_Ak2H2%GPba4>Vn2-p_)_Fdq;U8fGh8fSm9XyzWIrA7oM+(T92weV7H2 zi9RAI7*W3F&UjnB1^OWp3+g_mw_$y>7uGfwM8^7MfD6pT$dK>m&>H)_-V9|As`t8q0u2iUK$AWJlGdnff(LD2#m8X3%BeU0fI3)a_r zVSR%Ik+HrhC|Xz(l}2qUaQ$j}D1M9SZCKy#h4md4M8^8AplD&Weo{@jzQ+tUt_OQ@ zeV+x9xqcuhT3qleK~PSSe#o>oq#uE%Ys3063nC-^L{PMlCZe!jS%m9{H9hG3l*w&W zKkG&Ha~4FV`h}oqQEjXvQ6s?nHlPP7xN%&sMCR_gUox)^@mIYNA7Vjd#9s@F7NRP+ z0{kor!(&>fzhNF5+HZTI{f-5Z(H<5Q*zH0WHV}r%V8tuVj=Bp)cg`Dz`{J;%Ec>FbPA~qz^_FhtkD%$=NdLrw$Qk;xpwJmgGf{<`$7pPQgo#ZaXz0Km zJc4^|=*MIv`U_X)nzWT2PwR2LPmQNO&U9!v{VVr5t^T}iIQ<(FnOt=Yr+*hj62S=E zHqsA27!2e21D<*QgBdZC;)woFCbA;@OAvKKz}{2ckAfWkW^OCTf0)S1@u(n5n_j(d zW1)3OrN`5D=CK`5*!H?Mza{uBEK1a*_4dJcCqdDMhKEE9zrf;zU}q+_F)am++8z9b zhG%LoHaD2=!h)C*YiHV3P;@e7y2jm@$;P%jXi!E;V%viSk=gbX6rF6Q57~>UZBToI z24$2asC`%v8ERia!JrCm$GDt_sbC}WD)+C1PDe4N)pp25lw~_^s`T7I}PI#v2XYbBiH&!t{ z?3oswpST|R2~3+yvtCpPt3EvDfkW$R?r6#xITti2qaPbpb)U&{^O9E-CCx%VXXrV$|y-#!z_r5wO&wIuvV^KL1cMmv5{R4 z8kA9z$TqMbGTDfru#sJ$$VQpPMz#?&D5E5ijjR=a@0#|Q%LX?M8kA9z;AU758LlEIiuoWpZ?!{10c&&{!=!&2 zZoj1K96s}zi#a?~@YDrN59l)Bkf#S|eP8em+}dmseRhzW1r5q5Nja;sAac%Xf`Sv$ zLm?Az&nAv1x_1ni$5!YeXi!E;LaVbNGTM!T!iq*sHDV4MSPUAJQIfzC7DNVX2ns8h z8SLhm$;LJh8kA9z*cMn2nQc)}*x7W2-o#8cwwpnNGD;HLEi8!4cB`Ne+2F}j-rjCw zJ{#WSK!Y+$5?+%9k@0R96kYMC%{`vEY;bpg24$2axI0-88SV*!qAQ$fcTZ$S8{d;a zgEC4I-;-GoneQorqC1~%drxIX8{gAFgEC4I-_uzTneQ2bLgXvf;J#kg**%jPZG6uH z4az7W`ku>dHoE7524$2ay1Q5qneO?5qC1^welK878{i8;gEC4I z;EPxg8Suq|q6eUEe=lK98{kVpgEC4I;LBJL8Sv$Tq63iH9uBse?G?;qV|yiNP)12& zyPE}(+3pb(b~b8vuVNM(*{eZ=GD;HJYgiDO?6rczPG;KN>zK<1_j=HvjFJTR1{Oqy zd!wM}0;lWrP0VG3doyTIMoEIZmj#jG-XbVE;70KI7uMe1%1k!4w}A#_lq9ydvmi3t zI|PNDjoRBgnZ-u-F3_Nil0^1y7DOg{kD#!VnfCTx=CZ-P4>TyFB*DF(1(D%CASk-P z>Gt+P=CZ+k2s9|8B*A@{1(D%CA}BiG_?=yJ=N;AUeavbj{3vKpMoA*v#)8O%9}^V4 z2~8b;oVjg~p8yTYC`pi?WI<%ePYH@0fYfz;KXcn4KMfj`QIa4(!-B|=4+shlNe?;0 zsV&`Tj+cf$%M3QI&w&PIlq9atvmi3p7X*ck%hc-^na76qCD5RZl7#kU7DPt-ilDHe znM-|NWgZ*a*Fb|ZN)p=FSr8fR8-k((EuERr5&KPMv5|cXG$^Aak$sy5k;%RzDC}gW zM!(BkHn{JB24$2axCdDf8SeXn!VYKZ^aspkgZm+9P)13D`wzWxr9w z;h!q?C(L6*`zdHpMoB{Z84Dt#{ajFVK{K`b3ud#?{Sq`Nqa@M&iUpDB9ugE?=uEZ# zn%Qi0zX1)(C`oj`WkF=R-wBEiI=pz2R_epdVFUX;Xi!E;0{a6CB7^-=P*}lCmHvsD zY;1o94az7%)YGTUDSg_X@z=wF%1#`ZVRpp25l_IDOUX8VVr=wOp)P5)$88{xk| zgEC4I;lEiBneab?qBo(b;zya=2Du$HD5E4n(ofAs;51<^`wYwy{4p996{bn+y&+9q z@5J0T$elsc6>=#HBA4VYf`UWhF$?cyi(0Q%+?6?OV7v7K+noiG!S)ao91L#{gcqib zz)b`F(M*glaG(KWPv*1X?bQo!Zx%$x+ec8)ov8T28eM4f^dtOIsQ7)E+Wg`|x6jh= zG_4^I-+)IZtkwOxn$ol6HqZWDJ*E?GvmC%J(9&^9a{_l|;G0b;L*_op1Gz!B{M3L- zc-x1kUayAl*K)7`4iY@{F2wQSfqwOC6*^n@bJ3Udrp$xetanp5^-{`+)(>IdFLCZh zeErf&_4>a3G6NFHYWUOiTHxbS@jo%e-O7LH&c96-bp;aND6eJ^F_nBom2{eX9ymRSz|26O#!@Yssyia^U8&4W5(Cdwx7mrkWDEEr-R1iKrGEO zco4mBT~_G>#%FSkWk+YR9f?JCHVYyb)p9|Rb|28I*L`@P7oI>d?^09`Ae_TorUmK@ zOjY5Ywkddn)1rE71Uv)>uPIPXaRs+o^0X2(rtri(^|2swo>mD83mx7)p5Ar5n)z&l z)w#X!&SODjyz>P`2i`%n6`@akJUhA&_i8`*`u$kwnRGTB9fLMDS(3PG(B+r`Xe zW4ojm+odds%yyZeklEmMjW9(bwj49r*!p|14X_|G+n}K6#-^V%8)7ya-P&Gs>sSz( zZdg!s(5XVxVC$K~2A1yyb~y_ogKZEL9bkj;Y}-LP!b~={(OzsDSrD0ROi*;N;gebL zGjMvC7MRJ#c116?aTY{oD+&r4-dcUHsZQ*+;as13)Cp!YBVNWxv3#^FLS>)O)WrG}RLP}aJ&w{_Gn;S-HZc^Zcpb+RbjgQcH=rg&E>V{ra zvn+^ARTUJRirosC_MJ86v7rUM&_WhOMym@7D;k>{-pG75yr>sm%!0^xiJ+i9n%bJs zSvHuVty3q1y|bI+KHY8Ua)^_;&Z+x6*Ei+!o(0f!ZO@A=h@AhM1O;|kbP8Ea;Q8R1 zSEhHP;+w6~2Z5+>y_tEbW7T~kJVl?t|3xr`uPPhyry@66H20)01<5VUhV;1LF3AQL zPv+r`r+6X+r$O+xbnd*hn-ku+6qLc*4`+}`%x$*`Hr%NxI$VEbXZ8Q<+>RSv7LZX_ zYrrpt?R_EXD@DW|EIQ6!@EMdAbXeuhzBdnBnFUJ%f^CC@gD7WN0$X?zf(w1VgcfHB z?Nt41qG8qyi}_5c9p^CkpcK}YYpCVA=cFrasJ;IFJ1b}3H&(dgp0#`4`@n{WF>foE ztG90N0qZ8NEBNYDrU%W!N|F@5@Ogqc9d09I^`*x?kUHw>XVY@$72m2r7 C^RvAG diff --git a/NativeIntegration/Video/VideoPlayer/Assets/Plugins/iOS/VideoPlayerInterface.mm b/NativeIntegration/Video/VideoPlayer/Assets/Plugins/iOS/VideoPlayerInterface.mm index 43e9b4b..e9d6196 100644 --- a/NativeIntegration/Video/VideoPlayer/Assets/Plugins/iOS/VideoPlayerInterface.mm +++ b/NativeIntegration/Video/VideoPlayer/Assets/Plugins/iOS/VideoPlayerInterface.mm @@ -69,6 +69,9 @@ - (void)onPlayerDidFinishPlayingVideo { view.hidden = YES; } +- (void)onPlayerError:(NSError*)error +{ +} - (void)pause { [player pause]; } - (void)resume { [player resume]; } diff --git a/NativeIntegration/Video/VideoPlayer/Assets/Plugins/iOS/VideoPlayerInterface.mm.meta b/NativeIntegration/Video/VideoPlayer/Assets/Plugins/iOS/VideoPlayerInterface.mm.meta index a8d26f1..11e0660 100644 --- a/NativeIntegration/Video/VideoPlayer/Assets/Plugins/iOS/VideoPlayerInterface.mm.meta +++ b/NativeIntegration/Video/VideoPlayer/Assets/Plugins/iOS/VideoPlayerInterface.mm.meta @@ -1,4 +1,33 @@ fileFormatVersion: 2 guid: 0231df34b74ec410a9ee27018ee10d27 -DefaultImporter: +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + iPhone: iOS + second: + enabled: 1 + settings: + AddToEmbeddedBinaries: false userData: + assetBundleName: + assetBundleVariant: diff --git a/NativeIntegration/Video/VideoPlayer/Assets/TestVideoPlayer.cs b/NativeIntegration/Video/VideoPlayer/Assets/TestVideoPlayer.cs index 9d13aec..c333e76 100644 --- a/NativeIntegration/Video/VideoPlayer/Assets/TestVideoPlayer.cs +++ b/NativeIntegration/Video/VideoPlayer/Assets/TestVideoPlayer.cs @@ -23,7 +23,6 @@ private static void VideoPlayer_RewindVideo() {} private string[] videoPath = new string[] { "Data/Raw/big_buck_bunny.mp4", - "http://www.quirksmode.org/html5/videos/big_buck_bunny.mp4" }; private int curVideo = 0; diff --git a/NativeIntegration/Video/VideoPlayer/ProjectSettings/GraphicsSettings.asset b/NativeIntegration/Video/VideoPlayer/ProjectSettings/GraphicsSettings.asset index 103c53f653ff7960a8ed65cc24118ff37a986503..ce70b7204e4535f6161fcb6d34ef58007b4ce6ab 100644 GIT binary patch literal 5952 zcmaKw%a0sK9mi`n>m-DbKpq$fV26Z20@%*lyn{XavUi21PIyG%#>$3?&+TN z!@C<^eL!5u1#yZvMJOP|3V6>R6XITcGJRf%0!dYdSI(-OrzJnWKBnaJOV z!YA;&7tdS?>}Ly}x6t$3EOd?&^D&3t{{E?$W-Zs^#l@cY_;!d+<{q*T7A_zW2Bg zwy*D=2CuIl_q)D6_4T8MIyd@WgP)9h?IvH}eJ+IU>$|_f>-rwhZHlUvzkUxkxY74x z_^EGt7)%$wzT?JS<-WcTRHSTQ*Y`oV>+4frzYjII(f14ZsqY~?Zu0eg*oClteIIG? zx;`HFchYyF!HvG(!B2fB@wmy?_pl3L`}#iC;B|eE=r%=F%irHe8@#2@|L@`F`Tuy; z(ipsd{)qGc7ZiDaJw|uI%p~Y*JqZsVa^6#-Z5Z?N{62&}*#9S|NL%DQ|1YCG&*tL| zK3}_^o&c|}|9tI!`c#7({r`cV`aaG63uY$y`aeT=+c4(7{!>$=E%G~YVVC+(H+WtD z8Qo`5)oO{leypQ6KeIoNVGOPx?|CaWTT3mx@v!}`E#ItB z_G$QUEx$5@-?E(N%uQwcw=D0t5O&G`ZTYh^_@U)nOiS zr@^`Z+a>V$vgKE2@GZ-CX7G{a&mF<3Zx5XM_#Wvd>LdSwVI(tf7J5b8T?7hUm|ZaGl}!#{cr)C_k*OnFpRl>KlJFl z$;>4Ge(0CL;a&92`+@xr=r1h92jgcA;}1}WToDz_OhSCt?x$;Tx7rrc#xDZiFXi|9 zQ2Xi}F%` zGk9+KxWVW3_l3>Yos%B{yw~A z`%k8*;ygcpv+YxQ+ZySN?f(V-HaPb;qqopVXMTL;^cEWF%#W`dQ&jO2ct0rPYmeSS zBb}A;h2IZ4{`ToDG}4(LUkC8MQ+&NjK5Y*BcHzd?HyeCj96;Y)Si`%)zU8!~$@pRX zmhVU3*1m#BCvx}w=sWP%-#^Xw|NZ#kJP-C=)2zxbC2}$f`e|2XSr83Vv6KfPtnNq- zR8o1zyDRFNN)j~?mM3WH!=9*>X!=3spZ0;wWW< zexg*=oyfjo+jx)86*b95SK?$WLl!q<*4{y*IAM7s7>=?v8OF3#lwJ&FqG0a?0~H$u z>3Y-;^MTSD$GeN+o;)ah16u_xI*AHn%&>Af)7g=inkLPr4y)+`Ul-O$*f%8 zy|^EwVqYAHSJB3HZu-Jrae=4q&A5k^_u+QnY+|i2-sMgYwq-I@oB^R==10WpAi(mY zMimTcCZmB&?Akq>%P`0e1m=P{mbylRM9(Qv65%vfm)4g%SFfgWs6?JZW*G{dB<`uD zcpslHo8UN#hv*wU6RoXm@nc10G6+qmY|05;%QEekTN>}dnTkoms6D%|6l5mIv{yy4 z7pjd;XGixGWFwVq%JllhI9UuQBe}%kOlX*}T+FeDG7I`x1s#K9Iq7CeFqu#kVm=!eVCI@$O>ww5{Cbq(s58RsG7#Z##>uuCPgEkaTwenI@z{_D zW?R`V9zHk1ZKE%>^%M&`!C~RTcDFjVVHMtX7#*3<?Mx%kY51h74Kg3 z^tK&`V^06e%1T=*jq{|h($jf_S?%`Bg}bZvF#s#n6Z_#){_rWwmuj`( zqpWXUWK7@m@x_U04iEoHN*_O&XbbbpRogAco^$Nh6Rc?J-{;sTtWCx*dGt@ S;sWdGv71n|%H%M=?*9QeCQ%#! literal 4112 zcmeH~%}&EG497jb1}F9eJi>sDBSIQNgPy2Vajv}9qCstkk`yRU$CFX)wvl?^5p2nE zKK{0&Urqs-{QxW$0C2{U1HjF4wY`0cuG#_J3AM~m-;$y`F-oBGwkJvsswbdn(^ zO0fg>m#FsZ6;$c-?u|14WOCY;$XQ2x7=#kT{DW0{%L$wE6I&P6S=r>2Ck5tYUEfFQ ziiH%38*8y0N4d-4cpfy8lMHup=9~KVas{!Vk$D_@dpk6{gB(4=DeoT35nE7Bs#WRM zloUPm6;B3PuM66-Yn8_6i%~cKM;GdcJb3}(Egtqn1LyrX43^x!u^G9`rZ&D!ca16e qRZ{x$7AHELDgh;+1eAahPy$Lo2`B+2pahhF5||K>f2O$nPyYZcV^Ws@ diff --git a/NativeIntegration/Video/VideoPlayer/ProjectSettings/ProjectSettings.asset b/NativeIntegration/Video/VideoPlayer/ProjectSettings/ProjectSettings.asset index 898ac09f119e5c027b34e2236ba5bb2512f2ac73..010731983c687b3a735221424cef249c5bc8c737 100644 GIT binary patch literal 72544 zcmeIbd3a<+8TNfLGi<{ui|jCL%Fb-8B6MalOCU1|li5IE=p-jeGo9|x-I&|Xg~!-LEJ%cLlgyEa6v(k@4l;^>Qm3DKHXm5^}heTbxk_m^*i<4 zRZs18PG_R15nkDN*D*6T?>qK9$Nrvqo%xNIxwGfaJ#y}mvj^r!|9$!8mpeKTcOl`+ zFK@MJ_C@)}p5OD?+pc)Ae#u#PR5p*IZ@wmqb|XeOHj3&<^0N6*H?QWUBkG85oF3J0 z?}+L%5JQvvae@3{q}?77JK$%U1M<5AF-*TFJ~RFF41R!cUgHOs{xC$6ZRSI~cYL03 z6iWr>uLt=+g){R{FaHyd(PB zw5a|f;_17jpWp)m+Xu@x6GmCST}@mauQre$iL&nm&bnuRKvTESyzht}1K&&d?uN|r z__XMH*gsV4?~%a|7tVeVMYGH+Us!*uk^V?<`hG7%W|>#MFn`yB_elD^P24OZ6C7VI zd>_PiM6)b3?``@%;rnLr6~dWPr?>rMB{=>?`{BnAuKgB;?@yRZt{}f2`M(I9{%1e; z13ByGTHy!!5bquTlJJ8v`1gdriaeKG0SQj`w;J0KR-tQ`#$o=@#SdpI$vx+dNsZs!{{l?_?jMH zFwdz#{yW&__{RDTPweMx zvc_xLerJ$g+g}iH+rK+upXFQFux#J3e9Zq!;awSgRQRF{{zl=8Gx(Llmt^oy3SXMR zzb3r93GYGve-4fzCORd9|4}&C8M^*#`JWT}u%&`)|69X(Z2!wh>&YeQ_P?Ac=W{*3 z_a?}^bNz$upY_uhaGSrq0m-ozP{GyT$--ACN}t&IBL=5``ZM^Y!dGVSj|pFu!M`mW zbEyhW|7qcC6ixEC4HlNn-`WhmkMPqo_wgkEB0`(K)`@;L<-T>GKYx_}_&OWbo~BvezEY;4E{dhg$#bPaP%V;oPWP2e7&Mc`+G!qkvx}Nu;B$nJXYiARpO?W`2(M)DVd2#b{(9lH41SsL3G!TW z5zEj0&&Rs2d%gde47eTNzAX7W-%HE4u718H{DKVr zbK$Sg;LiwuLk53I_!~3$9@yNlTyM(YhYPP~@SN}q$#cm?u6?csXZyT}D90BY$hrTI zg}>PWkF)<)#Qw#M&k4jY=fBH@zlA8r7aJVEM))O+&RND+$8Q&YDI;@yv4NcHkNd!x z|F=4j;*Sb{TLynd_}er1%fjE0!FS!t>R;A`(?5rSv;N*mp5u!Ru6!p8e;1>3mhqLG z{y$6XzdJ$Zoh$zvg}mvw-c zTLL~q?aw|5uJ>Ov)c)*K0k`ARSCD^>PoEC#+xq_wIQ?=fd5$kOxcd36@Xt7q;xmwW zrvGdPf3@)2$aBd>w0|Pl65+QKP5FG9X`d^Ee~u{UbDRHy@Xu%Pw+a73lGMC&<-1P! z7c-+1A$Y*U59qMJyl7KM$PxQwcKf$kFHPy~6Kq!k-0? z!ReoS$m_{P>HhVNfNTGJGf8UR(Lei2|DyeG1?gv)^&iI7I{Cc;-%Onk-3PA6m(5N2 zUH`tHoHitMM4PMg?{6bsbE`iSZG`#{FkPK5HgrT<|2v3orT<-WNy}ep{Rab%^F=6L zApU=diKh5sL)!n}V|3jzzPk43%KvbJ%)7Mzzt7mZLFR?$R~+A+|9`;PxGtt!AnhOBKYv4> zB*%NbKYBdi)<1hgpXq+fv^l=m;QVt0IQ{d411Y{h`0tuR>EuD`ZH{FVXN>-Vj| zb@}!Bo%fkFxA{L=^1n6h*OLsS^S=#w&gVM++md@Bo&W6uuJgY=xXz!>{|*7S`CldZ ze+BK=lMJNuzax3h=Q{tq&+dnG{&x%h8em%)SI{&+o=X|d7 zzdN}X()r&b;5z?%g15>)pEJ>qHO|MyG&51{>el7V#o45~fJ{C+*suM~b# zklyn3!cT6(xxRW6IOo?KdEK|K&o?^3Tdl7akSEFUUazkf2He)~HIlzBKQZjM^~>kM zS-*<{uIqQPv0rcG0PS0yuPsS&=l=&qe`yo@zW=*T`i6Ovzw6<#ze@U3g7nt^TkmM= z_tYkw{yzYm{_i1AvJd;(|I5Hz`Jc~$`4VaW_Xgaque(H_&xy6tKaJ^gxJCl)b9{2= z2YilU^>cGBke`^A6$H&V>e{CE6)5)i@_0J&p z0`qqxY;%3d`h8ts-=1GQDEemxT%RAE1+L4l&#%rVSNi(=YF)r*nDfoYME@Knt|tc4 z=O=mcDW7Zo0bd-K@%-djSajtd4D4^A&gX^#zNKnkabSN-bv`&8q~A)NPmKh8rqUk; z*Z$pF=@-b8;^Y0+>U{9rfLnccKDeHV>xqGmNb47wKIe0-KNi^6`lW!|_Wh*PZ#mG{ zNTLstUv(L}D@uNnr>~E(0I}vbOzJE&jHZXBL zF_0cVH++os-l}{TkSFqZugmxPfZO}Go9$%hk2m;n87Q;FKS|+?c+*tj(=|^ue;na&$|6x z46gmB>*p=xNpif`-c2tA9a%28#7=>U)9hgXPl3@_yI^u|9l{WA13^R8GN4bs{?N9 z|0l>F+y95i>-dq7ZvWSSw`zYMCU=SPJKg?25^$^k2hqQliR+1hwElHWpYyqH|JMih zb^H5h!0q_+67(tkF}`@gwV$1KvHXS%euVIkXYg*}H)imH@S8IDTZG@7!EX}&3G!T0 z0M~!+0%!ZVrAd0W-$#UhGK2p~_@|n1o=mNzt;Po&jj4Ik3C?Y z?env=U-!$W$LHIaKIe1YK5jSmH9rj&xjvxj&jsA-A1V5u=S6itz1IH%)8~Ay^}iU{ z*X{F50k`dQ0rV+-2VcD4+Gi~M%NhJq;a|z%9})i54E`zMcV_Uf3%@Ia|4{hXGWfH? zzfPV@3dr*D`G%Rh+WMa&ulrp4|L!2Y_WwPB{`6>1*k=7>2#CHBaC<&<-89>OzL~+@ z_d~wbgtLDf0u7!I+#7KH{fzs-b^p-c&$vI}c7B`<`|RJ}4(!|Zb1FE|0~vfk_;)h+ zM&aMh;BOcHAbAcy65RN66FBqtP?Pkm-+RH?zrRObm&Ev$9{(REpYpk`-|q+Zr$>*% zwp;)IAh2)uw@-=w4+F0Ew?6{c{af!Ze@vca5AXH<_9p?i``dqu{!f{>o)}2)ZyzDg z`CRKi>WkyDY0&4F23damihh>j9nlu%{?fL9Y@a_5xZU5*L_F*7G5pr;b4zu8^^1US zVb*Uu!#>mhGO%y?Uc!Hs!4DGt>ww$w;c#%apWl$z@gpJKejX>Ea+GD!?dP|F{pryX z*mmvbiNL;YKfepOZa=>VZ`FRDBu}!3_qzT3A>g|G{E><4iGg(cd5V0>=eqqo?Th0w z>c7q_|1*L8EzI~lD*pddz_(QU>pzp{eEqG|{^c)${#NS#=U)Rp)1-Ip^I34+K4+@- z`L}@U_WAd~zHXoY$l$Jh{<8_^{<13md5*m9mtXtmU*NiZX#f11JV}oCTdDJh=L2s0 z#~Vcd1twPddj9+m`4oO6r2EH{>;CaFxGukLpBT_m<=6eA zBj7X4`NB=eBc-Q-`+@hbc>ZvQ@ag2at1A z`EQHBzV_di0oVT93cQv7W|Av??Z2%9ZvFG3_=n#^j&g|s=bx>2x8v`&qxc1MU;H~_#7kQFByx0EOJK%PH zx>U-)PaAzaOPgw6y8q82_X72~e`Wii|Mv^HZNKk=KJ&eQVBe09S4;j5Ag|*`Lb`qq zB%gAWHg)|R6zETnZujcvRe^n7Kd%nBuAhU!Th-4Y-#Tr$d&yq)%-X& z;C6rX18E=gsP6^#U(OFt2%n$9pBH{Kc`h-)^t`{c^&WP7JchjPb3HyD8*tsejwAO1 z+n@jZ`SC$|+rHfM&nE<2*WYWvwSRT}ok*_qb^m{Dz^%T!zjRU?{gd11=K}j$zcb+0 z|FgvZ3#dPp6d>Kd7n0X~uKnLd?uE4f7X|6H{}%^b`+o^|EB`MgSNgjA-2u1#oBn6I zQ>gC+H$Tl4|C~x*PcBINr-yvX=h{EZ0{hdWGhy4!-^&C0di?7Rxb{yUcq{*$MxJC3 z@3ntc1l-Qw7bA}|kglKlUU2@oO8mpWqtePhtH`Gk1L^r;bzpybbdTqsHGzHYpS1zk z{y81Im4D74PqG*I=XC+s{yCHSUU2?-M*MRYdA;7aBHez@CZF=TZa?dcea*MuGig8P z1opLm@&VWW836Cd`S$hrHc0MOaJu~r1>E+p*~laP8dG1{xBfc?dzE)y>UU>e--j6pX>HlCHE?T{(a8#UoEh&{WlSC z?Y|A+t=iv4a;2~Rw<+MZeeJfFZC{hrSLtp0IslyQ>wNNhofnyq_Rj_6Q*{gRnr>gO z5A08m`e56Q?{5g~YyZ44;MzZL0&nG?I=L#J_Roa@xBj_6{BsfYReHO=yBM79_RSgm zBf>8x&(-l_1KS_>A9srVx0v*f(x$cl3rT-T2LFffOEdU(d)xfI)#z*cTt6QG&iZ{D zdEMuFeff59-G6oae+PMz9Pjo0smlUx?~k1z`tNL`|E@Or?+)y1{mTPx_4`HtJ#F-_ zXruq$z`oXhU%;(?N%XI5qkmN!{r3m-Kl8v9Gy*fA+e7Tm9Qa|N1uiA8n)mvB17A{|y1R{r_(0&p^NV zIQ6{_=*EY~gx{FKUl4v%2H$lbYyajZocq&bz}as~yk5tP4e9#*G`JqWb^YE-uKc6@`fy z8~v{Z_I3Hc9&oGwBhjB~qknfB{d)rYTK^jXxB5?t{x{p`f2)oDy@7qLe_z0@{tKdi ze;fU8x6ywfu&?#M6L71)?Y_4Ef47bPgKhL53hZnB?*-iI&l3HI+vtD4js6b;`&$2p z0k`_|ME^%^^nct&|0jWct^d=2Tm8kN|41ACN89NCEU>Tje;#nFf4b;D)<*vqZS;Q` z*w^~M3b@rTivF+L=>MjT{^Nmtt^eDATm8D|KhZ}2cWv~4AK2IWPX^rTzfbi4&_@4{ zZS}&m}18((i7X4@1=>MsW{+|Q;TK_KrxB7RA{$JbZKifwCZ-ITS|M!4f{f9;W zA8qvi*+&1lz`oZ1SHP|Q6Qcj`Hu}%E(SISZul4^EaI60x(SNax{!4B2{~OrX`Y#9E z>hCzq&Og|W`pfHJ{nG*7YJWS8JX!wWz1E)|aI1fa==1L!d&}2Ae>0}fB?9U5lg$JB zT7QdxTm78qZwcN?e=DYMp^y6jEz7@kz^(oo(ccEVmHxI&-$H-8z`id3_5rv0CDGpj zyp{edn7)Pnj)8rxzf-`i{#!(UXYf|~yD)tV{Z|I|wf?RFxBAzJ{%+u{^mk|a7W#Vx z_O(8~=agz6R{wLNzZZBb{k@sKh5kN)eXYN5z^(oRqCX3~l|KJYct;EU{R8`2|A2s7 z{l`WBK=4-j2QhsM{a2C0gbV5M=hXqX`Y+6~)ExrFcG_bGBe^|h+ z{*L=u{lmdq=^w%LE%foX-dmRcsDNAjLq&f!cq{!mOy5F(ZeU-Re_p_?{sPgT58g`u zXr^zWe@tLs>mM6%`~ChipwH)Xj|2Au_W$bn$Ky@9zgd zfLr?yi2c4c_D>7aYx^q#ZtXuJ_WRq|=l=uI%KxhZZteeG?5}QPe@&2H=YMU$t^I$B z{nOjnKO;!5?Y}PI*8YtB?f7$M8~bMk>9zf{18(i_B=*;}v42jGUfa(H+}ht?><_fD zKNzIf_J;y)?avYWaU1)?L3(X}B;eM5PVA4iv0n(%Yy0O0+}iIK`|I1-F9zwg{jq>s z`@>?t)W&`}NU!aW2i)496#M73v0n+&Yx~uJTl<%Z{aPFQ6G3`ye?!2n{cFYk#y0jh z1?jc@$$(q?w~PJr+t|M#NU!a`KH%2=x5WM%+Sq?%kY3w=Q^2kLN5p=;jr|LQ^xFPK z0k`&_7W;2*WB=kHy|(|BfLr_j75kU8v43fhUfX|bz^(lq53u9&+uGQFdyrn+e@DQr z{a1wYzbD|<{&KN@MH~C?4bp4-?+duKKOpw6 zY-9hbAicK#{(#&4#|GHv{nroBeqF8q)c31C$n-g%>;2!=fqlLI_)x&D{-p<4{cFHm z>3^8%Tj+lzu&?#64Y<|6<^ZdI9e6AK>zTfV{zn7*TK{7KxA*rycYwYBegn9_0p$IC ztjX&Sg0p@;PTrz^ZUk?YznjRTIz>!KpAXy|aGSs19$@qL3Gj6Oeu;?Zgx}JHGyhv3 zX!HL`@)r636nLxrf112S{%;Mq&HpUu&w%u2sISsne!TF{X7E1Yw`K4#;kP&8EdT4l zS%04+uh*Fg6R^Kh{p<7Kt;+ue@~AGU`ChlLF9zI}?^?;A#Yg#V{=0>LErXva{OcLKEPN`1UnKnQ41T5X zdouXV!oQKhzbgEj8T=vP-^$>>5q@t5|A+AVGWeFSvh{O+2H#8gx0`Ub@7dsN-w%-2 z{rb`E`#azrIiKtKzrG)Et6voTAAq;g z{~^=2(Em|jU+e!k;8y?bqW=@{R{B3>`WE_+1opN5qXD=2H;ewyz+376oatNWKNi^6 z`o9Rc)xTHte+k}7|5r@kLjTu+eXakSfLr}1ME`N{R{FnX`WE_61opN5?*eZ1r@h+t zzu$wm(tncaTj>8Gu&?$17;yXi@hs@G-#!KIXTUw5e2nm?Gx##$&t&jX;eX2D?-u^& z41SC7zmVtZ%%ll!{z}`8=pO}6{eNVn zUn=SUnUQ`#(m&TEJ@bE|@PB3Sj|u;G2ERx6^BMdJ;V)$H7lr>PgYSBXE&q#6IQ=&t zobBtS48B76e>3=n!e7qd*9te4;B_F^e!n8TgO${T|3vsS@?4!4nc&*jv*1M2`4ZLn zVuIt_9cuZE41SRC%?x*`=@Z-k=Yw;Au0z^(ow z(Vqz()e{5h^)3G&-&XqD1opN5wgI>6zthD(+kyMR`R828-}dD7yusyCi@6f%}2^n0z`oX>A8@PxX3;+yJZhnT4AZyJKQ^$h^^Xg< z)xTQwj|Y!h=%2v!E%aX#*w^|e2Hfi3D*CSlk6P%T#Plun`Tw-HYX7-_Tm5f{ekXX; zLVp3%x6of0*w^Ln3b@t(f#@#+k6P$2X8IQTO9J~^e`&z2{x3wo8$4>Ee+tvL&_6Y> zul0KZZuS2x`pdwh7W&JXzJ-2oU|;L^1>EXyakw3SPXmuy=&xY<7W(~xeXYMT;8uT@ z=&u5gTIjE4`WE_Y0{dEjZNRPmJkdWLJZhnT2Gh6De_dc->z^5LJHIZ1K2UTPU%cSf z2j@us&L*!X7o_LMb>OY?cMf@yJeVKz0k`?PK=L;L?gzI%xJvk72LFukp$z^_;c*6k zRQPZP|FiIs3_kq`>)+7~zN_#;20ujjxf%Q<;p>}lu5V5Q=lZ5dUQaxjuD>zxR`pjR zPm%}qR}Q#6zc>r}Og9eh2i9K?a1xugbM|5*=C^oAzsx&FRH_!~3$ z4Z`2lgtPs95uEL>PG0x*_5S%n@K){bBJw18(Ei>Wa67)qPPl;!Wt;Cl#v zR|Y>y_`5Us0^yfu@U_C_dljjl- zyZ-eraH0=1;kf5e-($AzA0H&2^3&`7adp7;{`*7ZUSRuW|2r40j{WZ%@_KRs{yvMk zKl)*C-Tw6dpYjp%Bst#e|6k$m%$4-|ctFJ5r{+|H_6$B_j?LHSGWhPoKTn=ZGT`(N1tdhNe2fw%JC9pp*!z<*y3xUIiF(f2NzeSv5&l31Un=}N8T@SF z-)+LLhyC+~KiGs*|AWFGB2W4ES@17`vwwV#yk5tP4e9aw;ehM$<@@AO-6qB>+wZ;@ zpWXcRgCM>A`&1u7BI^Gz;QH@V{Rq4x=iAqRKkmomk>;ntHuc&5eiCr2KNDjF^?wSk z%dhnxVfvi5PygMVN2KV(*f7@`wY1k(*5gCL3&-k ze-60z?_a?6_^zC4hN@_KSX+CTpYxc1LK z1N*xDKNqCe{`ptHwSWE%-pW7ElPB57d+nbW0z47o`33 zQoyx;{u|iW{&_h_ulc3uGpO$c=byvHKbw))lMB-R z**xIdKU)O$wSTq@(rf>06>#mJnc%Jbvo(2={lGul1YG-PTk3nk`KMF-vmJRoxghPI z?E|j;vqNBC`{xxwdhMSb1FrqE6L>5C>`b0yKk&~k0oVR{CH1}F{If>K>u)kT!MdScNTdr zxxn$a2;VP*UnzY541SyN1DbHo-}ixY{5z1m?(6IM^B{2TA6-AMB2SXzz23jPI^cHy z`xx|RAl<>#_kt_`KP3N$WbkS8t?r@Zxx|2Lf4hRSe20{0zQS_|Z)`+t1nJ z-($$@i9ou49}BL_r~P{zd6FFOb^AF!;CBCA7X1_2=)b0o{)vHot^eA9Tm3hS{z+~0 zPi~{13+!wC&VXC}4~YJPHu?+O=ywJ7wf>@jTm9Qae{mcAC2jPV2KKdncfhUww?+Sy zHu|Tw(eDZDYyD*b?=a_^zlJ`~HjDxpzT%%V1ASdTX9fD&KW7K_b^WXhxE+7zLZALQhx%S{^IsP@ z%azaIX9^$4;8o#+8T@U+hsbkD2HgB`BRKOHH%ZU=<1XRD8T<#rN1E`}NdFZ04zNFJ z_^d_-Fn>hXgZH5D)GvT{L?K@;{M-!QCwzSdUm?60@Q#T2n|_SV-xzq*MBnAF6r{KL zclj%4aF@UF4DRxGUcl}8@j&DcMTjck>H6dTejSRGmp71mf$J~-{Pm4N z`Yp`(@6KP}6mb3jBi6xn`St&gcp%ny(8ed{apsG{jcl)o#aYix4(AM0k`wpM)Ci91AXoP_XYae|5pa~_55~K!0rFfak1#Xzm5I}$fptqr^lZU zl6!&tD%f`SKduh!TmRoA`X36ouK#PmTh;%E$(6qL|3?CD^*<;2*S68Wu8scnfqkw2 z(SY0fzf<%-M*XRz0O|4nhCpA}|HlLSy8dqrxYd71^lxgTe{&oCPXzY0{w)Ew`o9zX zPg1|0UH(tC(f@Q{U+do*aI62E=zpe-{%70h-xk={`nLz%>ThwZo&P`AM*s6|^uG|; z*ZN-!xYgfH^uN?b|Bg2LUk>bR{jUVv>K`KdUu~m*XB+*y0{dG3YXP_V$BF*e+vrcV z(Z4&eul4TSi|N8~FE}wq>@0aAtzJC7iR{^)>+w3?yKL0w<*Xy(2kWVE7>GC~J?uB&u zejC`=<$D6WRr!8LuI%gb{XXD!{lBY}@5w-4m+ub&*X`$z&iL z{r3#GF27#?|A}1b>-E>41Fp~C|3ZB)xbvMu;2+xkYX^`{5ij$faJKIexS)b|3PU*_}IUzPlAMqW=Y!1;&r&*tPg zpKJeY5!kn!<1h8M47l~rH${J|Hu^KcTlr^e@+5nKf3^v@_0JE*Kig8@3(h}JO8&MZ zpGq!B`)7OdoX@p?b_nci|GXmL_V4pO2mNhecE`ZJem;9AaQ%FhetvrAfZO?L=J9rZ z+J*M(e*X3N@k;V3pX>2sS8^|;=cnBQ`+9!b9bDJ1o`3fsSN8S%v}eFOBK*y|`T-~( z+uvT)_X5XP@d+4|zQ?kX|3{OZ}YBwSQ)jCm8Sb`e?s^+x6vy=r495i=cjwXIsP6@J|z&p(*8Rn zu&@1hD7hEX^V4BLdObfK9&kNB9RaTEPp=P-Bv<-+emW}P`uULA)b|4Y^HccdH{zc; z*#=6{ih{=$F$KuwvGOAfqkui ze88>#OQL@Q^{0{op#D|)U&Hh{pX>6U7}(ePuMK!dw8IHev>$%heoq2#RzHUcKRMt! ze>vK3k-yGBU*~T@z^9q#i;jUl>vbXZm3@2vs7rWP6TTX3MDo9gdHF8(k}_p>+&xJZ&m(oa%Eqa|CE5+{qN}+;{Jb{c*8eX``A!e?_4?zCKwp>db%A~D z|1$$_^|ySD?cZm$(LcM5{<^@v);}lUwtwyleflj=eJ`;7`TXF4!UxE6$px8eO(T?_0JVj{&CvR`Q@|y|2FU$h(0f+ z-&f2}#+ClKRx6Z7s?m6*JTx&_Te7OVD;mnz@~@kHmi;|Pe$SQP^UjJoOGA}%VW_WC z9xfE)iu=5{P^`t3mF0=S(YU&1G%ocHR0k(2@sPV;m51VJC?3vF6l?v1l^AI&g}7A9*9zrQRLfUJ;#ya{p)eRn6V2s<%!bJ!g3K7D$z(Z5aoH* zXnEtRQlU2KUmnKylt;=bo4p(23aX@cJU@u!DcD&mj9FjkjL=ShZL%1ruJ5YkHyWSn z%aeRJ44zRgkEIgRXe*vr=|Lq_2lL}`XLURttflNE*Y%YvwMxEFYjat{+^P-LXk%fh zHX4n_g^|(rhM7PYm4&EAek~ZE7wPz+iHdXP>O!S9kuR=@^Tn{zmZEY;D*5rz!r;mZ zsvI4qr(CVtHlUm98k1Yqf|uH?t2lGnns`7bwpTJ5Wk3Ut%PZp2P+Wl?8zf>o2Wy25 zv1x4mXdt$_D}`FTAYU6CT^(0y@urodmAE=uE)L=PWh)yNqOrnwf2~p&ABVZ9G%+?1 zS9*t+6~?PJ7TuGoC?3lgubdo5e=3x#Y{^Cze(5d^6$bOQa;3M_Q_c_35Ne)dK%1*z zXH_*`h#p@a>l`0XTEv2QG{2#Mu9Gho%NygN&IwpAqrb;1%dWMwVynihg`v2sys^~m zszyUvVOmcUjm8x{@o>$IDgBKsaLBcgjw>7D#TASw z117GsI6j(>h6+^C`#GT`@B;_-YXp4HvkKWlNhGHXRVSgx3ciBE$z zzJENh6kvl+r;E_NaM#z?s`8I6oj^kXP0u@`O{C~xZPUb`~h#9}P8 z?lZA=uI=1_sl4JvoQjDT12xmxD{KVYz8m5^xVTU&#no!G0mVcEQ*~uJRZ{i+8w(hT zqTxp4HZG+Osv#a6?ONd3T^i?y{0TnE&XNh#h<7Cl*PkC7FS4+h-19}R>-Cn3ljhRi zlHbZ`3^Dy)!;`4BVbrp6sf_v@f&HF%LtJ$Bn#Ex(U^iP-MeldlStqhP_Kw#IW2jYA zZz70RTE!}+du%KoDsXIT4AE8NuG1#s2{fZIE@qa+W2{{TO0`P4*bIz~qgN=feD(7F z(L5%NzH+%(T~f)HCW?8?5Y8gF^!w}!OgGEGOVH{DF>MZx@`BKQC&%&RqW)3LUYszc zK#*US-_$oTP{dqnTWfdMLad-_O)fAs9#?`3pvt+py0}mo+lb!p98klQlowx{W{1v) zn3ZPPXc`PM9!DD{itF>GmJLG=#)~!Rt+Q7mhm1Qx;w9e6mvkouC zBw4M-H7s;uG>h&Mnt&Y*qm9+P$r(q)Qms)s%y5@D^6K8DB!6>>}EG@}n z`l!kVqOY(iE_TJGDtiTbrc6uygBWj1#{Z0sYbd^;-jbaO5mPw7G2zPW#roi?cLg2g zW?eLL6+4ch3o9p7WA_m1rZ8NVG3PtxqaDd$VAYDAejG`SVHCl7T73ph z{KOd;Ti@RPWoDtt)%;SFfVl-I9ct5ll zM}Ow%5_>xA*K2Vf&NHwK>mG_+j7+fogK^1h%WNZDhV2-25vZg>B7E5_-?Qxk{u?@%f$2d8~>S{4&b3Zc+ zxZvp=Uyqq=;rN7~UuR_HYEHvwJEjRty6EmIXHfUaDy__yaE6z+OClS!fD<{+l5E_n zYTU!KE950VIGHSO8q`*@D<9U1QW9&X;VrQ`po}v=;}{?935Hz=4UY2Uxm-1C@7*WM-jf#$Yj`B3G8(waB~it!)ULbgNMi zp{_v+dl_HX6l$YJ#YTeJgCcAk+_@_@1w0`1jN%Za#ywDTwdL`~$iD(nTs95ogXOF{F4AU6ZB!n2PZdq9d6-;wj|;s%+t*nz#0TY>h^n-c{wos0T{$hoG9?67Hj z2BuNusEn={tAk{}6)eH+kMSNJua4!hQy47s@a;5AQruj5Ic<5}*t&GelmnrGUERWo z0o?CttCD?XXw~Jsv5(Ela^r$VJI3N4^D;_n#~$_$Y2gjhSHaOX9nnNM*z`9Pf-D4= z!d`GzfUaA$s}ge_rWBX+_F8dS;<}(_!Yh(G(YcrT(;YP?n32hLr%sx+9NK+A1h?@k*QR&a}NMa;8l^hz8@kHwYzswx%| zT``XAvCpOPqHLH0fI$fpICshc8YoW0wQ{*O8W6K2O>GL@nb@*LD?52#kOu@VF0Ssi?=&08Wck2TIWx?GX^dvR#Py)SN>U1qFn}3(Jl|EXqSytbVg2`M^jfj zuco4%XH(J6yQ%1ghtu&H6bA)%5^M)7YT;fGJzj#p%=lF3=^51Zie_fLjG#ut%=gMIB=}T8G>yhq_%?eK- zad!!a6;+AsiAVCq?h@D9c0*x@0&YQhBZ)T;u*>xZd>kR-cGDm>nOHYr>uayat*r7= zPLNz;+bG$LxC3JwDJSVV5)yboVjKg01$p%D*O@;DfG_l+`8^^&JwyPt!waPQq zBq!#~z<%`Rf<=`|xxy2X#$8T(iKpA2-w=1CiD~>3*nBfcaf*kS;M*Q0PdVg zes~CtyOTJsz=503Ip#*1>T-ivZ=#*1>T-ivZA z#*1>T-ivar-ivar-ivar-ivCqdOxm7{u`~HyJ?=7k4=;s_cfBP-<&#o&8c%ubLza* zoH~a!r_OiHsdHm<>O9(KZmF@z<`7?63D;B`GwI z7^hvmC0fK0r`&`Q3vA%LGY2?~o1A{P_ZmC0yxuL8ZL_scGjP4eQ&D$c)ZAlk^vLBr zw&1g3ZhW!NXDqHR%;R*_>jT|Y+^sVQ&P%b2IUo7V7bSnnn1B1$t~E`z8~Y-gwUvY8 z-FP6bfKG`ep1lX^i6t0!_F~-9X?6wo#yU0bvq_dWPgdu67oXfxFn4EMw9KWMan;4>cGx;W zk*h3oofqdOK%IVQePe@&bPJX&Yp9K4=whQ$5%QF&vVqfz4LB%W!qa61%qHv5%jJk^VBiR%J< z7zC*n@usnT21}dsW^&UQ=J4utl?CFKt;u)oJ*9TD1 z=}6OUc`F_3f=!L<^3^I%!c3zXFZJ7-%6PWAI)A+67H9U;Vm{tHB*@$)HqS^h8_{@T z+x6YpoM(7t<-J||v;yxGNW;PM&)oFpe`r6-40D>I4@IjZ~{wV93RjN3Lqe z@ci7O(uSytMjJjIZ=X*}?xDB3s&NM%M`ac39oveM(G)6tDvL7>pL0Veos2fd150}B zg2(hi^SN=b=PJd-^7w<}Shcgd6q!Y_Of(;1?keO*O696~&eKG)BXV8D6`YOWGg`P! zJAkL_Y|Nsus%g}5sk4F;Dsz?i3xgbH5I)XlVjDN}%qR0i>G@da;GS5LWz_c~JP?FO zH@vSknCn@|=-K8`7<+7LqSxfBW1VovC~iU*1{)=ojM!5+d#os#Fk8l|@<_hu;T;5L9}^z5&O=KwNWz?7#sE~WCe}avi@2;E}pU}Vt!=<59<6+7>nx2 z`kWIHYeuX5S21vpCLfgG&ii&eaD6!H@Fpwa|g%A>1>`lV!<+8 z7;)bdaBL`Eg1g5RyDT3w3p*^S<=J|9D5`{^&y0%2Ze!8ZGae=$HMh4NbUG}1p!8LeX2oq7odwwB5UZ5x>?VVUtD%`ilByF6Cn*#Rv2ISuis`#>j zxl@#iRKZAMN8wO1tc`SFJ=-!0=G1B}I^^jY-ThJli`l7RH-rp2BE8 znH0uKw`|-&a@#^viXJSI<+k3CeSX12yW1?xBu_9*Bu!&A9FLf-=i8jFs%g;455a z{xiFPVY$p2!J@2I9xNA)r456d@cCSEi939X*4k&mf%xS%9EnN9s_`MTH{L~&h<+T9 z;o9U13;7xtm&Tb6O`$ZrfSR zV$R(jmlRIZTdp`^vv9(<5?xzqRdElTaSq;_z$Jn|FAa8WEC^m$)WiC93iuE!uNrtVqk{ z(Y3YWn)28>d1ofO#wSyGO(!06r*{K3>sWG{Gi;3Crr7N482r%(hjA<*-^DVIe%o5W zD$jnY=REsJg1gC1DJ*AgYNK1OjGz#(Wpi z-eE_q%n2?tcxI4~SH(+fwQ>8Lw)wKJ`A)U}#cIY*@h_sc3AbMNhS!|+l~Z1EytZ7 z#_$`LCV8x%OqTpOJ1#Ekvy1nBGsDwSUi_?e8AsIN5OaF`-m}wB|K=awV2C;pc$Lkt z5vXqwMaRMZ<%o9nJZ!H8+Z|Vrn=iH;nI9iNf(sdbPwU7L)6|S9=AgsNo{Ln!Q3Mm1 zM;%a^ImWQCrh0e@erEA=Bg|^NGcMsLV~Td?9Etzs)kW~PUl4PZ!8QTj?qffiSK{H} z&2v9s}PqxZn1Zef`PyQS=xDX=Bb@aTwkwpM9tK zDgRHtzkfj#@h2;^<2Icsce6rzX4_!z%I5y!1>551fI(ji;*_i?u7R_2z}ng zdcP6faTPwhe7N84k~-e-hk?wm@10Dnwd-vAoOqM`@O_%yggE{%uzvYyJKujme)!&x z#~;ezAImVok9Qhur)iBo#PO#c^X(ms>-obpe*7AI=1Gy{P0UX-wl^4mnlV3} zujQxl<2fJjhvQhftS;Z}m~U@q*x?V;`0?fgA{e(7ez2^VWxghd_YAE2-SA_-nuTw% zyWvOXOO};(@r~MmA=-=uIFp#z)PyoE+jOUWR#?q+9Eb2gyQts;0`u3`KfiGu)7!YC zRUB=~+E2xET;d{u->P#X$kJCex8EY4uvaFGs8cc5&hsl*pk6YvuIIH4Umatf{ZH(n~$5_V4 z_)HsY&!;V4i&tCUX}|68j!W)p<|D?leKe~R+U0+o#E`BVvK{cl-+oB9&ki;+nQVA1 z*E`MT8_s)DKaKLB-pzaJr0a;bFr75w{j|+Am@i+0pXoDd@O?84#y8Voe6wJDk#-0! zr0$&AN6wj-OnIh*)e+Bn_U-M6&$Bnpo-=#){DI?VbJ54rrz0AIo9R>w?eX%>);qX3qR}{Zam@V9DYnB0LQCC@x$SQTLoUrbw9^O{kZ=kHeU|CfES)B0bo_4QmjR0{UXen@}z+5h(5jQi}5(j#5Fpg!Aq jjBi!@mYfg#IQQQ58}~W=+og5Cxqi$Ha#7Mn!z=$k&_9*C literal 18712 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 From 132b3f79bd910b8f9759a55432648102001d9555 Mon Sep 17 00:00:00 2001 From: Alexey Orlov Date: Fri, 21 Apr 2023 12:02:39 +0200 Subject: [PATCH 6/6] updated metal native rendering plugin sample to use V2 interface --- .../Assets/Plugins/iOS/MetalPlugin.m | 27 ++++++++++++------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/Graphics/MetalNativeRenderingPlugin/Assets/Plugins/iOS/MetalPlugin.m b/Graphics/MetalNativeRenderingPlugin/Assets/Plugins/iOS/MetalPlugin.m index 39e2483..f9dce30 100644 --- a/Graphics/MetalNativeRenderingPlugin/Assets/Plugins/iOS/MetalPlugin.m +++ b/Graphics/MetalNativeRenderingPlugin/Assets/Plugins/iOS/MetalPlugin.m @@ -11,9 +11,7 @@ static IUnityInterfaces* g_UnityInterfaces = 0; static IUnityGraphics* g_Graphics = 0; -// NB finally in 2017.4 we switched to versioned metal plugin interface -// NB old unversioned interface will be still provided for some time for backwards compatibility -static IUnityGraphicsMetalV1* g_MetalGraphics = 0; +static IUnityGraphicsMetalV2* g_MetalGraphics = 0; // plugin assets @@ -60,7 +58,7 @@ static void CreatePluginAssets() { id lib = [device newLibraryWithSource:shaderStr options:nil error:nil]; g_VProg = [lib newFunctionWithName:@"vprog"]; - g_FShaderColor = [lib newFunctionWithName:@"fshader_color"], g_FShaderTexture = [lib newFunctionWithName:@"fshader_tex"]; + g_FShaderColor = [lib newFunctionWithName:@"fshader_color"]; g_FShaderTexture = [lib newFunctionWithName:@"fshader_tex"]; // pos.x pos.y uv.x uv.y const float vdata[] = { @@ -128,7 +126,7 @@ static void DoExtraDrawCall() { // RT format changed - recreate render pipeline // we silently assume that depth/stencil format does not change // even though we dont need it we need to set it up as otherwise validation will whine - g_ExtraDrawCallPixelFormat = rtColor.pixelFormat, g_ExtraDrawCallSampleCount = (int)rtColor.sampleCount; + g_ExtraDrawCallPixelFormat = rtColor.pixelFormat; g_ExtraDrawCallSampleCount = (int)rtColor.sampleCount; g_ExtraDrawCallPipe = CreateCommonRenderPipeline(g_FShaderColor, g_ExtraDrawCallPixelFormat, rtDepth.pixelFormat, rtStencil.pixelFormat, g_ExtraDrawCallSampleCount); } @@ -144,7 +142,7 @@ static void DoExtraDrawCall() { static UnityRenderBuffer g_CopySrcRB = 0, g_CopyDstRB = 0; UNITY_INTERFACE_EXPORT UNITY_INTERFACE_API void SetRTCopyTargets(void* src, void* dst) { - g_CopySrcRB = src, g_CopyDstRB = dst; + g_CopySrcRB = src; g_CopyDstRB = dst; } // we need to take special care about what "texture" do we use @@ -193,7 +191,7 @@ static void DoCaptureRT() { // prepare render pass MTLRenderPassColorAttachmentDescriptor* att = [[mtlBundle classNamed: @"MTLRenderPassColorAttachmentDescriptor"] new]; // NB we assume AA was already resolved, so we dont care - att.texture = dst; att.loadAction = MTLLoadActionLoad, att.storeAction = MTLStoreActionStore; + att.texture = dst; att.loadAction = MTLLoadActionLoad; att.storeAction = MTLStoreActionStore; MTLRenderPassDescriptor* desc = [[mtlBundle classNamed: @"MTLRenderPassDescriptor"] new]; desc.colorAttachments[0] = att; @@ -201,12 +199,18 @@ static void DoCaptureRT() { // prepare render pipeline if(dst.pixelFormat != g_RTCopyPixelFormat || dst.sampleCount != g_RTCopySampleCount) { // RT format changed - recreate render pipeline - g_RTCopyPixelFormat = dst.pixelFormat, g_RTCopySampleCount = (int)dst.sampleCount; + g_RTCopyPixelFormat = dst.pixelFormat; g_RTCopySampleCount = (int)dst.sampleCount; g_RTCopyPipe = CreateCommonRenderPipeline(g_FShaderTexture, g_RTCopyPixelFormat, MTLPixelFormatInvalid, MTLPixelFormatInvalid, g_RTCopySampleCount); } + // note that this is just an example of how to create your own command buffer, properly commiting unity's one + // this is absolutely not needed here, and was added just for the illustration purposes + [g_MetalGraphics->CommitCurrentCommandBuffer() waitUntilScheduled]; + id cb = [g_MetalGraphics->CommandQueue() commandBuffer]; + cb.label = @"Dummy Test CB"; + // render - id cmd = [g_MetalGraphics->CurrentCommandBuffer() renderCommandEncoderWithDescriptor:desc]; + id cmd = [cb renderCommandEncoderWithDescriptor:desc]; [cmd setRenderPipelineState:g_RTCopyPipe]; [cmd setCullMode:MTLCullModeNone]; [cmd setVertexBuffer:g_VB offset:0 atIndex:0]; @@ -214,6 +218,9 @@ static void DoCaptureRT() { [cmd drawIndexedPrimitives:MTLPrimitiveTypeTriangle indexCount:6 indexType:MTLIndexTypeUInt16 indexBuffer:g_IB indexBufferOffset:0]; [cmd endEncoding]; cmd = nil; + + [cb commit]; + cb = nil; } @@ -252,7 +259,7 @@ UnityRenderingEvent UNITY_INTERFACE_EXPORT UNITY_INTERFACE_API GetRenderEventFun void UNITY_INTERFACE_EXPORT UNITY_INTERFACE_API UnityPluginLoad(IUnityInterfaces* unityInterfaces) { g_UnityInterfaces = unityInterfaces; g_Graphics = UNITY_GET_INTERFACE(g_UnityInterfaces, IUnityGraphics); - g_MetalGraphics = UNITY_GET_INTERFACE(g_UnityInterfaces, IUnityGraphicsMetalV1); + g_MetalGraphics = UNITY_GET_INTERFACE(g_UnityInterfaces, IUnityGraphicsMetalV2); // we get plugin load after initial graphics init, so do callback manually g_Graphics->RegisterDeviceEventCallback(OnGraphicsDeviceEvent);