3.7.1 版本视频帧数据渲染

3.7.1 版本

我在 C++ 层通过这种方式创建了 Texture2D 对象:

_previewTexture = new cc::Texture2D();
_previewTexture->create(renderWidth, renderHeight, cc::Texture2D::PixelFormat::RGBA8888);

并在脚本层获取到这个 Texture2D 对象,将其作为一个新创建的 SpriteFrame 对象的纹理,并将SpriteFrame对象设置到 Sprite 对象中:

let texture = CustomNative.getPreviewTexture();
let spriteFrame = new SpriteFrame();
spriteFrame.texture = texture;
this.m_preview.spriteFrame = spriteFrame;

最终我想在 C++ 层通过 uploadData 的方式渲染画面:

// renderData 是得到的视频帧数据
_previewTexture->uploadData(static_cast<const uint8_t *>(renderData));

但并没有达到预期显示出画面,也许是我的使用方式不对

我的问题是:

  1. 能否使用 Texture2D::uploadData 实现渲染视频帧数据的需求?
  2. 如果可以的话要如何使用 Texture2D::uploadData 才能正常渲染呢?
  3. 如果不能的话,在 3.7.1 版本如何渲染在原生层得到的视频帧数据呢?

https://github.com/cocos/cocos-awesome-tech-solutions/tree/3.6.x-release/demo/Creator3.6.2_VideoTexture

我对比了这个方案中的实现,使用 uploadData 应该是可行的,不过每次 uploadData 后都更新了一遍自定义材质

@zzf_2025

目前只有使用自定义材质而且每帧刷新才能实现吗

这种方法确实可行,而且不需要使用自定义的材质,我已经验证过了,之前是因为别的问题导致的没有画面

3赞

我放了几个视频,感觉这样uploadData有点卡