当前位置:网站首页>引擎开发日志: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资源,等待所有资源加载完成,才一同异步呈递给调用者。
边栏推荐
猜你喜欢
GM8775C MIPI转LVDS调试资料分享
[Popular Science Post] I2C Communication Protocol Detailed Explanation - Partial Software Analysis and Logic Analyzer Example Analysis
I2C无法访问ATEC508A加密芯片问题
目标检测(一):R-CNN系列
Transformer结构解析及常见问题
Comparative analysis of OneNET Studio and IoT Studio
博达工业云与阿里云对比
2020 - AAAI - 图像修复 Image Inpainting论文导读 -《Region Normalization for Image Inpainting》
【Arduino 连接GP2Y1014AU0F 灰尘传感器】
【Arduino connects SD card module to realize data reading and writing】
随机推荐
回溯法 & 分支限界 - 2
How to remotely debug PLC?
Cadence allegro导出Gerber文件(制板文件)图文操作
阿里云华为云对比分析
【MQ-3 酒精检测器与 Arduino检测酒精】
【Arduino connects SD card module to realize data reading and writing】
网站开发方案研究
无源域适应(SFDA)方向的领域探究和论文复现(第一部分)
USB3.0一致性测试方法
TC358860XBG BGA65 东芝桥接芯片 HDMI转MIPI
联阳IT66121FN提供SDI转HDMI方案分享
01背包问题(动态规划)
蛮力法求解凸包问题
树莓派入门(1)系统镜像烧录
一文理解分布式开发中的服务治理
MPU6050 加速度计和陀螺仪传感器与 Arduino 连接
【心率传感器与Arduino连接读取心率数据】
GM7150,振芯科技,视频解码器,CVBS转BT656/601,QFN32,替换TVP5150/CJC5150
2020 - AAAI - Image Inpainting论文导读《Learning to Incorporate Structure Knowledge for Image Inpainting》
联阳(ITE)IT66021FN:HDMI转RGB芯片 3D 资料