我想创建几个线程来加载带纹理的对象,但它不起作用。我已经读过我应该在每个线程中创建新的OpenGL上下文,但是当我这样做时,程序会崩溃。是其他方式吗?
我使用freeGLUT。 这些是我想在线程中使用的函数:
glGenBuffers()
glBindBuffer()
glBufferData()
glGenTextures()
glBindTexture()
glTexImage2D()
glGenerateMipmap()
glTexParameteri()
glTexEnvi()
答案 0 :(得分:3)
你可以在另一个线程中调用它们。除非你在另一个线程中创建另一个连接的openGL上下文,但这并不简单。
更简单的是在另一个线程中在内存中创建对象,然后让主线程将其转储到VBO中。在加载线程信号之后它已完成。
另一种选择是首先在主线程中创建和分配缓冲区,然后使用glMapBuffer
获取可以写入的指针(甚至来自另一个线程)并让加载线程将其数据存储在那里并发回信号当它完成之后,主线程可以取消映射它。