osgEarth的Rex引擎原理分析(五十七)osgEarth中多个着色器的源代码的编译链接过程

本文详细探讨了osgEarth中多个着色器的源代码如何经过编译和链接过程,涉及编译、链接及使用步骤,并列举了一系列后续将要分析的与osgEarth相关的问题,包括地理信息引擎、地形引擎节点、着色器管理和osgEarth内部机制等。
摘要由CSDN通过智能技术生成

目标:(五十四)中的问题129

osgEarth中多个着色器的源代码的编译链接过程

1、先一个一个编译

void Shader::PerContextShader::compileShader(osg::State& state)
{
    _extensions->glShaderSource( _glShaderHandle, 1, &sourceText, NULL );
    _extensions->glCompileShader( _glShaderHandle );
}

Shader::PerContextShader::PerContextShader(const Shader* shader, unsigned int contextID) :
        osg::Referenced(),
        _contextID( contextID )
{
    _glShaderHandle = _extensions->glCreateShader( shader->getType() );
}

2、再链接

void Program::compileGLObjects( osg::State& state ) const
{
    getPCP( state )->linkProgram(state);
}

void Program::PerContextProgram::linkProgram(osg::State& state)
{
    _extensions->glAttachShader( _glProgramHandle, itr->first );
}

3、再使用

void
VirtualProgram::apply( osg::State& state ) const
{
    pcp->useProgram();
}

void Program::PerContextProgram::useProgram() const
{
    _extensions->glUseProgram( _glProgramHandle  );
}


Program::PerContextProgram::PerContextProgram(const Program* program, unsigned int contextID, GLuint programHandle ) :
        osg::Referenced(),
        _glProgramHandle(programHandle),
        _loadedBinary(false),
        _contextID( contextID ),
        _ownsProgramHandle(false)
{
    _glProgramHandle = _extensions->glCreateProgram();
}

待继续分析列表:

9、earth文件中都有哪些options((九)中问题)

10、如何根据earth文件options创建不同的地理信息引擎节点((九)中问题)

11、rex地理信息引擎的四梁八柱((九)中问题)

12、osgEarth::TerrainEngineNode中setMap方法作用((十二)中问题)

13、RexTerrainEngineNode中_mapFrame的作用((十二)中问题)

14、地形变形(Terrain morphing)((十二)中问题)

15、地球瓦片过期门限的含义((十二)中问题)

16、高分辨率优先的含义((十二)中问题)

17、OSGEARTH_DEBUG_NORMALS环境变量的作用((十二)中问题)

18、活跃瓦片寄存器的作用((十二)中问题)

19、资源释放器子节点的作用((十二)中问题)

20、共享几何图形池子

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值