当前位置:网站首页>引擎开发日志: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资源,等待所有资源加载完成,才一同异步呈递给调用者。
边栏推荐
猜你喜欢

Vision Transformer(ViT)论文精读和Pytorch实现代码解析

GM8775C MIPI转LVDS调试心得分享

uniCloud使用

Typora使用

Comparative analysis of OneNET Studio and IoT Studio

OneNET Studio与IoT Studio对比分析

How to quickly build your own IoT platform?

Personal image bed construction based on Alibaba Cloud OSS+PicGo
![[Arduino connects the clock module to display the time on LCD1602]](/img/88/5baac76a24924d1cfd675ff5da830e.png)
[Arduino connects the clock module to display the time on LCD1602]

uniCloud use
随机推荐
【科普贴】SD卡接口协议详解
将ORCAD原理图导入allegro中进行PCB设计
GM7150 CVBS转BT656视频解码芯片详细内容及设计要求
[Arduino connects the clock module to display the time on LCD1602]
Go中的一些优化笔记,简约而不简单
Arduino lights up nixie tubes
PCB设计思路
【科普贴】I2C接口详解——偏硬件解析
PCB Design Ideas
n皇后问题(回溯法)
Go 程序太大了,能要个延迟初始化不?
机器学习相关 概率论重点笔记
Anaconda(Jupyter)里发现不能识别自己的GPU该怎么办?
【Arduino连接GPS 模块 (NEO-6M)读取定位数据】
2019 - ICCV - 图像修复 Image Inpainting 论文导读《StructureFlow: Image Inpainting via Structure-aware ~~》
火焰传感器与 Arduino 连接
78XX 79XX多路输出电源
ICN6211:MIPI DSI转RGB视频转换芯片方案介绍 看完涨知识了呢
【土壤湿度传感器与 Arduino 测量土壤湿度】
【科普贴】UART接口通讯协议