Esempio n. 1
0
void ComputeShaderChunk::deactivate(DrawEnv    *pEnv,              
                                    UInt32      uiIdx)
{
    if(pEnv->getWindow()->getGLObjectId(getGLId()) == 0)
        return;

    pEnv->setActiveShader(0);

    OSGGETGLFUNC_GL3_ES(glUseProgram,
                        osgGlUseProgram,
                        ShaderProgram::getFuncIdUseProgram());

    osgGlUseProgram(0);
}
void VarianceShadowMapHandler::genMipMapCB(DrawEnv *pEnv,
                                           UInt32   uiLightIdx)
{
    ShadowStageData::ShadowMapStore &vShadowMaps = _pStageData->getShadowMaps();

    glBindTexture(GL_TEXTURE_2D,
                  pEnv->getWindow()->getGLObjectId(
                      vShadowMaps[uiLightIdx].pTexO->getGLId()));

    OSGGETGLFUNC_GL3_ES(glGenerateMipmapEXT,
                        osgGlGenerateMipmap,
                        ShadowStage::FuncIdGenMipmaps);

    osgGlGenerateMipmap(GL_TEXTURE_2D);

    glBindTexture(GL_TEXTURE_2D, 0);
}
Esempio n. 3
0
void ComputeShaderChunk::updateVariableLocations(DrawEnv *pEnv,
                                                 UInt32   uiProgram)
{
    if(uiProgram == 0)
        return;

    const ShaderProgramVariables::MFVariablesType           *pMFVars     = NULL;
    const ShaderProgramVariables::MFProceduralVariablesType *pMFProcVars = NULL;

    if(_sfVariables.getValue() != NULL)
    {
        pMFVars     = _sfVariables.getValue()->getMFVariables          ();
        pMFProcVars = _sfVariables.getValue()->getMFProceduralVariables();
    }

    if(pMFVars != NULL && pMFVars->size() != 0)
    {
        MFInt32 &vVarLocations = *this->editMFVariableLocations();

        OSG_ASSERT(pMFVars->size() == vVarLocations.size());

        MFInt32::iterator mLocIt = vVarLocations.begin();
        
        ShaderProgramVariables::MFVariablesType::const_iterator mVarIt  =
            pMFVars->begin();
        ShaderProgramVariables::MFVariablesType::const_iterator mVarEnd =
            pMFVars->end  ();
        
        OSGGETGLFUNC_GL3_ES(glGetUniformLocation,
                            osgGlGetUniformLocation,
                            ShaderProgram::getFuncIdGetUniformLocation());

        for(; mVarIt != mVarEnd; ++mVarIt, ++mLocIt)
        {
            *mLocIt = osgGlGetUniformLocation(uiProgram,
                                              (*mVarIt)->getName().c_str());
        }
    }

    if(pMFProcVars != NULL && pMFProcVars->size() != 0)
    {
        MFInt32 &vVarLocations = *this->editMFProceduralVariableLocations();

        OSG_ASSERT(pMFProcVars->size() == vVarLocations.size());

        MFInt32::iterator mLocIt = vVarLocations.begin();
        
        ShaderProgramVariables::MFProceduralVariablesType::const_iterator 
            mVarIt  = pMFProcVars->begin();
        ShaderProgramVariables::MFProceduralVariablesType::const_iterator 
            mVarEnd = pMFProcVars->end  ();
        
        OSGGETGLFUNC_GL3_ES(glGetUniformLocation,
                            osgGlGetUniformLocation,
                            ShaderProgram::getFuncIdGetUniformLocation());

        for(; mVarIt != mVarEnd; ++mVarIt, ++mLocIt)
        {
            *mLocIt = osgGlGetUniformLocation(uiProgram,
                                              (*mVarIt)->getName().c_str());
        }
    }
}