当前位置:网站首页>引擎开发日志:OpenGL资源多线程加载
引擎开发日志:OpenGL资源多线程加载
2022-08-02 03:29:00 【ChivenZhang】
今天打算开始在CSDN上,记录自己在开发小型软件的过程中,对于设计的一些思考。既算作一种分享,也是文字总结。
我打算编写一个渲染系统,当然开发已经进行了半年,成果多少是有。加载场景,灯光阴影等功能都具备。GUI,脚本等开发也十分顺利的进入尾声。但是就在最近,热切想实现的一个功能却成了阻碍,摆在我面前,如何实现资源异步加载。
目前项目使用OpenGL作为底层渲染接口,由于OpenGL的上下文是线程环境相关的,无法做到在渲染线程之外的线程中执行GPU资源加载。如果把资源加载的工作都放在渲染线程中,必然会出现渲染卡顿的缺点。
为解决上述问题,特做如下修改:
1、根据资源用于CPU或GPU,进行分类;
2、引入多线程的异步资源加载机制;
通过上述方案,系统除了拥有渲染主线程,还拥有异步加载CPU资源的其他线程。如此,多线程异步一定程度解决加载资源导致的卡顿问题,但是仍然无法避免加载GPU资源导致的卡顿。因为OpenGL限定了渲染和GPU资源加载必须在相同线程,所以GPU方面造成的卡顿无法避免,除非使用更加高级的底层渲染API,如Vulkan。
该方案的一个缺点是,异步加载的方式提高了编程的复杂性,例如,有时必须等多个CPU资源异步加载完成时,才会执行GPU资源的加载。那么就需要一个类似屏障的东西,来保证多个异步加载过程结束后,才发起GPU资源加载过程。于是,资源加载机制又发生了一次变动,即支持多线程环境下的多CPU资源加载与同步机制。相比之前的一个个CPU资源多线程加载,再异步呈递,现在的机制变成了多线程加载多个CPU资源,等待所有资源加载完成,才一同异步呈递给调用者。
边栏推荐
猜你喜欢
随机推荐
为什么D类音频功放可以免输出滤波器
[Arduino uses a rotary encoder module]
【MQ-3 酒精检测器与 Arduino检测酒精】
《scala 编程(第3版)》学习笔记2
【MQ-2 可燃气体和烟雾传感器与 Arduino 配合使用】
联阳IT6561|IT6561FN方案电路|替代IT6561方案设计DP转HDMI音视频转换器资料
2020 - AAAI - 图像修复 Image Inpainting论文导读 -《Region Normalization for Image Inpainting》
How to remotely debug PLC?
目标检测(一):R-CNN系列
Comparative analysis of OneNET Studio and IoT Studio
Modify hosts file using batch script
如何快速搭建属于自己的物联网平台?
78XX 79XX多路输出电源
【Arduino connects SD card module to realize data reading and writing】
D类音频功放NS4110B电路设计
sacalatest AnyFunSuite:no implicits found for parameter pos
Two-Stream Convolutional Networks for Action Recognition in Videos双流网络论文精读
GM8775C MIPI转LVDS调试资料分享
【心率传感器与Arduino连接读取心率数据】
USB HUB USB集线器电路设计









