背锅的项目出现的问题及更改方法

前几年背锅的那个项目,打击了我的信心,

为啥那么卡,确实是架构的问题。当时开了线程池没错,但是没有异步加载资源,都在渲染的那帧去加载的。

通过我这两年对引擎架构的整合,直到上周解决了这个问题。

有几点,

第一,渲染要多线程渲染,当时的那个渲染是在主线程渲染。多线程渲染时,需要个事件。将  窗口与OpenGL 上下文绑定后,setevent ,在主线程等待这个事件,确保主线程继续执行。

第二,加载瓦片数据时异步加载,开四个线程,用信号量。通过瓦片名称生成纹理,要求的瓦片名称是生产者,生成纹理数据是消费者。这里需要一个监控者模式,在获取要求的瓦片数据时加锁,写入要更新的数据数组中,在渲染时,也要加锁,
第三,预处理时,用四叉树或八叉树处理瓦片及其他模型。

第四,在cpu 端,要用摄像机六棱锥过滤掉不在视野内的物体,可以通过物体包围盒与六棱锥相交判断,不能只等着osg去过滤。
第五,对于频繁访问内存的数据,不要用 STL ,而是直接开缓存,最好内存池。

 


以前的项目,架构师已经脱离代码很多年,所以掌握不了细节了,所以这个锅我背了。需要细抠,做个好的架构不只是加载个动态链接库,懂几个设计模式那么简单

发布了673 篇原创文章 · 获赞 18 · 访问量 28万+

猜你喜欢

转载自blog.csdn.net/directx3d_beginner/article/details/104387251
今日推荐