创建一个画布对象。首次调用创建的是显示在屏幕上的画布,之后调用创建的都是离屏画布。
画布对象
画布对象
画布的宽度
画布的高度
将当前 Canvas 保存为一个临时文件。
获取画布对象的绘图上下文
把画布上的绘制内容以一个 data URI 的格式返回
Canvas.toTempFilePath 的同步版本
属性 | 类型 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
x | number | 0 | 否 | 截取 canvas 的左上角横坐标 |
y | number | 0 | 否 | 截取 canvas 的左上角纵坐标 |
width | number | canvas 的宽度 | 否 | 截取 canvas 的宽度 |
height | number | canvas 的高度 | 否 | 截取 canvas 的高度 |
destWidth | number | canvas 的宽度 | 否 | 目标文件的宽度,会将截取的部分拉伸或压缩至该数值 |
destHeight | number | canvas 的高度 | 否 | 目标文件的高度,会将截取的部分拉伸或压缩至该数值 |
fileType | string | png | 否 | 目标文件的类型 |
quality | number | 1.0 | 否 | jpg图片的质量,仅当 fileType 为 jpg 时有效。取值范围为 0.0(最低)- 1.0(最高),不含 0。不在范围内时当作 1.0 |
object.fileType 的合法值
值 | 说明 |
---|---|
jpg | jpg 文件 |
png | png 文件 |
Canvas.toTempFilePath
canvas.toTempFilePath({
x: 10,
y: 10,
width: 200,
height: 150,
destWidth: 400,
destHeight: 300,
success: (res) => {
qq.shareAppMessage({
imageUrl: res.tempFilePath
})
}
})
Canvas.toTempFilePathSync
const tempFilePath = canvas.toTempFilePathSync({
x: 10,
y: 10,
width: 200,
height: 150,
destWidth: 400,
destHeight: 300
})
qq.shareAppMessage({
imageUrl: tempFilePath
})
将当前 Canvas 保存为一个临时文件。
属性 | 类型 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
x | number | 0 | 否 | 截取 canvas 的左上角横坐标 |
y | number | 0 | 否 | 截取 canvas 的左上角纵坐标 |
width | number | canvas 的宽度 | 否 | 截取 canvas 的宽度 |
height | number | canvas 的高度 | 否 | 截取 canvas 的高度 |
destWidth | number | canvas 的宽度 | 否 | 目标文件的宽度,会将截取的部分拉伸或压缩至该数值 |
destHeight | number | canvas 的高度 | 否 | 目标文件的高度,会将截取的部分拉伸或压缩至该数值 |
fileType | string | png | 否 | 目标文件的类型 |
quality | number | 1.0 | 否 | jpg图片的质量,仅当 fileType 为 jpg 时有效。取值范围为 0.0(最低)- 1.0(最高),不含 0。不在范围内时当作 1.0 |
success | function | 否 | 接口调用成功的回调函数 | |
fail | function | 否 | 接口调用失败的回调函数 | |
complete | function | 否 | 接口调用结束的回调函数(调用成功、失败都会执行) |
object.fileType 的合法值
值 | 说明 |
---|---|
jpg | jpg 文件 |
png | png 文件 |
canvas 生成的临时文件路径
Canvas.toTempFilePath
canvas.toTempFilePath({
x: 10,
y: 10,
width: 200,
height: 150,
destWidth: 400,
destHeight: 300,
success: (res) => {
qq.shareAppMessage({
imageUrl: res.tempFilePath
})
}
})
Canvas.toTempFilePathSync
const tempFilePath = canvas.toTempFilePathSync({
x: 10,
y: 10,
width: 200,
height: 150,
destWidth: 400,
destHeight: 300
})
qq.shareAppMessage({
imageUrl: tempFilePath
})
把画布上的绘制内容以一个 data URI 的格式返回
data URI 格式的字符串
获取画布对象的绘图上下文
上下文类型
contextType 的合法值
值 | 说明 |
---|---|
2d | 2d 绘图上下文 |
webgl | webgl 绘图上下文 |
webgl2 | webgl2 绘图上下文 |
webgl2支持情况:Android 从QQ版本8.9.88开始支持,需要在game.json
手动配置属性:enableWebgl2Context: true
开启; iOS在Unity游戏直接支持,非Unity游戏需要开启高性能模式支持。
webgl 上下文属性,仅当 contextType 为 webgl 时有效
属性 | 类型 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
antialias | boolean | false | 否 | 表示是否抗锯齿 |
preserveDrawingBuffer | boolean | false | 否 | 表示是否绘图完成后是否保留绘图缓冲区 |
antialiasSamples | number | 2 | 否 | 抗锯齿样本数。最小值为 2,最大不超过系统限制数量,仅 iOS 支持 |
绘图上下文
画布对象的绘图上下文。
iOS/Android 不支持的 2d 属性和接口
压缩纹理的支持
为提升3D游戏性能,QQ小游戏为 WebGLContext 新增了以下接口,自基础库1.8.0开始支持。 LayaAir 2.3.0版本开始支持这些接口。
创建ArrayBufferRef,把ArrayBuffer作为参数传入,调用此函数后,ArrayBuffer便有一个_ptrID的属性,Runtime中通过此ID便可以找到ArrayBuffer对应的数据区
传入想要和 Runtime 映射的 arrayBuffer
0代表纯数据区,1代表指令流CommandEncoder
是否同步到渲染线程,目前只有单线程,值无效
ArrayBuffer 的扩展,增加了_ptrID 属性
一个ArrayBuffer可以对应多个ID,也就是可以对应多块数据,以便应对在一帧内多次修改ArrayBuffer的值,并把不同阶段的值上传显卡
传入想要和 Runtime 映射的 arrayBuffer
0代表纯数据区,1代表指令流CommandEncoder
是否同步到渲染线程,目前只有单线程,值无效
arrayBuffer 传递给 runtime 的方式,0代表引用,1为拷贝
ArrayBuffer 的扩展,增加了_ptrID 属性
当 ArrayBuffer 的 Obj 发生变化,需要重新绑定到 ID 上,可调用此函数进行更新
ArrayBufferRef 的_ptrID
是否同步到渲染线程,目前只有单线程,值无效
原生 ArrayBuffer 实例
更新骨骼动画并计算每块骨骼的 worldMatrix
所有 bone 的 local position,值类型为 Float32Array
所有 bone 的 local rotation,值类型为 Float32Array
所有 bone 的父节点 ID,值类型为 Uint16Array
所有 bone 计算好的 worldMatrix,值类型为 Float32Array
通过骨骼的世界矩阵和 mesh 的 BindPoses ,计算出针对于该 Mesh 的蒙皮矩阵
所有bone的worldMatrix,值类型为Float32Array
所有bone的worldMatrix的索引位置,值类型为Uint16Array
所有Bone的BindPose的逆矩阵,值类型为Float32Array
该Mesh收到哪些骨骼影响的骨骼ID,值类型为Uint16Array
所有Bone的BindPose的逆矩阵的索引位置,值类型为Uint16Array
出参,计算好的结果,针对于该Mesh收到骨骼影响的矩阵信息
是否计算成功
计算当前动画帧数据
KeyframeNodeList 节点队列
当前播放时间
实时当前帧索引
是否是叠加模式
是否正向播放
3D裁剪函数
摄影机视锥的信息
所有物体的包围盒、包围球信息
物体包围体的索引值
裁剪的个数
是否在视锥范围的标志,cullingBufferResult[i]==1为可见,==0为不可见
裁剪数量
创建 GLCommandEncoder 类的实例
预分配 Buffer 的 size
当实际的 bufferSize 超过预分配的 size 时会自动扩充,每次扩充的 size
buffer 是否同步到渲染线程,目前单线程模式值可忽略
返回 GLCommandEncoder 实例
批量上传 Uniform
uniform 的指令集
指令集对应的参数数据区
0为按照 Data 的 ID 传入,1为直接拷贝 Data 的值
uniformMatrix2fv 的扩展,参数和标准 uniformMatrix2fv 保持一致,区别在于如果 value 已经有了 _ptrID,调用 runtime 的时候,只用传入 ID 即可
uniformMatrix3fv 的扩展,参数和标准 uniformMatrix2fv 保持一致,区别在于如果 value 已经有了 _ptrID,调用 runtime 的时候,只用传入 ID 即可
uniformMatrix4fv 的扩展,参数和标准 uniformMatrix2fv 保持一致,区别在于如果 value 已经有了 _ptrID,调用 runtime 的时候,只用传入 ID 即可