收藏
回答

小程序 离屏Canvas 的 ctx 缺失Function

框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
小程序 Bug WebGLRenderingContext 客户端 7.0.4 2.7.1

- 当前 Bug 的表现(可附上截图)

代码很简单

let offscreenCanvas = wx.createOffscreenCanvas()

offscreenCanvasCtx = offscreenCanvas.getContext("webgl")

if (offscreenCanvasCtx != null) {

   console.log(offscreenCanvasCtx)

}




iOS上的输出:



微信ide中的输出:


- 预期表现

应该和IDE中一致才对


最后一次编辑于  2019-06-14
回答关注问题邀请回答
收藏

1 个回答

  • 小程序技术专员-Eric
    小程序技术专员-Eric
    2019-06-17

    真机实现上没有配置输出方法列表,实际上方法是存在的。

    2019-06-17
    有用
    回复 5
    • Jalps
      Jalps
      2019-06-18

      我这边简单的用Web GL做了一些计算的操作

      在IDE里实现了一些图像检测

      也就是从Camera拿数据塞给WebGL的方法

      在IDE里是正常的(IDE里如下图),

      然而在手机端 ,没有任何的输出




      2019-06-18
      回复
    • 小程序技术专员-Eric
      小程序技术专员-Eric
      2019-06-18回复Jalps

      代码片段发来看看?

      2019-06-18
      回复
    • Jalps
      Jalps
      2019-06-18回复小程序技术专员-Eric
      let offscreenCanvas, offscreenCanvasCtx
       
      Canvas2d.ctx = wx.createCanvasContext('canvas2d')
       
      CameraInfo.camCtx.onCameraFrame((frame) => {
          if(CameraInfo.isInited == false){
              CameraInfo.width = frame.width
              CameraInfo.height = frame.height
              CameraInfo.isInited = true
              offscreenCanvas = wx.createOffscreenCanvas()
              offscreenCanvasCtx = offscreenCanvas.getContext("webgl", { preserveDrawingBuffer: true })
          }
          offscreenCanvasCtx.clearColor(1.0, 0.0, 0.0, 1.0);
          offscreenCanvasCtx.clear(offscreenCanvasCtx.COLOR_BUFFER_BIT);
          let pixelsData = new Uint8Array(CameraInfo.width * CameraInfo.height * 4)
          offscreenCanvasCtx.readPixels(0, 0, CameraInfo.width, CameraInfo.height, offscreenCanvasCtx.RGBA, offscreenCanvasCtx.UNSIGNED_BYTE, pixelsData)
          let verArr = []
          for (let j = 0; j < CameraInfo.width; j++) {
             for (let i = 0; i < CameraInfo.height; i++) {
                if (pixelsData[(j * CameraInfo.width + i) * 4] != 0) {
                  verArr.push({ x: i, y: j })
                }
             }
          }
          drawPoints(Canvas2d.ctx, verArr, 4)
      }
       
       
      function drawPoints(ctx, verArr, r) {
        if (verArr.length == 0) return
        ctx.setFillStyle('red')
        let len = Math.min(100, verArr.length)
        for (let i = 0; i < len; i++) {
          ctx.fillRect(verArr[i].x, verArr[i].y, r, r)
        }
        ctx.draw()
      }

      简化了一下


      预期应该同IDE中一致




      2019-06-18
      回复
    • Jalps
      Jalps
      2019-06-18回复小程序技术专员-Eric

      当前自己判断是

      offscreenCanvasCtx = offscreenCanvas.getContext("webgl", { preserveDrawingBuffer:true })

      这个地方的问题

      { preserveDrawingBuffer:true }




      2019-06-18
      回复
    • 小程序技术专员-Eric
      小程序技术专员-Eric
      2019-06-21回复Jalps

      你的代码片段没有看到在读取相机帧数据,相机帧数据在 frame.data 这个字段下,是一个 ArrayBuffer

      2019-06-21
      回复
登录 后发表内容