目前我正在第二个线程中将图像加载到内存中,然后在显示循环期间(如果需要加载纹理),加载纹理。
我发现我不能在第二个线程中加载纹理,因为OpenGL不喜欢这样做;也许这是可能的,但我做错了什么 - 如果这实际上是可能的,请纠正我。
另一方面,如果我的失败是有效的 - 如何在不打扰渲染循环的情况下加载纹理? 目前,从内存加载纹理大约需要1秒钟时间,虽然这并不是一个主要问题,但对用户来说可能有点烦人。
目前我正在第二个线程中将图像加载到内存中,然后在显示循环期间(如果需要加载纹理),加载纹理。
我发现我不能在第二个线程中加载纹理,因为OpenGL不喜欢这样做;也许这是可能的,但我做错了什么 - 如果这实际上是可能的,请纠正我。
另一方面,如果我的失败是有效的 - 如何在不打扰渲染循环的情况下加载纹理? 目前,从内存加载纹理大约需要1秒钟时间,虽然这并不是一个主要问题,但对用户来说可能有点烦人。
你可以在任意数量的线程中将纹理从磁盘加载到RAM中,但由于Reed在回答中提到的原因,OpenGL不会在多个线程中上传到VRAM。
考虑到从磁盘加载是最慢的部分,这可能是你想要使用线程的部分。加载线程会建立一个纹理队列等待上传,然后由拥有GL上下文的线程消费该队列(请注意各个线程对该队列的访问)。您还可以考虑每帧上传N个纹理的非线程化方法,其中N是不会使渲染速度过慢的数字。