qt - 使用 Qt 4.5/4.6 加载 OpenGL 线程平铺纹理

标签 qt opengl multithreading render tile

我正在尝试在我的大学开发用于科学目的的 map 应用程序。因此我可以访问很多图 block (256x256)。我可以访问它们并将它们保存到单独的 QThread 中的 QImage 中。我的问题是,我如何才能真正设法将 QImage 加载到单独的 QThread(而不是 GUI 主线程)中的纹理中?或者更好地告诉我如何解决这个问题。

我虽然考虑过多线程 OpenGL,但我也需要 OpenGL 选取,并且我没有为此放弃任何有用的东西。#

如果您愿意,请给我指出任何有用的示例代码,我很感谢在 Linux 上编译的所有内容:)

注意1:我使用基于事件的渲染,因此只有当场景发生变化时才会重新绘制。 注2:OSG 不是一个选项,它对于这个目的来说太重了,需要一种轻量级的方法。 注3:该应用程序完全用C++编写

感谢您的回复。 附:请耐心等待,我并不像本主题所暗示的那样先进。

最佳答案

OpenGL 不是线程安全的。一次只能在一个线程中使用一个 GL 上下文。根据操作系统的不同,您还必须明确放弃一个线程中的上下文句柄才能在另一个线程中使用它。

鉴于此处的瓶颈是显卡的带宽,您无法通过线程加速纹理加载。

让加载图 block 的交付线程填满环形缓冲区。 GL 线程从环形缓冲区获取数据。通过两个互斥体,可以轻松控制环形缓冲区以实现线程安全操作。

这就是我的建议。

关于qt - 使用 Qt 4.5/4.6 加载 OpenGL 线程平铺纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2113326/

相关文章:

c++ - 如何自定义 QListView 的显示

javascript - qt webengine 将 javascript 输出重定向到 GUI

c++ - 我想在 opengl 中将图像包裹在一个球体周围

python - QObject::connect: 无法对类型为 'QTextCursor' 的参数进行排队

c++ - OpenCV 3.0 videoio 错误

c++ - DEPLOYMENT qmake变量的目的是什么?

c++ - 标识符 "in"未定义

c++ - 在命名空间中定义结构的成员

c++ - 类函数上的新线程

c++ - 将 OpenMP 添加到程序中以计算 n x n 矩阵 n x n 的行列式