Advertisement

osgEarth的Rex引擎原理分析(一一二)在每一帧中生成着色器

阅读量:

目标:(一一一)中的问题198

通常情况下是不会这样做的;但当着色器程序的状态发生变化时,则会如此操作。为了表示该状态的变化情况的变化与否,则采用了特定的方法:即通过观察该状态下的数据特征是否发生了变化来判断系统是否进入新的运行模式。具体来说,在这个过程中我们主要关注的是系统运行中的某些关键参数指标——例如系统的负载情况以及处理效率等——这些指标的变化程度能够很好地反映系统当前的工作状态。

在完成创建后,在编译阶段将着色器代码存储到缓存中;在下一帧循环期间获取缓存中的内容即可使用;若发现缓存中无对应资源,则会重新生成该部分的着色器代码;这表明可以在程序运行过程中动态地将新编译的着色体加入到当前的渲染管线中。

1、着色器程序写入缓存

复制代码
 osgEarth/VirtualProgram.cpp

    
 void
    
 VirtualProgram::apply( osg::State& state ) const
    
 {
    
  
    
 {
    
                 ProgramEntry& pe = _programCache[local.programKey];
    
                 pe._program = program.get();
    

全部评论 (0)

还没有任何评论哟~