c++ - 使用 PBO 上传 OpenGL 纹理?

标签 c++ multithreading opengl pbo

我正在使用 OpenGL2.1 开发 OpenGL 应用程序并希望通过线程上传纹理。

到目前为止我做了什么:

  1. 创建第二个上下文并在两者之间共享
  2. 在线程中上传纹理数据

一切正常,除了我注意到纹理上传发生时有一个小的“滞后”!我知道这是因为驱动程序必须同步这两个上下文。问题是我想让它流式传输纹理。我不想稍后更新纹理。我只想在后台加载纹理,同时显示“几乎平滑”的加载动画,而不会使整个应用程序停止。

这就是我搜索并发现PBO可以用于像素数据的DMA数据传输的点。是否可以使用 PBO 进行纹理上传?如果是,怎么办?

最佳答案

您不需要第二个上下文来异步上传纹理数据。只需确保在触发上传后不要立即使用缓冲区,否则它将停止等待复制完成。

这是此过程的示例:http://www.songho.ca/opengl/gl_pbo.html#unpack

这里有更多关于 PBO 是什么以及它们应该如何使用的信息:http://www.opengl.org/wiki/Pixel_Buffer_Object

关于c++ - 使用 PBO 上传 OpenGL 纹理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25167942/

相关文章:

c++ - 安装了 Cygwin64 并且在 Eclipse 中无法在 <iostream> 中找到 Unresolved inclusion

c++ - 如何在不窃取其他窗口焦点的情况下显示 MFC 对话框

c# - 将Form.Owner设置为来自其他线程的表单

php - PHP 多进程的模式?

opengl - OpenGL 是 "state machine"吗?

java - JOGL/OpenGL VBO - 如何渲染顶点?

c++ - 用于转换多个参数的模板函数

c++ - 将以毫秒为单位的 Unix 时间戳转换为正常日期

java - 我必须关心 ThreadPoolExecutor 的关闭吗?

c++ - OpenGL GL_LINE_STRIP 在 glEnd 之后给出错误 1281(无效值)