Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
sxychenjing
engine
提交
d8740c70
E
engine
项目概览
sxychenjing
/
engine
与 Fork 源项目一致
从无法访问的项目Fork
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
E
engine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
d8740c70
编写于
1月 08, 2018
作者:
A
amirh
提交者:
GitHub
1月 08, 2018
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Delete the SkPath/SkRRect code duplication in for physical model layers. (#4519)
上级
9b98d194
变更
12
隐藏空白更改
内联
并排
Showing
12 changed file
with
88 addition
and
224 deletion
+88
-224
flow/BUILD.gn
flow/BUILD.gn
+2
-2
flow/layers/default_layer_builder.cc
flow/layers/default_layer_builder.cc
+4
-20
flow/layers/default_layer_builder.h
flow/layers/default_layer_builder.h
+1
-7
flow/layers/layer_builder.h
flow/layers/layer_builder.h
+1
-6
flow/layers/physical_model_layer.h
flow/layers/physical_model_layer.h
+0
-131
flow/layers/physical_shape_layer.cc
flow/layers/physical_shape_layer.cc
+18
-27
flow/layers/physical_shape_layer.h
flow/layers/physical_shape_layer.h
+56
-0
lib/ui/compositing.dart
lib/ui/compositing.dart
+1
-14
lib/ui/compositing/scene_builder.cc
lib/ui/compositing/scene_builder.cc
+1
-12
lib/ui/compositing/scene_builder.h
lib/ui/compositing/scene_builder.h
+0
-1
lib/ui/painting/canvas.cc
lib/ui/painting/canvas.cc
+2
-2
travis/licenses_golden/licenses_flutter
travis/licenses_golden/licenses_flutter
+2
-2
未找到文件。
flow/BUILD.gn
浏览文件 @
d8740c70
...
...
@@ -34,8 +34,8 @@ source_set("flow") {
"layers/opacity_layer.h",
"layers/performance_overlay_layer.cc",
"layers/performance_overlay_layer.h",
"layers/physical_
model
_layer.cc",
"layers/physical_
model
_layer.h",
"layers/physical_
shape
_layer.cc",
"layers/physical_
shape
_layer.h",
"layers/picture_layer.cc",
"layers/picture_layer.h",
"layers/shader_mask_layer.cc",
...
...
flow/layers/default_layer_builder.cc
浏览文件 @
d8740c70
...
...
@@ -14,7 +14,7 @@
#include "flutter/flow/layers/layer_tree.h"
#include "flutter/flow/layers/opacity_layer.h"
#include "flutter/flow/layers/performance_overlay_layer.h"
#include "flutter/flow/layers/physical_
model
_layer.h"
#include "flutter/flow/layers/physical_
shape
_layer.h"
#include "flutter/flow/layers/picture_layer.h"
#include "flutter/flow/layers/shader_mask_layer.h"
#include "flutter/flow/layers/texture_layer.h"
...
...
@@ -106,23 +106,7 @@ void DefaultLayerBuilder::PushShaderMask(sk_sp<SkShader> shader,
PushLayer
(
std
::
move
(
layer
),
cull_rects_
.
top
());
}
void
DefaultLayerBuilder
::
PushPhysicalModel
(
const
SkRRect
&
sk_rrect
,
double
elevation
,
SkColor
color
,
SkScalar
device_pixel_ratio
)
{
SkRect
cullRect
;
if
(
!
cullRect
.
intersect
(
sk_rrect
.
rect
(),
cull_rects_
.
top
()))
{
cullRect
=
SkRect
::
MakeEmpty
();
}
auto
layer
=
std
::
make_unique
<
flow
::
PhysicalModelLayer
>
();
layer
->
set_shape
(
std
::
make_unique
<
PhysicalLayerRRect
>
(
sk_rrect
));
layer
->
set_elevation
(
elevation
);
layer
->
set_color
(
color
);
layer
->
set_device_pixel_ratio
(
device_pixel_ratio
);
PushLayer
(
std
::
move
(
layer
),
cullRect
);
}
void
DefaultLayerBuilder
::
PushPhysicalModel
(
const
SkPath
&
sk_path
,
void
DefaultLayerBuilder
::
PushPhysicalShape
(
const
SkPath
&
sk_path
,
double
elevation
,
SkColor
color
,
SkScalar
device_pixel_ratio
)
{
...
...
@@ -130,8 +114,8 @@ void DefaultLayerBuilder::PushPhysicalModel(const SkPath& sk_path,
if
(
!
cullRect
.
intersect
(
sk_path
.
getBounds
(),
cull_rects_
.
top
()))
{
cullRect
=
SkRect
::
MakeEmpty
();
}
auto
layer
=
std
::
make_unique
<
flow
::
Physical
Model
Layer
>
();
layer
->
set_
shape
(
std
::
make_unique
<
PhysicalLayerPath
>
(
sk_path
)
);
auto
layer
=
std
::
make_unique
<
flow
::
Physical
Shape
Layer
>
();
layer
->
set_
path
(
sk_path
);
layer
->
set_elevation
(
elevation
);
layer
->
set_color
(
color
);
layer
->
set_device_pixel_ratio
(
device_pixel_ratio
);
...
...
flow/layers/default_layer_builder.h
浏览文件 @
d8740c70
...
...
@@ -47,13 +47,7 @@ class DefaultLayerBuilder final : public LayerBuilder {
SkBlendMode
blend_mode
)
override
;
// |flow::LayerBuilder|
void
PushPhysicalModel
(
const
SkRRect
&
rect
,
double
elevation
,
SkColor
color
,
SkScalar
device_pixel_ratio
)
override
;
// |flow::LayerBuilder|
void
PushPhysicalModel
(
const
SkPath
&
path
,
void
PushPhysicalShape
(
const
SkPath
&
path
,
double
elevation
,
SkColor
color
,
SkScalar
device_pixel_ratio
)
override
;
...
...
flow/layers/layer_builder.h
浏览文件 @
d8740c70
...
...
@@ -47,12 +47,7 @@ class LayerBuilder {
const
SkRect
&
rect
,
SkBlendMode
blend_mode
)
=
0
;
virtual
void
PushPhysicalModel
(
const
SkRRect
&
rect
,
double
elevation
,
SkColor
color
,
SkScalar
device_pixel_ratio
)
=
0
;
virtual
void
PushPhysicalModel
(
const
SkPath
&
path
,
virtual
void
PushPhysicalShape
(
const
SkPath
&
path
,
double
elevation
,
SkColor
color
,
SkScalar
device_pixel_ratio
)
=
0
;
...
...
flow/layers/physical_model_layer.h
已删除
100644 → 0
浏览文件 @
9b98d194
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef FLUTTER_FLOW_LAYERS_PHYSICAL_MODEL_LAYER_H_
#define FLUTTER_FLOW_LAYERS_PHYSICAL_MODEL_LAYER_H_
#include "flutter/flow/layers/container_layer.h"
namespace
flow
{
class
PhysicalLayerShape
;
class
PhysicalModelLayer
:
public
ContainerLayer
{
public:
PhysicalModelLayer
();
~
PhysicalModelLayer
()
override
;
void
set_shape
(
std
::
unique_ptr
<
PhysicalLayerShape
>
shape
)
{
shape_
=
std
::
move
(
shape
);
}
void
set_elevation
(
float
elevation
)
{
elevation_
=
elevation
;
}
void
set_color
(
SkColor
color
)
{
color_
=
color
;
}
void
set_device_pixel_ratio
(
SkScalar
dpr
)
{
device_pixel_ratio_
=
dpr
;
}
static
void
DrawShadow
(
SkCanvas
*
canvas
,
const
SkPath
&
path
,
SkColor
color
,
float
elevation
,
bool
transparentOccluder
,
SkScalar
dpr
);
void
Preroll
(
PrerollContext
*
context
,
const
SkMatrix
&
matrix
)
override
;
void
Paint
(
PaintContext
&
context
)
const
override
;
#if defined(OS_FUCHSIA)
void
UpdateScene
(
SceneUpdateContext
&
context
)
override
;
#endif // defined(OS_FUCHSIA)
private:
std
::
unique_ptr
<
PhysicalLayerShape
>
shape_
;
float
elevation_
;
SkColor
color_
;
SkScalar
device_pixel_ratio_
;
};
// Common interface for the shape operations needed by PhysicalModelLayer.
//
// Once Scenic supports specifying physical layers with paths we can get rid
// of this class and the subclasses, and have a single implementation of
// PhysicalModelLayer that holds an SkPath.
// TODO(amirh): remove this once Scenic supports arbitrary shaped layers.
class
PhysicalLayerShape
{
public:
virtual
~
PhysicalLayerShape
()
=
default
;
virtual
const
SkRect
&
getBounds
()
const
=
0
;
virtual
SkPath
getPath
()
const
=
0
;
virtual
void
clipCanvas
(
SkCanvas
&
canvas
)
const
=
0
;
virtual
bool
isRect
()
const
=
0
;
#if defined(OS_FUCHSIA)
virtual
const
SkRRect
&
getFrameRRect
()
const
=
0
;
#endif // defined(OS_FUCHSIA)
};
class
PhysicalLayerRRect
final
:
public
PhysicalLayerShape
{
public:
PhysicalLayerRRect
(
const
SkRRect
&
rrect
)
{
rrect_
=
rrect
;
}
// |flow::PhysicalLayerShape|
const
SkRect
&
getBounds
()
const
override
{
return
rrect_
.
getBounds
();
}
// |flow::PhysicalLayerShape|
SkPath
getPath
()
const
override
;
// |flow::PhysicalLayerShape|
void
clipCanvas
(
SkCanvas
&
canvas
)
const
override
{
canvas
.
clipRRect
(
rrect_
,
true
);
}
// |flow::PhysicalLayerShape|
bool
isRect
()
const
override
{
return
rrect_
.
isRect
();
}
#if defined(OS_FUCHSIA)
// |flow::PhysicalLayerShape|
const
SkRRect
&
getFrameRRect
()
const
override
{
return
rrect_
;
}
#endif // defined(OS_FUCHSIA)
private:
SkRRect
rrect_
;
};
class
PhysicalLayerPath
final
:
public
PhysicalLayerShape
{
public:
PhysicalLayerPath
(
const
SkPath
&
path
)
{
path_
=
path
;
#if defined(OS_FUCHSIA)
frameRRect_
=
SkRRect
::
MakeRect
(
path
.
getBounds
());
#endif // defined(OS_FUCHSIA)
}
// |flow::PhysicalLayerShape|
const
SkRect
&
getBounds
()
const
override
{
return
path_
.
getBounds
();
}
// |flow::PhysicalLayerShape|
SkPath
getPath
()
const
override
{
return
path_
;
}
// |flow::PhysicalLayerShape|
void
clipCanvas
(
SkCanvas
&
canvas
)
const
override
{
canvas
.
clipPath
(
path_
,
true
);
}
// |flow::PhysicalLayerShape|
bool
isRect
()
const
override
{
return
false
;
}
#if defined(OS_FUCHSIA)
// Scenic does not currently support compositing arbitrary shaped layers,
// so we just use the path's bounding rectangle.
// |flow::PhysicalLayerShape|
const
SkRRect
&
getFrameRRect
()
const
override
{
return
frameRRect_
;
}
#endif // defined(OS_FUCHSIA)
private:
SkPath
path_
;
#if defined(OS_FUCHSIA)
SkRRect
frameRRect_
;
#endif // defined(OS_FUCHSIA)
};
}
// namespace flow
#endif // FLUTTER_FLOW_LAYERS_PHYSICAL_MODEL_LAYER_H_
flow/layers/physical_
model
_layer.cc
→
flow/layers/physical_
shape
_layer.cc
浏览文件 @
d8740c70
...
...
@@ -2,24 +2,24 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "flutter/flow/layers/physical_
model
_layer.h"
#include "flutter/flow/layers/physical_
shape
_layer.h"
#include "flutter/flow/paint_utils.h"
#include "third_party/skia/include/utils/SkShadowUtils.h"
namespace
flow
{
Physical
ModelLayer
::
PhysicalModelLayer
()
=
default
;
Physical
ShapeLayer
::
PhysicalShapeLayer
()
:
isRect_
(
false
)
{}
Physical
ModelLayer
::~
PhysicalModel
Layer
()
=
default
;
Physical
ShapeLayer
::~
PhysicalShape
Layer
()
=
default
;
void
Physical
Model
Layer
::
Preroll
(
PrerollContext
*
context
,
void
Physical
Shape
Layer
::
Preroll
(
PrerollContext
*
context
,
const
SkMatrix
&
matrix
)
{
SkRect
child_paint_bounds
;
PrerollChildren
(
context
,
matrix
,
&
child_paint_bounds
);
if
(
elevation_
==
0
)
{
set_paint_bounds
(
shape_
->
getBounds
());
set_paint_bounds
(
path_
.
getBounds
());
}
else
{
#if defined(OS_FUCHSIA)
// Let the system compositor draw all shadows for us.
...
...
@@ -29,7 +29,7 @@ void PhysicalModelLayer::Preroll(PrerollContext* context,
// The margin is hardcoded to an arbitrary maximum for now because Skia
// doesn't provide a way to calculate it. We fill this whole region
// and clip children to it so we don't need to join the child paint bounds.
SkRect
bounds
(
shape_
->
getBounds
());
SkRect
bounds
(
path_
.
getBounds
());
bounds
.
outset
(
20.0
,
20.0
);
set_paint_bounds
(
bounds
);
#endif // defined(OS_FUCHSIA)
...
...
@@ -38,11 +38,10 @@ void PhysicalModelLayer::Preroll(PrerollContext* context,
#if defined(OS_FUCHSIA)
void
Physical
Model
Layer
::
UpdateScene
(
SceneUpdateContext
&
context
)
{
void
Physical
Shape
Layer
::
UpdateScene
(
SceneUpdateContext
&
context
)
{
FXL_DCHECK
(
needs_system_composite
());
SceneUpdateContext
::
Frame
frame
(
context
,
shape_
->
getFrameRRect
(),
color_
,
elevation_
);
SceneUpdateContext
::
Frame
frame
(
context
,
frameRRect_
,
color_
,
elevation_
);
for
(
auto
&
layer
:
layers
())
{
if
(
layer
->
needs_painting
())
{
frame
.
AddPaintedLayer
(
layer
.
get
());
...
...
@@ -54,34 +53,32 @@ void PhysicalModelLayer::UpdateScene(SceneUpdateContext& context) {
#endif // defined(OS_FUCHSIA)
void
Physical
Model
Layer
::
Paint
(
PaintContext
&
context
)
const
{
TRACE_EVENT0
(
"flutter"
,
"Physical
Model
Layer::Paint"
);
void
Physical
Shape
Layer
::
Paint
(
PaintContext
&
context
)
const
{
TRACE_EVENT0
(
"flutter"
,
"Physical
Shape
Layer::Paint"
);
FXL_DCHECK
(
needs_painting
());
SkPath
path
=
shape_
->
getPath
();
if
(
elevation_
!=
0
)
{
DrawShadow
(
&
context
.
canvas
,
path
,
SK_ColorBLACK
,
elevation_
,
DrawShadow
(
&
context
.
canvas
,
path
_
,
SK_ColorBLACK
,
elevation_
,
SkColorGetA
(
color_
)
!=
0xff
,
device_pixel_ratio_
);
}
SkPaint
paint
;
paint
.
setColor
(
color_
);
context
.
canvas
.
drawPath
(
path
,
paint
);
context
.
canvas
.
drawPath
(
path
_
,
paint
);
SkAutoCanvasRestore
save
(
&
context
.
canvas
,
false
);
if
(
shape_
->
isRect
()
)
{
if
(
isRect_
)
{
context
.
canvas
.
save
();
}
else
{
context
.
canvas
.
saveLayer
(
&
shape_
->
getBounds
(),
nullptr
);
context
.
canvas
.
saveLayer
(
path_
.
getBounds
(),
nullptr
);
}
shape_
->
clipCanvas
(
context
.
canvas
);
context
.
canvas
.
clipPath
(
path_
,
true
);
PaintChildren
(
context
);
if
(
context
.
checkerboard_offscreen_layers
&&
!
shape_
->
isRect
()
)
DrawCheckerboard
(
&
context
.
canvas
,
shape_
->
getBounds
());
if
(
context
.
checkerboard_offscreen_layers
&&
!
isRect_
)
DrawCheckerboard
(
&
context
.
canvas
,
path_
.
getBounds
());
}
void
Physical
Model
Layer
::
DrawShadow
(
SkCanvas
*
canvas
,
void
Physical
Shape
Layer
::
DrawShadow
(
SkCanvas
*
canvas
,
const
SkPath
&
path
,
SkColor
color
,
float
elevation
,
...
...
@@ -98,10 +95,4 @@ void PhysicalModelLayer::DrawShadow(SkCanvas* canvas,
dpr
*
800.0
f
,
0.039
f
,
0.25
f
,
color
,
flags
);
}
SkPath
PhysicalLayerRRect
::
getPath
()
const
{
SkPath
path
;
path
.
addRRect
(
rrect_
);
return
path
;
}
}
// namespace flow
flow/layers/physical_shape_layer.h
0 → 100644
浏览文件 @
d8740c70
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef FLUTTER_FLOW_LAYERS_PHYSICAL_SHAPE_LAYER_H_
#define FLUTTER_FLOW_LAYERS_PHYSICAL_SHAPE_LAYER_H_
#include "flutter/flow/layers/container_layer.h"
namespace
flow
{
class
PhysicalShapeLayer
:
public
ContainerLayer
{
public:
PhysicalShapeLayer
();
~
PhysicalShapeLayer
()
override
;
void
set_path
(
const
SkPath
&
path
)
{
path_
=
path
;
if
(
path
.
isRRect
(
&
frameRRect_
))
{
isRect_
=
frameRRect_
.
isRect
();
}
else
{
isRect_
=
false
;
}
}
void
set_elevation
(
float
elevation
)
{
elevation_
=
elevation
;
}
void
set_color
(
SkColor
color
)
{
color_
=
color
;
}
void
set_device_pixel_ratio
(
SkScalar
dpr
)
{
device_pixel_ratio_
=
dpr
;
}
static
void
DrawShadow
(
SkCanvas
*
canvas
,
const
SkPath
&
path
,
SkColor
color
,
float
elevation
,
bool
transparentOccluder
,
SkScalar
dpr
);
void
Preroll
(
PrerollContext
*
context
,
const
SkMatrix
&
matrix
)
override
;
void
Paint
(
PaintContext
&
context
)
const
override
;
#if defined(OS_FUCHSIA)
void
UpdateScene
(
SceneUpdateContext
&
context
)
override
;
#endif // defined(OS_FUCHSIA)
private:
float
elevation_
;
SkColor
color_
;
SkScalar
device_pixel_ratio_
;
SkPath
path_
;
bool
isRect_
;
SkRRect
frameRRect_
;
};
}
// namespace flow
#endif // FLUTTER_FLOW_LAYERS_PHYSICAL_SHAPE_LAYER_H_
lib/ui/compositing.dart
浏览文件 @
d8740c70
...
...
@@ -127,20 +127,7 @@ class SceneBuilder extends NativeFieldWrapperClass2 {
double
maskRectBottom
,
int
blendMode
)
native
"SceneBuilder_pushShaderMask"
;
/// Pushes a physical model operation for a rounded rectangle onto the
/// operation stack.
///
/// Rasterization will be clipped to the given shape.
///
/// See [pop] for details about the operation stack.
void
pushPhysicalModel
({
RRect
rrect
,
double
elevation
,
Color
color
})
{
_pushPhysicalModel
(
rrect
.
_value
,
elevation
,
color
.
value
);
}
void
_pushPhysicalModel
(
Float32List
rrect
,
double
elevation
,
int
color
)
native
"SceneBuilder_pushPhysicalModel"
;
/// Pushes a physical model operation for an arbitrary shape onto the
/// Pushes a physical layer operation for an arbitrary shape onto the
/// operation stack.
///
/// Rasterization will be clipped to the given shape.
...
...
lib/ui/compositing/scene_builder.cc
浏览文件 @
d8740c70
...
...
@@ -32,7 +32,6 @@ IMPLEMENT_WRAPPERTYPEINFO(ui, SceneBuilder);
V(SceneBuilder, pushColorFilter) \
V(SceneBuilder, pushBackdropFilter) \
V(SceneBuilder, pushShaderMask) \
V(SceneBuilder, pushPhysicalModel) \
V(SceneBuilder, pushPhysicalShape) \
V(SceneBuilder, pop) \
V(SceneBuilder, addPicture) \
...
...
@@ -101,20 +100,10 @@ void SceneBuilder::pushShaderMask(Shader* shader,
static_cast
<
SkBlendMode
>
(
blendMode
));
}
void
SceneBuilder
::
pushPhysicalModel
(
const
RRect
&
rrect
,
double
elevation
,
int
color
)
{
layer_builder_
->
PushPhysicalModel
(
rrect
.
sk_rrect
,
//
elevation
,
//
static_cast
<
SkColor
>
(
color
),
//
UIDartState
::
Current
()
->
window
()
->
viewport_metrics
().
device_pixel_ratio
);
}
void
SceneBuilder
::
pushPhysicalShape
(
const
CanvasPath
*
path
,
double
elevation
,
int
color
)
{
layer_builder_
->
PushPhysical
Model
(
layer_builder_
->
PushPhysical
Shape
(
path
->
path
(),
//
elevation
,
//
static_cast
<
SkColor
>
(
color
),
//
...
...
lib/ui/compositing/scene_builder.h
浏览文件 @
d8740c70
...
...
@@ -47,7 +47,6 @@ class SceneBuilder : public fxl::RefCountedThreadSafe<SceneBuilder>,
double
maskRectTop
,
double
maskRectBottom
,
int
blendMode
);
void
pushPhysicalModel
(
const
RRect
&
rrect
,
double
elevation
,
int
color
);
void
pushPhysicalShape
(
const
CanvasPath
*
path
,
double
elevation
,
int
color
);
void
pop
();
...
...
lib/ui/painting/canvas.cc
浏览文件 @
d8740c70
...
...
@@ -6,7 +6,7 @@
#include <math.h>
#include "flutter/flow/layers/physical_
model
_layer.h"
#include "flutter/flow/layers/physical_
shape
_layer.h"
#include "flutter/lib/ui/painting/image.h"
#include "flutter/lib/ui/painting/matrix.h"
#include "flutter/lib/ui/ui_dart_state.h"
...
...
@@ -416,7 +416,7 @@ void Canvas::drawShadow(const CanvasPath* path,
ToDart
(
"Canvas.drawShader called with non-genuine Path."
));
SkScalar
dpr
=
UIDartState
::
Current
()
->
window
()
->
viewport_metrics
().
device_pixel_ratio
;
flow
::
Physical
Model
Layer
::
DrawShadow
(
canvas_
,
path
->
path
(),
color
,
elevation
,
flow
::
Physical
Shape
Layer
::
DrawShadow
(
canvas_
,
path
->
path
(),
color
,
elevation
,
transparentOccluder
,
dpr
);
}
...
...
travis/licenses_golden/licenses_flutter
浏览文件 @
d8740c70
...
...
@@ -1072,8 +1072,8 @@ FILE: ../../../flutter/content_handler/vulkan_surface_producer.h
FILE: ../../../flutter/flow/debug_print.cc
FILE: ../../../flutter/flow/debug_print.h
FILE: ../../../flutter/flow/export_node.h
FILE: ../../../flutter/flow/layers/physical_
model
_layer.cc
FILE: ../../../flutter/flow/layers/physical_
model
_layer.h
FILE: ../../../flutter/flow/layers/physical_
shape
_layer.cc
FILE: ../../../flutter/flow/layers/physical_
shape
_layer.h
FILE: ../../../flutter/flow/layers/texture_layer.cc
FILE: ../../../flutter/flow/layers/texture_layer.h
FILE: ../../../flutter/flow/matrix_decomposition.cc
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录