Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in
Toggle navigation
F
Front-End
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
abdullh.alsoleman
Front-End
Commits
0041182d
Commit
0041182d
authored
Jul 27, 2015
by
Viktor Lidholt
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Optimizes sprites by replacing save/restore by caching the total matrix
parent
54803998
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
23 additions
and
19 deletions
+23
-19
node.dart
packages/flutter/example/game/lib/node.dart
+14
-13
sprite.dart
packages/flutter/example/game/lib/sprite.dart
+9
-6
No files found.
packages/flutter/example/game/lib/node.dart
View file @
0041182d
...
@@ -37,6 +37,7 @@ class Node {
...
@@ -37,6 +37,7 @@ class Node {
int
_addedOrder
;
int
_addedOrder
;
int
_childrenLastAddedOrder
=
0
;
int
_childrenLastAddedOrder
=
0
;
bool
_childrenNeedSorting
=
false
;
bool
_childrenNeedSorting
=
false
;
Matrix4
_savedTotalMatrix
;
/// Decides if the node and its children is currently paused.
/// Decides if the node and its children is currently paused.
///
///
...
@@ -96,7 +97,7 @@ class Node {
...
@@ -96,7 +97,7 @@ class Node {
///
///
/// myNode.rotation = 45.0;
/// myNode.rotation = 45.0;
double
get
rotation
=>
_rotation
;
double
get
rotation
=>
_rotation
;
void
set
rotation
(
double
rotation
)
{
void
set
rotation
(
double
rotation
)
{
assert
(
rotation
!=
null
);
assert
(
rotation
!=
null
);
_rotation
=
rotation
;
_rotation
=
rotation
;
...
@@ -107,7 +108,7 @@ class Node {
...
@@ -107,7 +108,7 @@ class Node {
///
///
/// myNode.position = new Point(42.0, 42.0);
/// myNode.position = new Point(42.0, 42.0);
Point
get
position
=>
_position
;
Point
get
position
=>
_position
;
void
set
position
(
Point
position
)
{
void
set
position
(
Point
position
)
{
assert
(
position
!=
null
);
assert
(
position
!=
null
);
_position
=
position
;
_position
=
position
;
...
@@ -265,9 +266,9 @@ class Node {
...
@@ -265,9 +266,9 @@ class Node {
if
(
_transformMatrix
!=
null
)
{
if
(
_transformMatrix
!=
null
)
{
return
_transformMatrix
;
return
_transformMatrix
;
}
}
double
cx
,
sx
,
cy
,
sy
;
double
cx
,
sx
,
cy
,
sy
;
if
(
_rotation
==
0.0
)
{
if
(
_rotation
==
0.0
)
{
cx
=
1.0
;
cx
=
1.0
;
sx
=
0.0
;
sx
=
0.0
;
...
@@ -277,7 +278,7 @@ class Node {
...
@@ -277,7 +278,7 @@ class Node {
else
{
else
{
double
radiansX
=
convertDegrees2Radians
(
_rotation
);
double
radiansX
=
convertDegrees2Radians
(
_rotation
);
double
radiansY
=
convertDegrees2Radians
(
_rotation
);
double
radiansY
=
convertDegrees2Radians
(
_rotation
);
cx
=
math
.
cos
(
radiansX
);
cx
=
math
.
cos
(
radiansX
);
sx
=
math
.
sin
(
radiansX
);
sx
=
math
.
sin
(
radiansX
);
cy
=
math
.
cos
(
radiansY
);
cy
=
math
.
cos
(
radiansY
);
...
@@ -289,7 +290,7 @@ class Node {
...
@@ -289,7 +290,7 @@ class Node {
-
sx
*
_scaleY
,
cx
*
_scaleY
,
0.0
,
0.0
,
-
sx
*
_scaleY
,
cx
*
_scaleY
,
0.0
,
0.0
,
0.0
,
0.0
,
1.0
,
0.0
,
0.0
,
0.0
,
1.0
,
0.0
,
_position
.
x
,
_position
.
y
,
0.0
,
1.0
);
_position
.
x
,
_position
.
y
,
0.0
,
1.0
);
return
_transformMatrix
;
return
_transformMatrix
;
}
}
...
@@ -403,7 +404,7 @@ class Node {
...
@@ -403,7 +404,7 @@ class Node {
}
}
// Rendering
// Rendering
void
_visit
(
PaintingCanvas
canvas
)
{
void
_visit
(
PaintingCanvas
canvas
)
{
assert
(
canvas
!=
null
);
assert
(
canvas
!=
null
);
if
(!
visible
)
return
;
if
(!
visible
)
return
;
...
@@ -412,9 +413,9 @@ class Node {
...
@@ -412,9 +413,9 @@ class Node {
_visitChildren
(
canvas
);
_visitChildren
(
canvas
);
_postPaint
(
canvas
);
_postPaint
(
canvas
);
}
}
void
_prePaint
(
PaintingCanvas
canvas
)
{
void
_prePaint
(
PaintingCanvas
canvas
)
{
canvas
.
save
();
_savedTotalMatrix
=
canvas
.
getTotalMatrix
();
// Get the transformation matrix and apply transform
// Get the transformation matrix and apply transform
canvas
.
concat
(
transformMatrix
.
storage
);
canvas
.
concat
(
transformMatrix
.
storage
);
...
@@ -438,7 +439,7 @@ class Node {
...
@@ -438,7 +439,7 @@ class Node {
/// }
/// }
void
paint
(
PaintingCanvas
canvas
)
{
void
paint
(
PaintingCanvas
canvas
)
{
}
}
void
_visitChildren
(
PaintingCanvas
canvas
)
{
void
_visitChildren
(
PaintingCanvas
canvas
)
{
// Sort children if needed
// Sort children if needed
_sortChildren
();
_sortChildren
();
...
@@ -463,9 +464,9 @@ class Node {
...
@@ -463,9 +464,9 @@ class Node {
i
++;
i
++;
}
}
}
}
void
_postPaint
(
PaintingCanvas
canvas
)
{
void
_postPaint
(
PaintingCanvas
canvas
)
{
canvas
.
restore
(
);
canvas
.
setMatrix
(
_savedTotalMatrix
);
}
}
// Receiving update calls
// Receiving update calls
...
@@ -536,4 +537,4 @@ class Node {
...
@@ -536,4 +537,4 @@ class Node {
bool
handleEvent
(
SpriteBoxEvent
event
)
{
bool
handleEvent
(
SpriteBoxEvent
event
)
{
return
false
;
return
false
;
}
}
}
}
\ No newline at end of file
packages/flutter/example/game/lib/sprite.dart
View file @
0041182d
...
@@ -65,7 +65,8 @@ class Sprite extends NodeWithSize {
...
@@ -65,7 +65,8 @@ class Sprite extends NodeWithSize {
}
}
void
paint
(
PaintingCanvas
canvas
)
{
void
paint
(
PaintingCanvas
canvas
)
{
canvas
.
save
();
// Store old matrix
Matrix4
savedMatrix
=
canvas
.
getTotalMatrix
();
// Account for pivot point
// Account for pivot point
applyTransformForPivot
(
canvas
);
applyTransformForPivot
(
canvas
);
...
@@ -75,10 +76,10 @@ class Sprite extends NodeWithSize {
...
@@ -75,10 +76,10 @@ class Sprite extends NodeWithSize {
double
h
=
texture
.
size
.
height
;
double
h
=
texture
.
size
.
height
;
if
(
w
<=
0
||
h
<=
0
)
return
;
if
(
w
<=
0
||
h
<=
0
)
return
;
double
scaleX
=
size
.
width
/
w
;
double
scaleX
=
size
.
width
/
w
;
double
scaleY
=
size
.
height
/
h
;
double
scaleY
=
size
.
height
/
h
;
if
(
constrainProportions
)
{
if
(
constrainProportions
)
{
// Constrain proportions, using the smallest scale and by centering the image
// Constrain proportions, using the smallest scale and by centering the image
if
(
scaleX
<
scaleY
)
{
if
(
scaleX
<
scaleY
)
{
...
@@ -89,7 +90,7 @@ class Sprite extends NodeWithSize {
...
@@ -89,7 +90,7 @@ class Sprite extends NodeWithSize {
scaleX
=
scaleY
;
scaleX
=
scaleY
;
}
}
}
}
canvas
.
scale
(
scaleX
,
scaleY
);
canvas
.
scale
(
scaleX
,
scaleY
);
// Setup paint object for opacity and transfer mode
// Setup paint object for opacity and transfer mode
...
@@ -107,8 +108,10 @@ class Sprite extends NodeWithSize {
...
@@ -107,8 +108,10 @@ class Sprite extends NodeWithSize {
}
else
{
}
else
{
// Paint a red square for missing texture
// Paint a red square for missing texture
canvas
.
drawRect
(
new
Rect
.
fromLTRB
(
0.0
,
0.0
,
size
.
width
,
size
.
height
),
canvas
.
drawRect
(
new
Rect
.
fromLTRB
(
0.0
,
0.0
,
size
.
width
,
size
.
height
),
new
Paint
()..
color
=
const
Color
.
fromARGB
(
255
,
255
,
0
,
0
));
new
Paint
()..
color
=
new
Color
.
fromARGB
(
255
,
255
,
0
,
0
));
}
}
canvas
.
restore
();
// Restore matrix
canvas
.
setMatrix
(
savedMatrix
);
}
}
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment