我有一个将数据渲染成 rgba 纹理的 openGL 应用程序。我想使用 gstreamer 框架(使用 nvenc 插件进行 h264 编码)对其进行编码和流式传输。
我正在查看文档以解决这些问题:
- 如何将应用程序的现有 openGL 上下文导出到 nvenc 元素。
- 如何将纹理 ID 传递给来源?
- 同步将如何工作。即 nvenc 必须等待渲染完成,类似地,应用程序必须等待 nvenc 完成从纹理中读取。我假设它会涉及使用同步围栏或 glMemoryBarriers。
任何示例代码都会非常有帮助。
我确实想避免将任何纹理复制到 cpu 内存。Nvidia 的 NVENC sdk 提到它使用 CUDA 上下文进行调用,并且可以使用 cudaGraphicsGLRegisterImage 调用将 openGL 纹理导入到 CUDA 上下文中。所以我的期望是从应用程序到视频编码帧可以在没有任何副本的情况下完成。