Code Monkey home page Code Monkey logo

adobe-runtime-support's Introduction

AIR SDK logo

AIR Issue Tracker and Discussion Forum

This project acts as an issue tracker for bugs and feature requests connected to the AIR SDK and Runtime. It does not contain any source code.


Now that Harman has taken over AIR development, we need a new place to discuss and report problems and make sure they know what's relevant to the community! That's what this repository is all about.

There are two major parts to this repository:

  • Discussions : A discussion forum for questions, ideas and general chat;
  • Issues : An issue tracker to report real bugs with the AIR SDK;

Always go to the discussion section first and only report an issue if you are sure it is a bug and have a reproducable case.

I found a bug in the runtime! What do do?!

First of all, use the search feature to find out if somebody already reported a similar issue. Also have a look at the discussions section!

a) This issue was already reported

  • Vote for that issue. To do that, click on the "Add your reaction" button at the top of the issue description and click on the 👍 symbol.
  • If possible, provide additional information by adding a comment.

b) This is a new issue

  • Create a new issue in this repository.
  • A template will pop up that will help you collect all necessary information.
  • Only a problem that can be reproduced has a chance of being fixed! Thus, create a minimal sample and provide all the information needed to get it running.
  • I can't stress this enough: the easier you make it for Harman to recreate the problem, the higher your chances of a fix!

I've got a question I can't answer

  • Do not open up a new issue. Instead,
  • head over to the discussions section and ask your question there.

adobe-runtime-support's People

Contributors

ajwfrost avatar marchbold avatar primaryfeather avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

adobe-runtime-support's Issues

Looping VideoTexture Causing AIR to Crash

Problem Description

A VideoTexture set to loop indefinitely, in this case via a seek operation on 'NetStream.Play.Complete' status, will eventually cause the running application to crash.

  • AIR SDK used: 26.0
  • Environment: AIR for Windows (Captive runtime and otherwise). Windows 7, 8 & 10; 32-bit & 64-bit confirmed.
  • Adobe Bug Tracker Issue

The issue is discussed in this Starling thread and is reproducable by at least 4 other users on the thread.

Steps to Reproduce

  1. Create an application that plays a video from a local file using VideoTexture
  2. Cause the video to loop e.g. by listening for the "NetStream.Play.Complete" play status and calling seek(0)
  3. Run the app. Usually within 15 hours, it will have crashed.

Here is a minimal application that exhibits the problem. This zip file can be imported directly into Flash Builder.

Here are compiled versions of the above app that can be run straight away:

To minimise dependencies, and to rule out framework bugs, this app does not use Starling, but the same behaviour is exhibited when Starling is used.

More Info

Known Workarounds

For some, using the appentBytes method on an embedded FLV can prevent (or perhaps postpone) the crash, which suggests it could be a file pointer issue. However, for others this method still eventually causes a crash. This workaround is not suitable for all applications however and has been found to exhibit a different bug.

ADT error 303: Icon banner320x180.png is missing from package when packaging tvOS

Problem Description

AIR SDK 26.0.0.118

When I package a tvOS app with ADT, I get the following error.

ADT error 303: Icon banner320x180.png is missing from package when packaging tvOS

I have an app that I'm developing for both Android TV and tvOS. In my AIR application descriptor, I have a <banner> field inside the <android> section. This specifies the Android TV banner.

When I package with apk-captive-runtime, I include the PNG file in my command line options, and it works fine. However, when I package with ipa-app-store, I don't include the PNG file in my command line options because it's not needed on tvOS. I get the error.

Because the <banner> field is inside the <android> section, it should be ignored when not targeting Android. If the <banner> field cannot be be ignored when packaging a tvOS app (or an app for any other platform), it should be moved outside the <android> section to avoid confusion. Based on the error message, it seems to be treated like an icon, so the <icon> section is a good candidate.

AIR-4198396

Steps to Reproduce

ADT command for tvOS that fails:

adt -package -target ipa-app-store -provisioning-profile path/to/profile -keystore path/to/keystore -storetype pkcs12 -storepass ABC123 SmartTV.ipa source/SmartTV-app.xml SmartTV.swf

AIR application descriptor:

<?xml version="1.0" encoding="utf-8" standalone="no"?>
<application xmlns="http://ns.adobe.com/air/application/26.0">
	<id>com.feathersui.examples.SmartTV</id>
	<filename>Smart TV</filename>
	<name>Smart TV</name>
	<versionNumber>3.4.0</versionNumber>
	<description>Smart TV example application built with Feathers UI controls for Starling</description>
	<copyright>2017 Bowler Hat LLC</copyright>

	<initialWindow>
		<content>SmartTV.swf</content>
		<autoOrients>true</autoOrients>
		<fullScreen>true</fullScreen>
		<visible>true</visible>
		<renderMode>direct</renderMode>
	</initialWindow>

	<supportedLanguages>en</supportedLanguages>

	<android>
		<supportsAndroidTV>true</supportsAndroidTV>
		<banner>banner320x180.png</banner>
		<manifestAdditions><![CDATA[
			<manifest android:installLocation="auto">
			    <uses-permission android:name="android.permission.INTERNET"/>
			</manifest>
		]]></manifestAdditions>
	</android>
	<iPhone>
		<InfoAdditions>
		<![CDATA[
			<key>UIDeviceFamily</key> 
			<array> 
				<string>3</string>
			</array>
		]]> 
		</InfoAdditions>
		<requestedDisplayResolution>high</requestedDisplayResolution>
	</iPhone>
</application>

Known Workarounds

Workaround 1: Comment out <banner> temporarily.

Workaround 2: Include the extra PNG file when packaging, even though it is useless on tvOS

Add Ability to Change Device Orientation without Resizing Stage

Feature Request

AIR SDK: 27.0.0.124
Affected Environment: AIR iOS, Android
Reproduction: 100%, confirmed with other users

I would like to request the ability to change the device orientation without changing the stage size/firing a stage resize event while in StageScaleMode.NO_SCALE so that I can manually adapt my application to its new orientation without redrawing the stage or losing context on Android.

My game takes advantage of three aspect orientations: Portrait, Landscape_Left, Landscape_Right as shown in this video: https://youtu.be/1hkst26cJdg

In the first part of my video, I show the use case for how I would like the application to animate the orientation change by using custom accelerometer code rather than stage.setOrientation method. This solution has a major problem, however, in that the application does not actually change the system orientation, so things like notifications bar, the virtual keyboard, etc. are all fixed to portrait mode even when I rotate. When I use stage.autoOrient == true, I am forced to use the default transition animation, which looks very poor when changing between left/right orientation due to when AIR fires these events.

I believe the following functionality would need to be added to Adobe AIR to create an optimal solution:

  1. Ability to change the device orientation without changing the stage size/firing a stage resize event while in StageScaleMode.NO_SCALE.
  2. Ability to disable the default/native orientation change animation.

Steps to Reproduce

  1. The orientation change/resize event only fires in StageScaleMode.NO_SCALE and when stage.autoOrient == true.
  2. I currently change orientation manually by disabling stage.autoOrient and using the accelerometer to detect device orientation. I can avoid the stage resize by rotating the stage, which yields a much nicer transition and avoids lost context. However, using this method means that I do not actually change the device’s background orientation, so things like the native status bar, phone notifications, and application screenshots will be upside down or rotated in the incorrect position.
  3. Android and iOS handle orientation changes differently:
  4. On iOS, the resize event fires first, then the orientation change event fires
  5. On Android, Orientation Fires, then resize fires. Additionally, after the resize event fires, the context3D is lost and requires code to redraw the textures back to the display which can further delay the transition. Also, the “upside down” orientation doesn’t actually get set unless I manually set it in response to orientation change event.
  6. Since my app handles orientation for both left and right orientation, I need to handle my orientation code in both the resize and orientation change events. This results in poor quality animation transitions as seen in the video.
  7. What I need is the ability to tell the device that the application has changed orientation without actually changing the stage size or playing the default rotate animation inside the app.

Worker execution is limited to 4FPS

Problem Description

Worker execution is limited on 4FPS which means that ENTER_FRAME, TIMER, setInterval, setTimeout can not be executed faster than 250ms in between them.

I have tested this on AIR 27.0.132 and AIR 28.0.0.120 Beta.

It occurs on both iOS and Android. I have tested on Huawei P10 Lite, Samsung s6 Edge and iPhone X.

This bug is known to Adobe as they acknowledge it on their forum here:

https://forums.adobe.com/thread/1360885

The bug is already reported in the Adobe issue tracker and has not been fixed since 2013:

https://tracker.adobe.com/#/view/AIR-3687099

Inability to get any useful info about Android crashes

Problem Description

Having crash reports in Google Play sometimes is useless without having unstripped SO libs, for instance

*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
pid: 0, tid: 0 >>> com.belkatechnologies.fe <<<

backtrace:
  #00  pc 0000000000da1684  /data/app/com.belkatechnologies.fe-h04MfpQ1_S4j7yZy8IsJVQ==/lib/arm/libCore.so

All SO libs in Adobe AIR SDK (version 29, 31)- stripped. I mean
SDK_LOCATION/runtimes/air/android/device/Runtime.apk - file containing SO libs

lib/armeabi-v7a/libCore.so - ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, BuildID[sha1]=c47acd7bc8ce2ad463bb12e9fbf2d05de1993e30, stripped

https://tracker.adobe.com/#/view/AIR-4198717

Steps to Reproduce

Not applicable

AIR 28 Beta is missing entries for IpadPro10.5Inch - therefore incorrect screen size returned

Problem Description

AIR 28 now produces an app Info.plist which contains an array of UILaunchImages. I believe it is missing an entry for iPad Pro 10.5" (2017)
It has a screen resolution of 1668x2224px (which is unique) so I believe there should be 2 more entries like so:

<key>UILaunchImages</key>
            <array>
                <dict>
                    <key>UILaunchImageMinimumOSVersion</key>
                    <string>8.0</string>
                    <key>UILaunchImageName</key>
                    <string>IpadPro10-InchPortrait.png</string>
                    <key>UILaunchImageOrientation</key>
                    <string>Portrait</string>
                    <key>UILaunchImageSize</key>
                    <string>{834, 1112}</string>
                </dict>
               <dict>
                    <key>UILaunchImageMinimumOSVersion</key>
                    <string>8.0</string>
                    <key>UILaunchImageName</key>
                    <string>IpadPro10-InchLandscape.png</string>
                    <key>UILaunchImageOrientation</key>
                    <string>Landscape</string>
                    <key>UILaunchImageSize</key>
                    <string>{834, 1112}</string>
                </dict>
             </array>

Steps to Reproduce

Launch basic AIR app on IPadPro 10.5"
trace(Capabilities.screenResolutionX + "x" + Capabilities.screenResolutionY );

Actual Result:

Resolution printed as 1536x2048

Expected Result:

Resolution printed as 1668x2224

Known Workarounds

None.
Default-Portrait-834w-1112h@2x~ipad.png was tried however the Info.plist now specifies a set list of filenames and dimensions. There appears no way of overriding this.

Adobe Issue Tracker

https://tracker.adobe.com/#/view/AIR-4198511

For reference here is the list of UILaunchImages produced by AIR 28 beta

<key>UILaunchImages</key>
        <array>
            <dict>
                <key>UILaunchImageMinimumOSVersion</key>
                <string>8.0</string>
                <key>UILaunchImageName</key>
                <string>Default~iphone.png</string>
                <key>UILaunchImageOrientation</key>
                <string>Portrait</string>
                <key>UILaunchImageSize</key>
                <string>{320, 480}</string>
            </dict>
            <dict>
                <key>UILaunchImageMinimumOSVersion</key>
                <string>8.0</string>
                <key>UILaunchImageName</key>
                <string>Default@2x~iphone.png</string>
                <key>UILaunchImageOrientation</key>
                <string>Portrait</string>
                <key>UILaunchImageSize</key>
                <string>{320, 480}</string>
            </dict>
            <dict>
                <key>UILaunchImageMinimumOSVersion</key>
                <string>8.0</string>
                <key>UILaunchImageName</key>
                <string>Default-568h@2x~iphone.png</string>
                <key>UILaunchImageOrientation</key>
                <string>Portrait</string>
                <key>UILaunchImageSize</key>
                <string>{320, 568}</string>
            </dict>
            <dict>
                <key>UILaunchImageMinimumOSVersion</key>
                <string>8.0</string>
                <key>UILaunchImageName</key>
                <string>Default-375w-667h@2x~iphone.png</string>
                <key>UILaunchImageOrientation</key>
                <string>Portrait</string>
                <key>UILaunchImageSize</key>
                <string>{375, 667}</string>
            </dict>
            <dict>
                <key>UILaunchImageMinimumOSVersion</key>
                <string>8.0</string>
                <key>UILaunchImageName</key>
                <string>Default-414w-736h@3x~iphone.png</string>
                <key>UILaunchImageOrientation</key>
                <string>Portrait</string>
                <key>UILaunchImageSize</key>
                <string>{414, 736}</string>
            </dict>
            <dict>
                <key>UILaunchImageMinimumOSVersion</key>
                <string>8.0</string>
                <key>UILaunchImageName</key>
                <string>Default-Landscape-414w-736h@3x~iphone.png</string>
                <key>UILaunchImageOrientation</key>
                <string>Landscape</string>
                <key>UILaunchImageSize</key>
                <string>{414, 736}</string>
            </dict>
            <dict>
                <key>UILaunchImageMinimumOSVersion</key>
                <string>8.0</string>
                <key>UILaunchImageName</key>
                <string>Default-812h@3x~iphone.png</string>
                <key>UILaunchImageOrientation</key>
                <string>Portrait</string>
                <key>UILaunchImageSize</key>
                <string>{375, 812}</string>
            </dict>
            <dict>
                <key>UILaunchImageMinimumOSVersion</key>
                <string>8.0</string>
                <key>UILaunchImageName</key>
                <string>Default-Landscape-812h@3x~iphone.png</string>
                <key>UILaunchImageOrientation</key>
                <string>Landscape</string>
                <key>UILaunchImageSize</key>
                <string>{375, 812}</string>
            </dict>
            <dict>
                <key>UILaunchImageMinimumOSVersion</key>
                <string>8.0</string>
                <key>UILaunchImageName</key>
                <string>Default-Portrait~ipad.png</string>
                <key>UILaunchImageOrientation</key>
                <string>Portrait</string>
                <key>UILaunchImageSize</key>
                <string>{359, 512}</string>
            </dict>
            <dict>
                <key>UILaunchImageMinimumOSVersion</key>
                <string>8.0</string>
                <key>UILaunchImageName</key>
                <string>Default-PortraitUpsideDown~ipad.png</string>
                <key>UILaunchImageOrientation</key>
                <string>PortraitUpsideDown</string>
                <key>UILaunchImageSize</key>
                <string>{359, 512}</string>
            </dict>
            <dict>
                <key>UILaunchImageMinimumOSVersion</key>
                <string>8.0</string>
                <key>UILaunchImageName</key>
                <string>Default-Landscape~ipad.png</string>
                <key>UILaunchImageOrientation</key>
                <string>Landscape</string>
                <key>UILaunchImageSize</key>
                <string>{359, 512}</string>
            </dict>
            <dict>
                <key>UILaunchImageMinimumOSVersion</key>
                <string>8.0</string>
                <key>UILaunchImageName</key>
                <string>Default-LandscapeRight~ipad.png</string>
                <key>UILaunchImageOrientation</key>
                <string>LandscapeRight</string>
                <key>UILaunchImageSize</key>
                <string>{359, 512}</string>
            </dict>
            <dict>
                <key>UILaunchImageMinimumOSVersion</key>
                <string>8.0</string>
                <key>UILaunchImageName</key>
                <string>Default-Portrait@2x~ipad.png</string>
                <key>UILaunchImageOrientation</key>
                <string>Portrait</string>
                <key>UILaunchImageSize</key>
                <string>{768, 1024}</string>
            </dict>
            <dict>
                <key>UILaunchImageMinimumOSVersion</key>
                <string>8.0</string>
                <key>UILaunchImageName</key>
                <string>Default-PortraitUpsideDown@2x~ipad.png</string>
                <key>UILaunchImageOrientation</key>
                <string>PortraitUpsideDown</string>
                <key>UILaunchImageSize</key>
                <string>{768, 1024}</string>
            </dict>
            <dict>
                <key>UILaunchImageMinimumOSVersion</key>
                <string>8.0</string>
                <key>UILaunchImageName</key>
                <string>Default-LandscapeLeft@2x~ipad.png</string>
                <key>UILaunchImageOrientation</key>
                <string>LandscapeLeft</string>
                <key>UILaunchImageSize</key>
                <string>{768, 1024}</string>
            </dict>
            <dict>
                <key>UILaunchImageMinimumOSVersion</key>
                <string>8.0</string>
                <key>UILaunchImageName</key>
                <string>Default-LandscapeRight@2x~ipad.png</string>
                <key>UILaunchImageOrientation</key>
                <string>LandscapeRight</string>
                <key>UILaunchImageSize</key>
                <string>{768, 1024}</string>
            </dict>
            <dict>
                <key>UILaunchImageMinimumOSVersion</key>
                <string>8.0</string>
                <key>UILaunchImageName</key>
                <string>IpadPro12inchPortrait.png</string>
                <key>UILaunchImageOrientation</key>
                <string>Portrait</string>
                <key>UILaunchImageSize</key>
                <string>{1024, 1366}</string>
            </dict>
            <dict>
                <key>UILaunchImageMinimumOSVersion</key>
                <string>8.0</string>
                <key>UILaunchImageName</key>
                <string>IpadPro12inchLandscape.png</string>
                <key>UILaunchImageOrientation</key>
                <string>Landscape</string>
                <key>UILaunchImageSize</key>
                <string>{1024, 1366}</string>
            </dict>
        </array>

[F REQ] ADT to correctly sign dynamic frameworks included packaged with iOS app

Problem Description

To be able to build ANEs using Swift developers must use dynamic frameworks.
These frameworks when included are not signed correctly by adt and a complex bash based workflow is needed to package the final ipa file.

The current workflow workaround is

  1. Sign frameworks when building ANE in Xcode
  2. Resign frameworks using codesign bash script
  3. Package AIR ipa using adt, including any framework files
  4. Resign AIR ipa using bash script

Known Workarounds

I have produced an AIR based tool to manage the resigning of Frameworks and AIR app but it's not ideal
https://github.com/tuarua/AIR-iOS-Packager

Video issues on iOS (missing audio)

The following plays properly on iPhone X and Android

Video is OK but the audio is missing on: iPhone 5S, iPhone 7+, iPhone 8+ (no other iPhone tested)

Tested using AIr 27 through 30

Testing using ffmpeg encode settings:

mp4 libfdk_aac 128000 44100 libx264 1200000 1024x768

I also found a test stream that you can use to reproduce the issue described above: https://content.jwplatform.com/manifests/yp34SRmf.m3u8

Taken from here: https://developer.jwplayer.com/tools/stream-tester/?playerversion=7

There's also this taken from another bug related to video on this forum: https://s3.amazonaws.com/flaxbinpic/bunny.mp4

protected function test_triggeredHandler(event:Event):void
{
  vidClient = new Object();
  vidClient.onMetaData = onMetaData;
  nc = new NetConnection();
  nc.connect(null);
  ns = new NetStream(nc);
  ns.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus);
  ns.client = vidClient;
  videoTexture=Texture.fromNetStream(ns , Starling.current.contentScaleFactor , onTextureComplete)
  ns.play("https://somevideo.mp4");
}
  private function onTextureComplete():void
  {
       videoImage = new Image(videoTexture)
       this.addChild(videoImage)
  }
  private function onMetaData():void
  {
       trace('on net onMetaData');
  }
  private function onNetStatus(event:NetStatusEvent):void
  {
       trace('on net status');
  }

https://tracker.adobe.com/#/view/AIR-4198668

iOS audio issue with MFi connected devices

Problem Description:

When playing audio from within an iOS Adobe Air app via the Sound class, it fails to stream to hearing devices connected to the iPhone via MFi

Steps to Reproduce:

  1. Connect a hearing device/implant to an iOS device via MFi (Settings > General > Accessibility > MFi Hearing Devices)

  2. Open Air app and play a sound.

var snd:Sound = new Sound( new URLRequest("sound.mp3") );
snd.play();

Actual Result:

No audio streams to the hearing device. However if music or a sound from a background app is playing, the sound being invoked from the Air app will stream successfully however it gets mixed in with the device's background audio stream.

Expected Result:

The sound should play on the MFi hearing device irrespective of if a background sound being played.

Any Workarounds:

We managed to obtain the required results by using a Distriqt native extension to play a sound (bypassing the Air method).

Bug affects:

Adobe Air 28.0.0.125
iPhone & iPad devices running iOS 10+

Footnote: For some reason, the Adobe bugbase (https://tracker.adobe.com/#/add_bug) is preventing me from logging this as a bug on their system, showing a "Bug submission failed" error on their form.

Anti-Aliasing on Render-To-Texture may yield "Internal Error" on iOS

Problem Description

When using anti-aliasing via the "context3D.setRenderToTexture()" method, subsequent calls to "context.createVertexBuffer" yield the error "Error #3672: Buffer creation failed. Internal error." on iOS.

This makes it impossible to use the new FragmentFilter.antiAliasing property introduced in Starling 2.2 on iOS.

This was reproduced in AIR 26, Build 112, and AIR 25, Build 134.
I run the app on iOS 10.3.2.

Adobe Tracker Issue: https://tracker.adobe.com/#/view/AIR-4198370

Steps to Reproduce

Use the following class as a Starling Root-Class (Starling 2.2) on iOS:
https://gist.github.com/anonymous/1c1480962f0723f9baaa63e7c8f51683

The code causes an exception in this line in FragmentFilter.as (effect.uploadVertexData). If you step into this method, you see that the actual exception occurs inside context.createVertexBuffer.

Known Workarounds

Set filter.resolution = 2 instead of filter.antiAliasing = 2.

[bug] Sound files in Android's "raw" folder can't be played by ANEs

Problem Description

This problem has been with AIR for a long time, I had tried to get more information on this by posting on Adobe's forum before with no feedback. Anyway, this is still happening even in AIR SDK 26.

If an ANE requires Sound file resources, the best place is to put them is the resources raw folder. Unfortunately sound files in that folder won't be played on the native side when AIR packages the .apk. I'm not sure, but it seems like it has something to do with the fact that AIR compresses the resources.

Link to Adobe bug tracker: https://tracker.adobe.com/#/view/AIR-4198415

Steps to Reproduce

Known Workarounds

In some cases, copying the sound files to the File.documentsDirectory instead of the raw folder, can help ANEs play the sound files they need. But this is not ideal. moreover, some ANEs like Firebase FCM ANE is not allowing us to put the fcm notification sound file anywhere else but the raw folder. Because of that, AIR developers using the FCM ANE can not play custom notification sounds on Android.

Clearing a texture used as render target: issue on iOS with active anti-aliasing

Problem Description

When activating anti-Aliasing on a Starling FragmentFilter on iOS, the filter contents accumulates in each frame, i.e. it seems as if context.clear (with a texture as render target) would not work any longer.

Background information:

Starlings FragmentFilters render objects into a texture so that they can then be processed by subsequent shaders. When you assign a vanilla FragmentFilter to a display object, it just displays that texture.

On iOS, it seems as if the texture (render target) wasn't cleared correctly as soon as antiAliasing is activated on the filter (which is forwarded to context.setRenderTexture).

Steps to Reproduce

Run the following code as part of a Starling root object:

var quad:Quad = new Quad(100, 100, 0xff0000);
quad.alignPivot();
quad.x = quad.y = 100;
quad.filter = new FragmentFilter();
quad.filter.antiAliasing = 2;
addChild(quad);

Starling.juggler.tween(quad, 3, { rotation: Math.PI * 2, repeatCount: 0 });

The result, which should be a red rotating quad, looks like this:

img_1394

Remarks:

  • This does work fine on macOS and the AIR iOS emulator.
  • I tried to reproduce the issue with pure Stage3D code, without Starling, but I could not do it. It must be some combination of settings Starling is using.

Known Workarounds

Starling's filters also support a resolution property that works similar to anti-aliasing, but doesn't rely on Stage3D features. That seems to work fine.

AIR app rotation broken on iOS 11 Beta 3 when using -platformSDK

Problem Description

Using AIR SDK 26 on any iOS device with iOS 11 Beta 3 installed.

Rotate device into landscape mode.
App doesn't rotate and is now upside-down. Clicking home button and reopening corrects the orientation but the stage position is now mostly offscreen and reveals the splash screen underneath

https://tracker.adobe.com/#/view/AIR-4198406

Steps to Reproduce

  1. Use device with iOS 11 beta 3 installed
  2. Specify -platformSDK as iOS SDK included with Xcode 8.3 (or Xcode 9.0) /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk
  3. Launch basic sample app from https://github.com/tuarua/iOS-11-beta3-rotation-bug

Known Workarounds

None

This may well be an iOS bug and although iOS 11 is still in beta I believe this behaviour should be tracked in case it is a core change in iOS. I would like to implement ANEs for ARKit, PDFKit, Vision and this is now preventing me.

Sound: Custom sampling with shared sound source creates crackling artifacts

Problem Description

When multiple custom sound processing are done with a shared sound source, crackling audio artefacts appear.

Context

  • Tested on AIR SDK: 30.0.0 but for sure present in earlier versions
  • Occurs on AIR but certainly Flash Player as well
  • 100 % reproducible on my side

Links

Steps to Reproduce

The attachment is available here (or below): https://tracker.adobe.com/#/view/AIR-4198737

  1. Run the attached script with testSharedSoundSource() call -> Generates crackling artefacts
  2. Run the attached script with testSeparateSoundSources() call -> Expected result
//---------------------------------------------------------------------
// Common sound source (generates crackling artefacts)
//---------------------------------------------------------------------

private var _sndSrc:Sound;

private function testSharedSoundSource():void
{
	// Shared sound source
	_sndSrc = new EngineSound();
 
	// Sound 1
	var snd1:Sound = new Sound();
	snd1.addEventListener(SampleDataEvent.SAMPLE_DATA, onSndCommonSample);
 
	// Sound 2
	var snd2:Sound = new Sound();
	snd2.addEventListener(SampleDataEvent.SAMPLE_DATA, onSndCommonSample);
 
	// Play
	snd1.play();
	snd2.play();
}
 
private function onSndCommonSample(e:SampleDataEvent):void
{
	// Extract bytes from a shared sound source
	var bytes:ByteArray = new ByteArray();
	_sndSrc.extract(bytes, 4096, e.position);
	e.data.writeBytes(bytes);
}

//---------------------------------------------------------------------
//-- Separate sound sources (OK)
//---------------------------------------------------------------------

private function testSeparateSoundSources():void
{
	// Sound 1
	var sndSrc1:Sound = new EngineSound();
	var sndFake1:Sound = new Sound();
	sndFake1.addEventListener(SampleDataEvent.SAMPLE_DATA,
		function(e:SampleDataEvent):void
		{
			// Extract bytes from a dedicated sound source
			var bytes:ByteArray = new ByteArray();
			sndSrc1.extract(bytes, 4096, e.position);
			e.data.writeBytes(bytes);
		}
	);
	
	// Sound 2
	var sndSrc2:Sound = new EngineSound();
	var sndFake2:Sound = new Sound();
	sndFake2.addEventListener(SampleDataEvent.SAMPLE_DATA,
		function(e:SampleDataEvent):void
		{
			// Extract bytes from a dedicated sound source
			var bytes:ByteArray = new ByteArray();
			sndSrc2.extract(bytes, 4096, e.position);
			e.data.writeBytes(bytes);
		}
	);
	
	// Play
	sndFake1.play();
	sndFake2.play();
}

Actual Result

Crackling artefacts are generated when multiple custom sound processing are done in parallel.

Expected Result

In order to re-use sound sources (for usability, memory & performance gain), no crackling artefacts should appear during those kind of operations.

Known Workarounds

Duplication of sound for each custom sound processing can be done anyway but it increases memory usage & requires useless garbage collection.

Enhanced microphone causes wrong audio output to be used - small speaker instead of hands free speaker

Hello Adobe!

The issue from 10/05/2016, AIR 23.0.0.274 and still exists in AIR 30.0.0.107 sdk

https://tracker.adobe.com/#/view/AIR-4195154
https://forums.adobe.com/thread/2218437

A few quotations from Dave Cates:

Problem Description:
We are using the enhanced microphone in our realtime chat app so we can take advantage of AEC.

However, the audio output selected by Air is not predictable and often wrong. Instead of outputting to the large handsfree speaker, audio is routed to the phone smaller speaker.

Steps to Reproduce: Simply use getEnhancedMicrophone and subscribe to an RTMP AV stream and the audio issue will manifest.

Actual Result: Audio is routed to the small phone speaker, not the large speaker

Expected Result: Audio should be routed to the large phone speaker when no headphones are plugged in.

Workaround with:

SoundMixer.audioPlaybackMode = AudioPlaybackMode.VOICE;
SoundMixer.useSpeakerphoneForVoice = true;

didn't work. Large speaker turns on for a second - then audio switches to back to voice phone speaker.

We have to use general microphone, without AEC. It's extremely inconvenient for our users, they have to chat with headphones.

@viveknegi1 can you look at this issue?

dx tool failed (com.android.dx.cf.code.SimException) unable to build ane with java8

we are getting dx tool failed error when compiling apk with ane that based on mapbox android sdk with java 1.8 compability.

We are successfully generating ane but unable to build apk.

using jdk 1.8.0_181 64bit(tried other version and jre)
android build tool 28 also min sdk version is 27
adobe air windows sdk 31.0.96 (latest)

also tried replacing old adobe air dx.jar as described in another adobe bugtrack https://tracker.adobe.com/#/view/AIR-4198726 and issue posted here #44

tried all dx.jars including api28 but result is same.

dx tool failed:WARNING in com.mapbox.mapboxsdk.log.LoggerDefinition.log:(ILjava/lang/String;Ljava
/lang/String;)V: defining a static interface method requires --min-sdk-version >= 24 (currently 13) for
interface methods: com.mapbox.mapboxsdk.log.LoggerDefinition.log:(ILjava/lang/String;Ljava
/lang/String;)

Uncaught translation error: com.android.dx.cf.code.SimException: ERROR in
com.mapbox.mapboxsdk.http.NativeHttpRequest.executeLocalRequest:(Ljava/lang/String;)V:
invalid opcode ba - invokedynamic requires --min-sdk-version >= 26 (currently 13)

Uncaught translation error: com.android.dx.cf.code.SimException: ERROR in
com.mapbox.mapboxsdk.log.Logger.log:(ILjava/lang/String;Ljava/lang/String;)V:
invoking a static interface method com.mapbox.mapboxsdk.log.LoggerDefinition.log:(ILjava/lang
/String;Ljava/lang/String;)V strictly requires --min-sdk-version >= 24 (blocked at current API level 13)

Uncaught translation error: com.android.dx.cf.code.SimException: ERROR in
com.mapbox.mapboxsdk.maps.MapView.initialiseDrawingSurface:(Lcom/mapbox/mapboxsdk
/maps/MapboxMapOptions;)V:
invalid opcode ba - invokedynamic requires --min-sdk-version >= 26 (currently 13)
3 errors; aborting

We will appreciate if anyone have temporary workaround.

Please vote here: https://tracker.adobe.com/#/view/AIR-4198743

Abnormal executable file size when compiling for iOS

Hi,

I have a lot of classes that represents vertices of polygons of Box2D objects. That classes are factories that have polygons for every scale of each object from scale 0.1 to 3 in 0.1 increment. So I have vertices for scale 0.1, 0.2, 0.3 etc. And there are a lot of vectors and a lot of b2Vec2 instances and of course a lot of numbers. And when I compile for iOS all that classes increase the executable file size to over 80MB which is insane. Without those classes my executable file size is 35MB. All those classes take around 3.5MB on disk uncompressed. So I really don't know what adobe compiler is doing to create 45MB(80 - 35) of executable file when I add 3.5MB of text worth of code. How on earth 3.5MB worth of code translates to 45MB of executable file?

That only happens on iOS. On Android the file size remains pretty much the same no issues what so ever.

I am using AIR 27 Beta and compiling on Flash Builder 4.7.

This is the one of the many factory classes as an example that are increasing executable file dramatically on iOS:

package shapesinmotion.factory.vertex.simobjects
{
	import Box2D.Common.Math.b2Vec2;
	import hcmbox2d.interfaces.factory.IPhysicsObjectVertexFactory;

	public class LemonVertexFactory implements IPhysicsObjectVertexFactory
	{
		public function LemonVertexFactory(){}

		public function create(scale:Number):Vector.<Vector.<b2Vec2>>
		{
			var v:Vector.<Vector.<b2Vec2>>;
			switch(scale)
			{
				case 0.1:
					v = new <Vector.<b2Vec2>>[new <b2Vec2>[new b2Vec2(0.05078125,0.00390625),new b2Vec2(0.0651041666,0.02083333332),new b2Vec2(0.06119791664,0.03515625),new b2Vec2(0.0481770833,0.04557291664),new b2Vec2(0.02213541664,0.046875),new b2Vec2(0,0.02994791664),new b2Vec2(0.015625,0.00520833333),new b2Vec2(0.03137860082304526,0.0004822530864197531)],new <b2Vec2>[new b2Vec2(0.03137860082304526,0.0004822530864197531),new b2Vec2(0.02864583332,0.001302083333),new b2Vec2(0.02864583332,0)]];
					v.fixed = true;
					return v;
					break;
				case 0.2:
					v = new <Vector.<b2Vec2>>[new <b2Vec2>[new b2Vec2(0.1041666666,0.01041666666),new b2Vec2(0.1302083331,0.04296875),new b2Vec2(0.1236979166,0.0677083333),new b2Vec2(0.10546875,0.0859375),new b2Vec2(0.0833333333,0.0950520833),new b2Vec2(0.04296875,0.0924479166),new b2Vec2(0,0.0598958333),new b2Vec2(0.03125,0.01171875),new b2Vec2(0.06737118675595238,0.0006045386904761885)],new <b2Vec2>[new b2Vec2(0.06737118675595238,0.0006045386904761885),new b2Vec2(0.0651041666,0.001302083333),new b2Vec2(0.0651041666,0)]];
					v.fixed = true;
					return v;
					break;
				case 0.3:
					v = new <Vector.<b2Vec2>>[new <b2Vec2>[new b2Vec2(0.00544940796555436,0.07985667272156441),new b2Vec2(0.02994791664,0.10546875),new b2Vec2(0,0.0885416666)],new <b2Vec2>[new b2Vec2(0.12890625,0.00390625),new b2Vec2(0.1614583331,0.01953125),new b2Vec2(0.1861979166,0.04557291664),new b2Vec2(0.1953125,0.0690104166),new b2Vec2(0.1927083331,0.0911458333),new b2Vec2(0.1588541666,0.1276041666),new b2Vec2(0.1197916666,0.1432291666),new b2Vec2(0.0846354166,0.1432291666),new b2Vec2(0.05859375,0.1354166666),new b2Vec2(0.00544940796555436,0.07985667272156441),new b2Vec2(0.04166666664,0.02213541664),new b2Vec2(0.0755208333,0.00390625),new b2Vec2(0.1043489582,0.000703124999)],new <b2Vec2>[new b2Vec2(0.1043489582,0.000703124999),new b2Vec2(0.0989583333,0.001302083333),new b2Vec2(0.0989583333,0)]];
					v.fixed = true;
					return v;
					break;
				case 0.4:
					v = new <Vector.<b2Vec2>>[new <b2Vec2>[new b2Vec2(0.13582987392373924,0.0005573493234932343),new b2Vec2(0.1315104166,0.001302083333),new b2Vec2(0.1315104166,0)],new <b2Vec2>[new b2Vec2(0.002604166665,0.1067708333),new b2Vec2(0.009662828947368422,0.10012738648090815),new b2Vec2(0.04296875,0.1432291666),new b2Vec2(0.0012454710144927487,0.11288496376811594)],new <b2Vec2>[new b2Vec2(0.0012454710144927487,0.11288496376811594),new b2Vec2(0.02864583332,0.1328125),new b2Vec2(0.01171875,0.1302083331),new b2Vec2(0,0.1184895833)],new <b2Vec2>[new b2Vec2(0.13582987392373924,0.0005573493234932343),new b2Vec2(0.171875,0.00520833333),new b2Vec2(0.21484375,0.02604166664),new b2Vec2(0.2486979166,0.0625),new b2Vec2(0.2604166663,0.0911458333),new b2Vec2(0.2604166663,0.1119791666),new b2Vec2(0.2447916666,0.1380208331),new b2Vec2(0.2109375,0.1705729166),new b2Vec2(0.1640625,0.1901041666),new b2Vec2(0.1106770833,0.1901041666),new b2Vec2(0.0885416666,0.1848958331),new b2Vec2(0.0651041666,0.171875),new b2Vec2(0.009662828947368422,0.10012738648090815),new b2Vec2(0.1108866534740546,0.0048579045734388595)],new <b2Vec2>[new b2Vec2(0.1108866534740546,0.0048579045734388595),new b2Vec2(0.02473958332,0.0859375),new b2Vec2(0.0390625,0.05078125),new b2Vec2(0.05729166664,0.02864583332),new b2Vec2(0.09375,0.0078125)]];
					v.fixed = true;
					return v;
					break;
				case 0.5:
					v = new <Vector.<b2Vec2>>[new <b2Vec2>[new b2Vec2(0.3249999996,0.1252604165),new b2Vec2(0.296875,0.0690104166),new b2Vec2(0.309895833,0.0768229166),new b2Vec2(0.32421875,0.1080729166)],new <b2Vec2>[new b2Vec2(0.16867099719101122,0.0005120552434456922),new b2Vec2(0.1640625,0.001302083333),new b2Vec2(0.1640625,0)],new <b2Vec2>[new b2Vec2(0.00390625,0.1328125),new b2Vec2(0.013259242957746472,0.12392715669014083),new b2Vec2(0.05078125,0.1770833331),new b2Vec2(0.001387465846994537,0.14288763661202183)],new <b2Vec2>[new b2Vec2(0.001387465846994537,0.14288763661202183),new b2Vec2(0.03385416664,0.1653645831),new b2Vec2(0.01302083332,0.1614583331),new b2Vec2(0,0.1484375)],new <b2Vec2>[new b2Vec2(0.16867099719101122,0.0005120552434456922),new b2Vec2(0.2109375,0.00520833333),new b2Vec2(0.2682291663,0.0325520833),new b2Vec2(0.2890625,0.05338541664),new b2Vec2(0.3249999996,0.1252604165),new b2Vec2(0.325520833,0.13671875),new b2Vec2(0.30859375,0.16796875),new b2Vec2(0.25390625,0.21875),new b2Vec2(0.2044270831,0.2369791666),new b2Vec2(0.14453125,0.23828125),new b2Vec2(0.0950520833,0.2239583331),new b2Vec2(0.06640625,0.19921875),new b2Vec2(0.013259242957746472,0.12392715669014083),new b2Vec2(0.13755495030581047,0.005846234709480113)],new <b2Vec2>[new b2Vec2(0.13755495030581047,0.005846234709480113),new b2Vec2(0.02994791664,0.1080729166),new b2Vec2(0.05078125,0.0598958333),new b2Vec2(0.0716145833,0.03515625),new b2Vec2(0.1184895833,0.00911458332)]];
					v.fixed = true;
					return v;
					break;
				case 0.6:
					v = new <Vector.<b2Vec2>>[new <b2Vec2>[new b2Vec2(0.3899098661485319,0.14546901986183072),new b2Vec2(0.356770833,0.0833333333),new b2Vec2(0.376302083,0.0989583333),new b2Vec2(0.3893229163,0.1302083331)],new <b2Vec2>[new b2Vec2(0.21234375,0.000729166662),new b2Vec2(0.2083333331,0.001302083333),new b2Vec2(0.2083333331,0)],new <b2Vec2>[new b2Vec2(0.001302083333,0.1666666666),new b2Vec2(0.019521745742092457,0.147772201946472),new b2Vec2(0.0651041666,0.2161458331),new b2Vec2(0.0015211253894080938,0.16929517133956387)],new <b2Vec2>[new b2Vec2(0.0015211253894080938,0.16929517133956387),new b2Vec2(0.0403645833,0.1979166666),new b2Vec2(0.02604166664,0.1979166666),new b2Vec2(0.01041666666,0.1901041666),new b2Vec2(0.002604166665,0.1822916666)],new <b2Vec2>[new b2Vec2(0.21234375,0.000729166662),new b2Vec2(0.265625,0.01041666666),new b2Vec2(0.321614583,0.0390625),new b2Vec2(0.3463541663,0.0638020833),new b2Vec2(0.3899098661485319,0.14546901986183072),new b2Vec2(0.390625,0.1640625),new b2Vec2(0.368489583,0.2044270831),new b2Vec2(0.3046875,0.263020833),new b2Vec2(0.2565104163,0.282552083),new b2Vec2(0.1744791666,0.286458333),new b2Vec2(0.13671875,0.278645833),new b2Vec2(0.1041666666,0.263020833),new b2Vec2(0.0833333333,0.2434895831),new b2Vec2(0.019521745742092457,0.147772201946472),new b2Vec2(0.15316044132149892,0.009183925049309656)],new <b2Vec2>[new b2Vec2(0.15316044132149892,0.009183925049309656),new b2Vec2(0.0364583333,0.1302083331),new b2Vec2(0.06119791664,0.0729166666),new b2Vec2(0.0872395833,0.04166666664),new b2Vec2(0.14453125,0.01041666666)]];
					v.fixed = true;
					return v;
					break;
				case 0.7:
					v = new <Vector.<b2Vec2>>[new <b2Vec2>[new b2Vec2(0.45147310323383083,0.20346509639303484),new b2Vec2(0.41015625,0.08984375),new b2Vec2(0.438802083,0.1145833333),new b2Vec2(0.454427083,0.1510416666),new b2Vec2(0.4557291663,0.19140625)],new <b2Vec2>[new b2Vec2(0.20943249458874458,0.005711410984848478),new b2Vec2(0.0403645833,0.1536458331),new b2Vec2(0.0716145833,0.0846354166),new b2Vec2(0.1041666666,0.046875),new b2Vec2(0.1315104166,0.02864583332),new b2Vec2(0.1744791666,0.01041666666)],new <b2Vec2>[new b2Vec2(0.001302083242,0.2013888887),new b2Vec2(0.046875,0.2317708331),new b2Vec2(0.03385416664,0.2317708331),new b2Vec2(0.01302083332,0.22265625),new b2Vec2(0.001302083333,0.2083333331)],new <b2Vec2>[new b2Vec2(0.3046875,0.01041666666),new b2Vec2(0.3359375,0.02213541664),new b2Vec2(0.375,0.04557291664),new b2Vec2(0.4049479163,0.0755208333),new b2Vec2(0.45147310323383083,0.20346509639303484),new b2Vec2(0.4479166663,0.2135416666),new b2Vec2(0.4322916663,0.2356770831),new b2Vec2(0.372395833,0.2955729163),new b2Vec2(0.352864583,0.30859375),new b2Vec2(0.286458333,0.33203125),new b2Vec2(0.1927083331,0.33203125),new b2Vec2(0.1549479166,0.3229166663),new b2Vec2(0.1197916666,0.3046875),new b2Vec2(0.0950520833,0.28125),new b2Vec2(0.01790210308056872,0.1756763428120063),new b2Vec2(0.01953125,0.171875),new b2Vec2(0.20943249458874458,0.005711410984848478),new b2Vec2(0.2465093085106383,0.0007203014184397169)],new <b2Vec2>[new b2Vec2(0.2465093085106383,0.0007203014184397169),new b2Vec2(0.2421875,0.001302083333),new b2Vec2(0.2421875,0)],new <b2Vec2>[new b2Vec2(0.0703125,0.2473958331),new b2Vec2(0.001302083242,0.2013888887),new b2Vec2(0.001302083333,0.1953125),new b2Vec2(0.0078125,0.18359375),new b2Vec2(0.020578286082474223,0.17933848797250856)],new <b2Vec2>[new b2Vec2(0.020578286082474223,0.17933848797250856),new b2Vec2(0.015625,0.1809895831),new b2Vec2(0.01790210308056872,0.1756763428120063)]];
					v.fixed = true;
					return v;
					break;
				case 0.8:
					v = new <Vector.<b2Vec2>>[new <b2Vec2>[new b2Vec2(0.5192093867041199,0.1895189606741573),new b2Vec2(0.4765625,0.1119791666),new b2Vec2(0.481770833,0.1119791666),new b2Vec2(0.501302083,0.1315104166),new b2Vec2(0.518229166,0.171875)],new <b2Vec2>[new b2Vec2(0.35689786585365846,0.3713478150406504),new b2Vec2(0.47265625,0.286458333),new b2Vec2(0.4609375,0.3033854163),new b2Vec2(0.427083333,0.3359375),new b2Vec2(0.388020833,0.360677083)],new <b2Vec2>[new b2Vec2(0.2332291665,0.00760416673),new b2Vec2(0.0481770833,0.1731770831),new b2Vec2(0.0807291666,0.09765625),new b2Vec2(0.1119791666,0.0598958333),new b2Vec2(0.15625,0.02994791664),new b2Vec2(0.1953125,0.01302083332)],new <b2Vec2>[new b2Vec2(0.001302083333,0.2268229165),new b2Vec2(0.05338541664,0.2643229163),new b2Vec2(0.03385416664,0.263020833),new b2Vec2(0.01302083332,0.2526041663),new b2Vec2(0.001302083333,0.2369791666)],new <b2Vec2>[new b2Vec2(0.3515625,0.01302083332),new b2Vec2(0.3932291663,0.02994791664),new b2Vec2(0.4283854163,0.0520833333),new b2Vec2(0.462239583,0.0859375),new b2Vec2(0.5192093867041199,0.1895189606741573),new b2Vec2(0.520833333,0.21875),new b2Vec2(0.513020833,0.2421875),new b2Vec2(0.4921875,0.2721354163),new b2Vec2(0.35689786585365846,0.3713478150406504),new b2Vec2(0.3424479163,0.376302083),new b2Vec2(0.3111979163,0.3815104163),new b2Vec2(0.2317708331,0.3815104163),new b2Vec2(0.1822916666,0.37109375),new b2Vec2(0.1393229166,0.3502604163),new b2Vec2(0.1119791666,0.325520833),new b2Vec2(0.02290911835748792,0.19636926328502416),new b2Vec2(0.0234375,0.1953125),new b2Vec2(0.2332291665,0.00760416673),new b2Vec2(0.28143454724409445,0.0007176837270341203)],new <b2Vec2>[new b2Vec2(0.28143454724409445,0.0007176837270341203),new b2Vec2(0.27734375,0.001302083333),new b2Vec2(0.27734375,0)],new <b2Vec2>[new b2Vec2(0.0859375,0.2877604163),new b2Vec2(0.001302083333,0.2268229165),new b2Vec2(0.001302083333,0.2252604166),new b2Vec2(0.0078125,0.2109375),new b2Vec2(0.026509081196581193,0.20158920940170938)],new <b2Vec2>[new b2Vec2(0.026509081196581193,0.20158920940170938),new b2Vec2(0.01822916664,0.2057291666),new b2Vec2(0.02290911835748792,0.19636926328502416)]];
					v.fixed = true;
					return v;
					break;
				case 0.9:
					v = new <Vector.<b2Vec2>>[new <b2Vec2>[new b2Vec2(0.4847470238095238,0.06156994047619047),new b2Vec2(0.4205729163,0.02734375),new b2Vec2(0.4375,0.03125),new b2Vec2(0.481770833,0.05859375)],new <b2Vec2>[new b2Vec2(0.5849247685185185,0.22583912037037038),new b2Vec2(0.532552083,0.12109375),new b2Vec2(0.544270833,0.1276041666),new b2Vec2(0.563802083,0.1471354166),new b2Vec2(0.5838263551779934,0.20387085355987059)],new <b2Vec2>[new b2Vec2(0.5838263551779934,0.20387085355987059),new b2Vec2(0.579427083,0.19140625),new b2Vec2(0.583333333,0.1940104166)],new <b2Vec2>[new b2Vec2(0.15877757352941174,0.3926164215686274),new b2Vec2(0.1783854166,0.403645833),new b2Vec2(0.171875,0.403645833)],new <b2Vec2>[new b2Vec2(0.524739583,0.329427083),new b2Vec2(0.51953125,0.33984375),new b2Vec2(0.48766850490196073,0.3597579656862745)],new <b2Vec2>[new b2Vec2(0.48766850490196073,0.3597579656862745),new b2Vec2(0.509114583,0.3463541663),new b2Vec2(0.509114583,0.3502604163),new b2Vec2(0.4908854163,0.368489583),new b2Vec2(0.4609375,0.391927083),new b2Vec2(0.429962158203125,0.4069722493489583)],new <b2Vec2>[new b2Vec2(0.001302083333,0.25602816358024694),new b2Vec2(0.06119791664,0.298177083),new b2Vec2(0.04296875,0.298177083),new b2Vec2(0.01692708332,0.286458333),new b2Vec2(0.001302083333,0.266927083)],new <b2Vec2>[new b2Vec2(0.3580729163,0.00520833333),new b2Vec2(0.4010416663,0.01692708332),new b2Vec2(0.4847470238095238,0.06156994047619047),new b2Vec2(0.520833333,0.09765625),new b2Vec2(0.5849247685185185,0.22583912037037038),new b2Vec2(0.5859375,0.24609375),new b2Vec2(0.575520833,0.274739583),new b2Vec2(0.553385416,0.305989583),new b2Vec2(0.429962158203125,0.4069722493489583),new b2Vec2(0.415364583,0.4140625),new b2Vec2(0.368489583,0.427083333),new b2Vec2(0.265625,0.4296875),new b2Vec2(0.19921875,0.415364583),new b2Vec2(0.15877757352941174,0.3926164215686274),new b2Vec2(0.1223958333,0.3619791663),new b2Vec2(0.027374031007751945,0.21944646317829458),new b2Vec2(0.02864583332,0.2174479166),new b2Vec2(0.2668170481220657,0.005740170187793435),new b2Vec2(0.3173656798245614,0.0006853070175438592)],new <b2Vec2>[new b2Vec2(0.3173656798245614,0.0006853070175438592),new b2Vec2(0.3111979163,0.001302083333),new b2Vec2(0.3111979163,0)],new <b2Vec2>[new b2Vec2(0.1134557560137457,0.08421928694158076),new b2Vec2(0.0872395833,0.125),new b2Vec2(0.0885416666,0.1145833333)],new <b2Vec2>[new b2Vec2(0.0963541666,0.3229166663),new b2Vec2(0.001302083333,0.25602816358024694),new b2Vec2(0.001302083333,0.2526041663),new b2Vec2(0.00651041666,0.2408854166),new b2Vec2(0.03048058712121212,0.22410629734848486)],new <b2Vec2>[new b2Vec2(0.03048058712121212,0.22410629734848486),new b2Vec2(0.01953125,0.2317708331),new b2Vec2(0.027374031007751945,0.21944646317829458)],new <b2Vec2>[new b2Vec2(0.0520833333,0.1966145831),new b2Vec2(0.0755208333,0.1432291666),new b2Vec2(0.1134557560137457,0.08421928694158076),new b2Vec2(0.1302083331,0.0638020833),new b2Vec2(0.1458333331,0.0520833333),new b2Vec2(0.23056891025641024,0.037960737179487176)],new <b2Vec2>[new b2Vec2(0.23056891025641024,0.037960737179487176),new b2Vec2(0.1536458331,0.05078125),new b2Vec2(0.1614583331,0.04166666664),new b2Vec2(0.2109375,0.01822916664),new b2Vec2(0.24609375,0.0078125),new b2Vec2(0.2668170481220657,0.005740170187793435)]];
					v.fixed = true;
					return v;
					break;
				case 1:
					v = new <Vector.<b2Vec2>>[new <b2Vec2>[new b2Vec2(0.48200757575757575,0.450323547979798),new b2Vec2(0.583333333,0.3658854163),new b2Vec2(0.576822916,0.3776041663),new b2Vec2(0.544270833,0.41015625),new b2Vec2(0.50390625,0.4401041663)],new <b2Vec2>[new b2Vec2(0.632937499,0.1824375003),new b2Vec2(0.59375,0.13671875),new b2Vec2(0.618489583,0.1536458331),new b2Vec2(0.626302083,0.1640625)],new <b2Vec2>[new b2Vec2(0.651041666,0.2734375),new b2Vec2(0.6477654569892473,0.28217405913978494),new b2Vec2(0.5859375,0.1276041666),new b2Vec2(0.632937499,0.1824375003),new b2Vec2(0.648916666,0.2266874993)],new <b2Vec2>[new b2Vec2(0.648916666,0.2266874993),new b2Vec2(0.643229166,0.2109375),new b2Vec2(0.6484375,0.2161458331)],new <b2Vec2>[new b2Vec2(0.21590470679012344,0.028935185185185203),new b2Vec2(0.0598958333,0.2161458331),new b2Vec2(0.1015625,0.1223958333),new b2Vec2(0.1458333331,0.0703125),new b2Vec2(0.1953125,0.03776041664)],new <b2Vec2>[new b2Vec2(0.35223454301075263,0.0006720430107526884),new b2Vec2(0.3463541663,0.001302083333),new b2Vec2(0.3463541663,0)],new <b2Vec2>[new b2Vec2(0.1106770833,0.36328125),new b2Vec2(0.0063061683006535975,0.2719566993464052),new b2Vec2(0.01041666666,0.2643229163),new b2Vec2(0.03543778153153153,0.25042229729729726)],new <b2Vec2>[new b2Vec2(0.03543778153153153,0.25042229729729726),new b2Vec2(0.02213541664,0.2578125),new b2Vec2(0.02864583332,0.24609375),new b2Vec2(0.031209309895833332,0.24407958984375)],new <b2Vec2>[new b2Vec2(0.0063061683006535975,0.2719566993464052),new b2Vec2(0.1002604166,0.3541666663),new b2Vec2(0.0924479166,0.3515625),new b2Vec2(0.0022821460573476896,0.27942988351254483)],new <b2Vec2>[new b2Vec2(0.0022821460573476896,0.27942988351254483),new b2Vec2(0.06640625,0.3307291663),new b2Vec2(0.0481770833,0.3307291663),new b2Vec2(0.01692708332,0.31640625),new b2Vec2(0.001302083333,0.296875),new b2Vec2(0.001302083333,0.28125)],new <b2Vec2>[new b2Vec2(0.35223454301075263,0.0006720430107526884),new b2Vec2(0.391927083,0.00520833333),new b2Vec2(0.442708333,0.01822916664),new b2Vec2(0.4908854163,0.03776041664),new b2Vec2(0.53515625,0.0651041666),new b2Vec2(0.578125,0.1080729166),new b2Vec2(0.6477654569892473,0.28217405913978494),new b2Vec2(0.639322916,0.3046875),new b2Vec2(0.614583333,0.33984375),new b2Vec2(0.48200757575757575,0.450323547979798),new b2Vec2(0.46484375,0.458333333),new b2Vec2(0.41015625,0.473958333),new b2Vec2(0.3671875,0.477864583),new b2Vec2(0.2955729163,0.477864583),new b2Vec2(0.2278645831,0.4635416663),new b2Vec2(0.1744791666,0.4375),new b2Vec2(0.13671875,0.40234375),new b2Vec2(0.031209309895833332,0.24407958984375),new b2Vec2(0.3392269736842106,0.0020657111528821336)],new <b2Vec2>[new b2Vec2(0.3392269736842106,0.0020657111528821336),new b2Vec2(0.046875,0.2317708331),new b2Vec2(0.21590470679012344,0.028935185185185203),new b2Vec2(0.2408854166,0.01822916664),new b2Vec2(0.2734375,0.00911458332)]];
					v.fixed = true;
					return v;
					break;
				case 1.1:
					v = new <Vector.<b2Vec2>>[new <b2Vec2>[new b2Vec2(0.5395662256690997,0.49105649330900236),new b2Vec2(0.641927083,0.40234375),new b2Vec2(0.640625,0.4088541663),new b2Vec2(0.598958333,0.4518229163),new b2Vec2(0.5546875,0.484375)],new <b2Vec2>[new b2Vec2(0.695029438405797,0.19833721532091098),new b2Vec2(0.653645833,0.1510416666),new b2Vec2(0.680989583,0.1692708331),new b2Vec2(0.688802083,0.1809895831)],new <b2Vec2>[new b2Vec2(0.14240056818181818,0.4311079545454546),new b2Vec2(0.296875,0.516927083),new b2Vec2(0.2473958331,0.509114583),new b2Vec2(0.19140625,0.481770833),new b2Vec2(0.1471354166,0.438802083)],new <b2Vec2>[new b2Vec2(0.716145833,0.30078125),new b2Vec2(0.709635416,0.32421875),new b2Vec2(0.6957821038251365,0.34562841530054633),new b2Vec2(0.64453125,0.140625),new b2Vec2(0.695029438405797,0.19833721532091098),new b2Vec2(0.7140896815375981,0.2514336069023569)],new <b2Vec2>[new b2Vec2(0.7140896815375981,0.2514336069023569),new b2Vec2(0.70703125,0.2317708331),new b2Vec2(0.713541666,0.23828125)],new <b2Vec2>[new b2Vec2(0.01171875,0.290364583),new b2Vec2(0.1106770833,0.3893229163),new b2Vec2(0.1015625,0.38671875),new b2Vec2(0.003235979254571037,0.30626977848101267)],new <b2Vec2>[new b2Vec2(0.003235979254571037,0.30626977848101267),new b2Vec2(0.0729166666,0.36328125),new b2Vec2(0.0625,0.3658854163),new b2Vec2(0.0481770833,0.3619791663),new b2Vec2(0.01822916664,0.34765625),new b2Vec2(0.001302083333,0.3268229163),new b2Vec2(0.001302083333,0.309895833)],new <b2Vec2>[new b2Vec2(0.5226288377192982,0.03490953947368419),new b2Vec2(0.553385416,0.0481770833),new b2Vec2(0.595052083,0.0768229166),new b2Vec2(0.640625,0.125),new b2Vec2(0.6957821038251365,0.34562841530054633),new b2Vec2(0.680989583,0.368489583),new b2Vec2(0.5395662256690997,0.49105649330900236),new b2Vec2(0.4986979163,0.509114583),new b2Vec2(0.44140625,0.5234375),new b2Vec2(0.30859375,0.5234375),new b2Vec2(0.14240056818181818,0.4311079545454546),new b2Vec2(0.04541973039215687,0.27351409313725483)],new <b2Vec2>[new b2Vec2(0.04541973039215687,0.27351409313725483),new b2Vec2(0.1263020831,0.4049479163),new b2Vec2(0.01171875,0.290364583)],new <b2Vec2>[new b2Vec2(0.430989583,0.00520833333),new b2Vec2(0.4869791663,0.01953125),new b2Vec2(0.5226288377192982,0.03490953947368419),new b2Vec2(0.02473958332,0.2838541663),new b2Vec2(0.03125,0.270833333),new b2Vec2(0.3139019363496932,0.009118577453987725),new b2Vec2(0.33203125,0.00520833333),new b2Vec2(0.38857886904761896,0.0007440476190476195)],new <b2Vec2>[new b2Vec2(0.38857886904761896,0.0007440476190476195),new b2Vec2(0.3815104163,0.001302083333),new b2Vec2(0.3815104163,0)],new <b2Vec2>[new b2Vec2(0.16015625,0.0768229166),new b2Vec2(0.21484375,0.04166666664),new b2Vec2(0.265625,0.01953125),new b2Vec2(0.3139019363496932,0.009118577453987725),new b2Vec2(0.06640625,0.23828125),new b2Vec2(0.0872395833,0.1875),new b2Vec2(0.12997301706827308,0.11271649096385541)],new <b2Vec2>[new b2Vec2(0.12997301706827308,0.11271649096385541),new b2Vec2(0.1080729166,0.1510416666),new b2Vec2(0.1119791666,0.1341145831)]];
					v.fixed = true;
					return v;
					break;
				case 1.2:
					v = new <Vector.<b2Vec2>>[new <b2Vec2>[new b2Vec2(0.5334238644492131,0.5576046137339055),new b2Vec2(0.705729166,0.4322916663),new b2Vec2(0.692708333,0.453125),new b2Vec2(0.638020833,0.506510416),new b2Vec2(0.604166666,0.528645833),new b2Vec2(0.553385416,0.552083333)],new <b2Vec2>[new b2Vec2(0.7798192940911141,0.2902112934145241),new b2Vec2(0.712239583,0.1640625),new b2Vec2(0.739583333,0.1822916666),new b2Vec2(0.751302083,0.1966145831),new b2Vec2(0.779278535798122,0.27588119865023464)],new <b2Vec2>[new b2Vec2(0.779278535798122,0.27588119865023464),new b2Vec2(0.766927083,0.2408854166),new b2Vec2(0.778645833,0.259114583)],new <b2Vec2>[new b2Vec2(0.13080226608187134,0.13767165309106097),new b2Vec2(0.1145833333,0.1705729166),new b2Vec2(0.1197916666,0.1510416666)],new <b2Vec2>[new b2Vec2(0.001302083333,0.3430488782051282),new b2Vec2(0.0794270833,0.3971354163),new b2Vec2(0.05729166664,0.3971354163),new b2Vec2(0.02083333332,0.380208333),new b2Vec2(0.001302083333,0.356770833)],new <b2Vec2>[new b2Vec2(0.4240490667420814,0.0003947492458521867),new b2Vec2(0.415364583,0.001302083333),new b2Vec2(0.415364583,0)],new <b2Vec2>[new b2Vec2(0.1302083331,0.4322916663),new b2Vec2(0.001302083333,0.3430488782051282),new b2Vec2(0.001302083333,0.337239583),new b2Vec2(0.01432291666,0.3151041663),new b2Vec2(0.043452380952380944,0.3021577380952381)],new <b2Vec2>[new b2Vec2(0.043452380952380944,0.3021577380952381),new b2Vec2(0.02604166664,0.309895833),new b2Vec2(0.03385416664,0.2955729163),new b2Vec2(0.03707458651399491,0.292591046437659)],new <b2Vec2>[new b2Vec2(0.4240490667420814,0.0003947492458521867),new b2Vec2(0.4440104163,0.001302083333),new b2Vec2(0.522135416,0.01822916664),new b2Vec2(0.583333333,0.04166666664),new b2Vec2(0.645833333,0.0807291666),new b2Vec2(0.692708333,0.1276041666),new b2Vec2(0.7798192940911141,0.2902112934145241),new b2Vec2(0.78125,0.328125),new b2Vec2(0.763020833,0.3736979163),new b2Vec2(0.734375,0.411458333),new b2Vec2(0.5334238644492131,0.5576046137339055),new b2Vec2(0.4921875,0.569010416),new b2Vec2(0.3541666663,0.572916666),new b2Vec2(0.2604166663,0.552083333),new b2Vec2(0.2057291666,0.522135416),new b2Vec2(0.1640625,0.4830729163),new b2Vec2(0.03707458651399491,0.292591046437659),new b2Vec2(0.34356511468147144,0.008803520356662247)],new <b2Vec2>[new b2Vec2(0.34356511468147144,0.008803520356662247),new b2Vec2(0.0690104166,0.263020833),new b2Vec2(0.13080226608187134,0.13767165309106097),new b2Vec2(0.1744791666,0.0846354166),new b2Vec2(0.2265625,0.04947916664),new b2Vec2(0.2994791663,0.01822916664),new b2Vec2(0.328125,0.01041666666)]];
					v.fixed = true;
					return v;
					break;
				case 1.3:
					v = new <Vector.<b2Vec2>>[new <b2Vec2>[new b2Vec2(0.8433364774715661,0.29813265529308836),new b2Vec2(0.772135416,0.1783854166),new b2Vec2(0.8046875,0.19921875),new b2Vec2(0.813802083,0.2135416666),new b2Vec2(0.842447916,0.28125)],new <b2Vec2>[new b2Vec2(0.6013054363376251,0.5971141809728182),new b2Vec2(0.763020833,0.470052083),new b2Vec2(0.75,0.4908854163),new b2Vec2(0.692708333,0.546875),new b2Vec2(0.65234375,0.57421875),new b2Vec2(0.604166666,0.596354166)],new <b2Vec2>[new b2Vec2(0.14386742664133417,0.1445749551403842),new b2Vec2(0.1276041666,0.1783854166),new b2Vec2(0.1315104166,0.1588541666)],new <b2Vec2>[new b2Vec2(0.45574150868878355,0.0005800750394944688),new b2Vec2(0.450520833,0.001302083333),new b2Vec2(0.450520833,0)],new <b2Vec2>[new b2Vec2(0.14453125,0.47265625),new b2Vec2(0.006575520825,0.35592447917),new b2Vec2(0.01302083332,0.34375),new b2Vec2(0.0447537251655629,0.32471026490066224)],new <b2Vec2>[new b2Vec2(0.0447537251655629,0.32471026490066224),new b2Vec2(0.0325520833,0.33203125),new b2Vec2(0.0390625,0.317708333),new b2Vec2(0.03965717174119884,0.31715330637488104)],new <b2Vec2>[new b2Vec2(0.001302083333,0.3658854163),new b2Vec2(0.006575520825,0.35592447917),new b2Vec2(0.1276041666,0.458333333),new b2Vec2(0.001302083333,0.37150065104166663)],new <b2Vec2>[new b2Vec2(0.001302083333,0.37150065104166663),new b2Vec2(0.0859375,0.4296875),new b2Vec2(0.05729166664,0.4283854163),new b2Vec2(0.02213541664,0.411458333),new b2Vec2(0.001302083333,0.3854166663)],new <b2Vec2>[new b2Vec2(0.45574150868878355,0.0005800750394944688),new b2Vec2(0.509114583,0.00651041666),new b2Vec2(0.575520833,0.0234375),new b2Vec2(0.635416666,0.046875),new b2Vec2(0.697916666,0.0859375),new b2Vec2(0.743489583,0.1302083331),new b2Vec2(0.8433364774715661,0.29813265529308836),new b2Vec2(0.846354166,0.35546875),new b2Vec2(0.833333333,0.3932291663),new b2Vec2(0.799479166,0.44140625),new b2Vec2(0.6013054363376251,0.5971141809728182),new b2Vec2(0.520833333,0.618489583),new b2Vec2(0.384114583,0.62109375),new b2Vec2(0.296875,0.602864583),new b2Vec2(0.2265625,0.569010416),new b2Vec2(0.1822916666,0.528645833),new b2Vec2(0.03965717174119884,0.31715330637488104),new b2Vec2(0.36546610169491545,0.013064971751412437)],new <b2Vec2>[new b2Vec2(0.36546610169491545,0.013064971751412437),new b2Vec2(0.078125,0.28125),new b2Vec2(0.14386742664133417,0.1445749551403842),new b2Vec2(0.1901041666,0.0911458333),new b2Vec2(0.2486979166,0.0520833333),new b2Vec2(0.328125,0.01822916664)]];
					v.fixed = true;
					return v;
					break;
				case 1.4:
					v = new <Vector.<b2Vec2>>[new <b2Vec2>[new b2Vec2(0.909589937893956,0.3441989942528736),new b2Vec2(0.830729166,0.19140625),new b2Vec2(0.876302083,0.2291666666),new b2Vec2(0.907552083,0.302083333)],new <b2Vec2>[new b2Vec2(0.6438763651121605,0.6439916617473436),new b2Vec2(0.81640625,0.51171875),new b2Vec2(0.764322916,0.572916666),new b2Vec2(0.701822916,0.618489583),new b2Vec2(0.651041666,0.641927083)],new <b2Vec2>[new b2Vec2(0.49107210375075616,0.000257580913490621),new b2Vec2(0.484375,0.001302083333),new b2Vec2(0.484375,0)],new <b2Vec2>[new b2Vec2(0.001302083333,0.3960336538461538),new b2Vec2(0.0989583333,0.466145833),new b2Vec2(0.0677083333,0.4635416663),new b2Vec2(0.0234375,0.442708333),new b2Vec2(0.001302083333,0.415364583)],new <b2Vec2>[new b2Vec2(0.3424479163,0.0234375),new b2Vec2(0.49107210375075616,0.000257580913490621),new b2Vec2(0.518229166,0.001302083333),new b2Vec2(0.614583333,0.0234375),new b2Vec2(0.68359375,0.05078125),new b2Vec2(0.751302083,0.0924479166),new b2Vec2(0.809895833,0.1510416666),new b2Vec2(0.909589937893956,0.3441989942528736),new b2Vec2(0.911458333,0.3828125),new b2Vec2(0.897135416,0.423177083),new b2Vec2(0.85546875,0.481770833),new b2Vec2(0.6438763651121605,0.6439916617473436),new b2Vec2(0.57421875,0.6640625),new b2Vec2(0.391927083,0.665364583),new b2Vec2(0.309895833,0.645833333),new b2Vec2(0.2473958331,0.614583333),new b2Vec2(0.19140625,0.563802083),new b2Vec2(0.04365610623921792,0.3467940596846847),new b2Vec2(0.32582059352517995,0.031038562007536758)],new <b2Vec2>[new b2Vec2(0.32582059352517995,0.031038562007536758),new b2Vec2(0.0859375,0.2994791663),new b2Vec2(0.1380208331,0.1783854166),new b2Vec2(0.2018229166,0.1002604166),new b2Vec2(0.251302083,0.0651041666)],new <b2Vec2>[new b2Vec2(0.1497395831,0.502604166),new b2Vec2(0.001302083333,0.3960336538461538),new b2Vec2(0.001302083333,0.3932291663),new b2Vec2(0.01432291666,0.3697916663),new b2Vec2(0.04724457335329339,0.35206462075848305)],new <b2Vec2>[new b2Vec2(0.04724457335329339,0.35206462075848305),new b2Vec2(0.03125,0.360677083),new b2Vec2(0.04365610623921792,0.3467940596846847)]];
					v.fixed = true;
					return v;
					break;
				case 1.5:
					v = new <Vector.<b2Vec2>>[new <b2Vec2>[new b2Vec2(0.974220109878155,0.3586236673194082),new b2Vec2(0.891927083,0.20703125),new b2Vec2(0.9375,0.2434895831),new b2Vec2(0.97265625,0.32421875)],new <b2Vec2>[new b2Vec2(0.6901461693548386,0.6893481182795698),new b2Vec2(0.88671875,0.536458333),new b2Vec2(0.796875,0.6328125),new b2Vec2(0.755208333,0.66015625),new b2Vec2(0.696614583,0.6875)],new <b2Vec2>[new b2Vec2(0.5234403367828613,0.0007006853667392877),new b2Vec2(0.51953125,0.001302083333),new b2Vec2(0.51953125,0)],new <b2Vec2>[new b2Vec2(0.001302083333,0.42940167682926833),new b2Vec2(0.0989583333,0.49609375),new b2Vec2(0.0716145833,0.49609375),new b2Vec2(0.02473958332,0.473958333),new b2Vec2(0.001302083333,0.4453125)],new <b2Vec2>[new b2Vec2(0.3671875,0.02473958332),new b2Vec2(0.5234403367828613,0.0007006853667392877),new b2Vec2(0.657552083,0.02473958332),new b2Vec2(0.735677083,0.0559895833),new b2Vec2(0.8046875,0.0989583333),new b2Vec2(0.8671875,0.1614583331),new b2Vec2(0.974220109878155,0.3586236673194082),new b2Vec2(0.9765625,0.41015625),new b2Vec2(0.9609375,0.453125),new b2Vec2(0.921875,0.509114583),new b2Vec2(0.6901461693548386,0.6893481182795698),new b2Vec2(0.614583333,0.7109375),new b2Vec2(0.442708333,0.716145833),new b2Vec2(0.341145833,0.6953125),new b2Vec2(0.26171875,0.65625),new b2Vec2(0.2044270831,0.602864583),new b2Vec2(0.03906007526381129,0.37961912243947854),new b2Vec2(0.3625930059523811,0.02667410714285712)],new <b2Vec2>[new b2Vec2(0.3625930059523811,0.02667410714285712),new b2Vec2(0.08984375,0.32421875),new b2Vec2(0.1536458331,0.1809895831),new b2Vec2(0.2161458331,0.1067708333),new b2Vec2(0.29296875,0.0559895833)],new <b2Vec2>[new b2Vec2(0.15234375,0.532552083),new b2Vec2(0.001302083333,0.42940167682926833),new b2Vec2(0.001302083333,0.421875),new b2Vec2(0.015625,0.395833333),new b2Vec2(0.040963912932790225,0.3821893032926001)],new <b2Vec2>[new b2Vec2(0.040963912932790225,0.3821893032926001),new b2Vec2(0.0325520833,0.38671875),new b2Vec2(0.03906007526381129,0.37961912243947854)]];
					v.fixed = true;
					return v;
					break;
				case 1.6:
					v = new <Vector.<b2Vec2>>[new <b2Vec2>[new b2Vec2(1.0390286440032794,0.37594613785429837),new b2Vec2(0.951822916,0.2213541666),new b2Vec2(1.002604165,0.263020833),new b2Vec2(1.037760415,0.3463541663)],new <b2Vec2>[new b2Vec2(0.72751900671406,0.7381393167456556),new b2Vec2(0.9453125,0.572916666),new b2Vec2(0.856770833,0.669270833),new b2Vec2(0.805989583,0.704427083),new b2Vec2(0.736979166,0.735677083)],new <b2Vec2>[new b2Vec2(0.5590634889240507,0.0008158623417721528),new b2Vec2(0.5546875,0.001302083333),new b2Vec2(0.5546875,0)],new <b2Vec2>[new b2Vec2(0.002604166665,0.4549669715447154),new b2Vec2(0.1067708333,0.528645833),new b2Vec2(0.0703125,0.52734375),new b2Vec2(0.02734375,0.506510416),new b2Vec2(0.002604166665,0.4752604163)],new <b2Vec2>[new b2Vec2(0.4375,0.01432291666),new b2Vec2(0.5590634889240507,0.0008158623417721528),new b2Vec2(0.708333333,0.02864583332),new b2Vec2(0.78515625,0.0598958333),new b2Vec2(0.856770833,0.1041666666),new b2Vec2(0.923177083,0.1705729166),new b2Vec2(1.0390286440032794,0.37594613785429837),new b2Vec2(1.041666665,0.4375),new b2Vec2(1.0234375,0.4869791663),new b2Vec2(0.983072916,0.544270833),new b2Vec2(0.72751900671406,0.7381393167456556),new b2Vec2(0.641927083,0.760416666),new b2Vec2(0.47265625,0.764322916),new b2Vec2(0.364583333,0.7421875),new b2Vec2(0.278645833,0.700520833),new b2Vec2(0.22265625,0.6484375),new b2Vec2(0.03950086083379552,0.4080460517193566),new b2Vec2(0.3904095535128036,0.02727278945064561)],new <b2Vec2>[new b2Vec2(0.3904095535128036,0.02727278945064561),new b2Vec2(0.0963541666,0.3463541663),new b2Vec2(0.1627604166,0.1953125),new b2Vec2(0.2330729166,0.1119791666),new b2Vec2(0.3125,0.0598958333),new b2Vec2(0.3854166663,0.02864583332)],new <b2Vec2>[new b2Vec2(0.16015625,0.56640625),new b2Vec2(0.002604166665,0.4549669715447154),new b2Vec2(0.002604166665,0.450520833),new b2Vec2(0.01822916664,0.4205729163),new b2Vec2(0.041027975383920494,0.41005038956639567)],new <b2Vec2>[new b2Vec2(0.041027975383920494,0.41005038956639567),new b2Vec2(0.03515625,0.4127604163),new b2Vec2(0.03950086083379552,0.4080460517193566)]];
					v.fixed = true;
					return v;
					break;
				case 1.7:
					v = new <Vector.<b2Vec2>>[new <b2Vec2>[new b2Vec2(1.1045069519438444,0.408246715262779),new b2Vec2(1.009114583,0.2317708331),new b2Vec2(1.065104165,0.278645833),new b2Vec2(1.102864583,0.3671875)],new <b2Vec2>[new b2Vec2(0.5930596006507136,0.0007789541351805212),new b2Vec2(0.588541666,0.001302083333),new b2Vec2(0.588541666,0)],new <b2Vec2>[new b2Vec2(0.002604166665,0.4870383522727272),new b2Vec2(0.11328125,0.5625),new b2Vec2(0.08203125,0.5625),new b2Vec2(0.02864583332,0.537760416),new b2Vec2(0.002604166665,0.505208333)],new <b2Vec2>[new b2Vec2(0.4049479163,0.0325520833),new b2Vec2(0.46484375,0.015625),new b2Vec2(0.5930596006507136,0.0007789541351805212),new b2Vec2(0.739583333,0.02604166664),new b2Vec2(0.834635416,0.0638020833),new b2Vec2(0.91015625,0.1106770833),new b2Vec2(0.983072916,0.18359375),new b2Vec2(1.1045069519438444,0.408246715262779),new b2Vec2(1.106770833,0.46484375),new b2Vec2(1.087239583,0.518229166),new b2Vec2(1.044270833,0.578125),new b2Vec2(0.903645833,0.717447916),new b2Vec2(0.856770833,0.748697916),new b2Vec2(0.696614583,0.805989583),new b2Vec2(0.502604166,0.811197916),new b2Vec2(0.38671875,0.787760416),new b2Vec2(0.296875,0.743489583),new b2Vec2(0.2317708331,0.68359375),new b2Vec2(0.04395839761107196,0.43184516594675604),new b2Vec2(0.396446078431372,0.03619572829131673)],new <b2Vec2>[new b2Vec2(0.396446078431372,0.03619572829131673),new b2Vec2(0.1015625,0.3671875),new b2Vec2(0.1744791666,0.2057291666),new b2Vec2(0.2473958331,0.1197916666),new b2Vec2(0.33203125,0.0638020833)],new <b2Vec2>[new b2Vec2(0.1705729166,0.6015625),new b2Vec2(0.002604166665,0.4870383522727272),new b2Vec2(0.002604166665,0.477864583),new b2Vec2(0.01953125,0.446614583),new b2Vec2(0.0463895153207331,0.43510389819587625)],new <b2Vec2>[new b2Vec2(0.0463895153207331,0.43510389819587625),new b2Vec2(0.03776041664,0.438802083),new b2Vec2(0.04395839761107196,0.43184516594675604)]];
					v.fixed = true;
					return v;
					break;
				case 1.8:
					v = new <Vector.<b2Vec2>>[new <b2Vec2>[new b2Vec2(1.1681663424124513,0.4189415126459144),new b2Vec2(1.072916665,0.251302083),new b2Vec2(1.127604165,0.2955729163),new b2Vec2(1.166666665,0.3893229163)],new <b2Vec2>[new b2Vec2(0.8579817708,0.8155338541),new b2Vec2(1.049479165,0.658854166),new b2Vec2(0.986979166,0.731770833),new b2Vec2(0.907552083,0.791666666)],new <b2Vec2>[new b2Vec2(0.6275764444765363,0.0006969229658359438),new b2Vec2(0.623697916,0.001302083333),new b2Vec2(0.623697916,0)],new <b2Vec2>[new b2Vec2(0.002604166665,0.506510416),new b2Vec2(0.01822916664,0.4752604163),new b2Vec2(0.04043409441149106,0.45402092056292165),new b2Vec2(0.1809895831,0.638020833),new b2Vec2(0.002604166665,0.5127714982269503)],new <b2Vec2>[new b2Vec2(0.002604166665,0.5127714982269503),new b2Vec2(0.1197916666,0.595052083),new b2Vec2(0.0872395833,0.595052083),new b2Vec2(0.02994791664,0.569010416),new b2Vec2(0.002604166665,0.533854166)],new <b2Vec2>[new b2Vec2(0.6275764444765363,0.0006969229658359438),new b2Vec2(0.790364583,0.02994791664),new b2Vec2(0.884114583,0.0677083333),new b2Vec2(0.963541666,0.1171875),new b2Vec2(1.040364583,0.1940104166),new b2Vec2(1.1681663424124513,0.4189415126459144),new b2Vec2(1.171875,0.4921875),new b2Vec2(1.153645833,0.544270833),new b2Vec2(1.106770833,0.611979166),new b2Vec2(0.8579817708,0.8155338541),new b2Vec2(0.837239583,0.825520833),new b2Vec2(0.73828125,0.852864583),new b2Vec2(0.532552083,0.859375),new b2Vec2(0.41015625,0.834635416),new b2Vec2(0.313802083,0.787760416),new b2Vec2(0.2526041663,0.731770833),new b2Vec2(0.04043409441149106,0.45402092056292165),new b2Vec2(0.4922968428993318,0.021804378531073518)],new <b2Vec2>[new b2Vec2(0.4922968428993318,0.021804378531073518),new b2Vec2(0.1080729166,0.3893229163),new b2Vec2(0.1822916666,0.2200520831),new b2Vec2(0.263020833,0.1263020831),new b2Vec2(0.3515625,0.0677083333),new b2Vec2(0.4401041663,0.02994791664)]];
					v.fixed = true;
					return v;
					break;
				case 1.9:
					v = new <Vector.<b2Vec2>>[new <b2Vec2>[new b2Vec2(1.2340224168646081,0.4574395041567696),new b2Vec2(1.127604165,0.259114583),new b2Vec2(1.190104165,0.3111979163),new b2Vec2(1.231770833,0.41015625)],new <b2Vec2>[new b2Vec2(0.6618029373760974,0.0008208545737751352),new b2Vec2(0.657552083,0.001302083333),new b2Vec2(0.657552083,0)],new <b2Vec2>[new b2Vec2(0.002604166665,0.533854166),new b2Vec2(0.01953125,0.502604166),new b2Vec2(0.05596144501910662,0.46667994657838097),new b2Vec2(0.203125,0.682291666),new b2Vec2(0.002604166665,0.5429466807909604)],new <b2Vec2>[new b2Vec2(0.002604166665,0.5429466807909604),new b2Vec2(0.1263020831,0.62890625),new b2Vec2(0.0911458333,0.62890625),new b2Vec2(0.0325520833,0.6015625),new b2Vec2(0.002604166665,0.563802083)],new <b2Vec2>[new b2Vec2(0.51953125,0.01692708332),new b2Vec2(0.6618029373760974,0.0008208545737751352),new b2Vec2(0.846354166,0.0364583333),new b2Vec2(0.923177083,0.06640625),new b2Vec2(1.016927083,0.1236979166),new b2Vec2(1.098958333,0.2057291666),new b2Vec2(1.2340224168646081,0.4574395041567696),new b2Vec2(1.236979165,0.51953125),new b2Vec2(1.21484375,0.579427083),new b2Vec2(1.16796875,0.645833333),new b2Vec2(1.009114583,0.802083333),new b2Vec2(0.95703125,0.8359375),new b2Vec2(0.778645833,0.901041666),new b2Vec2(0.561197916,0.907552083),new b2Vec2(0.4127604163,0.873697916),new b2Vec2(0.33203125,0.830729166),new b2Vec2(0.259114583,0.764322916),new b2Vec2(0.05596144501910662,0.46667994657838097),new b2Vec2(0.508804629383634,0.020126250885582828)],new <b2Vec2>[new b2Vec2(0.508804629383634,0.020126250885582828),new b2Vec2(0.11328125,0.41015625),new b2Vec2(0.1927083331,0.2330729166),new b2Vec2(0.274739583,0.1354166666),new b2Vec2(0.37109375,0.0716145833),new b2Vec2(0.4453125,0.0390625)]];
					v.fixed = true;
					return v;
					break;
				case 2:
					v = new <Vector.<b2Vec2>>[new <b2Vec2>[new b2Vec2(1.2989411157024793,0.47774621212121204),new b2Vec2(1.1875,0.2734375),new b2Vec2(1.252604165,0.328125),new b2Vec2(1.296875,0.4322916663)],new <b2Vec2>[new b2Vec2(0.696367352320675,0.0006922468354430358),new b2Vec2(0.692708333,0.001302083333),new b2Vec2(0.692708333,0)],new <b2Vec2>[new b2Vec2(0.002604166665,0.5625),new b2Vec2(0.02083333332,0.528645833),new b2Vec2(0.04599841318591317,0.5041429924242424),new b2Vec2(0.2005208331,0.708333333),new b2Vec2(0.002604166665,0.5713141025641025)],new <b2Vec2>[new b2Vec2(0.002604166665,0.5713141025641025),new b2Vec2(0.1328125,0.661458333),new b2Vec2(0.0963541666,0.661458333),new b2Vec2(0.03385416664,0.6328125),new b2Vec2(0.002604166665,0.59375)],new <b2Vec2>[new b2Vec2(0.696367352320675,0.0006922468354430358),new b2Vec2(0.885416666,0.0364583333),new b2Vec2(1.0703125,0.1302083331),new b2Vec2(1.15625,0.2161458331),new b2Vec2(1.2989411157024793,0.47774621212121204),new b2Vec2(1.302083333,0.546875),new b2Vec2(1.278645833,0.609375),new b2Vec2(1.229166665,0.6796875),new b2Vec2(1.088541665,0.8203125),new b2Vec2(1.0078125,0.880208333),new b2Vec2(0.8203125,0.947916666),new b2Vec2(0.591145833,0.955729166),new b2Vec2(0.4557291663,0.927083333),new b2Vec2(0.348958333,0.875),new b2Vec2(0.2734375,0.8046875),new b2Vec2(0.04599841318591317,0.5041429924242424),new b2Vec2(0.5355242300724635,0.027499433876811686)],new <b2Vec2>[new b2Vec2(0.5355242300724635,0.027499433876811686),new b2Vec2(0.1197916666,0.4322916663),new b2Vec2(0.203125,0.2447916666),new b2Vec2(0.2916666663,0.140625),new b2Vec2(0.390625,0.0755208333),new b2Vec2(0.481770833,0.0364583333)]];
					v.fixed = true;
					return v;
					break;
				case 2.1:
					v = new <Vector.<b2Vec2>>[new <b2Vec2>[new b2Vec2(1.3634803921568628,0.4889552696078431),new b2Vec2(1.25,0.290364583),new b2Vec2(1.315104165,0.345052083),new b2Vec2(1.361979165,0.454427083)],new <b2Vec2>[new b2Vec2(0.7315759199017814,0.0006943790999032127),new b2Vec2(0.727864583,0.001302083333),new b2Vec2(0.727864583,0)],new <b2Vec2>[new b2Vec2(0.002604166665,0.591145833),new b2Vec2(0.02213541664,0.5546875),new b2Vec2(0.050351681689395356,0.5275293449156235),new b2Vec2(0.2109375,0.743489583),new b2Vec2(0.002604166665,0.5995501893939394)],new <b2Vec2>[new b2Vec2(0.002604166665,0.5995501893939394),new b2Vec2(0.1393229166,0.694010416),new b2Vec2(0.0924479166,0.69140625),new b2Vec2(0.03515625,0.6640625),new b2Vec2(0.002604166665,0.623697916)],new <b2Vec2>[new b2Vec2(0.7315759199017814,0.0006943790999032127),new b2Vec2(0.9296875,0.03776041664),new b2Vec2(1.123697915,0.13671875),new b2Vec2(1.213541665,0.2265625),new b2Vec2(1.3634803921568628,0.4889552696078431),new b2Vec2(1.3671875,0.57421875),new b2Vec2(1.290364583,0.713541666),new b2Vec2(1.05859375,0.924479166),new b2Vec2(0.860677083,0.994791666),new b2Vec2(0.609375,1.001302083),new b2Vec2(0.477864583,0.973958333),new b2Vec2(0.3658854163,0.919270833),new b2Vec2(0.286458333,0.845052083),new b2Vec2(0.050351681689395356,0.5275293449156235),new b2Vec2(0.5702711507809402,0.027106855915011697)],new <b2Vec2>[new b2Vec2(0.5702711507809402,0.027106855915011697),new b2Vec2(0.1263020831,0.454427083),new b2Vec2(0.2135416666,0.2565104163),new b2Vec2(0.305989583,0.1471354166),new b2Vec2(0.505208333,0.03776041664)]];
					v.fixed = true;
					return v;
					break;
				case 2.2:
					v = new <Vector.<b2Vec2>>[new <b2Vec2>[new b2Vec2(1.429138054007431,0.5250873930135349),new b2Vec2(1.305989583,0.30078125),new b2Vec2(1.377604165,0.360677083),new b2Vec2(1.427083333,0.4752604163)],new <b2Vec2>[new b2Vec2(0.7658017580709182,0.0007077213989591612),new b2Vec2(0.76171875,0.001302083333),new b2Vec2(0.76171875,0)],new <b2Vec2>[new b2Vec2(0.002604166665,0.618489583),new b2Vec2(0.05496747668139421,0.5603081277614139),new b2Vec2(0.2200520831,0.778645833),new b2Vec2(0.002604166665,0.6298656798245614)],new <b2Vec2>[new b2Vec2(0.002604166665,0.6298656798245614),new b2Vec2(0.1458333331,0.727864583),new b2Vec2(0.10546875,0.727864583),new b2Vec2(0.03776041664,0.696614583),new b2Vec2(0.002604166665,0.653645833)],new <b2Vec2>[new b2Vec2(0.555989583,0.03125),new b2Vec2(0.7658017580709182,0.0007077213989591612),new b2Vec2(0.95703125,0.03385416664),new b2Vec2(1.069010415,0.0768229166),new b2Vec2(1.18359375,0.1484375),new b2Vec2(1.26953125,0.234375),new b2Vec2(1.429138054007431,0.5250873930135349),new b2Vec2(1.432291665,0.6015625),new b2Vec2(1.3984375,0.684895833),new b2Vec2(1.346354165,0.75390625),new b2Vec2(1.169270833,0.928385416),new b2Vec2(1.108072915,0.96875),new b2Vec2(0.90234375,1.04296875),new b2Vec2(0.649739583,1.05078125),new b2Vec2(0.477864583,1.01171875),new b2Vec2(0.384114583,0.962239583),new b2Vec2(0.30078125,0.885416666),new b2Vec2(0.05496747668139421,0.5603081277614139),new b2Vec2(0.5164425375683055,0.04755806010928985)],new <b2Vec2>[new b2Vec2(0.5164425375683055,0.04755806010928985),new b2Vec2(0.1315104166,0.4752604163),new b2Vec2(0.2239583331,0.26953125),new b2Vec2(0.3203125,0.1549479166),new b2Vec2(0.4296875,0.0833333333)]];
					v.fixed = true;
					return v;
					break;
				case 2.3:
					v = new <Vector.<b2Vec2>>[new <b2Vec2>[new b2Vec2(1.4919801793221228,0.5195100389735505),new b2Vec2(1.368489583,0.317708333),new b2Vec2(1.440104165,0.3776041663),new b2Vec2(1.490885415,0.497395833)],new <b2Vec2>[new b2Vec2(0.8005530903826786,0.0006923464249748252),new b2Vec2(0.796875,0.001302083333),new b2Vec2(0.796875,0)],new <b2Vec2>[new b2Vec2(0.002604166665,0.647135416),new b2Vec2(0.0234375,0.608072916),new b2Vec2(0.06738105419517465,0.5656274381826911),new b2Vec2(0.24609375,0.826822916),new b2Vec2(0.002604166665,0.6543511284722221)],new <b2Vec2>[new b2Vec2(0.002604166665,0.6543511284722221),new b2Vec2(0.15234375,0.760416666),new b2Vec2(0.1015625,0.7578125),new b2Vec2(0.0390625,0.727864583),new b2Vec2(0.002604166665,0.682291666)],new <b2Vec2>[new b2Vec2(0.8005530903826786,0.0006923464249748252),new b2Vec2(1.018229165,0.04166666664),new b2Vec2(1.122395833,0.0833333333),new b2Vec2(1.234375,0.15234375),new b2Vec2(1.315104165,0.23046875),new b2Vec2(1.4919801793221228,0.5195100389735505),new b2Vec2(1.497395833,0.62890625),new b2Vec2(1.473958333,0.6953125),new b2Vec2(1.4140625,0.78125),new b2Vec2(1.225260415,0.967447916),new b2Vec2(1.15234375,1.015625),new b2Vec2(0.942708333,1.08984375),new b2Vec2(0.6796875,1.098958333),new b2Vec2(0.5234375,1.06640625),new b2Vec2(0.4010416663,1.006510415),new b2Vec2(0.313802083,0.92578125),new b2Vec2(0.06738105419517465,0.5656274381826911),new b2Vec2(0.6215299533556113,0.03036997876636032)],new <b2Vec2>[new b2Vec2(0.6215299533556113,0.03036997876636032),new b2Vec2(0.1380208331,0.497395833),new b2Vec2(0.2330729166,0.28125),new b2Vec2(0.33203125,0.1640625),new b2Vec2(0.44921875,0.0872395833),new b2Vec2(0.553385416,0.04166666664)]];
					v.fixed = true;
					return v;
					break;
				case 2.4:
					v = new <Vector.<b2Vec2>>[new <b2Vec2>[new b2Vec2(1.5590364486989765,0.5828227124183006),new b2Vec2(1.424479165,0.328125),new b2Vec2(1.502604165,0.3932291663),new b2Vec2(1.555989583,0.518229166)],new <b2Vec2>[new b2Vec2(0.8345396104069431,0.0006907821985296372),new b2Vec2(0.830729166,0.001302083333),new b2Vec2(0.830729166,0)],new <b2Vec2>[new b2Vec2(0.002604166665,0.674479166),new b2Vec2(0.02473958332,0.634114583),new b2Vec2(0.06944530322516818,0.5898844562063053),new b2Vec2(0.2565104163,0.861979166),new b2Vec2(0.002604166665,0.685937499)],new <b2Vec2>[new b2Vec2(0.002604166665,0.685937499),new b2Vec2(0.1588541666,0.794270833),new b2Vec2(0.1158854166,0.794270833),new b2Vec2(0.0403645833,0.759114583),new b2Vec2(0.002604166665,0.712239583)],new <b2Vec2>[new b2Vec2(0.8345396104069431,0.0006907821985296372),new b2Vec2(1.053385415,0.0403645833),new b2Vec2(1.171875,0.0872395833),new b2Vec2(1.287760415,0.1588541666),new b2Vec2(1.388020833,0.259114583),new b2Vec2(1.5590364486989765,0.5828227124183006),new b2Vec2(1.5625,0.65625),new b2Vec2(1.537760415,0.725260416),new b2Vec2(1.466145833,0.825520833),new b2Vec2(1.309895833,0.981770833),new b2Vec2(1.203125,1.059895833),new b2Vec2(0.984375,1.138020833),new b2Vec2(0.709635416,1.145833333),new b2Vec2(0.546875,1.111979165),new b2Vec2(0.4244791663,1.053385415),new b2Vec2(0.328125,0.966145833),new b2Vec2(0.06944530322516818,0.5898844562063053),new b2Vec2(0.6321575711172875,0.03315848903644226)],new <b2Vec2>[new b2Vec2(0.6321575711172875,0.03315848903644226),new b2Vec2(0.1471354166,0.513020833),new b2Vec2(0.2434895831,0.294270833),new b2Vec2(0.3463541663,0.171875),new b2Vec2(0.46875,0.0911458333),new b2Vec2(0.587239583,0.0403645833)]];
					v.fixed = true;
					return v;
					break;
				case 2.5:
					v = new <Vector.<b2Vec2>>[new <b2Vec2>[new b2Vec2(1.6235648864809082,0.5947295859133127),new b2Vec2(1.484375,0.3424479163),new b2Vec2(1.56640625,0.41015625),new b2Vec2(1.62109375,0.540364583)],new <b2Vec2>[new b2Vec2(0.8695275464695609,0.000689051584331333),new b2Vec2(0.865885416,0.001302083333),new b2Vec2(0.865885416,0)],new <b2Vec2>[new b2Vec2(0.00390625,0.703125),new b2Vec2(0.02604166664,0.661458333),new b2Vec2(0.058840422018195206,0.6297176023479831),new b2Vec2(0.251302083,0.885416666),new b2Vec2(0.00390625,0.7141426282051282)],new <b2Vec2>[new b2Vec2(0.00390625,0.7141426282051282),new b2Vec2(0.1666666666,0.826822916),new b2Vec2(0.1106770833,0.82421875),new b2Vec2(0.04296875,0.791666666),new b2Vec2(0.00390625,0.7421875)],new <b2Vec2>[new b2Vec2(0.8695275464695609,0.000689051584331333),new b2Vec2(1.106770833,0.04557291664),new b2Vec2(1.221354165,0.0911458333),new b2Vec2(1.338541665,0.1627604166),new b2Vec2(1.442708333,0.266927083),new b2Vec2(1.6235648864809082,0.5947295859133127),new b2Vec2(1.627604165,0.68359375),new b2Vec2(1.598958333,0.76171875),new b2Vec2(1.536458333,0.850260416),new b2Vec2(1.33203125,1.052083333),new b2Vec2(1.25390625,1.104166665),new b2Vec2(1.026041665,1.184895833),new b2Vec2(0.739583333,1.194010415),new b2Vec2(0.5703125,1.158854165),new b2Vec2(0.4361979163,1.09375),new b2Vec2(0.3424479163,1.006510415),new b2Vec2(0.058840422018195206,0.6297176023479831),new b2Vec2(0.6750035374217603,0.03343071647356514)],new <b2Vec2>[new b2Vec2(0.6750035374217603,0.03343071647356514),new b2Vec2(0.1471354166,0.544270833),new b2Vec2(0.25390625,0.305989583),new b2Vec2(0.364583333,0.17578125),new b2Vec2(0.48828125,0.0950520833),new b2Vec2(0.602864583,0.04557291664)]];
					v.fixed = true;
					return v;
					break;
				case 2.6:
					v = new <Vector.<b2Vec2>>[new <b2Vec2>[new b2Vec2(1.6881309382422804,0.6065728919239906),new b2Vec2(1.546875,0.359375),new b2Vec2(1.62890625,0.427083333),new b2Vec2(1.686197915,0.5625)],new <b2Vec2>[new b2Vec2(0.9047263551271305,0.0006908790863369664),new b2Vec2(0.901041666,0.001302083333),new b2Vec2(0.901041666,0)],new <b2Vec2>[new b2Vec2(0.00390625,0.731770833),new b2Vec2(0.02994791664,0.68359375),new b2Vec2(0.0583636757930954,0.6563497747550735),new b2Vec2(0.2604166663,0.920572916),new b2Vec2(0.00390625,0.7406327736318408)],new <b2Vec2>[new b2Vec2(0.00390625,0.7406327736318408),new b2Vec2(0.1731770831,0.859375),new b2Vec2(0.1145833333,0.856770833),new b2Vec2(0.0442708333,0.822916666),new b2Vec2(0.00390625,0.772135416)],new <b2Vec2>[new b2Vec2(0.9047263551271305,0.0006908790863369664),new b2Vec2(1.151041665,0.046875),new b2Vec2(1.276041665,0.09765625),new b2Vec2(1.391927083,0.1692708331),new b2Vec2(1.5,0.27734375),new b2Vec2(1.6881309382422804,0.6065728919239906),new b2Vec2(1.692708333,0.7109375),new b2Vec2(1.662760415,0.791666666),new b2Vec2(1.59765625,0.884114583),new b2Vec2(1.415364583,1.06640625),new b2Vec2(1.309895833,1.14453125),new b2Vec2(1.06640625,1.231770833),new b2Vec2(0.768229166,1.2421875),new b2Vec2(0.592447916,1.205729165),new b2Vec2(0.453125,1.138020833),new b2Vec2(0.3619791663,1.053385415),new b2Vec2(0.0583636757930954,0.6563497747550735),new b2Vec2(0.7082262171606689,0.033285688701626744)],new <b2Vec2>[new b2Vec2(0.7082262171606689,0.033285688701626744),new b2Vec2(0.15625,0.5625),new b2Vec2(0.2643229163,0.317708333),new b2Vec2(0.37890625,0.1822916666),new b2Vec2(0.5078125,0.09765625),new b2Vec2(0.626302083,0.046875)]];
					v.fixed = true;
					return v;
					break;
				case 2.7:
					v = new <Vector.<b2Vec2>>[new <b2Vec2>[new b2Vec2(1.7539818620125245,0.6471120658980927),new b2Vec2(1.602864583,0.368489583),new b2Vec2(1.69140625,0.442708333),new b2Vec2(1.751302083,0.583333333)],new <b2Vec2>[new b2Vec2(0.9386935135591585,0.0006604661262304562),new b2Vec2(0.934895833,0.001302083333),new b2Vec2(0.934895833,0)],new <b2Vec2>[new b2Vec2(0.00390625,0.7726934523809523),new b2Vec2(0.1796875,0.893229166),new b2Vec2(0.1302083331,0.893229166),new b2Vec2(0.04557291664,0.854166666),new b2Vec2(0.00390625,0.802083333)],new <b2Vec2>[new b2Vec2(0.649739583,0.04947916664),new b2Vec2(0.9386935135591585,0.0006604661262304562),new b2Vec2(1.174479165,0.04166666664),new b2Vec2(1.325520833,0.1015625),new b2Vec2(1.4453125,0.17578125),new b2Vec2(1.561197915,0.2916666663),new b2Vec2(1.7539818620125245,0.6471120658980927),new b2Vec2(1.7578125,0.73828125),new b2Vec2(1.7265625,0.822916666),new b2Vec2(1.658854165,0.91796875),new b2Vec2(1.434895833,1.139322915),new b2Vec2(1.360677083,1.188802083),new b2Vec2(1.106770833,1.279947915),new b2Vec2(0.798177083,1.2890625),new b2Vec2(0.614583333,1.251302083),new b2Vec2(0.4713541663,1.180989583),new b2Vec2(0.368489583,1.0859375),new b2Vec2(0.06893542757417102,0.6865319589877835),new b2Vec2(0.6341315737445632,0.0561208728746539)],new <b2Vec2>[new b2Vec2(0.6341315737445632,0.0561208728746539),new b2Vec2(0.1614583331,0.583333333),new b2Vec2(0.274739583,0.3307291663),new b2Vec2(0.3932291663,0.1901041666),new b2Vec2(0.52734375,0.1015625)],new <b2Vec2>[new b2Vec2(0.270833333,0.955729166),new b2Vec2(0.00390625,0.7726934523809523),new b2Vec2(0.00390625,0.759114583),new b2Vec2(0.03125,0.709635416),new b2Vec2(0.07227665960451976,0.6909869350282487)],new <b2Vec2>[new b2Vec2(0.07227665960451976,0.6909869350282487),new b2Vec2(0.0598958333,0.696614583),new b2Vec2(0.06893542757417102,0.6865319589877835)]];
					v.fixed = true;
					return v;
					break;
				case 2.8:
					v = new <Vector.<b2Vec2>>[new <b2Vec2>[new b2Vec2(1.8172063681932102,0.6485638812941444),new b2Vec2(1.669270833,0.390625),new b2Vec2(1.75390625,0.4596354163),new b2Vec2(1.815104165,0.60546875)],new <b2Vec2>[new b2Vec2(1.3402322748655913,1.265688004032258),new b2Vec2(1.6328125,1.024739583),new b2Vec2(1.53515625,1.138020833),new b2Vec2(1.411458333,1.231770833)],new <b2Vec2>[new b2Vec2(0.9738736264507151,0.0006913344332951728),new b2Vec2(0.970052083,0.001302083333),new b2Vec2(0.970052083,0)],new <b2Vec2>[new b2Vec2(0.00390625,0.7984267979452055),new b2Vec2(0.1861979166,0.92578125),new b2Vec2(0.1354166666,0.92578125),new b2Vec2(0.046875,0.885416666),new b2Vec2(0.00390625,0.830729166)],new <b2Vec2>[new b2Vec2(0.684895833,0.046875),new b2Vec2(0.9738736264507151,0.0006913344332951728),new b2Vec2(1.229166665,0.046875),new b2Vec2(1.375,0.10546875),new b2Vec2(1.498697915,0.1822916666),new b2Vec2(1.618489583,0.302083333),new b2Vec2(1.8172063681932102,0.6485638812941444),new b2Vec2(1.822916665,0.765625),new b2Vec2(1.794270833,0.846354166),new b2Vec2(1.721354165,0.951822916),new b2Vec2(1.3402322748655913,1.265688004032258),new b2Vec2(1.302083333,1.283854165),new b2Vec2(1.1484375,1.326822915),new b2Vec2(0.828125,1.337239583),new b2Vec2(0.638020833,1.298177083),new b2Vec2(0.48828125,1.225260415),new b2Vec2(0.3828125,1.126302083),new b2Vec2(0.06995215897939157,0.7131659919856067),new b2Vec2(0.6709721562446018,0.05278599499049914)],new <b2Vec2>[new b2Vec2(0.6709721562446018,0.05278599499049914),new b2Vec2(0.16796875,0.60546875),new b2Vec2(0.2838541663,0.3424479163),new b2Vec2(0.4088541663,0.1966145831),new b2Vec2(0.546875,0.10546875)],new <b2Vec2>[new b2Vec2(0.28125,0.9921875),new b2Vec2(0.00390625,0.7984267979452055),new b2Vec2(0.00390625,0.787760416),new b2Vec2(0.02864583332,0.739583333),new b2Vec2(0.07219827586206898,0.7161320181255526)],new <b2Vec2>[new b2Vec2(0.07219827586206898,0.7161320181255526),new b2Vec2(0.0625,0.721354166),new b2Vec2(0.06995215897939157,0.7131659919856067)]];
					v.fixed = true;
					return v;
					break;
				case 2.9:
					v = new <Vector.<b2Vec2>>[new <b2Vec2>[new b2Vec2(1.8834874601576916,0.6962567889196444),new b2Vec2(1.721354165,0.395833333),new b2Vec2(1.81640625,0.4752604163),new b2Vec2(1.880208333,0.626302083)],new <b2Vec2>[new b2Vec2(1.3267833505985267,1.3362684162062612),new b2Vec2(1.71484375,1.037760415),new b2Vec2(1.540364583,1.223958333),new b2Vec2(1.4609375,1.276041665),new b2Vec2(1.337239583,1.333333333)],new <b2Vec2>[new b2Vec2(1.0083343272900764,0.0007827409351145037),new b2Vec2(1.00390625,0.001302083333),new b2Vec2(1.00390625,0)],new <b2Vec2>[new b2Vec2(0.00390625,0.815104166),new b2Vec2(0.02994791664,0.766927083),new b2Vec2(0.08431475435323384,0.7135487336047037),new b2Vec2(0.309895833,1.041666665),new b2Vec2(0.00390625,0.827473958)],new <b2Vec2>[new b2Vec2(0.00390625,0.827473958),new b2Vec2(0.1927083331,0.959635416),new b2Vec2(0.1393229166,0.959635416),new b2Vec2(0.04947916664,0.91796875),new b2Vec2(0.00390625,0.860677083)],new <b2Vec2>[new b2Vec2(0.79296875,0.02604166664),new b2Vec2(1.0083343272900764,0.0007827409351145037),new b2Vec2(1.26171875,0.04557291664),new b2Vec2(1.408854165,0.1015625),new b2Vec2(1.552083333,0.1888020831),new b2Vec2(1.677083333,0.313802083),new b2Vec2(1.8834874601576916,0.6962567889196444),new b2Vec2(1.888020833,0.79296875),new b2Vec2(1.854166665,0.884114583),new b2Vec2(1.782552083,0.985677083),new b2Vec2(1.3267833505985267,1.3362684162062612),new b2Vec2(1.188802083,1.375),new b2Vec2(0.856770833,1.385416665),new b2Vec2(0.66015625,1.34375),new b2Vec2(0.506510416,1.268229165),new b2Vec2(0.395833333,1.166666665),new b2Vec2(0.08431475435323384,0.7135487336047037),new b2Vec2(0.7810659236335364,0.029465767402224577)],new <b2Vec2>[new b2Vec2(0.7810659236335364,0.029465767402224577),new b2Vec2(0.1731770831,0.626302083),new b2Vec2(0.294270833,0.35546875),new b2Vec2(0.419270833,0.20703125),new b2Vec2(0.56640625,0.109375),new b2Vec2(0.697916666,0.05338541664)]];
					v.fixed = true;
					return v;
					break;
				case 3:
					v = new <Vector.<b2Vec2>>[new <b2Vec2>[new b2Vec2(1.948411673553719,0.7166193181818181),new b2Vec2(1.78125,0.41015625),new b2Vec2(1.87890625,0.4921875),new b2Vec2(1.9453125,0.6484375)],new <b2Vec2>[new b2Vec2(1.446022727272727,1.3509706439393938),new b2Vec2(1.75,1.09765625),new b2Vec2(1.6328125,1.23046875),new b2Vec2(1.51171875,1.3203125)],new <b2Vec2>[new b2Vec2(1.0432867954070981,0.0007991910229645071),new b2Vec2(1.0390625,0.001302083333),new b2Vec2(1.0390625,0)],new <b2Vec2>[new b2Vec2(0.00390625,0.8569711538461539),new b2Vec2(0.19921875,0.9921875),new b2Vec2(0.14453125,0.9921875),new b2Vec2(0.05078125,0.94921875),new b2Vec2(0.00390625,0.890625)],new <b2Vec2>[new b2Vec2(0.72265625,0.0546875),new b2Vec2(0.8203125,0.02734375),new b2Vec2(1.0432867954070981,0.0007991910229645071),new b2Vec2(1.328125,0.0546875),new b2Vec2(1.47265625,0.11328125),new b2Vec2(1.60546875,0.1953125),new b2Vec2(1.734375,0.32421875),new b2Vec2(1.948411673553719,0.7166193181818181),new b2Vec2(1.953125,0.8203125),new b2Vec2(1.91796875,0.9140625),new b2Vec2(1.84375,1.01953125),new b2Vec2(1.446022727272727,1.3509706439393938),new b2Vec2(1.39453125,1.375),new b2Vec2(1.23046875,1.421875),new b2Vec2(0.88671875,1.43359375),new b2Vec2(0.68359375,1.390625),new b2Vec2(0.5234375,1.3125),new b2Vec2(0.41015625,1.20703125),new b2Vec2(0.07492104177247329,0.7640418676993398),new b2Vec2(0.7146726733576642,0.05810903284671524)],new <b2Vec2>[new b2Vec2(0.7146726733576642,0.05810903284671524),new b2Vec2(0.1796875,0.6484375),new b2Vec2(0.3046875,0.3671875),new b2Vec2(0.4375,0.2109375),new b2Vec2(0.5859375,0.11328125)],new <b2Vec2>[new b2Vec2(0.30078125,1.0625),new b2Vec2(0.00390625,0.8569711538461539),new b2Vec2(0.00390625,0.84375),new b2Vec2(0.03125,0.79296875),new b2Vec2(0.07740651427061306,0.7673262420718815)],new <b2Vec2>[new b2Vec2(0.07740651427061306,0.7673262420718815),new b2Vec2(0.06640625,0.7734375),new b2Vec2(0.07492104177247329,0.7640418676993398)]];
					v.fixed = true;
					return v;
					break;
			}
			return null;
		}
	}
}

Bitmap glitches with AIR 26/27

My app uses Starling and traditional display list for rendering. I switch between them depending on the app state. On traditional display list I draw into a BitmapData/Bitmap. I'm looking into updating to AIR 26 at the moment, but very soon I noticed strange glitches when drawing into the bitmap. This happens when running on iOS or Android, not on desktop. On AIR 25 and below things are also fine, only AIR 26 and 27 seem to be affected.

Here's what it looks like:

https://drive.google.com/open?id=0B-vNf0XbY6TCc2FiVDdfTXZKZ3c

I'm drawing the blue pixels, but the thin white line right below is "not supposed to happen".

When I change from Starling to traditional display list rendering, I also stop Starling. I noticed, that if I DON'T stop Starling in the background, the glitches on the bitmap do not appear! However, I'd like to stop Starling as it takes up CPU resources.

Here's a link to Adobe Tracker issue:

https://tracker.adobe.com/#/view/AIR-4198453

Here's the discussion on Starling forum:

https://forum.starling-framework.org/topic/bitmap-glitches-with-air-2627

And here's a minimal project to reproduce the issue:

package {
 
	import flash.display.Sprite;
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;
	import flash.events.Event;
 
	import starling.core.Starling;
	import starling.events.Event;
 
	[SWF(frameRate="60", backgroundColor="#ffffff")]
	public class Main extends Sprite {
 
        public function Main() {
			stage.align = StageAlign.TOP_LEFT;
			stage.scaleMode = StageScaleMode.NO_SCALE;
			stage.addEventListener(flash.events.Event.RESIZE, onStageResize);
        }
 
		private function onStageResize(event:flash.events.Event):void {
			stage.removeEventListener(flash.events.Event.RESIZE, onStageResize);
 
			function onRootCreated(event:starling.events.Event):void {
				Starling.current.removeEventListener(starling.events.Event.ROOT_CREATED, onRootCreated);
				Starling.current.start();
 
				Starling.current.stop(true);
				stage.addEventListener(flash.events.Event.ENTER_FRAME, function(event:flash.events.Event):void {
					Starling.context.present();
				});
 
				stage.addChild(new MainFlash(stage));
			}
 
			new Starling(MainStarling, stage, null, null, "auto", "auto");
			Starling.current.skipUnchangedFrames = true;
			Starling.current.supportHighResolutions = true;
			Starling.current.addEventListener(starling.events.Event.ROOT_CREATED, onRootCreated);
		}
 
    }
 
}
 
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.display.Stage;
import flash.events.MouseEvent;
 
import starling.display.Sprite;
 
internal class MainFlash extends flash.display.Sprite {
 
	private var _bmpB:Bitmap;
	private var _bmpA:Bitmap;
	private var _bmpDataB:BitmapData;
	private var _bmpDataA:BitmapData;
	private var _drawButton:flash.display.Sprite;
 
	public function MainFlash(stage:Stage) {
		var scale:Number = 8;
 
		_bmpDataA = new BitmapData(stage.stageWidth / scale, stage.stageHeight / scale, false, 0xffc0c0c0);
		_bmpA = new Bitmap(_bmpDataA);
		_bmpA.scaleX = scale;
		_bmpA.scaleY = scale;
		addChild(_bmpA);
 
		_bmpDataB = new BitmapData(stage.stageWidth / scale, stage.stageHeight / scale, true, 0x00000000);
		_bmpB = new Bitmap(_bmpDataB);
		_bmpB.scaleX = scale;
		_bmpB.scaleY = scale;
		addChild(_bmpB);
 
		_drawButton = new flash.display.Sprite();
		_drawButton.addEventListener(MouseEvent.MOUSE_DOWN, onDrawButtonMouseEvent);
		_drawButton.addEventListener(MouseEvent.MOUSE_UP, onDrawButtonMouseEvent);
		_drawButton.graphics.beginFill(0x0000ff, 1);
		_drawButton.graphics.drawCircle(0, 0, 100);
		_drawButton.graphics.endFill();
		_drawButton.x = stage.stageWidth / 2;
		_drawButton.y = stage.stageHeight / 2;
		addChild(_drawButton);
	}
 
	private function onDrawButtonMouseEvent(event:MouseEvent):void {
		if(event.type == MouseEvent.MOUSE_DOWN)	addEventListener(flash.events.Event.ENTER_FRAME, onEnterFrame);
		else									removeEventListener(flash.events.Event.ENTER_FRAME, onEnterFrame);
	}
 
	private function onEnterFrame(event:flash.events.Event):void {
		var x:int;
		var y:int;
		for(var i:int=0; i<30; i++) {
			x = Math.floor(_bmpDataB.width - Math.random() * _bmpDataB.width / 3);
			y = Math.floor(_bmpDataB.height - Math.random() * 10);
			_bmpDataB.setPixel32(x, y, Math.random() * 0x0000ff + 0xff000000);
		}
	}
 
}
 
internal class MainStarling extends starling.display.Sprite {}

[tvOS] Touch gestures or events need improvement

Tracker URL: https://tracker.adobe.com/#/view/AIR-4198411
AIR Version: 26.0.0.118
Platform: tvOS

Some observations based on the touch/gesture options listed in the release notes for tvOS:

TransformGestureEvent.GESTURE_SWIPE - Swipe Events are now supported on Apple TV similar to other platforms. However, the values of stageX and stageY properties remain fixed as received from the native operating system, which is the center of the screen. AIR developers can read a new velocity property in Swipe Events to manage the fast movements based on the strength of swipe.

In native apps on tvOS, if you change direction between touch begin and end, it can pass focus in both directions. In other words, if you were moving the touch from left to right, it will pass focus from left to right, but if you start moving the same touch from right to left without ending it first, it will start passing focus from right to left instead. AIR does not dispatch TransformGestureEvent.GESTURE_SWIPE again if a touch changes direction. Maybe it should? If not, then another gesture or raw touch events need to provide the data that would be needed to recreate the native behavior.

Touch Events are generated on Siri Remote Touch when Multitouch.inputMode is set to TOUCH_POINT.

This allows me to listen for TouchEvent.TOUCH_MOVE, which gives me some good information about the touches. The localX, localY, stageX, and stageY properties change when I touch the Siri remote and move my finger around. It's a little more work than using a gesture, but this would allow me to simulate the native focus change behavior manually.

However, I discovered that the localX, localY, stageX and stageY properties are only within the range of -1920 to 1920 horizontally and -1080 to 1080 vertically. In other words, if my touch is moving from left to right, and the stageX value reaches 1920, continuing to move my touch from left to right will not change the value of stageX anymore. It will remain at the maximum value of 1920. If I wanted to write some code that manually detects some kind of swipe/pan gesture based on the position of the touch (instead of using the gesture event mentioned earlier), it would fail if the current touch position is near any of these limits. Is it AIR or tvOS that is creating this restriction? If it's AIR that is artificially limiting these values, I think that should be reconsidered.

"Mouse Lock" ignores very slow Mouse Movements

Problem Description

When enabling mouse lock, Flash's mouse events do not process small movements any longer.

  • Tested with AIR 27 on macOS and Windows
  • Also tested with Flash Player 27

Adobe Tracker Issue: AIR-4198463

Steps to Reproduce

  • Run the sample code from this Gist in a Flash Player or AIR application.
  • Hit "F" to change to fullscreen mode.
  • Note that the red circle follows the mouse position, even when you move the mouse only very slowly.
  • Now hit "M" to activate mouse lock.
  • Now, when moving the mouse very slowly, the circle won't move any more.

I'd expect the accuracy of the movement to be exactly the same, whether mouseLock is on or off.

VideoTexture display issue with some mp4s

Problem Description

Some mp4s are rendered incorrectly when using VideoTexture. 8pixels at the bottom of the video frame are repeated.

https://tracker.adobe.com/#/view/AIR-4054613

Steps to Reproduce

Minimal example provided here
https://www.dropbox.com/sh/rr9atk0kl51wqfi/AADDAOkz2-xwalpBrEjjCtCua/src?dl=0

The video on the left utilises a VideoTexture and on the right, a traditional flash Video object.
Both are using the same Big Buck Bunny asset from http://bbb3d.renderfarming.net/

A screenshot example from a different user http://seanduffy.pipeten.co.uk/img/feathers_videoplayer.jpg

Further technical details

"It's very common to code 1080p video in 1920x1088. That's because most
encoders works in macroblock of 16x16."

So coded_height is usually a multiple of 16. VideoTexture doesn't appear to handle video which has a coded_height and height which is different.
So the height of the big Buck Bunny is marked as 1080 but it's coded_height is 1088
The difference is added as 'banding' at the bottom of a video (8px)

Known Workarounds

Re-encode video using FFmpeg or other tool to encode at a height which is a multiple of 16, padding with white/black border as needed.

VideoTexture keeps accessing camera after being disposed

Problem Description

Even after disposing a VideoTexture that has a camera attached to it, the camera is still being accessed.

Tested with iOS 10.3.2, compiled with AIR SDK 26.0.0, build 112.

Adobe Tracker Issue: https://tracker.adobe.com/#/view/AIR-4198123

Steps to Reproduce

  • Compile & run the class VideoTextureBug.as as Flash Project.
  • Allow the camera to be accessed when the dialog pops up.
  • A spinning triangle with the camera contents will appear.
  • When hitting "x" on the keyboard, the texture will be disposed.

Actual Result: The light on the camera keeps glowing.
Expected Result: The light on the camera should go out.

In other words: when disposing the texture, any connection to the camera should be severed.

Known Workarounds

Before disposing the video texture, call videoTexture.attachCamera(null) manually.

Stage shift offset error on StageText focus

Problem Description

When the soft keyboard is invoked under certain circumstances, the Stage3D and classic display list layers shift further up than the StageText layer does.

Steps to Reproduce

  • build app with manifest stating "aspectRatio" set to portrait, and "fullScreen" set to false
  • The Android bar that appears down the bottom can be dismissed in Samsung Experience 8.1 by tapping the dot on the far left of the bar:
    ss01
  • This sends the app in to a semi fullscreen mode (The top bar remains, but the bottom bar becomes hidden - I believe this is a feature possibly introduced by latest Samsung's android skin):
    ss02
  • Add a StageText object to the app and the user taps it to assigns focus to it, thus invoking the soft keyboard. In doing this, the bottom bar will reappear beneath the soft keyboard:
    ss03
  • When the bottom bar is reintroduced and focus is given to the StageText object (as per the above point), all layers are uniformly offset and render correctly:
    ss04

Known Workarounds

None that I know of. However I have noticed that when the bottom bar has been collapsed in this way, the stage.stageHeight value is > the stage.fullScreenHeight value. So in theory it should be an issue that can be identified at runtime and adjustments made to the StageText object y position. But this is not ideal and can have ramifications when a user dismisses the soft keyboard without revoking focus from the StageText object.

Player 23 in chrome. Gradients messed up with quality higher than "best".

Problem Description

Upgrading Chrome to ver. 58, same SWF, shows a lot of graphic artefacts (misplaced colors, removed transparency, etc.) on assets with gradients when quality is higher than "best". (you can see in the attached screenshots).

Adobe tracker (please vote): https://tracker.adobe.com/#/view/FP-4198401

Steps to Reproduce

some assets with gradients (mysteriously, some other assets are unchanged, but I can't narrow down where it comes from), if shown with render quality higher than best (8x8, 8x8linear, 16x16, 16x16linear), have all gradients messed up.

Steps to Reproduce:
Go on this url using latest chrome: http://www.pippoapps.com/_demo/bugSwfQuality/
SWF will load an external SWF.
Click on "increase quality" until 8x8 is reached, you will see all gradients mess up.
You can download swf with gradient here: http://www.pippoapps.com/_demo/bugSwfQuality/bugSwfQuality.zip

Actual Result:
Colors are all messed up, gradients replaced by flat green color.

Known Workarounds

1 - Keeping quality high, convert gradients to bitmap (cacheAsBitmap doesn't work, it caches also glitches, must be exported as bitmap from within animate).
2 - Lower quality, anything from "best" downwards will do.

image
image

GPU Memory Leak in Windows 10, AIR 27 when using Starling RenderTexture.

Hi,

I have found which I assume is GPU memory leak when using Starling RenderTexture.

Only once on enter frame I call this:

override public function clear():void
{
    var child:DisplayObject;
 
    var image:Image;
    var line:StarlingLine;
 
    while(drawSprite.numChildren > 0)
    {
        child = drawSprite.getChildAt(0);
 
        image = child as Image;
        line = child as StarlingLine;
 
        if(image)
        {
            // Am I disposing RenderTexture properly here???
            image.texture.dispose(); // this will always be RenderTexture
            image.dispose();
        }
        else if(line)
        {
            line.dispose();
        }
 
        drawSprite.removeChildAt(0);
    }
}

This is called multiple times (between 50-300 times) on enter frame:

var canvas:Canvas = new Canvas();
var polygon:Polygon = new Polygon(starlingVertices);
 
var alpha:Number = GetFillAlpha();
 
if(isSolid === false)
{
    alpha = 0.1
}
 
canvas.beginFill(color, alpha);
canvas.drawPolygon(polygon);
canvas.endFill();
 
var texture:RenderTexture = new RenderTexture(width, height);
    texture.draw(canvas);
 
var image:Image = new Image(texture);
    image.x = posX + (width / 2);
    image.y = posY + (height / 2);
    image.alignPivot();
    image.readjustSize();
 
this.drawSprite.addChild(image);

I have NVIDIA GTX 770 (from 2013) with 2GB og VRAM on my PC. And I have installed Afterburner. These are the images that show Starling debug draw together with After burner GPU statistics.

This memory leak only occurs when I am using RenderTexture so many times on enter frame.

As you can see in Image 1 memory looks good both in Starling and AfterBurner but once I start using RenderTexture (Image 2 and Image 3) on enter frame the memory in AfterBurner goes up to the max and it is only released when I close the app.

Memory is only raised in AfterBurner and on Starling debug draw it remains good at all times. But after some time the memory is max out in AfterBurner I get error that back buffer
creation is failing.

Image 1:
https://ibb.co/hgQGCQ

Image 2:
https://ibb.co/dCpORk

Image 3:
https://ibb.co/hkiTsQ

Here is the link to download sample project to reproduce this memory leak:

https://goo.gl/VDVe5F

When you run application the app will start to flickr in about a minute (probably because back buffer can not be created because the memory is full) and than it will crash.

I used Flash Builder 4.7 to create this test app.

It is also worth mentioning that I am on a Windows 10 and Adobe AIR 27 Beta which means that Stage3D will load Direct X 11 .dll

I am using latest Starling from master branch.

Regards,

Caslav

Swift 4.2 dylibs are not signed correctly when packaged with AIR app

Problem Description

Swift 4.2 dylibs have a slightly different structure to 4.1 and so they are not signed correctly by ADT

Actual Result:
Packaged Swift 4.2.1 dylibs are incorrectly signed (code signature invalid, Info.plist=not bound)

Expected Result:
Packaged Swift 4.2.1 dylibs are correctly signed (code signature valid)

  • Which AIR SDK did you use?
    32.0.0.89

  • Describe the affected environment:
    ANEs created for iOS in Xcode 10+ using Swift as the native language.

  • Can you reproduce it yourself, or did you get reports from other users? If so, how many users are affected (percentage)?
    Yes, affects apps built with ANEs targeting Swift 4.2

  • If applicable, link to the Starling/Feathers issues that brought you here.
    https://tracker.adobe.com/#/view/AIR-4198777

Steps to Reproduce

  1. Package AIR iOS app with Swift 4.2 dylibs (eg libswiftCore.dylib) inside Frameworks folder
  2. Confirm signed dylib with: codesign -dv --verbose=4 Payload/*.app/Frameworks/libswiftCore.dylib

Known Workarounds

Patch IPASigner.java in adt.jar with the following:

private int SWIFT_4_2 = 1000;  
private int CODE_DIR_HEADERS_4_2 = 104;  
...  
public void prepareToSignFramework(boolean isDylib, File file)  
            throws IOException, GeneralSecurityException {  
...  
if (version < this.SWIFT_4) {  
    rar.seek(finalPosition + (this.CODE_DIR_HEADERS + this.m_frameworkIdentifier.getBytes().length + 1));  
} else if (version >= this.SWIFT_4_2) {  
    rar.seek(finalPosition + (this.CODE_DIR_HEADERS_4_2 + this.m_frameworkIdentifier.getBytes().length +  
                        1) + this.TEAM_ID_OFFSET);  
} else {  
    rar.seek(finalPosition + (this.CODE_DIR_HEADERS + this.m_frameworkIdentifier.getBytes().length + 1) +  
                        this.TEAM_ID_OFFSET);  
}  
…  
}

Application has default AIR icon on some android devices in AIR 26+

Application has default AIR icon on some android devices in AIR 26-28.

Any android apk has several icons for different screen resolutions:
\res\drawable-xhdpi-v4\icon.png
\res\drawable-xxxhdpi-v4\icon.png
\res\mipmap-hdpi-v4\icon.png
\res\mipmap-ldpi-v4\icon.png
\res\mipmap-mdpi-v4\icon.png
\res\mipmap-xhdpi-v4\icon.png
\res\mipmap-xxhdpi-v4\icon.png
\res\mipmap-xxxhdpi-v4\icon.png

The first two icons are default AIR icons. The other six icons are taken from the application.xml and they look like they should.

https://tracker.adobe.com/#/view/AIR-4198554

Huge memory leak in Firefox 55 + baselineConstrained

Problem Description

When running a Stage3D app on Firefox 55 on Windows using baselineConstrained profile, memory is constantly increasing. This is not shown by System.totalMemory, but by the Windows task manager. Eventually, the browser will crash.

  • Compiled with the latest AIR SDK (26.0.0.118).
  • Tested on Windows 7, 8, and 10
  • Does not happen on MacOS
  • Reported via this Starling issue
  • Adobe Tracker: FP-4198562

Steps to Reproduce

Visit the following URL and open up the task manager. Memory will constantly rise.
https://gamua.com/media/starling/demos/flappy-starling/index-constrained.html

Result: http://imgur.com/a/eGvPb

Known Workarounds

Only happens in baselineConstrained profile. It's recommended to always start Starling with the String auto for profile selection. Very few computers need to fall back to constrained mode nowadays.

Air 30 Beta Geolocation permission issue on iOS 11+

Problem Description

I've reported this bug at https://tracker.adobe.com/#/view/AIR-4198661

In Air 30 Beta (30.0.0.103 BETA), when requesting permission for location services the Air runtime is not presenting the same dialog as Air 28 does, and as a result the appropriate permission is not given to allow access.

Steps to Reproduce

Create a new Geolocation instance within a fresh Adobe Air 30 Beta app installed on an iOS 11 device. Request permission and the app presents a permission request dialog box. Tapping "Allow" does not grant the app permission, and is effectively treated as if the user has tapped "Don't Allow"

Actual Result

The user is presented with an older style permission request dialog box instead of the new iOS 11 request dialog. Tapping "Allow" does not grant access to location services for the Adobe Air app.

air30betageopermission

Expected Result

The same permission dialog should appear as it does in the current Adobe Air 28 runtime, and permission should be granted when the user selects the appropriate method.

air28geopermission

Known Workarounds

None that I have found. However a native extension may present a workaround.

ATF ETC2 Format texture does not work on some Android devices

When compiling with AIR SDK 27 ATF textures that include ETC2 only compression format will not display at all on some Android devices. On iOS everything is working fine.

I am using latest Starling 2.2

Currently ETC2 textures will not display on following Android devices:

Samsung s6 Edge.
Huawei P10 Lite
Samsung Glaxy Tab 3.

However ETC2 textures will be displayed on the following Android devices:

ZTE Blade A910 with Android 6

iOS app rejections

screenshot 195
Our app received an almost identical rejection earlier this week after a significantly longer than normal (over a week) review process.

Problem Description:

Recently Apple review team started to disallow publishing iOS apps built with AIR to the App Store with the following statement:


Your app uses or references the following non-public APIs:

_IOPSCopyPowerSourcesInfo

_IOPSCopyPowerSourcesList

_IOPSGetPowerSourceDescription

The use of non-public APIs is not permitted on the App Store because it can lead to a poor user experience should these APIs change.

Continuing to use or conceal non-public APIs in future submissions of this app may result in the termination of your Apple Developer account, as well as removal of all associated apps from the App Store.


Analysis of the hex contents of the packed IPA file reveals that those methods are at least referenced somewhere in the contents. I was also able to locate names of those functions in the libRuntimeHMAOT.arm-air.a file located in lib\aot\lib folder of AIR SDK.

Possible reason for the problem is that the IOKit itself is supported in both macOS and iOS SDKs, but the functions IOPSCopyPowerSourcesInfo, IOPSCopyPowerSourcesList, IOPSGetPowerSourceDescription are marked as macOS-only.

https://developer.apple.com/documentation/iokit

https://developer.apple.com/documentation/iokit/1523839-iopscopypowersourcesinfo

https://developer.apple.com/documentation/iokit/1523856-iopscopypowersourceslist

https://developer.apple.com/documentation/iokit/1523867-iopsgetpowersourcedescription

There are two forum threads about the problem, it seems to be widespread:

https://forums.adobe.com/thread/2472940

https://forums.adobe.com/thread/2472510

Steps to Reproduce:

Submit any IPA package build with AIR SDK to Apple AppStore verification.

Actual Result:

App fails verification with the aforementioned statement from Apple review team.

Expected Result:

App passes verification.

Any Workarounds:

None currently.

old dx.jar in AIR SDK

Problem Description

The dx.jar file located at /Users/user/Documents/AIR_30.107/lib/android/bin/dx.jar is too old and needs to be updated to at least V27.0.3. Some third party Android libraries like the tensorflow library will throw an error like below:

This will be a problem when developing ANEs like Firebase MLKIT which are using tensorflow library.

dx tool failed:<br>UNEXPECTED TOP-LEVEL EXCEPTION:<br>com.android.dx.cf.iface.ParseException: bad class file magic (cafebabe) or version (0034.0000)<br>	
at com.android.dx.cf.direct.DirectClassFile.parse0(DirectClassFile.java:472)<br>	
at com.android.dx.cf.direct.DirectClassFile.parse(DirectClassFile.java:406)<br>	
at com.android.dx.cf.direct.DirectClassFile.parseToInterfacesIfNecessary(DirectClassFile.java:388)<br>	
at com.android.dx.cf.direct.DirectClassFile.getMagic(DirectClassFile.java:251)<br>	
at com.android.dx.command.dexer.Main.processClass(Main.java:709)<br>	
at com.android.dx.command.dexer.Main.processFileBytes(Main.java:678)<br>	
at com.android.dx.command.dexer.Main.access$300(Main.java:83)<br>	
at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:607)<br>	
at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:284)<br>	
at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166)<br>	
at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144)<br>	
at com.android.dx.command.dexer.Main.processOne(Main.java:637)<br>	
at com.android.dx.command.dexer.Main.processAllFiles(Main.java:506)<br>	
at com.android.dx.command.dexer.Main.runMultiDex(Main.java:335)<br>	
at com.android.dx.command.dexer.Main.run(Main.java:245)<br>	
at com.android.dx.command.dexer.Main.main(Main.java:215)<br>	
at com.android.dx.command.Main.main(Main.java:106)<br>
...while parsing org/tensorflow/lite/DataType$1.class<br>1 error; aborting

Steps to Reproduce:

Include the following ANE in your project and try to compile your AIR app. you will see the above error message.

<extensionID>com.myflashlab.air.extensions.dependency.tensorflow</extensionID>

Workarounds:

You could bypass the problem by overwritting the dx.jar file from the one in Android SDK /Users/user/Library/Android/sdk/build-tools/27.0.3/lib/dx.jar. This will solve the problem. but still, it makes sense if the AIR SDK has the latest version itself.

This bug is listed on tracker.adobe.com also. please vote here: https://tracker.adobe.com/#/view/AIR-4198726

Displaying a VideoTexture Eventually Freezes Visuals

Problem Description

Running a VideoTexture for long enough will eventually cause the visuals to freeze. It's the equivalent of having skipUnchangedFrames set to true in Starling i.e. The sound continues and if the window is resized, then the frame updates.

  • AIR SDK used: 26.0
  • Environment: AIR for Windows (Captive runtime and otherwise). Windows 10 32-bit confirmed.
  • Adobe Bug Tracker Issue

Steps to Reproduce

  1. Create an application that plays a video from a local file using VideoTexture
  2. Cause the video to loop, in this case using the 'appendBytes' method to avoid this issue.
  3. Run the app. Usually, after a few hours of constant video playback, the video freezes.

Here is a minimal application that exhibits the problem. This zip file can be imported directly into Flash Builder.

Here are compiled versions of the above app that can be run straight away:

To minimise dependencies, and to rule out framework bugs, this app does not use Starling, but the same behaviour is exhibited when Starling is used.

More Info

Known Workarounds

None that I am aware of. Perhaps if it were possible to detect when the problem arises and dispose of the context, triggering a rebuild.

Memory is out (Windows)

It's hard for me to accurately describe the problem, but it is!
It comes with new versions of the Air SDK 28, 29
This issue is definitely not in the Air SDK 26
I created this topic on the forum. Then I shut down the particle systems.
https://forum.starling-framework.org/topic/starling-context-restored-and-loss-of-textures
The problem is most likely the use of filters and it is played on the Windows platform
After applying filters(ColorMatrix, glow, dropshadow), the application runs for 15-20 minutes, and then crashes error 'memory is out' and what happens in the video
https://youtu.be/sUspvO4tIDg
Without filters such problem did not find
With the air sdk 26, everything is in order!
Tested scout. No increase of memory, no other problems I have not discovered!

Async texture upload fails after some time

Problem Description

On iOS, BitmapData fails to be uploaded asynchronously after a number of previously successful uploads. The app will either crash or continue to run without any textures showing on the screen. If the app continues to run and the app is minimized and re-launched then a crash will occur.
The crash has the following stack trace:

0   libGPUSupportMercury.dylib    	0x2be92742 gpus_ReturnUnexpectedKillClient + 2
1   libGPUSupportMercury.dylib    	0x2be93202 gpusSubmitDataBuffers + 118
2   libGPUSupportMercury.dylib    	0x2be93078 gldCreateContext + 204
3   GLEngine                      	0x2769ce06 gliCreateContextWithShared + 598
4   OpenGLES                      	0x27779a8c -[EAGLContext commonInitWithAPI:properties:] + 404
5   OpenGLES                      	0x277798c6 -[EAGLContext initWithAPI:sharegroup:] + 110
6   Async Upload Sample           	0x00029874 0xe000 + 112756
7   Async Upload Sample           	0x006d7e40 0xe000 + 7118400
8   Async Upload Sample           	0x004b1c48 0xe000 + 4865096
9   Async Upload Sample           	0x004b1d70 0xe000 + 4865392
10  Async Upload Sample           	0x004b1928 0xe000 + 4864296
11  libsystem_pthread.dylib       	0x33bcfddc _pthread_body + 136
12  libsystem_pthread.dylib       	0x33bcfd4e _pthread_start + 114
13  libsystem_pthread.dylib       	0x33bcdaf8 thread_start + 4

Tested with different AIR version from 25 to the current beta (28.0.0.120).

Link to Adobe Tracker

Steps to Reproduce

(See attached sample-project.zip)

Upload a BitmapData asynchronously, wait for the upload to complete and display the texture. Dispose the texture after a small delay. Repeat this process. The sample project uploads 4 textures to reach the crash point faster.

It is easier to reproduce on older, less powerful iOS device (iPad 2nd or 3rd generation, iPhone 4S...). In the provided sample, the upload starts failing after about 2000 uploads have been made (at least on the aforementioned devices).

Known Workarounds

Use synchronous texture upload.

sample-project.zip

Black screen when returning from lock screen on Samsung S8

Problem Description

AIR SDK: AIR 25 (Also tested on AIR 26)
Starling: 2.1
Environment: AIR, Flash Builder 4.7, Only occurs on Samsung S8 and S8+ running Android

This issue is reproducible by all co-workers with an S8 or S8+. Other users have seen this issue as well, based on feedback from the bug I put for Adobe. All users with an S8 or S8+ that use a lock screen of some kind are effected. This issue will not occur on devices with no lock screen security.

Starling Forum Thread: https://forum.starling-framework.org/topic/samsung-s8-black-screen-when-unlocking-phone
Adobe Tracker: https://tracker.adobe.com/#/view/AIR-4198366

Steps to Reproduce

I have created a small and lightweight app in Adobe AIR 26 that uses Starling, simply to test this issue.

When this app is run on a Samsung S8 or S8+, simply lock the screen (make sure to have some form of lock screen security enabled. Pattern or Retina is what most people I have spoken to are using.), once the screen turn to black, unlock the phone and the screen on the S8 will be a black screen. To resolve the issue simply put the app in back ground and reopen it, this will display the app once again.

This is due to the ACTIVATE event being dispatched twice when the phone is unlocked.

I am going to attach this small project to this issue, for testing purposes.

MYSMobileApp_Starling2.zip

[Edit by Daniel Sperl, 2018-06-11]
Here is a better sample app, all in a single startup class: MinimalMobileApp.as
[/Edit]

I have also been able to reproduce this issue on a large number of Starling apps on the Google Play Store.

Known Workarounds

I have not been able to find a viable workaround for this issue.

AIR 27 - Alt+Enter toggles fullscreen; behavior not cancelable

Problem Description

Beginning in AIR 27, holding Alt and pressing Enter (or Numpad-Enter) toggles a Windows app's fullscreen state. Installing a KEY_DOWN event listener and calling Event.preventDefault() doesn't prevent this behavior.

Tracker link: https://tracker.adobe.com/#/view/AIR-4198470

Steps to Reproduce

Build a Windows app with AIR 27. Hold Alt and press the Enter key.

The app will toggle its fullscreen state. This behavior cannot be canceled with Event.preventDefault:

stage.addEventListener(KeyboardEvent.KEY_DOWN, function (e :KeyboardEvent) :void {
   if ((e.keyCode == Keyboard.ENTER && e.altKey) ||
        (e.keyCode == Keyboard.NUMPAD_ENTER && e.altKey)) {
       // this has no effect
       e.preventDefault();
   }
}, true);

Textures/bitmaps partially loading

Adobe tracker link:
https://tracker.adobe.com/#/view/AIR-4198475

Forum link:
https://forum.starling-framework.org/topic/textures-partially-uploaded-to-gpu-original-bitmapdata-is-perfect/page/2

Problem Description:

On certain android devices (SM-T530 running android 5.0.2), textures created only partially load up, a full horizontal slice from the top of the texture, down to a seemingly arbitrary height, is created, and the bottom is not created (or perhaps uploaded to the gpu). This results in incomplete rendering. This bug did not occur on some other android devices, including the (SM-G935F running android 7.0)

Steps to Reproduce:
Load up a big texture (4096,4096) and attempt to render it on (SM-T530 running android 5.0.2) using air sdk27, it wont render fully, switch to air sdk19 it works, switch back to air sdk27, it doesn't work. Please not that this does not fail on all devices.

Actual Result:
incomplete texture

Expected Result:
corrrect rendering

Any Workarounds:

The bug was allieviated by switching to air sdk 19, however, this is not an option as having previously published with version 27, we are now stuck targetting android:targetSdkVersion="24", which requires persmissions which can only be accessed with air sdk 24.

Input dispatching timed out ANRs & ANR rate survey

Hi guys,

I am mirorring my post from the Starling forum here with Daniel's permission.

We have ANRs on Android in all our apps and would like to know if it's maybe our apps particularly, or if it's AIR related.

Could you please check your Google Dev Console and go to "Android Vitals" > "Overview".

The first section is "Bad Behaviors".

Please share the following values (no need to mention the app, just pick the biggest app you have or the average of all your apps please):

  • ANR Rate (around 2.6% on our apps)
  • Crash Rate (1.1-1.8% on our apps)

The main ANR we are experiencing is "Input dispatching timed out" triggered by "com.adobe.air.customHandler.callTimeoutFunction". There are heaps of topics on it on the web, and they only proper response by Adobe is that we should avoid doing heavy calculations on user input.

But all our apps use Starling, and Starling defers all user inputs to next frame so this should not be an issue.

Accessing a Dictionary containing Vectors results in String allocations on iOS.

Problem Description

On iOS (only), assigning a property from a flash.utils.Dictionary, where the property type is a Vector of any non-primitive type, results in at least 3 hidden string allocations, according to Scout.

This was tested with the latest AIR Beta SDK (version 26.0.0 build 112), and several iOS devices using iOS 10.3.2. On Android and Desktop, there are no allocations.

Adobe Tracker Issue: https://tracker.adobe.com/#/view/AIR-4115729

Steps to Reproduce

The class StringAllocationIssue.as constitutes a minimal sample that showcases the problem by accessing a Dictionary once per frame, and StringAllocationIssue.flm shows the analysis of this application on an iPhone 6S. You'll see that once per frame, there are three String allocations; those do not happen on Android or Desktop.

Known Workarounds

When using an Array instead of a Vector, there are no allocations.

Error #3672: Buffer creation failed. Internal error in Air27

Im Using Air27

and see this error when i use videoPlayer(feather)
[Fault] exception, information=ArgumentError: Error #3672: Buffer creation failed. Internal error.
in windows,I dont have any issue but when I compile my app in mobile, I see wired errors with this videoPlayer like:
[Fault] exception, information=RangeError: Error #1125: The index 1 is out of range 1.
Fault, getBatchAt() at BatchProcessor.as:138

Can't render into Anti-aliased texture when back buffer uses stencil buffer

Problem Description

It was noticed that when using a mask in Starling, objects with a FragmentFilter suddenly disappear if they have antiAliasing enabled.

  • AIR SDK: 27.0.0.128
  • Flash Player (Projector, Debugger): 27.0.0.187
  • macOS 10.13.1
  • Affects both AIR and Flash Player apps
  • On iOS, the problem is a little different (see below)
  • Not yet tested on Android.
  • Adobe Tracker issue AIR-4198507
  • This problem was first reported in this Starling issue.

Steps to Reproduce

You can reproduce this with the following simple Starling code:

var victim:Quad = new Quad(50, 50, 0xff);
victim.x = victim.y = 200;
victim.filter = new FragmentFilter();
// victim.filter.antiAliasing = 2;
addChild(victim);

var quad:Quad = new Quad(200, 200, 0xff0000);
addChild(quad);

var mask:Quad = new Quad(200, 200, 0xff00);
mask.rotation = Math.PI / 4;
quad.mask = mask;

Run the code as it is: two objects will show up. Then activate anti-aliasing on the filter and run it again: now the second object will disappear. It's visible only during the very first frame, then it's gone.

Starling's filters draw into a texture, passing antiAliasing property is passed to 'context.setRenderToTexture. Otherwise, the antiAliasing` setting does not change any of Starling's logic. Thus, I would conclude that Stage3D has a problem when stencil masks are used while drawing anti-aliased to a texture.

BTW: on iOS, the behavior is different: the code from above displays correctly, but if you animate victim, the output becomes strange. To reproduce, append this code:

Starling.juggler.tween(victim, 10, { rotation: Math.PI });

Known Workarounds

Starling developers can use the filter.resolution property instead of filter.antiAliasing. That makes Starling simply render the filter to a bigger texture, scaling it down manually.

Arabic characters are not written correctly

hi. i make search box in my app when the user write in arabic . the alphabet be not like arabic really .showing like this
م ر ح ب ا
its mean hi . should be like this merrage مرحبا
+the alphabet showing from left to right ا ب ح ر م..sholud be like this مرحبا
i use air sdk 27 animate cc last update i write codes in frame...
i see this problem in android devices
any body have some trick to make the alphabet when i write it be merrage or be like this مرحبا

Localisation of the permissions purpose string on iOS

Problem Description

Using Adobe Air 26.0.0.118
Apple needs a purpose string to access some features (Bluetooth, Geolocation, Camera, Microphone...). Actually, we can add it in the infoAdditions of the Application descriptor XML file.
But many apps are localized and the purpose string isn't.
Can you give us a way to do it ?

https://tracker.adobe.com/#/view/AIR-4198336

Steps to Reproduce

Compile the app that requires special permission on iOS device, switch device language to non-English, launch the app and request permissions (e.g. Camera Access). Observe native dialog describing the permission only in English.

Known Workarounds

None

@PrimaryFeather , sorry but I can't add/edit labels.

AIR for iOS NetStream Video Volume Control

AIR for iOS NetStream Video Volume Control

https://bugbase.adobe.com/index.cfm?event=bug&id=4196944

I'm loading and running an MP4 just fine in AIR for iOS.
The problem I am having is controlling the volume (muting / unmuting).

I am using soundTransform on the NetStream object, but it is having no effect. It's not erroring either.

var transform:SoundTransform = new SoundTransform();
transform.volume = 0;
netStream.soundTransform = transform;

There is an old problem from Air 3.0.

Note: This property is not supported for H.264 video in AIR 3.0 for iOS.

signing error: Bundle identifier not specified

We are getting Signing error: Bundle identifier not specified" when packaging ipa with NMAKit.framework (Heremaps premium ios framework) tried packaging with original framework file and codesigned on mac but getting same error.
Xcode build app file without errors so this is specific for adobe ipackager also we did not any issues for Signing error: Bundle identifier not specified" air sdk 28.122 os: mac high sierra

here is the adobe bugtrack please vote.
https://tracker.adobe.com/#/view/AIR-4198638

Multitouch on Windows 10: Events queue up under heavy load

Problem Description

In Windows 10, when an AIR app is under heavy load (read: it does not reach the requested frame rate) and there are many touch events (or even mouse clicks), events will queue up and will be dispatched long after the finger left the screen (or the mouse has stopped clicking). In effect, the app will become unusable for a while (becoming worse the more events queued up).

  • AIR SDK 28 and 29 beta.
  • Reproducible on Windows 10.
  • Not reproducible on iOS and Android.
  • The topic came up originally in this Starling thread, but happens in non-Starling apps, too.
  • This Adobe Tracker issue seems to concern exactly the problem described: AIR-4081695.

Steps to Reproduce

Use the code from this gist to reproduce the problem.

Experiment A

  • Instantiate the provided class (TouchExperimentsFla) in an AIR project for Desktop and add it to the stage. On each click / touch, a dot will appear on the stage.
  • Set the frameRate of this project to 30 fps.
  • The method onEnterFrame is responsible for creating the heavy load. Adapt the value of count (line 76) so that you reach only about 20 frames per second, or less.
  • Now repeatedly tap the screen with 5-10 fingers, and repeat (fast!) for about 5 seconds.
    • Alternatively, click on the mouse as often and as fast as you can.
  • Result: the touch / mouse events will continue to fire long after you stopped tapping / clicking!

Experiment B

  • Now change the value of count so that the app easily reaches the 30 fps.
    • Alternatively, change the target frameRate to just, say, 10.
  • Again, create as many touch/click events as you can for a few seconds.
  • Result: you'll find that this time, events will not queue up. This is how it's always supposed to work.

Note: if you run experiment A on iOS or Android, you'll find that there won't be any queuing there, either. The problem is really limited to Windows.

Note: Please also check the sample posted by @MadNoMad0 below!

Known Workarounds

Developers need to make sure target FPS is always easily reached by the system.

Add API to find out if application is currently active

Feature Request

The NativeApplication class allows to listen for "Event.ACTIVATE" and "Event.DEACTIVATE" events. That way, it's possible to find out if an application is currently active. However, this only works if an application starts to listen for these events right from the beginning.

As a library developer, I can never know when my library is first used — thus, if my library is first invoked while the application is in the background, I can't know about that.

Thus, it would be great to have an API like nativeApplication.isActive that tells me about the current status.

Adobe Tracker: https://tracker.adobe.com/#/view/AIR-4198418

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.