Skip to content

Commit 80481f2

Browse files
committed
Merge branch 'view3d-optimization' into internal-merge
2 parents 29d9127 + fcaabb1 commit 80481f2

4 files changed

Lines changed: 350 additions & 78 deletions

File tree

source/flx3d/Flx3DCamera.hx

Lines changed: 52 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -25,19 +25,25 @@ import flx3d.Flx3DUtil;
2525
import haxe.io.Path;
2626
import openfl.Assets;
2727
#end
28-
2928
import flixel.FlxCamera;
3029

31-
class Flx3DCamera extends FlxCamera {
30+
class Flx3DCamera extends FlxCamera
31+
{
3232
#if THREE_D_SUPPORT
3333
private static var __3DIDS:Int = 0;
3434

3535
public var view:View3D;
3636

3737
var meshes:Array<Mesh> = [];
38-
public function new(X:Int = 0, Y:Int = 0, Width:Int = 0, Height:Int = 0, DefaultZoom:Float = 1) {
38+
39+
public function new(X:Int = 0, Y:Int = 0, Width:Int = 0, Height:Int = 0, DefaultZoom:Float = 1)
40+
{
3941
if (!Flx3DUtil.is3DAvailable())
40-
throw "[Flx3DCamera] 3D is not available on this platform. Stages in use: " + Flx3DUtil.getTotal3D() + ", Max stages allowed: " + FlxG.stage.stage3Ds.length + ".";
42+
throw "[Flx3DCamera] 3D is not available on this platform. Stages in use: "
43+
+ Flx3DUtil.getTotal3D()
44+
+ ", Max stages allowed: "
45+
+ FlxG.stage.stage3Ds.length
46+
+ ".";
4147
super(X, Y, Width, Height, DefaultZoom);
4248
__cur3DStageID = __3DIDS++;
4349

@@ -49,7 +55,8 @@ class Flx3DCamera extends FlxCamera {
4955
FlxG.stage.addChild(view);
5056
}
5157

52-
public override function render() {
58+
public override function render()
59+
{
5360
super.render();
5461

5562
view.x = FlxG.game.x + FlxG.game.scaleX * (flashSprite.x + flashSprite.scaleX * (_scrollRect.x + _scrollRect.scaleX * (_scrollRect.scrollRect.x)));
@@ -65,7 +72,8 @@ class Flx3DCamera extends FlxCamera {
6572
view.render();
6673
}
6774

68-
public function addModel(assetPath:String, callback:Asset3DEvent->Void, ?texturePath:String, smoothTexture:Bool = true) {
75+
public function addModel(assetPath:String, callback:Asset3DEvent->Void, ?texturePath:String, smoothTexture:Bool = true)
76+
{
6977
var model = Assets.getBytes(assetPath);
7078
if (model == null)
7179
throw 'Model at ${assetPath} was not found.';
@@ -79,36 +87,43 @@ class Flx3DCamera extends FlxCamera {
7987
if (texturePath != null)
8088
material = new TextureMaterial(Cast.bitmapTexture(Assets.getBitmapData(texturePath, true, false)), smoothTexture);
8189

82-
return loadData(model, context, switch(Path.extension(assetPath).toLowerCase()) {
90+
return loadData(model, context, switch (Path.extension(assetPath).toLowerCase())
91+
{
8392
case "dae": new DAEParser();
8493
case "md2": new MD2Parser();
8594
case "md5": new MD5MeshParser();
8695
case "awd": new AWDParser();
87-
default: new OBJParser();
88-
}, (event:Asset3DEvent) -> {
89-
if (event.asset != null && event.asset.assetType == Asset3DType.MESH) {
90-
var mesh:Mesh = cast event.asset;
91-
if (material != null)
92-
mesh.material = material;
93-
meshes.push(mesh);
94-
}
95-
callback(event);
96-
});
96+
default: new OBJParser();
97+
}, (event:Asset3DEvent) ->
98+
{
99+
if (event.asset != null && event.asset.assetType == Asset3DType.MESH)
100+
{
101+
var mesh:Mesh = cast event.asset;
102+
if (material != null)
103+
mesh.material = material;
104+
meshes.push(mesh);
105+
}
106+
callback(event);
107+
});
97108
}
98109

99110
private var __cur3DStageID:Int;
100111
private var _loaders:Map<Asset3DLibraryBundle, AssetLoaderToken> = [];
101112

102-
private function loadData(data:Dynamic, context:AssetLoaderContext, parser:ParserBase, onAssetCallback:Asset3DEvent->Void):AssetLoaderToken {
113+
private function loadData(data:Dynamic, context:AssetLoaderContext, parser:ParserBase, onAssetCallback:Asset3DEvent->Void):AssetLoaderToken
114+
{
103115
var token:AssetLoaderToken;
104116

105117
var lib:Asset3DLibraryBundle = Asset3DLibraryBundle.getInstance('Flx3DView-${__cur3DStageID}');
106118
token = lib.loadData(data, context, null, parser);
107119

108-
token.addEventListener(Asset3DEvent.ASSET_COMPLETE, (event:Asset3DEvent) -> {
120+
token.addEventListener(Asset3DEvent.ASSET_COMPLETE, (event:Asset3DEvent) ->
121+
{
109122
// ! Taken from Loader3D https://github.com/openfl/away3d/blob/master/away3d/loaders/Loader3D.hx#L207-L232
110-
if (event.type == Asset3DEvent.ASSET_COMPLETE) {
111-
var obj:ObjectContainer3D = switch (event.asset.assetType) {
123+
if (event.type == Asset3DEvent.ASSET_COMPLETE)
124+
{
125+
var obj:ObjectContainer3D = switch (event.asset.assetType)
126+
{
112127
case Asset3DType.LIGHT: expect(event.asset, LightBase);
113128
case Asset3DType.CONTAINER: expect(event.asset, ObjectContainer3D);
114129
case Asset3DType.MESH: expect(event.asset, Mesh);
@@ -126,36 +141,42 @@ class Flx3DCamera extends FlxCamera {
126141
onAssetCallback(event);
127142
});
128143

129-
token.addEventListener(LoaderEvent.RESOURCE_COMPLETE, (_) -> {
144+
token.addEventListener(LoaderEvent.RESOURCE_COMPLETE, (_) ->
145+
{
130146
trace("Loader Finished...");
131147
});
132148

133-
_loaders.set(lib,token);
149+
_loaders.set(lib, token);
134150

135151
return token;
136152
}
137153

138-
override function destroy() {
154+
override function destroy()
155+
{
139156
if (meshes != null)
140-
for(mesh in meshes)
157+
for (mesh in meshes)
141158
mesh.dispose();
142159

143160
var bundle = Asset3DLibraryBundle.getInstance('Flx3DView-${__cur3DStageID}');
144161
bundle.stopAllLoadingSessions();
145162
@:privateAccess {
146-
if (bundle._loadingSessions != null) {
147-
for(load in bundle._loadingSessions) {
163+
if (bundle._loadingSessions != null)
164+
{
165+
for (load in bundle._loadingSessions)
166+
{
148167
load.dispose();
149168
}
150169
}
151170
Asset3DLibrary._instances.remove('Flx3DView-${__cur3DStageID}');
152171
}
153172

154173
FlxG.stage.removeChild(view);
155-
try {
174+
try
175+
{
156176
view.dispose();
157-
} catch(e) {
158-
177+
}
178+
catch (e)
179+
{
159180
}
160181

161182
super.destroy();
@@ -164,4 +185,4 @@ class Flx3DCamera extends FlxCamera {
164185
public function addChild(c)
165186
view.scene.addChild(c);
166187
#end
167-
}
188+
}

source/flx3d/Flx3DView.hx

Lines changed: 45 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -25,20 +25,27 @@ import away3d.utils.Utils.expect;
2525
#end
2626

2727
// FlxView3D with helpers for easier updating
28-
class Flx3DView extends FlxView3D {
28+
class Flx3DView extends FlxView3D
29+
{
2930
#if THREE_D_SUPPORT
3031
private static var __3DIDS:Int = 0;
3132

3233
var meshes:Array<Mesh> = [];
33-
public function new(x:Float = 0, y:Float = 0, width:Int = -1, height:Int = -1) {
34+
35+
public function new(x:Float = 0, y:Float = 0, width:Int = -1, height:Int = -1)
36+
{
3437
if (!Flx3DUtil.is3DAvailable())
35-
throw "[Flx3DView] 3D is not available on this platform. Stages in use: " + Flx3DUtil.getUsed3D() + ", Max stages allowed: " + Flx3DUtil.getTotal3D() + ".";
38+
throw "[Flx3DView] 3D is not available on this platform. Stages in use: "
39+
+ Flx3DUtil.getUsed3D()
40+
+ ", Max stages allowed: "
41+
+ Flx3DUtil.getTotal3D()
42+
+ ".";
3643
super(x, y, width, height);
3744
__cur3DStageID = __3DIDS++;
3845
}
3946

40-
public function addModel(assetPath:String, callback:Asset3DEvent->Void, ?texturePath:String, smoothTexture:Bool = true) {
41-
47+
public function addModel(assetPath:String, callback:Asset3DEvent->Void, ?texturePath:String, smoothTexture:Bool = true)
48+
{
4249
var model = Assets.getBytes(assetPath);
4350
if (model == null)
4451
throw 'Model at ${assetPath} was not found.';
@@ -52,37 +59,44 @@ class Flx3DView extends FlxView3D {
5259
if (texturePath != null)
5360
material = new TextureMaterial(Cast.bitmapTexture(Assets.getBitmapData(texturePath, true, false)), smoothTexture);
5461

55-
return loadData(model, context, switch(Path.extension(assetPath).toLowerCase()) {
62+
return loadData(model, context, switch (Path.extension(assetPath).toLowerCase())
63+
{
5664
case "dae": new DAEParser();
5765
case "md2": new MD2Parser();
5866
case "md5": new MD5MeshParser();
5967
case "awd": new AWDParser();
60-
default: new OBJParser();
61-
}, (event:Asset3DEvent) -> {
62-
if (event.asset != null && event.asset.assetType == Asset3DType.MESH) {
63-
var mesh:Mesh = cast event.asset;
64-
if (material != null)
65-
mesh.material = material;
66-
meshes.push(mesh);
67-
}
68-
callback(event);
69-
});
68+
default: new OBJParser();
69+
}, (event:Asset3DEvent) ->
70+
{
71+
if (event.asset != null && event.asset.assetType == Asset3DType.MESH)
72+
{
73+
var mesh:Mesh = cast event.asset;
74+
if (material != null)
75+
mesh.material = material;
76+
meshes.push(mesh);
77+
}
78+
callback(event);
79+
});
7080
}
7181

7282
private var __cur3DStageID:Int;
7383
private var _loaders:Map<Asset3DLibraryBundle, AssetLoaderToken> = [];
7484

75-
private function loadData(data:Dynamic, context:AssetLoaderContext, parser:ParserBase, onAssetCallback:Asset3DEvent->Void):AssetLoaderToken {
85+
private function loadData(data:Dynamic, context:AssetLoaderContext, parser:ParserBase, onAssetCallback:Asset3DEvent->Void):AssetLoaderToken
86+
{
7687
var token:AssetLoaderToken;
7788

7889
var lib:Asset3DLibraryBundle;
7990
lib = Asset3DLibraryBundle.getInstance('Flx3DView-${__cur3DStageID}');
8091
token = lib.loadData(data, context, null, parser);
8192

82-
token.addEventListener(Asset3DEvent.ASSET_COMPLETE, (event:Asset3DEvent) -> {
93+
token.addEventListener(Asset3DEvent.ASSET_COMPLETE, (event:Asset3DEvent) ->
94+
{
8395
// ! Taken from Loader3D https://github.com/openfl/away3d/blob/master/away3d/loaders/Loader3D.hx#L207-L232
84-
if (event.type == Asset3DEvent.ASSET_COMPLETE) {
85-
var obj:ObjectContainer3D = switch (event.asset.assetType) {
96+
if (event.type == Asset3DEvent.ASSET_COMPLETE)
97+
{
98+
var obj:ObjectContainer3D = switch (event.asset.assetType)
99+
{
86100
case Asset3DType.LIGHT: expect(event.asset, LightBase);
87101
case Asset3DType.CONTAINER: expect(event.asset, ObjectContainer3D);
88102
case Asset3DType.MESH: expect(event.asset, Mesh);
@@ -100,26 +114,29 @@ class Flx3DView extends FlxView3D {
100114
onAssetCallback(event);
101115
});
102116

103-
token.addEventListener(LoaderEvent.RESOURCE_COMPLETE, (_) -> {
117+
token.addEventListener(LoaderEvent.RESOURCE_COMPLETE, (_) ->
118+
{
104119
trace("Loader Finished...");
105-
106120
});
107121

108-
_loaders.set(lib,token);
122+
_loaders.set(lib, token);
109123

110124
return token;
111125
}
112126

113-
override function destroy() {
127+
override function destroy()
128+
{
114129
if (meshes != null)
115-
for(mesh in meshes)
130+
for (mesh in meshes)
116131
mesh.dispose();
117132

118133
var bundle = Asset3DLibraryBundle.getInstance('Flx3DView-${__cur3DStageID}');
119134
bundle.stopAllLoadingSessions();
120135
@:privateAccess {
121-
if (bundle._loadingSessions != null) {
122-
for(load in bundle._loadingSessions) {
136+
if (bundle._loadingSessions != null)
137+
{
138+
for (load in bundle._loadingSessions)
139+
{
123140
load.dispose();
124141
}
125142
}
@@ -132,4 +149,4 @@ class Flx3DView extends FlxView3D {
132149
public function addChild(c)
133150
view.scene.addChild(c);
134151
#end
135-
}
152+
}

0 commit comments

Comments
 (0)