如何在新线程中加载网格

qncylg1j  于 2022-09-26  发布在  其他
关注(0)|答案(1)|浏览(140)

我正在打我的第一场比赛,我被一个问题所困扰。我有一个你可以自由行走的世界,但当你遇到敌人时,你会切换到战斗中,当你切换到战斗中时,我需要加载所有将在战斗场景中渲染的模型。加载大约需要5秒,我想制作加载屏幕。所以,我在主线程中渲染了加载屏幕,但如何加载3D模型并同时构建不同的Vao和VBO?我为这个加载做了一个新的线程,但是我在网上读到了“不要使用线程来生成VAO”。什么是进行这种装载的最佳解决方案?我是不是应该在游戏开始前把所有的模型都预装到主线上呢?就我个人而言,在游戏开始时加载所有3D模型似乎并不正确。

roejwanj

roejwanj1#

假设您有两个窗口,您可以将窗口的每个上下文绑定到单独的线程。如果您在它们之间共享数据,就会出现问题(必须进行适当的锁定)。

请参阅glfwMakeConextCurrent:
此函数使指定窗口的OpenGL或OpenGL ES上下文在调用线程上处于当前状态。上下文一次只能在一个线程上成为当前上下文,并且每个线程一次只能有一个当前上下文。

线程安全

此函数可以从任何线程调用。

请参阅glfwSwapBuffers:

此函数在使用OpenGL或OpenGL ES渲染时交换指定窗口的前台和后台缓冲区。

线程安全

此函数可以从任何线程调用。

GLFW中的一些函数只能从‘main’线程调用(也不能从回调调用),例如glfwPollEvents,但除此之外,将上下文绑定到线程,执行OpenGL调用并交换缓冲区。如前所述,只要您不共享任何缓冲区,应该不会有任何问题。

相关问题