vislite 1.6.0-alpha.1 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/CHANGELOG +1 -1
  2. package/README.md +284 -284
  3. package/lib/BarLayout/index.es.js +1 -1
  4. package/lib/BarLayout/index.es.min.js +1 -1
  5. package/lib/Buffer/index.es.js +1 -1
  6. package/lib/Buffer/index.es.min.js +1 -1
  7. package/lib/Canvas/index.es.js +1 -1
  8. package/lib/Canvas/index.es.min.js +1 -1
  9. package/lib/Cardinal/index.es.js +1 -1
  10. package/lib/Cardinal/index.es.min.js +1 -1
  11. package/lib/Eoap/index.es.js +1 -1
  12. package/lib/Eoap/index.es.min.js +1 -1
  13. package/lib/Hermite/index.es.js +1 -1
  14. package/lib/Hermite/index.es.min.js +1 -1
  15. package/lib/MapCoordinate/index.es.js +1 -1
  16. package/lib/MapCoordinate/index.es.min.js +1 -1
  17. package/lib/Matrix4/index.es.js +1 -1
  18. package/lib/Matrix4/index.es.min.js +1 -1
  19. package/lib/Mercator/index.es.js +1 -1
  20. package/lib/Mercator/index.es.min.js +1 -1
  21. package/lib/PieLayout/index.es.js +1 -1
  22. package/lib/PieLayout/index.es.min.js +1 -1
  23. package/lib/RawCanvas/index.es.js +1 -1
  24. package/lib/RawCanvas/index.es.min.js +1 -1
  25. package/lib/SVG/index.es.js +1 -1
  26. package/lib/SVG/index.es.min.js +1 -1
  27. package/lib/Shader/index.es.js +1 -1
  28. package/lib/Shader/index.es.min.js +1 -1
  29. package/lib/Texture/index.es.js +1 -1
  30. package/lib/Texture/index.es.min.js +1 -1
  31. package/lib/TreeLayout/index.es.js +2 -1
  32. package/lib/TreeLayout/index.es.min.js +3 -3
  33. package/lib/animation/index.es.js +1 -1
  34. package/lib/animation/index.es.min.js +1 -1
  35. package/lib/assemble/index.es.js +1 -1
  36. package/lib/assemble/index.es.min.js +1 -1
  37. package/lib/getLoopColors/index.es.js +1 -1
  38. package/lib/getLoopColors/index.es.min.js +1 -1
  39. package/lib/getWebGLContext/index.es.js +1 -1
  40. package/lib/getWebGLContext/index.es.min.js +1 -1
  41. package/lib/index.umd.js +2 -1
  42. package/lib/index.umd.min.js +2 -2
  43. package/lib/initOption/index.es.js +1 -1
  44. package/lib/initOption/index.es.min.js +1 -1
  45. package/lib/mergeOption/index.es.js +1 -1
  46. package/lib/mergeOption/index.es.min.js +1 -1
  47. package/lib/move/index.es.js +1 -1
  48. package/lib/move/index.es.min.js +1 -1
  49. package/lib/rotate/index.es.js +1 -1
  50. package/lib/rotate/index.es.min.js +1 -1
  51. package/lib/ruler/index.es.js +1 -1
  52. package/lib/ruler/index.es.min.js +1 -1
  53. package/lib/scale/index.es.js +1 -1
  54. package/lib/scale/index.es.min.js +1 -1
  55. package/lib/throttle/index.es.js +1 -1
  56. package/lib/throttle/index.es.min.js +1 -1
  57. package/package.json +1 -1
  58. package/src/SVG.ts +55 -55
  59. package/src/common/tree/toPlainTree.ts +135 -135
  60. package/src/common/webgl/texture.ts +98 -98
@@ -1,136 +1,136 @@
1
- import type TreeConfigType from '../../../types/TreeConfig'
2
-
3
- import toInnerTree from './toInnerTree'
4
-
5
- // 可以传递任意格式的树原始数据
6
- // 只要配置对应的解析方法即可
7
- export default function (initTree: any, config: TreeConfigType, noOpens: {}) {
8
- const treeData = toInnerTree(initTree, config)
9
-
10
- const alltreedata = treeData.value // 维护的树
11
- const rootid = treeData.rid // 根结点ID
12
-
13
- if (treeData.num == 1) {
14
- alltreedata[rootid].left = 0.5
15
- alltreedata[rootid].top = 0.5
16
- alltreedata[rootid].show = true
17
- return {
18
- deep: 1,
19
- node: alltreedata,
20
- root: rootid,
21
- size: 1
22
- }
23
- } else {
24
-
25
- const beforeDis: Array<number> = []
26
- let size = 0, maxDeep = 0
27
-
28
- // @ts-ignore
29
- if (noOpens[rootid]) {
30
- alltreedata[rootid].left = 0.5
31
- alltreedata[rootid].top = 0.5
32
- alltreedata[rootid].show = true
33
-
34
- size = 1
35
- } else {
36
- ; (function positionCalc(pNode, deep) {
37
-
38
- if (deep > maxDeep) maxDeep = deep
39
-
40
- let flag: number = 0
41
- // @ts-ignore
42
- if (!noOpens[pNode.id]) {
43
-
44
- for (flag = 0; flag < pNode.children.length; flag++)
45
-
46
- // 因为全部的子结点的位置确定了,父结点的y位置就是子结点的中间位置
47
- // 因此有子结点的,先计算子结点
48
- positionCalc(alltreedata[pNode.children[flag]], deep + 1)
49
-
50
- }
51
-
52
- // left的位置比较简单,deep从0开始编号
53
- // 比如deep=0,第一层,left=0+0.5=0.5,也就是根结点
54
- alltreedata[pNode.id].left = deep + 0.5
55
- if (flag == 0) {
56
-
57
- // beforeDis是一个数组,用以记录每一层此刻top下边缘(每一层是从上到下)
58
- // 比如一层的第一个,top值最小可以取top=0.5
59
- // 为了方便计算,beforeDis[deep] == undefined的时候表示现在准备计算的是这层的第一个结点
60
- // 因此设置最低上边缘为-0.5
61
- if (beforeDis[deep] == void 0) beforeDis[deep] = -0.5
62
- // 父边缘同意的进行初始化
63
- if (beforeDis[deep - 1] == void 0) beforeDis[deep - 1] = -0.5
64
-
65
- // 添加的新结点top值第一种求法:本层上边缘+1(比如上边缘是-0.5,那么top最小是top=-0.5+1=0.5)
66
- alltreedata[pNode.id].top = beforeDis[deep] + 1
67
-
68
- const pTop = beforeDis[deep] + 1 + (alltreedata[pNode.pid].children.length - 1) * 0.5
69
- // 计算的原则是:如果第一种可行,选择第一种,否则必须选择第二种
70
- // 判断第一种是否可行的方法就是:如果第一种计算后确定的孩子上边缘不对导致孩子和孩子的前兄弟重合就是可行的
71
- if (pTop - 1 < beforeDis[deep - 1])
72
- // 必须保证父亲结点和父亲的前一个兄弟保存1的距离,至少
73
- // 添加的新结点top值的第二种求法:根据孩子取孩子结点的中心top
74
- alltreedata[pNode.id].top = beforeDis[deep - 1] + 1 - (alltreedata[pNode.pid].children.length - 1) * 0.5
75
-
76
- } else {
77
-
78
- // 此刻flag!=0
79
- // 意味着结点有孩子,那么问题就解决了,直接取孩子的中间即可
80
- // 其实,flag==0的分支计算的就是孩子,是没有孩子的叶结点,那是关键
81
- alltreedata[pNode.id].top = (alltreedata[pNode.children[0]].top + alltreedata[pNode.children[flag - 1]].top) * 0.5
82
- }
83
-
84
- // 因为计算孩子的时候
85
- // 无法掌握父辈兄弟的情况
86
- // 可能会出现父亲和兄弟重叠问题
87
- if (alltreedata[pNode.id].top <= beforeDis[deep]) {
88
- const needUp = beforeDis[deep] + 1 - alltreedata[pNode.id].top
89
- (function doUp(_pid: number | string, _deep: number) {
90
- alltreedata[_pid].top += needUp;
91
- if (beforeDis[_deep] < alltreedata[_pid].top) beforeDis[_deep] = alltreedata[_pid].top
92
-
93
- for (let _flag = 0; _flag < alltreedata[_pid].children.length; _flag++) {
94
- doUp(alltreedata[_pid].children[_flag], _deep + 1)
95
- }
96
- })(pNode.id, deep)
97
- }
98
-
99
- // 计算好一个结点后,需要更新此刻该层的上边缘
100
- beforeDis[deep] = alltreedata[pNode.id].top
101
-
102
- // size在每次计算一个结点后更新,是为了最终绘图的时候知道树有多宽(此处应该叫高)
103
- if (alltreedata[pNode.id].top + 0.5 > size) size = alltreedata[pNode.id].top + 0.5
104
-
105
- })(alltreedata[rootid], 0)
106
-
107
- }
108
- // 对于不显示的,需要标记一下
109
- for (const key in noOpens) {
110
- // @ts-ignore
111
- if (noOpens[key]) {
112
- alltreedata[key].isOpen = false
113
- ; (function updateHidden(pid, left, top) {
114
- for (let index = 0; index < alltreedata[pid].children.length; index++) {
115
- alltreedata[alltreedata[pid].children[index]].left = left
116
- alltreedata[alltreedata[pid].children[index]].top = top
117
- alltreedata[alltreedata[pid].children[index]].show = false
118
-
119
- updateHidden(alltreedata[pid].children[index], left, top)
120
- }
121
- })(key, alltreedata[key].left, alltreedata[key].top)
122
- }
123
- }
124
-
125
- // 传递的参数分别表示:记录了位置信息的树结点集合、根结点ID和树的宽
126
- return {
127
- "node": alltreedata,
128
- "root": rootid,
129
- "size": size,
130
- "deep": maxDeep + 1
131
- }
132
-
133
- }
134
-
135
-
1
+ import type TreeConfigType from '../../../types/TreeConfig'
2
+
3
+ import toInnerTree from './toInnerTree'
4
+
5
+ // 可以传递任意格式的树原始数据
6
+ // 只要配置对应的解析方法即可
7
+ export default function (initTree: any, config: TreeConfigType, noOpens: any = {}) {
8
+ const treeData = toInnerTree(initTree, config)
9
+
10
+ const alltreedata = treeData.value // 维护的树
11
+ const rootid = treeData.rid // 根结点ID
12
+
13
+ if (treeData.num == 1) {
14
+ alltreedata[rootid].left = 0.5
15
+ alltreedata[rootid].top = 0.5
16
+ alltreedata[rootid].show = true
17
+ return {
18
+ deep: 1,
19
+ node: alltreedata,
20
+ root: rootid,
21
+ size: 1
22
+ }
23
+ } else {
24
+
25
+ const beforeDis: Array<number> = []
26
+ let size = 0, maxDeep = 0
27
+
28
+ // @typescript-eslint/ban-ts-comment
29
+ if (noOpens[rootid]) {
30
+ alltreedata[rootid].left = 0.5
31
+ alltreedata[rootid].top = 0.5
32
+ alltreedata[rootid].show = true
33
+
34
+ size = 1
35
+ } else {
36
+ ; (function positionCalc(pNode, deep) {
37
+
38
+ if (deep > maxDeep) maxDeep = deep
39
+
40
+ let flag: number = 0
41
+ // @typescript-eslint/ban-ts-comment
42
+ if (!noOpens[pNode.id]) {
43
+
44
+ for (flag = 0; flag < pNode.children.length; flag++)
45
+
46
+ // 因为全部的子结点的位置确定了,父结点的y位置就是子结点的中间位置
47
+ // 因此有子结点的,先计算子结点
48
+ positionCalc(alltreedata[pNode.children[flag]], deep + 1)
49
+
50
+ }
51
+
52
+ // left的位置比较简单,deep从0开始编号
53
+ // 比如deep=0,第一层,left=0+0.5=0.5,也就是根结点
54
+ alltreedata[pNode.id].left = deep + 0.5
55
+ if (flag == 0) {
56
+
57
+ // beforeDis是一个数组,用以记录每一层此刻top下边缘(每一层是从上到下)
58
+ // 比如一层的第一个,top值最小可以取top=0.5
59
+ // 为了方便计算,beforeDis[deep] == undefined的时候表示现在准备计算的是这层的第一个结点
60
+ // 因此设置最低上边缘为-0.5
61
+ if (beforeDis[deep] == void 0) beforeDis[deep] = -0.5
62
+ // 父边缘同意的进行初始化
63
+ if (beforeDis[deep - 1] == void 0) beforeDis[deep - 1] = -0.5
64
+
65
+ // 添加的新结点top值第一种求法:本层上边缘+1(比如上边缘是-0.5,那么top最小是top=-0.5+1=0.5)
66
+ alltreedata[pNode.id].top = beforeDis[deep] + 1
67
+
68
+ const pTop = beforeDis[deep] + 1 + (alltreedata[pNode.pid].children.length - 1) * 0.5
69
+ // 计算的原则是:如果第一种可行,选择第一种,否则必须选择第二种
70
+ // 判断第一种是否可行的方法就是:如果第一种计算后确定的孩子上边缘不对导致孩子和孩子的前兄弟重合就是可行的
71
+ if (pTop - 1 < beforeDis[deep - 1])
72
+ // 必须保证父亲结点和父亲的前一个兄弟保存1的距离,至少
73
+ // 添加的新结点top值的第二种求法:根据孩子取孩子结点的中心top
74
+ alltreedata[pNode.id].top = beforeDis[deep - 1] + 1 - (alltreedata[pNode.pid].children.length - 1) * 0.5
75
+
76
+ } else {
77
+
78
+ // 此刻flag!=0
79
+ // 意味着结点有孩子,那么问题就解决了,直接取孩子的中间即可
80
+ // 其实,flag==0的分支计算的就是孩子,是没有孩子的叶结点,那是关键
81
+ alltreedata[pNode.id].top = (alltreedata[pNode.children[0]].top + alltreedata[pNode.children[flag - 1]].top) * 0.5
82
+ }
83
+
84
+ // 因为计算孩子的时候
85
+ // 无法掌握父辈兄弟的情况
86
+ // 可能会出现父亲和兄弟重叠问题
87
+ if (alltreedata[pNode.id].top <= beforeDis[deep]) {
88
+ const needUp = beforeDis[deep] + 1 - alltreedata[pNode.id].top
89
+ (function doUp(_pid: number | string, _deep: number) {
90
+ alltreedata[_pid].top += needUp;
91
+ if (beforeDis[_deep] < alltreedata[_pid].top) beforeDis[_deep] = alltreedata[_pid].top
92
+
93
+ for (let _flag = 0; _flag < alltreedata[_pid].children.length; _flag++) {
94
+ doUp(alltreedata[_pid].children[_flag], _deep + 1)
95
+ }
96
+ })(pNode.id, deep)
97
+ }
98
+
99
+ // 计算好一个结点后,需要更新此刻该层的上边缘
100
+ beforeDis[deep] = alltreedata[pNode.id].top
101
+
102
+ // size在每次计算一个结点后更新,是为了最终绘图的时候知道树有多宽(此处应该叫高)
103
+ if (alltreedata[pNode.id].top + 0.5 > size) size = alltreedata[pNode.id].top + 0.5
104
+
105
+ })(alltreedata[rootid], 0)
106
+
107
+ }
108
+ // 对于不显示的,需要标记一下
109
+ for (const key in noOpens) {
110
+ // @typescript-eslint/ban-ts-comment
111
+ if (noOpens[key]) {
112
+ alltreedata[key].isOpen = false
113
+ ; (function updateHidden(pid, left, top) {
114
+ for (let index = 0; index < alltreedata[pid].children.length; index++) {
115
+ alltreedata[alltreedata[pid].children[index]].left = left
116
+ alltreedata[alltreedata[pid].children[index]].top = top
117
+ alltreedata[alltreedata[pid].children[index]].show = false
118
+
119
+ updateHidden(alltreedata[pid].children[index], left, top)
120
+ }
121
+ })(key, alltreedata[key].left, alltreedata[key].top)
122
+ }
123
+ }
124
+
125
+ // 传递的参数分别表示:记录了位置信息的树结点集合、根结点ID和树的宽
126
+ return {
127
+ "node": alltreedata,
128
+ "root": rootid,
129
+ "size": size,
130
+ "deep": maxDeep + 1
131
+ }
132
+
133
+ }
134
+
135
+
136
136
  }
@@ -1,99 +1,99 @@
1
- // 初始化一个纹理对象
2
- // type = gl.TEXTURE_2D 二维纹理
3
- // type = gl.TEXTURE_CUBE_MAP 立方体纹理
4
- // unit表示开启的纹理单元编号
5
- const initTexture = (painter: WebGLRenderingContext, type: number, unit: number) => {
6
-
7
- // 创建纹理对象
8
- const texture = painter.createTexture()
9
-
10
- // 开启纹理单元,unit表示开启的编号
11
- // @ts-ignore
12
- painter.activeTexture(painter['TEXTURE' + unit])
13
-
14
- // 绑定纹理对象到目标上
15
- painter.bindTexture(type, texture)
16
-
17
- return texture
18
- }
19
-
20
- // 链接资源图片
21
- // level默认传入0即可,和金字塔纹理有关
22
- // format表示图像的内部格式:
23
- // gl.RGB(红绿蓝)
24
- // gl.RGBA(红绿蓝透明度)
25
- // gl.ALPHA(0.0,0.0,0.0,透明度)
26
- // gl.LUMINANCE(L、L、L、1L:流明)
27
- // gl.LUMINANCE_ALPHA(L、L、L,透明度)
28
- // textureType表示纹理数据的格式:
29
- // gl.UNSIGNED_BYTE: 表示无符号整形,每一个颜色分量占据1字节
30
- // gl.UNSIGNED_SHORT_5_6_5: 表示RGB,每一个分量分别占据占据5, 6, 5比特
31
- // gl.UNSIGNED_SHORT_4_4_4_4: 表示RGBA,每一个分量分别占据占据4, 4, 4, 4比特
32
- // gl.UNSIGNED_SHORT_5_5_5_1: 表示RGBA,每一个分量分别占据占据5比特,A分量占据1比特
33
- const linkImage = (painter: WebGLRenderingContext, type: number, level: number, format: number, textureType: number, image: TexImageSource) => {
34
- painter.texImage2D(type, level, format, format, textureType, image)
35
- }
36
-
37
- const linkCube = (painter: WebGLRenderingContext, type: number, level: number, format: number, textureType: number, images: TexImageSource[], width: number, height: number, texture: WebGLTexture) => {
38
-
39
- const types = [
40
- painter.TEXTURE_CUBE_MAP_POSITIVE_X, // 右
41
- painter.TEXTURE_CUBE_MAP_NEGATIVE_X, // 左
42
- painter.TEXTURE_CUBE_MAP_POSITIVE_Y, // 上
43
- painter.TEXTURE_CUBE_MAP_NEGATIVE_Y, // 下
44
- painter.TEXTURE_CUBE_MAP_POSITIVE_Z, // 后
45
- painter.TEXTURE_CUBE_MAP_NEGATIVE_Z // 前
46
- ]
47
- let target: number
48
-
49
- for (let i = 0; i < types.length; i++) {
50
- if (images[i]) {
51
- target = types[i]
52
- painter.texImage2D(target, level, format, width, height, 0, format, textureType, null)
53
- painter.bindTexture(type, texture)
54
- painter.texImage2D(target, level, format, format, textureType, images[i])
55
- }
56
- }
57
-
58
- painter.generateMipmap(type)
59
- }
60
-
61
- class TextureObject {
62
-
63
- private __painter: WebGLRenderingContext
64
- private __type: number
65
-
66
- private __texture: WebGLTexture
67
-
68
- constructor(painter: WebGLRenderingContext, type: string, unit = 0) {
69
- this.__painter = painter
70
- this.__type = {
71
- "2d": painter.TEXTURE_2D,
72
- "cube": painter.TEXTURE_CUBE_MAP
73
- }[type] as number
74
-
75
- // 创建纹理
76
- this.__texture = initTexture(painter, this.__type, unit) as WebGLTexture
77
-
78
- // 配置纹理
79
- painter.texParameteri(this.__type, painter.TEXTURE_MIN_FILTER, painter.NEAREST)
80
- painter.texParameteri(this.__type, painter.TEXTURE_MAG_FILTER, painter.NEAREST)
81
- painter.texParameteri(this.__type, painter.TEXTURE_WRAP_S, painter.CLAMP_TO_EDGE)
82
- painter.texParameteri(this.__type, painter.TEXTURE_WRAP_T, painter.CLAMP_TO_EDGE)
83
- }
84
-
85
- // 链接图片资源(单一)
86
- useImage(image: TexImageSource) {
87
- linkImage(this.__painter, this.__type, 0, this.__painter.RGBA, this.__painter.UNSIGNED_BYTE, image)
88
- return this
89
- }
90
-
91
- // 链接图片资源(多张)
92
- useCube(images: TexImageSource[], width: number, height: number) {
93
- linkCube(this.__painter, this.__type, 0, this.__painter.RGBA, this.__painter.UNSIGNED_BYTE, images, width, height, this.__texture)
94
- return this
95
- }
96
-
97
- }
98
-
1
+ // 初始化一个纹理对象
2
+ // type = gl.TEXTURE_2D 二维纹理
3
+ // type = gl.TEXTURE_CUBE_MAP 立方体纹理
4
+ // unit表示开启的纹理单元编号
5
+ const initTexture = (painter: WebGLRenderingContext, type: number, unit: number) => {
6
+
7
+ // 创建纹理对象
8
+ const texture = painter.createTexture()
9
+
10
+ // 开启纹理单元,unit表示开启的编号
11
+ // @typescript-eslint/ban-ts-comment
12
+ painter.activeTexture((painter as any)['TEXTURE' + unit])
13
+
14
+ // 绑定纹理对象到目标上
15
+ painter.bindTexture(type, texture)
16
+
17
+ return texture
18
+ }
19
+
20
+ // 链接资源图片
21
+ // level默认传入0即可,和金字塔纹理有关
22
+ // format表示图像的内部格式:
23
+ // gl.RGB(红绿蓝)
24
+ // gl.RGBA(红绿蓝透明度)
25
+ // gl.ALPHA(0.0,0.0,0.0,透明度)
26
+ // gl.LUMINANCE(L、L、L、1L:流明)
27
+ // gl.LUMINANCE_ALPHA(L、L、L,透明度)
28
+ // textureType表示纹理数据的格式:
29
+ // gl.UNSIGNED_BYTE: 表示无符号整形,每一个颜色分量占据1字节
30
+ // gl.UNSIGNED_SHORT_5_6_5: 表示RGB,每一个分量分别占据占据5, 6, 5比特
31
+ // gl.UNSIGNED_SHORT_4_4_4_4: 表示RGBA,每一个分量分别占据占据4, 4, 4, 4比特
32
+ // gl.UNSIGNED_SHORT_5_5_5_1: 表示RGBA,每一个分量分别占据占据5比特,A分量占据1比特
33
+ const linkImage = (painter: WebGLRenderingContext, type: number, level: number, format: number, textureType: number, image: TexImageSource) => {
34
+ painter.texImage2D(type, level, format, format, textureType, image)
35
+ }
36
+
37
+ const linkCube = (painter: WebGLRenderingContext, type: number, level: number, format: number, textureType: number, images: TexImageSource[], width: number, height: number, texture: WebGLTexture) => {
38
+
39
+ const types = [
40
+ painter.TEXTURE_CUBE_MAP_POSITIVE_X, // 右
41
+ painter.TEXTURE_CUBE_MAP_NEGATIVE_X, // 左
42
+ painter.TEXTURE_CUBE_MAP_POSITIVE_Y, // 上
43
+ painter.TEXTURE_CUBE_MAP_NEGATIVE_Y, // 下
44
+ painter.TEXTURE_CUBE_MAP_POSITIVE_Z, // 后
45
+ painter.TEXTURE_CUBE_MAP_NEGATIVE_Z // 前
46
+ ]
47
+ let target: number
48
+
49
+ for (let i = 0; i < types.length; i++) {
50
+ if (images[i]) {
51
+ target = types[i]
52
+ painter.texImage2D(target, level, format, width, height, 0, format, textureType, null)
53
+ painter.bindTexture(type, texture)
54
+ painter.texImage2D(target, level, format, format, textureType, images[i])
55
+ }
56
+ }
57
+
58
+ painter.generateMipmap(type)
59
+ }
60
+
61
+ class TextureObject {
62
+
63
+ private __painter: WebGLRenderingContext
64
+ private __type: number
65
+
66
+ private __texture: WebGLTexture
67
+
68
+ constructor(painter: WebGLRenderingContext, type: string, unit = 0) {
69
+ this.__painter = painter
70
+ this.__type = {
71
+ "2d": painter.TEXTURE_2D,
72
+ "cube": painter.TEXTURE_CUBE_MAP
73
+ }[type] as number
74
+
75
+ // 创建纹理
76
+ this.__texture = initTexture(painter, this.__type, unit) as WebGLTexture
77
+
78
+ // 配置纹理
79
+ painter.texParameteri(this.__type, painter.TEXTURE_MIN_FILTER, painter.NEAREST)
80
+ painter.texParameteri(this.__type, painter.TEXTURE_MAG_FILTER, painter.NEAREST)
81
+ painter.texParameteri(this.__type, painter.TEXTURE_WRAP_S, painter.CLAMP_TO_EDGE)
82
+ painter.texParameteri(this.__type, painter.TEXTURE_WRAP_T, painter.CLAMP_TO_EDGE)
83
+ }
84
+
85
+ // 链接图片资源(单一)
86
+ useImage(image: TexImageSource) {
87
+ linkImage(this.__painter, this.__type, 0, this.__painter.RGBA, this.__painter.UNSIGNED_BYTE, image)
88
+ return this
89
+ }
90
+
91
+ // 链接图片资源(多张)
92
+ useCube(images: TexImageSource[], width: number, height: number) {
93
+ linkCube(this.__painter, this.__type, 0, this.__painter.RGBA, this.__painter.UNSIGNED_BYTE, images, width, height, this.__texture)
94
+ return this
95
+ }
96
+
97
+ }
98
+
99
99
  export default TextureObject